UML類圖(二)--------類與類之間的關系之依賴,繼承,接口與實現關系


 依賴(Dependency)關系是一種使用關系,特定事物的改變有可能會影響到使用該事物的其他事物,在需要表示一個事物使用另一個事物時使用依賴關系。大多數情況下,依賴關系體現在某個類的方法使用另一個類的對象作為參數。在UML中,依賴關系用帶箭頭的虛線表示,由依賴的一方指向被依賴的一方。例如:駕駛員開車,在Driver類的drive()方法中將Car類型的對象car作為一個參數傳遞,以便在drive()方法中能夠調用car的move()方法,且駕駛員的drive()方法依賴車的move()方法,因此類Driver依賴類Car,如圖1所示:

圖1 依賴關系實例

      在系統實施階段,依賴關系通常通過三種方式來實現,第一種也是最常用的一種方式是如圖1所示的將一個類的對象作為另一個類中方法的參數,第二種方式是在一個類的方法中將另一個類的對象作為其局部變量,第三種方式是在一個類的方法中調用另一個類的靜態方法。圖1對應的Java代碼片段如下:

[java]  view plain  copy
 
  1. public class Driver {  
  2.     public void drive(Car car) {  
  3.         car.move();  
  4.     }  
  5.     ……  
  6. }  
  7.   
  8. public class Car {  
  9.     public void move() {  
  10.         ......  
  11.     }  
  12.     ……  
  13. }  

 

      3. 泛化關系

      泛化(Generalization)關系也就是繼承關系,用於描述父類與子類之間的關系,父類又稱作基類或超類,子類又稱作派生類。在UML中,泛化關系用帶空心三角形的直線來表示。在代碼實現時,我們使用面向對象的繼承機制來實現泛化關系,如在Java語言中使用extends關鍵字、在C++/C#中使用冒號“:”來實現。例如:Student類和Teacher類都是Person類的子類,Student類和Teacher類繼承了Person類的屬性和方法,Person類的屬性包含姓名(name)和年齡(age),每一個Student和Teacher也都具有這兩個屬性,另外Student類增加了屬性學號(studentNo),Teacher類增加了屬性教師編號(teacherNo),Person類的方法包括行走move()和說話say(),Student類和Teacher類繼承了這兩個方法,而且Student類還新增方法study(),Teacher類還新增方法teach()。如圖2所示:

圖2  泛化關系實例

      圖2對應的Java代碼片段如下:

[java]  view plain  copy
 
  1. //父類  
  2. public class Person {  
  3. protected String name;  
  4. protected int age;  
  5.   
  6. public void move() {  
  7.         ……  
  8. }  
  9.   
  10.     public void say() {  
  11.     ……  
  12.     }  
  13. }  
  14.   
  15. //子類  
  16. public class Student extends Person {  
  17. private String studentNo;  
  18.   
  19. public void study() {  
  20.     ……  
  21.     }  
  22. }  
  23.   
  24. //子類  
  25. public class Teacher extends Person {  
  26. private String teacherNo;  
  27.   
  28. public void teach() {  
  29.     ……  
  30.     }  
  31. }  

      4. 接口與實現關系

      在很多面向對象語言中都引入了接口的概念,如Java、C#等,在接口中,通常沒有屬性,而且所有的操作都是抽象的,只有操作的聲明,沒有操作的實現。UML中用與類的表示法類似的方式表示接口,如圖3所示:

圖3  接口的UML圖示

      接口之間也可以有與類之間關系類似的繼承關系和依賴關系,但是接口和類之間還存在一種實現(Realization)關系,在這種關系中,類實現了接口,類中的操作實現了接口中所聲明的操作。在UML中,類與接口之間的實現關系用帶空心三角形的虛線來表示。例如:定義了一個交通工具接口Vehicle,包含一個抽象操作move(),在類Ship和類Car中都實現了該move()操作,不過具體的實現細節將會不一樣,如圖4所示:

圖4  實現關系實例

      實現關系在編程實現時,不同的面向對象語言也提供了不同的語法,如在Java語言中使用implements關鍵字,而在C++/C#中使用冒號“:”來實現。圖4對應的Java代碼片段如下:

[java]  view plain  copy
 
  1. public interface Vehicle {  
  2. public void move();  
  3. }  
  4.   
  5. public class Ship implements Vehicle {  
  6. public void move() {  
  7.     ……  
  8.     }  
  9. }  
  10.   
  11. public class Car implements Vehicle {  
  12. public void move() {  
  13.     ……  
  14.     }  
  15. }  


免責聲明!

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



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