[UML]UML系列——包圖Package


系列文章

      [UML]UML系列——用例圖Use Case

      [UML]UML系列——用例圖中的各種關系(include、extend)

      [UML]UML系列——類圖Class

      [UML]UML系列——類圖class的關聯關系(聚合、組合)

      [UML]UML系列——類圖class的依賴關系

      [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 }
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 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、 顯示包中的元素

總結

      包圖的相關就介紹到這里,包圖按字面意思也好理解,更像一個容器。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM