UML類圖符號帶圖介紹
類與類之間的關係對於理解物件導向具有很重要的作用,以前在面試的時候也經常被問到這個問題,在這裡我就介紹一下。類與類之間存在以下關系: (1)泛化(Generalization) (2)關聯(Association) (3)依賴(Dependency) (4)聚合(Aggregation) UML圖與應用代碼例子: 1.泛化(Generalization) [泛化] 表示類與類之間的繼承關係,介面與介面之間的繼承關係,或類對介面的實現關係。一般化的關係是從子類指向父類的,與繼承或實現的方法相反。
[具體表現] 父類 父類實例=new 子類() Animal類與Tiger類,Dog類的泛化關係 [代碼表現] class Animal{} class Tiger extends Animal{} public class Test { public void test() { Animal a=new Tiger(); } } 2.依賴(Dependency) [依賴] 對於兩個相對獨立的物件,當一個物件負責構造另一個物件的實例,或者依賴另一個物件的服務時,這兩個物件之間主要體現為依賴關係。 [具體表現] 依賴關係表現在區域變數,方法的參數,以及對靜態方法的調用 [現實例子] 比如說你要去擰螺絲,你是不是要借助(也就是依賴)螺絲刀(Screwdriver)來説明你完成擰螺絲(screw)的工作 [UML表現] 圖1.2 Person類與Screwdriver類的依賴關係 [代碼表現] public class Person{ /** 擰螺絲 */ public void screw(Screwdriver screwdriver){ screwdriver.screw(); } } 3.關聯(Association) [關聯] 對於兩個相對獨立的物件,當一個物件的實例與另一個物件的一些特定實例存在固定的對應關係時,這兩個物件之間為關聯關係。
[具體表現] 關聯關係是使用執行個體變數來實現 [現實例子] 比如客戶和訂單,每個訂單對應特定的客戶,每個客戶對應一些特定的訂單;再例如公司和員工,每個公司對應一些特定的員工,每個員工對應一特定的公司 [UML圖] 公司和員工的關聯關係 [代碼表現] public class Company{ private Employee employee; public Employee getEmployee(){ return employee; } public void setEmployee(Employee employee){ this.employee=employee; } //公司運作 public void run(){ employee.startWorking(); } } (4)聚合(Aggregation) [聚合] 當物件A被加入到物件B中,成為物件B的組成部分時,物件B和物件A之間為聚集關係。聚合是關聯關係的一種,是較強的關聯關係,強調的是整體與部分之間的關係。 [具體表現] 與關聯關係一樣,聚合關係也是通過執行個體變數來實現這樣關係的。關聯關係和聚合關係來語法上是沒辦法區分的,從語義上才能更好的區分兩者的區別。
[關聯與聚合的區別] (1)關聯關係所涉及的兩個物件是處在同一個層次上的。比如人和自行車就是一種關聯關係,而不是聚合關係,因為人不是由自行車組成的。聚合關係涉及的兩個物件處於不平等的層次上,一個代表整體,一個代表部分。比如電腦和它的顯示器、鍵盤、主機板以及記憶體就是聚集關係,因為主機板是電腦的組成部分。 (2)對於具有聚集關係(尤其是強聚集關係)的兩個物件,整體物件會制約它的組成物件的生命週期。部分類的物件不能單獨存在,它的生命週期依賴于整體類的 物件的生命週期,當整體消失,部分也就隨之消失。比如張三的電腦被偷了,那麼電腦的所有元件也不存在了,除非張三事先把一些電腦的元件(比如硬碟和記憶體) 拆了下來。 電腦和元件的聚合關係 [代碼表現] public class Computer{ private CPU cpu; public CPU getCPU(){ return cpu; } public void setCPU(CPU cpu){ this.cpu=cpu; } //開啟電腦 public void start(){ //cpu運作 cpu.run(); } }
|