系列文章
[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、 顯示包中的元素
總結
包圖的相關就介紹到這里,包圖按字面意思也好理解,更像一個容器。