博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[UML]UML系列——包图Package
阅读量:6540 次
发布时间:2019-06-24

本文共 3552 字,大约阅读时间需要 11 分钟。

系列文章

      

     

     

     

     

     

     

引言

      在windows中文件夹有什么作用?

      1、 对文件进行分类管理
      2、避免了命名冲突

包的作用

       一个程序往往包含了很多类,那么如何管理这些类就成了一个需要解决的问题(分组机制)。

       这些类可能由不同的程序员进行建立,当把这些类合并成一个大系统时,往往会产生命名冲突(类名冲突)。

      包的两个作用:分组机制,命名空间。

      java:包(package)

      c#:命名空间(namespace)

      c#中定义命名空间:

      namespace 命名空间名{......}

       c#中引入命名空间:

       using 命名空间名;

       

命名空间的嵌套

      程序中的命名空间就如同文件和文件夹。文件夹包含许多文件和其他文件夹,同样,命名空间也可以包含其他命名空间。

1 namespace  N12 {3      namespace N24     {5         class  ClassA{…… }6         class  ClassB{…… }7     }8    ……9 }
View Code

程序演示:命名空间(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 }
View Code
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 }
View Code
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 N310     {11        class  classB{…… }12        class  classD{…… }13      }14    }

      未导入时,应使用完全限定名:

       N1.N3.classD  d=new N1.N3.classD();

      问题1:using语句只能导入命名空间中的类型成员,不能导入命名空间中的嵌套命名空间。   

1 using N12 namespace N43     { 4        //只能使用classA5     }

      问题2:在相同的命名空间中不能存在名称相同的类或命名空间;如果类或命名空间位于不同的命名空间中,它们可以具有相同的名字。

1 namespace  N1 2 { 3    class  class A 4    namespace N2 5     { 6        class  classB{…… } 7        class  classC{…… } 8      } 9      namespace N310     {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  N112 {13    namespace N314     {15        class  classB{…… }16        class  classD{…… }17      }18    }

      问题4:如果使用using语句导入的多个命名空间中包含了同名的类,则不能直接通过类型名来使用这些类,所以要使用类型的完全限定名

1 using  N1.N2;    //引入N12 using  N1.N3;    //引入N23 namespace  N34 {5     class N1.N2 .ClassB……6     class N1.N3 .ClassB……7 }

包图的Rose建模

       1、新建包

       2、向包中添加类

      方法1:在"浏览器"中将已经存在的类拖到包中

      方法2:在"浏览器"中新建类        方法:右击包名->new->class

      3、设置类在包中的可见性

      方法:在浏览器中双击类,弹出下窗,在Export Control里面选择:

     4、将包拖到绘图区

 

    5、 显示包中的元素

总结

      包图的相关就介绍到这里,包图按字面意思也好理解,更像一个容器。

转载于:https://www.cnblogs.com/wolf-sun/p/3430150.html

你可能感兴趣的文章
springboot项目自定义注解实现的多数据源切换
查看>>
特此说明
查看>>
使用flume替代原有的scribe服务
查看>>
Hyper-V 2016 系列教程41 Windows 10 Hyper-V 系统要求
查看>>
Windows Server 2008 启用公共文件夹共享
查看>>
Apple Watch的非“智能手表”卖点
查看>>
函数指针和指针函数
查看>>
Python的函数参数传递:传值?引用?
查看>>
[转]分享2011年8个最新的jQuery Mobile在线教程
查看>>
android call require api level
查看>>
SQLSERVER是怎麽通过索引和统计信息来找到目标数据的(第一篇)
查看>>
Python版本切换和Pip安装
查看>>
SilverLigth学习笔记--控制 Silverlight控件样式(转)
查看>>
poj3262
查看>>
第四十天笔记
查看>>
4、动态代理
查看>>
Loj #6073.「2017 山东一轮集训 Day5」距离
查看>>
我的TCP/IP学习笔记
查看>>
轮毂电机光电增量编码器的ABZ信号详解
查看>>
洛谷——P1330 封锁阳光大学
查看>>