久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    UML中類之間的關(guān)系

     昵稱22369024 2015-05-03
    類之間可能存在以下幾種關(guān)系:關(guān)聯(lián)(association)、依賴(dependency)、聚合(Aggregation,也有的稱聚集)、組合(Composition)、泛化(generalization,也有的稱繼承)、實(shí)現(xiàn)(Realization)。
    關(guān)聯(lián)是指兩個(gè)類之間存在某種特定的對(duì)應(yīng)關(guān)系,例如客戶和訂單,一個(gè)訂單只能屬于某個(gè)客戶,一個(gè)客戶可能會(huì)有多張訂單。根據(jù)方向,分為單向和雙向。根據(jù)對(duì)應(yīng)的數(shù)量分為一對(duì)一、一對(duì)多、多對(duì)多等。對(duì)應(yīng)的UML圖如下所示:
    UML中類之間的幾種關(guān)系
        關(guān)聯(lián)關(guān)系用實(shí)線+箭頭表示。上圖顯示Customer和Order是雙向一對(duì)多關(guān)聯(lián)關(guān)系。對(duì)應(yīng)的Java代碼如下所示:
     class Customer {
      private Integer id;
      private String name;
      private Set<Order> orders;
      public Set<Order> getOrders() {
       return orders;
      }
      public void setOrders(Set<Order> orders) {
       this.orders = orders;
      }
     }
     class Order {
      private Integer id;
      private float money;
      private Customer customer;
      public Customer getCustomer() {
       return customer;
      }
      public void setCustomer(Customer customer) {
       this.customer = customer;
      }
     }
    Customer和Order是雙向一對(duì)多關(guān)聯(lián)關(guān)系,那么在Customer中應(yīng)該有Order的集合,在Order中應(yīng)該Customer的屬性。
     
    依賴指的是類之間的調(diào)用關(guān)系。類A訪問(wèn)類B的屬性或方法,或者類A負(fù)責(zé)實(shí)例化類B,那么就說(shuō)類A依賴于類B。和關(guān)聯(lián)關(guān)系不同的是,無(wú)需在類A中定義類B類型的屬性。例如自行車和打氣筒,自行車通過(guò)打氣筒來(lái)充氣,那么就需要調(diào)用打氣筒的充氣方法。對(duì)應(yīng)的UML圖如下所示:
    UML中類之間的幾種關(guān)系
        依賴關(guān)系用虛線+箭頭表示。上圖顯示Bicycle和Pump是依賴關(guān)系,Bicycle依賴于Pump。對(duì)應(yīng)的Java代碼如下所示:
     class Bicycle {
      public void expand(Pump pump) {
       pump.blow();
      }
     }
     class Pump {
      public void blow() {
       System.out.println("正在充氣......");
      }
     }
    打氣筒并不屬于某個(gè)特定的自行車,一個(gè)打氣筒可以為多個(gè)自行車提供充氣的服務(wù)。在Bicycle中不需要定義Pump類型的屬性,而是將傳遞了一個(gè)Pump類型的參數(shù)到Bicycle的方法中。
     
    聚合是整體與部分之間的關(guān)系。例如計(jì)算機(jī)和主板,計(jì)算機(jī)是一個(gè)整體,主板是其中的一部分,主板、顯卡、顯示器等部件組成了計(jì)算機(jī)。對(duì)應(yīng)的UML圖如下所示:
     UML中類之間的幾種關(guān)系
        聚合使用空心菱形+實(shí)線表示。上圖顯示Computer是由MainBoard和DisplayCard等組成的。對(duì)應(yīng)的Java代碼如下所示:
     class Computer {
      private MainBoard mainBoard;
      private DisplayCard displayCard;
      
      public void on() {
       System.out.println("開啟計(jì)算機(jī)......");
      }
      public void close() {
       System.out.println("關(guān)閉計(jì)算機(jī)......");
      }
      public void run() {
       System.out.println("計(jì)算機(jī)正在運(yùn)行......");
      }
     }
     class MainBoard {
      public void control() {
       System.out.println("控制計(jì)算機(jī)......");
      }
     }
     class DisplayCard {
      public void display() {
       System.out.println("計(jì)算顯示數(shù)據(jù)......");
      }
     }
    計(jì)算機(jī)由主板、顯卡等部件組成,所以在Computer中定義了MainBoard和DisplayCard類型的屬性。
    聚合中類之間可以獨(dú)立出來(lái),比如一塊主板可以狀態(tài)A計(jì)算機(jī)上,也可以裝在B計(jì)算機(jī)上。也就是說(shuō)這塊主板離開A計(jì)算機(jī)之后仍然是有意義的。
     
    組合中的類也是整體與部分的關(guān)系,與聚合不同的而是,其中的類不能對(duì)立出來(lái)。例如一個(gè)人由頭、手、腿和軀干等組成,如果這個(gè)頭離開了這個(gè)人,那么這個(gè)頭就沒(méi)有任何意義了。對(duì)應(yīng)的UML圖如下所示:
    UML中類之間的幾種關(guān)系
    組合使用實(shí)心菱形和實(shí)線表示。上圖表示People是由Head、Hand、Leg等組成。對(duì)應(yīng)的Java代碼如下所示:
     class People {
      private Head head;
      private Hand hand;
      private Leg leg;
      public void think() {
       head.think();
      }
      public void holdThing() {
       hand.holdThing();
      }
      public void walk() {
       leg.walk();
      }
     }
     class Head {
      public void think() {
       System.out.println("思考......");
      }
     }
     class Hand {
      public void holdThing() {
       System.out.println("拿東西......");
      }
     }
     class Leg {
      public void walk() {
       System.out.println("走路......");
      }
     }
    People和Head、Hand、Leg是不可分割的,Head、Hand、Leg離開了People沒(méi)有任何實(shí)際意義。在People中定義了Head、Hand、Leg類型的屬性,組合也可以看成是聚合的一種特殊形式。
    聚合和組合的代碼幾乎相同,單憑代碼是無(wú)法區(qū)分兩個(gè)類之間是聚合還是組合的關(guān)系的。所以就需要結(jié)合實(shí)際的業(yè)務(wù)環(huán)境來(lái)區(qū)分。例如汽車和輪胎,車主買了一輛汽車,上邊肯定是由輪胎的,在這個(gè)業(yè)務(wù)中,輪胎和汽車是組合關(guān)系,它們分開就沒(méi)有實(shí)際意義了。在汽車修理店,汽車可以更換輪胎,所以在汽修店的業(yè)務(wù)環(huán)境中,汽車和輪胎就是聚合的關(guān)系,輪胎離開汽車是有業(yè)務(wù)意義的。
     
    泛化比較好理解,就是兩個(gè)類之間具有繼承關(guān)系。例如人和學(xué)生,學(xué)生繼承了人,除過(guò)具有人的一般的屬性和方法之外,他還要有學(xué)習(xí)的方法。對(duì)應(yīng)的UML圖如下所示:
    UML中類之間的幾種關(guān)系
        泛化用空心三角形+實(shí)線表示。上圖表示Student繼承People。對(duì)應(yīng)的Java代碼如下所示:
     class People {
      protected String name;
      protected String sex;
      protected Date birthday;
      public void eat() {
       System.out.println(name + "正在吃飯......");
      }
      public void drink() {
       System.out.println(name + "正在喝水......");
      }
      public void sleep() {
       System.out.println(name + "正在休息......");
      }
     }
     class Student extends People {
      public void study() {
       System.out.println(name + "正在學(xué)習(xí)......");
      }
     }
    Student繼承自People,并且多了一個(gè)study的方法。
     
    實(shí)現(xiàn)即一個(gè)類實(shí)現(xiàn)了某個(gè)接口。對(duì)應(yīng)的UML圖如下所示:
    UML中類之間的幾種關(guān)系
        實(shí)現(xiàn)用三角形箭頭和虛線表示。上圖表示類CarDriver和PlaneDriver都實(shí)現(xiàn)了Driver接口。對(duì)應(yīng)的Java代碼如下所示:
    public interface Driver {
     void drive();
    }
     class CarDriver implements Driver {
      public void drive() {
       System.out.println("駕駛汽車......");
      }
     }
     class PlaneDriver implements Driver {
      public void drive() {
       System.out.println("駕駛飛機(jī)......");
      }
     }
     
    值得注意的是,關(guān)聯(lián)、依賴、聚合、組合的關(guān)系很容易搞混。當(dāng)對(duì)象A和對(duì)象B之間存在關(guān)聯(lián)、依賴、聚合或者組合關(guān)系時(shí),對(duì)象A都有可能調(diào)用對(duì)象B的方法。這是它們的相同之處。另外它們還有自己的特征。
    對(duì)于兩個(gè)相對(duì)獨(dú)立的對(duì)象A和B,當(dāng)一個(gè)對(duì)象A的實(shí)例與B的實(shí)例存在固定的對(duì)應(yīng)關(guān)系時(shí),這兩個(gè)對(duì)象之間為關(guān)聯(lián)關(guān)系。代碼中表現(xiàn)為在A中定義了B類型的屬性。
    對(duì)于兩個(gè)相對(duì)獨(dú)立的對(duì)象A和B,當(dāng)一個(gè)對(duì)象A負(fù)責(zé)構(gòu)造對(duì)象B的實(shí)例,或者調(diào)用對(duì)象B提供的服務(wù)時(shí),這兩個(gè)對(duì)象之間主要體現(xiàn)為依賴關(guān)系。代碼中的表現(xiàn)即將B類型的參數(shù)傳入A的方法中,而不是在A中定義B類型的屬性。
    聚合、組合與關(guān)聯(lián)在代碼中并沒(méi)有明顯的區(qū)別,主要看實(shí)際的業(yè)務(wù)環(huán)境,根據(jù)代碼所處的實(shí)際業(yè)務(wù)環(huán)境來(lái)判斷它們之間的關(guān)系。同樣的兩個(gè)類,處在不同的業(yè)務(wù)環(huán)境中,可能它們的關(guān)系也不相同。

      本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
      轉(zhuǎn)藏 分享 獻(xiàn)花(0

      0條評(píng)論

      發(fā)表

      請(qǐng)遵守用戶 評(píng)論公約

      類似文章 更多

      主站蜘蛛池模板: 女人十八毛片A级十八女人| 国产成人AV三级在线观看| 在国产线视频A在线视频| 国产高清一区二区不卡| 人人人澡人人肉久久精品| 二区三区亚洲精品国产| 精品乱码一区二区三四五区| 西西人体44WWW高清大胆| 午夜男女爽爽爽影院在线视频| 亚洲欧美牲交| 国产午精品午夜福利757视频播放| 四虎在线播放亚洲成人| A毛片终身免费观看网站| 麻豆成人传媒一区二区| 精品无码人妻一区二区三区品| 色噜噜亚洲男人的天堂| 成人免费A级毛片无码片2022| 97精品国产一区二区三区| 亚洲中文字幕国产精品| 亚洲国产成人久久精品APP | 国产成人午夜福利在线播放| 国产色无码精品视频免费| 国内少妇偷人精品免费| 乱妇乱女熟妇熟女网站| 草草影院精品一区二区三区| 日本久久99成人网站| 精品久久久久久无码专区不卡| 亚洲日韩性欧美中文字幕| 我的公强要了我高潮在线观看| 亚洲国产精品成人无码区| 亚洲色大成永久WW网站| 免费无码成人AV在线播放不卡| 国产亚洲国产精品二区| 再深点灬舒服灬太大了网站| 在线理论三级午夜电影| 国产精品中文字幕综合| 无码AV中文字幕久久专区| 99欧美日本一区二区留学生 | 亚洲国产成人无码AV在线影院L | 天天爽夜夜爱| 国产日产欧产美韩系列麻豆|