[UML]UML系列——類圖class的泛化關系


系列文章

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

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

      [UML]UML系列——類圖Class

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

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

泛化關系的引入

      在現實生活中,有時會出現一類事物具有另一類事物的全部特點,除此之外還有自身的特點。

      例如:

       “不管白貓黑貓,捉到老鼠的就是好貓。”

泛化關系的概念與符號(Generalization)

      如果一個類A(父類)的屬性和操作能被另一個類B(子類)所繼承,則類B不僅可以包含類A中的屬性和操作,而且還可以添加自己獨有的屬性和操作,這種機制就是泛化。泛化也稱之為繼承或派生。

 泛化關系在程序中的體現

1  class student
2     {
3         public int number;
4         public string name;
5         public string myclass;
6     }
學生類
1 class graduate:student
2     {
3         public string research;
4         public string teacher;
5     }
研究生類
 1 class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             graduate g1 = new graduate();
 6             g1.number = 1000;
 7             g1.name = "張三";
 8             g1.myclass = "火鳳凰";
 9             g1.research = "男人和女人到底有什么區別";
10             g1.teacher = "雷神";
11             Console.WriteLine("姓名:"+g1.name);
12             Console.WriteLine("導師:"+g1.teacher);
13         }

可見性的分析

     (在程序中的演示,這里就不說了,都是子類繼承父類,很基礎的東西)

泛化關系的應用——多態 

       多態性:在泛化關系中,父類所定義的操作被子類繼承之后,可以表現出不同的行為。

       多態性允許在(有繼承關系的)多個類中定義同名的操作,並在每一個類中有不同的實現。

c#中的多態機制:

       父類中:可見性 virual返回值類型 方法名(參數)

       子類中:可見性 override 返回值類型 方法嗎(參數)

程序演示:各國不同的問候方式

1  public class TMan  //定義一個普通人類
2     {
3         public string name;
4         public virtual void sayHello()
5         {
6             Console.WriteLine(name+"說漢語");
7         }
8     }
 1  public class TChinese : TMan //定義中國人類
 2     {
 3         public TChinese(string x)
 4         {
 5             name = x;
 6         }
 7 
 8         public override void sayHello()
 9         {
10             base.sayHello();
11             //Console.WriteLine(name+"中國人還會說英語");
12         }
13     }
 1  public class TAmerican : TMan  //定義美國人類
 2     {
 3         public TAmerican(string x)
 4         {
 5             name = x;
 6         }
 7 
 8         public override void sayHello()
 9         {
10             Console.WriteLine(name+"美國人說英語");
11 
12         }
13     }
 1  public class TFrench : TMan  //定義法國人類
 2     {
 3         public TFrench(string x)
 4         {
 5             name = x;
 6         }
 7 
 8         public override void sayHello()
 9         {
10             Console.WriteLine(name+"法國人說法語");
11         }
12     }
法國人
 1  public class TKorean : TMan  //定義韓國人類
 2     {
 3         public TKorean(string x)
 4         {
 5             name = x;
 6         }
 7 
 8         public override void sayHello()
 9         {
10             Console.WriteLine(name+"韓國人說韓語");
11         }
12     }
韓國人
 1  class Program
 2     {
 3         static void Main(string[ ] args)
 4         {
 5             TMan x;
 6 
 7             x = new TChinese("張三");
 8             x.sayHello();
 9 
10             x = new TAmerican("John");
11             x.sayHello();
12 
13             x = new TFrench("蘇非");
14             x.sayHello();
15 
16             x = new TKorean("金知中");
17             x.sayHello();
18         }
19     }

    (代碼中有省略,只是來說明問題)

多態的實現機制

       子類覆蓋父類同名的方法。

       當一個類被繼承時,他的方法也就被其子類繼承。這種繼承可以是無條件的繼承全部舊方法,也可以重新編寫新方法來覆蓋舊方法。

      多態就是指不同對象收到相同消息時,會產生不同行為,同一個類在不同的場合下表現出不同的行為特征
      多態的作用:把不同的子類對象都當作父類來看,可以屏蔽不同子類對象之間的差異,寫出通用的代碼,做出通用的編程,以適應需求的不斷變化。

總結

      泛化關系還是比較容易理解的,泛化可能不知道,但是繼承,作為程序員不可能不知道。


免責聲明!

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



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