[UML]UML系列——包图Package
系列文章
[UML]UML系列——用例图中的各种关系(include、extend)
[UML]UML系列——类图class的关联关系(聚合、组合)
[UML]UML系列——类图class的实现关系Realization
引言
在windows中文件夹有什么作用?
1、 对文件进行分类管理
2、避免了命名冲突
包的作用
一个程序往往包含了很多类,那么如何管理这些类就成了一个需要解决的问题(分组机制)。
这些类可能由不同的程序员进行建立,当把这些类合并成一个大系统时,往往会产生命名冲突(类名冲突)。
包的两个作用:分组机制,命名空间。
java:包(package)
c#:命名空间(namespace)
c#中定义命名空间:
namespace 命名空间名{......}
c#中引入命名空间:
using 命名空间名;
命名空间的嵌套
程序中的命名空间就如同文件和文件夹。文件夹包含许多文件和其他文件夹,同样,命名空间也可以包含其他命名空间。
namespace N1
{
namespace N2
{
class ClassA{…… }
class ClassB{…… }
}
……
}
程序演示:命名空间(code/space)
namespace space1 //第一个命名空间
{
class DownCount //倒数计数器
{
int v;
public DownCount(int n)
{
v = n;
}
public void reset(int n) //计数器置初始值
{
v = n;
}
public int count() //倒数计数方法
{
if (v > ) return v--;
else return ;
}
}
//在此可建立其他的类
}
namespace space2 //第二个命名空间
{
class UpCount //正数计数器
{
private int v;
public int goal;
public UpCount(int n) //从0至n输出
{
goal= n;
v = ;
}
public void reset(int n)
{
goal = n;
v = ;
}
public int count()
{
if (v < goal)
return v++;
else
return goal;
}
}
//在此可建立其他的类
}
using System;
using System.Collections.Generic;
using System.Text;
using space1;
using space2;
namespace space3 //第三个命名空间
{
class Program
{
static void Main(string[] args)
{ DownCount dc = new DownCount(); //倒数计数器对象
UpCount uc = new UpCount(); //正数计数器对象
}
}
}
如果去掉using space1; using space2;
这两行应这样写:
space1.DownCount dc = new space1.DownCount(10);
space2.UpCount uc = new space2.UpCount(10);
包的符号
包的内容组织
提示:一个元素只能属于一个包
包内元素的可见性
public(+): 可在其他任何包中使用
private(-): 只能在该包中使用
protected(#): 可以在该包和该包的子包中使用
包的导入
当包A将包B导入时,包A中的元素可以直接访问包B中的元素,而不必在每次使用时用完整的路径名。
导入包时应注意的几个问题
namespace N1
{
class class A
namespace N2
{
class classB{…… }
class classC{…… }
}
namespace N3
{
class classB{…… }
class classD{…… }
}
}
未导入时,应使用完全限定名:
N1.N3.classD d=new N1.N3.classD();
问题1:using语句只能导入命名空间中的类型成员,不能导入命名空间中的嵌套命名空间。
using N1
namespace N4
{
//只能使用classA
}
问题2:在相同的命名空间中不能存在名称相同的类或命名空间;如果类或命名空间位于不同的命名空间中,它们可以具有相同的名字。
namespace N1
{
class class A
namespace N2
{
class classB{…… }
class classC{…… }
}
namespace N3
{
class classB{…… }
class classD{…… }
}
}
问题3:一个命名空间可在多个源代码文件中多次声明,但是,只要它们的完全限定名相同,就认定是同一个命名空间。
namespace N1
{
class class A
namespace N2
{
class classB{…… }
class classC{…… }
}
} namespace N1
{
namespace N3
{
class classB{…… }
class classD{…… }
}
}
问题4:如果使用using语句导入的多个命名空间中包含了同名的类,则不能直接通过类型名来使用这些类,所以要使用类型的完全限定名
using N1.N2; //引入N1
using N1.N3; //引入N2
namespace N3
{
class N1.N2 .ClassB……
class N1.N3 .ClassB……
}
包图的Rose建模
1、新建包
2、向包中添加类
方法1:在"浏览器"中将已经存在的类拖到包中
方法2:在"浏览器"中新建类 方法:右击包名->new->class
3、设置类在包中的可见性
方法:在浏览器中双击类,弹出下窗,在Export Control里面选择:
4、将包拖到绘图区
5、 显示包中的元素
总结
包图的相关就介绍到这里,包图按字面意思也好理解,更像一个容器。
[UML]UML系列——包图Package的更多相关文章
- 包图Package
[UML]UML系列——包图Package 系列文章 [UML]UML系列——用例图Use Case [UML]UML系列——用例图中的各种关系(include.extend) ...
- Python设计模式 - UML - 包图(Package Diagram)
简介 包图是对各个包及包之间关系的描述,展现系统中模块与模块之间的依赖关系.一个包图可以由任何一种UML图组成,可容纳的元素有类.接口.组件.用例和其他包等.包是UML中非常常用的元素,主要作用是分类 ...
- UML 结构图之包图 总结
[注] 本文不是包图的基础教程, 只是包图的图形总结. 学习UML图形 推荐阅读<UML参考手册>第2版. http://www.umlchina.com/ 推荐微软的开发软件设计模型 h ...
- UML对象图和包图
UML九已经介绍过的基本图,然后,我们再来看看对象图和包图. 一.对象图 谈到对象.我们不得不说一下对象.对象(Object)是对象类的实例(Instance),用于模型化特定的实体.对象是唯一的. ...
- UML对象图、包图
对象图(Object Diagram)显示了一组对象和他们之间的关系.使用对象图阿狸说明数据结构,类图中的类或组件等实例的快照.对象图和类图一样,反应了系统的静态过程,但它是以实际的或原型化为基础来表 ...
- UML指南系列——活动图
活动图用来描述传统意义上的流程图
- [UML]UML系列——时序图(顺序图)sequence diagram
系列文章 [UML]UML系列——用例图Use Case [UML]UML系列——用例图中的各种关系(include.extend) [UML]UML系列——类图Class [UML]UML系列——类 ...
- [UML]UML系列——活动图activity diagram
系列文章 [UML]UML系列——用例图Use Case [UML]UML系列——用例图中的各种关系(include.extend) [UML]UML系列——类图Class [UML]UML系列——类 ...
- [UML]UML系列——状态机图statechart diagram
系列文章 [UML]UML系列——用例图Use Case [UML]UML系列——用例图中的各种关系(include.extend) [UML]UML系列——类图Class [UML]UML系列——类 ...
随机推荐
- 用html5 js实现浏览器全屏
项目中需要将后台浏览器的窗口全屏,也就是我们点击一个按钮要实现按F11全屏的效果. 在HTML5中,W3C制定了关于全屏的API,就可以实现全屏幕的效果,也可以让页面中的图片,视频等全屏目前只有goo ...
- Python基本语法
目录缩进流程控制语句表达式函数对象的方法类型数学运算 缩进Python开发者有意让违反了缩进规则的程序不能通过编译,以此来强制程序员养成良好的编程习惯.并且Python语言利用缩进表示语句块的开始和退 ...
- RabbitMQ服务安装配置
RabbitMQ是流行的开源消息队列系统,是AMQP(Advanced Message Queuing Protocol高级消息队列协议)的标准实现,用erlang语言开发.RabbitMQ据说具有良 ...
- GCC 中零长数组与变长数组
前两天看程序,发现在某个函数中有下面这段程序: int n; //define a variable n int array[n]; //define an array with length n 在 ...
- Linux 之 目录和文件
1 初识 1.1 终端 打开终端: Ctrl + Alt + F1 ~ F6 图形界面: Ctrl + Alt + F7 1.2 命令 1) 一般 date; cal - calendar; ...
- VR(虚拟现实)开发资源汇总
Daydream https://developers.google.cn googlevr Google VR for Android GVR SDK and NDK Release Notes c ...
- [转载]彻底弄清struct和typedef struct
struct和typedef struct 分三块来讲述: 1 首先://注意在C和C++里不同 在C中定义一个结构体类型要用typedef: typedef struct Student { int ...
- jdbc java数据库连接 5)CallableStatement 接口
CallableStatement执行存储过程(也是预编译语言) 首先在sql中执行以下带有输入参数的代码: DELIMITER $ CREATE PROCEDURE pro_findById(IN ...
- DOCKER是什么,它解决了什么问题?(转)
Docker 虚拟机 1. docker与虚拟机性能比较 2. 如日中天的Docker解决了什么问题?
- 疑难杂症——EF+Automapper引发的查询效率问题解析
前言:前面总结了一些WebApi里面常见问题的解决方案,本来打算来分享下oData+WebApi的使用方式的,奈何被工作所困,只能将此往后推了.今天先来看看EF和AutoMapper联合使用的一个问题 ...