Loading...

          java .net

          偷來的學習

          類與類之間的關系對于理解面向對象具有很重要的作用,以前在面試的時候也經常被問到這個問題,在這里我就介紹一下。

          類與類之間存在以下關系:

          (1)泛化(Generalization)

          (2)關聯(Association)

          (3)依賴(Dependency)

          (4)聚合(Aggregation)

          UML圖與應用代碼例子:

          1.泛化(Generalization)

          [泛化]

          表示類與類之間的繼承關系,接口與接口之間的繼承關系,或類對接口的實現關系。一般化的關系是從子類指向父類的,與繼承或實現的方法相反。

          [具體表現]

          父類 父類實例=new 子類()

          [UML圖](圖1.1)



          圖1.1 Animal類與Tiger類,Dog類的泛化關系



          [代碼表現]



          1. class Animal{}
          2. class Tiger extends Animal{}
          3. public class Test
          4. {
          5. public void test()
          6. {
          7. Animal a=new Tiger();
          8. }
          9. }


          2.依賴(Dependency)

          [依賴]

          對于兩個相對獨立的對象,當一個對象負責構造另一個對象的實例,或者依賴另一個對象的服務時,這兩個對象之間主要體現為依賴關系。

          [具體表現]

          依賴關系表現在局部變量,方法的參數,以及對靜態方法的調用

          [現實例子]

          比如說你要去擰螺絲,你是不是要借助(也就是依賴)螺絲刀(Screwdriver)來幫助你完成擰螺絲(screw)的工作

          [UML表現](圖1.2)



          圖1.2 Person類與Screwdriver類的依賴關系



          [代碼表現]

          1. public class Person{
          2. /** 擰螺絲 */
          3. public void screw(Screwdriver screwdriver){
          4. screwdriver.screw();
          5. }
          6. }


          3.關聯(Association)

          [關聯]

          對于兩個相對獨立的對象,當一個對象的實例與另一個對象的一些特定實例存在固定的對應關系時,這兩個對象之間為關聯關系。

          [具體表現]

          關聯關系是使用實例變量來實現

          [現實例子]

          比如客戶和訂單,每個訂單對應特定的客戶,每個客戶對應一些特定的訂單;再例如公司和員工,每個公司對應一些特定的員工,每個員工對應一特定的公司

          [UML圖] (圖1.3)



          圖1.3 公司和員工的關聯關系




          [代碼表現]
          1. public class Company{
          2. private Employee employee;
          3. public Employee getEmployee(){
          4. return employee;
          5. }
          6. public void setEmployee(Employee employee){
          7. this.employee=employee;
          8. }
          9. //公司運作
          10. public void run(){
          11. employee.startWorking();
          12. }
          13. }
          (4)聚合(Aggregation)

          [聚合]

          當對象A被加入到對象B中,成為對象B的組成部分時,對象B和對象A之間為聚集關系。聚合是關聯關系的一種,是較強的關聯關系,強調的是整體部分之間的關系。

          [具體表現]

          與關聯關系一樣,聚合關系也是通過實例變量來實現這樣關系的。關聯關系和聚合關系來語法上是沒辦法區分的,從語義上才能更好的區分兩者的區別。

          [關聯與聚合的區別]

          (1)關聯關系所涉及的兩個對象是處在同一個層次上的。比如人和自行車就是一種關聯關系,而不是聚合關系,因為人不是由自行車組成的。

          聚合關系涉及的兩個對象處于不平等的層次上,一個代表整體,一個代表部分。比如電腦和它的顯示器、鍵盤、主板以及內存就是聚集關系,因為主板是電腦的組成部分。

          (2)對于具有聚集關系(尤其是強聚集關系)的兩個對象,整體對象會制約它的組成對象的生命周期。部分類的對象不能單獨存在,它的生命周期依賴于整體類的對象的生命周期,當整體消失,部分也就隨之消失。比如張三的電腦被偷了,那么電腦的所有組件也不存在了,除非張三事先把一些電腦的組件(比如硬盤和內存)拆了下來。

          [UML圖](圖1.4)



          圖1.3 電腦和組件的聚合關系



          [代碼表現]
          1. public class Computer{
          2. private CPU cpu;
          3. public CPU getCPU(){
          4. return cpu;
          5. }
          6. public void setCPU(CPU cpu){
          7. this.cpu=cpu;
          8. }
          9. //開啟電腦
          10. public void start(){
          11. //cpu運作
          12. cpu.run();
          13. }
          14. }




          [參考資料]

          1.《Java與模式》(閻宏 編著) 第2章 統一建模語言UML簡介
          作者寫的很好,偷來了就,希望不會被追究,原始鏈接:http://www.javaeye.com/topic/37302

          posted on 2008-08-26 22:06 閱讀(99) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          公告

          希望有一天

          我能用鼠標雙擊我的錢包

          然后選中一張100元

          按住“ctrl+c”

          接著不停的“ctrl+v”

          嘻嘻~~~笑醒~~~



          導航

          <2008年8月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          統計

          常用鏈接

          留言簿(6)

          隨筆分類(102)

          隨筆檔案(398)

          文章分類

          文章檔案(10)

          有趣網絡

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 岐山县| 墨江| 千阳县| 张家口市| 武穴市| 普兰店市| 安宁市| 兰州市| 富锦市| 彰化县| 林口县| 工布江达县| 江山市| 老河口市| 兴仁县| 来宾市| 瑞丽市| 金昌市| 大方县| 新郑市| 通海县| 汶川县| 宣城市| 隆林| 灵宝市| 伊春市| 静海县| 陇川县| 沭阳县| 新源县| 广东省| 禄劝| 清流县| 临沧市| 孟村| 颍上县| 布拖县| 河津市| 拜泉县| 扬中市| 东平县|