[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 命名空间名;
命名空间的嵌套
程序中的命名空间就如同文件和文件夹。文件夹包含许多文件和其他文件夹,同样,命名空间也可以包含其他命名空间。
1 namespace N1 2 { 3 namespace N2 4 { 5 class ClassA{…… } 6 class ClassB{…… } 7 } 8 …… 9 }
程序演示:命名空间(code/space)
1 namespace space1 //第一个命名空间 2 { 3 class DownCount //倒数计数器 4 { 5 int v; 6 public DownCount(int n) 7 { 8 v = n; 9 } 10 public void reset(int n) //计数器置初始值 11 { 12 v = n; 13 } 14 public int count() //倒数计数方法 15 { 16 if (v > 0) return v--; 17 else return 0; 18 } 19 } 20 //在此可建立其他的类 21 }
1 namespace space2 //第二个命名空间 2 { 3 class UpCount //正数计数器 4 { 5 private int v; 6 public int goal; 7 public UpCount(int n) //从0至n输出 8 { 9 goal= n; 10 v = 0; 11 } 12 public void reset(int n) 13 { 14 goal = n; 15 v = 0; 16 } 17 public int count() 18 { 19 if (v < goal) 20 return v++; 21 else 22 return goal; 23 } 24 } 25 //在此可建立其他的类 26 }
1 using System; 2 using System.Collections.Generic; 3 using System.Text; 4 using space1; 5 using space2; 6 namespace space3 //第三个命名空间 7 { 8 class Program 9 { 10 static void Main(string[] args) 11 { 12 13 DownCount dc = new DownCount(10); //倒数计数器对象 14 UpCount uc = new UpCount(10); //正数计数器对象 15 } 16 } 17 }
如果去掉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中的元素,而不必在每次使用时用完整的路径名。
导入包时应注意的几个问题
1 namespace N1 2 { 3 class class A 4 namespace N2 5 { 6 class classB{…… } 7 class classC{…… } 8 } 9 namespace N3 10 { 11 class classB{…… } 12 class classD{…… } 13 } 14 }
未导入时,应使用完全限定名:
N1.N3.classD d=new N1.N3.classD();
问题1:using语句只能导入命名空间中的类型成员,不能导入命名空间中的嵌套命名空间。
1 using N1 2 namespace N4 3 { 4 //只能使用classA 5 }
问题2:在相同的命名空间中不能存在名称相同的类或命名空间;如果类或命名空间位于不同的命名空间中,它们可以具有相同的名字。
1 namespace N1 2 { 3 class class A 4 namespace N2 5 { 6 class classB{…… } 7 class classC{…… } 8 } 9 namespace N3 10 { 11 class classB{…… } 12 class classD{…… } 13 } 14 }
问题3:一个命名空间可在多个源代码文件中多次声明,但是,只要它们的完全限定名相同,就认定是同一个命名空间。
1 namespace N1 2 { 3 class class A 4 namespace N2 5 { 6 class classB{…… } 7 class classC{…… } 8 } 9 } 10 11 namespace N1 12 { 13 namespace N3 14 { 15 class classB{…… } 16 class classD{…… } 17 } 18 }
问题4:如果使用using语句导入的多个命名空间中包含了同名的类,则不能直接通过类型名来使用这些类,所以要使用类型的完全限定名
1 using N1.N2; //引入N1 2 using N1.N3; //引入N2 3 namespace N3 4 { 5 class N1.N2 .ClassB…… 6 class N1.N3 .ClassB…… 7 }
包图的Rose建模
1、新建包
2、向包中添加类
方法1:在"浏览器"中将已经存在的类拖到包中
方法2:在"浏览器"中新建类 方法:右击包名->new->class
3、设置类在包中的可见性
方法:在浏览器中双击类,弹出下窗,在Export Control里面选择:
4、将包拖到绘图区
5、 显示包中的元素
总结
包图的相关就介绍到这里,包图按字面意思也好理解,更像一个容器。
-
博客地址:http://www.cnblogs.com/wolf-sun/
博客版权:如果文中有不妥或者错误的地方还望高手的你指出,以免误人子弟。如果觉得本文对你有所帮助不如【推荐】一下!如果你有更好的建议,不如留言一起讨论,共同进步! 再次感谢您耐心的读完本篇文章。