【UML基础教程】- 包图Package

引言

    在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 > 0) return v--;
            else return 0;
        }
    }
    //在此可建立其他的类
}
namespace space2   //第二个命名空间
{
    class UpCount  //正数计数器
    {
        private int v;
        public int goal;
        public UpCount(int n)  //从0至n输出
        {
            goal= n;
            v = 0;
        }
        public void reset(int n)
        {
            goal = n;
            v = 0;
        }
        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(10);  //倒数计数器对象
            UpCount uc = new UpCount(10);       //正数计数器对象
      }
    }
}

  如果去掉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、 显示包中的元素

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值