第12章组成,聚合关系与抽象类别.ppt
《第12章组成,聚合关系与抽象类别.ppt》由会员分享,可在线阅读,更多相关《第12章组成,聚合关系与抽象类别.ppt(37页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第12章 組成、聚合關係與抽象類別n n12-1 類別的組成關係-巢狀類別n n12-2 類別的聚合關係n n12-3 抽象類別n n12-4 抽象類別與介面n n12-5 常數類別12-1 類別的組成關係-巢狀類別n n12-1-1 巢狀類別n n12-1-2 內層類別的使用12-1-1 巢狀類別-說明n n巢狀類別強調類別間的關聯性,強調內層類別一定需要外層類別,如果外層類別的物件不存在,內層類別物件也不會存在,內層的成員類別稱為內層類別(Inner Classes)。12-1-1 巢狀類別-巢狀類別的宣告n nOrderOrder巢狀類別的宣告,如下所示:巢狀類別的宣告,如下所示:cla
2、ss Order /Orderclass Order /Order外層類別外層類別 class class OrderStatusOrderStatus /OrderStatusOrderStatus內層類別內層類別 n nOrderOrder類別擁有成員類別類別擁有成員類別OrderStatusOrderStatus的內層類別,的內層類別,OrderOrder是巢狀類別的外層類別(是巢狀類別的外層類別(Enclosing Enclosing ClassClass)。)。12-1-1 巢狀類別-UML類別圖n nUML類別圖的組成關係是一種成品和零件(Whole-Part)的類別關係,強調是成
3、品的專屬零件,如下圖所示:12-1-1 巢狀類別-特點n n巢狀類別強調類別間的關係。例如:訂單擁有訂巢狀類別強調類別間的關係。例如:訂單擁有訂單狀態,所以單狀態,所以OrderStatusOrderStatus類別是類別是OrderOrder類別的類別的一部分。一部分。n n巢狀類別的內層類別也是外層類別的成員,所以巢狀類別的內層類別也是外層類別的成員,所以其他成員可以存取或呼叫內層類別的成員變數和其他成員可以存取或呼叫內層類別的成員變數和方法,就算宣告成方法,就算宣告成privateprivate也一樣可以;反之,內也一樣可以;反之,內層類別的方法也可以直接存取其他成員變數和呼層類別的方法
4、也可以直接存取其他成員變數和呼叫成員方法。叫成員方法。n n在在JavaJava程式檔案只允許一個宣告成程式檔案只允許一個宣告成publicpublic的類別,的類別,如果巢狀類別宣告成如果巢狀類別宣告成publicpublic,內層類別也一樣是,內層類別也一樣是publicpublic的存取權限,可以讓同一個程式檔案的多的存取權限,可以讓同一個程式檔案的多個類別擁有個類別擁有publicpublic存取權限。存取權限。12-1-2 內層類別的使用-說明n n巢狀類別的內層類別是外層類別的零件,是其一部分,所以不能宣告static靜態的類別變數和方法,而且只有在外層類別的物件存在時,內層類別才
5、會存在。n n在第12-1-1節的程式範例是使用外層類別的物件變數來取得內層類別的物件,在這一節我們直接在主程式的程式碼建立內層類別的物件和指定成員變數值,以便說明內層類別專屬零件的角色。12-1-2 內層類別的使用-類別範例n n例如:Payment巢狀類別宣告,如下所示:class Payment /Paymentclass Payment /Payment外層類別外層類別 class Card /Card class Card /Card內層類別內層類別 n nPayment類別是外層類別,Card類別是內層類別。12-1-2 內層類別的使用-建立巢狀類別的物件n n在程式碼先使用在程式
6、碼先使用newnew運算子建立運算子建立p1p1參考的參考的PaymentPayment物件,接著使用物件,接著使用Payment.CardPayment.Card宣告物宣告物件變數件變數mastermaster,如下所示:,如下所示:Payment p1=new Payment p1=new Payment(pay002,5600.0);Payment(pay002,5600.0);Payment.CardPayment.Card master=p1.new Card();master=p1.new Card();n n然後使用然後使用p1.newp1.new建立建立CardCard物件,最
7、後指定內層物件,最後指定內層類別物件的成員變數值,如下所示:類別物件的成員變數值,如下所示:master.typemaster.type=MASTER;=MASTER;master.numbermaster.number=2433-4444-7890-1234;=2433-4444-7890-1234;12-2 類別的聚合關係n n12-2-1 一對一的聚合關係n n12-2-2 一對多的聚合關係n n12-2-3 遞迴的聚合關係12-2 類別的聚合關係n n在Java程式實作聚合關係和結合關係相同,其差異在於聚合關係的兩個類別擁有成品和零件(Whole-Part)的類別關係,並不是地位對等的
8、兩個類別。n n聚合關係和上一節組成關係的差異,在於組成關係的零件是專屬零件,所以組成關係的零件並不能單獨存在。聚合關係的零件可以共用,而且零件的物件可以單獨存在。12-2-1 一對一的聚合關係-說明與UML類別圖n n一對一的聚合關係是指類別中擁有一個物件變數一對一的聚合關係是指類別中擁有一個物件變數參考到其他類別的物件,此類別是成品參考到其他類別的物件,此類別是成品(WholeWhole),其他類別是零件(),其他類別是零件(PartPart)。)。n n例如:例如:StudentStudent類別擁有類別擁有DateDate類別的生日,生日類別的生日,生日是學生的零件。是學生的零件。UM
9、LUML類別圖,如下圖所示:類別圖,如下圖所示:12-2-1 一對一的聚合關係-類別宣告n nJava程式碼也是使用物件變數參考其他物件,其類別宣告如下所示:class Student class Student private Date birthday;private Date birthday;class Date class Date private Student private Student studentstudent;12-2-1 一對一的聚合關係-Student()建構子n n在Student()建構子使用new運算子來建立Date物件,如下所示:birthday=new
10、birthday=new Date(dDate(d,m,y,this);,m,y,this);n n上述建構子的最後1個參數是指定Date物件的student物件變數值是目前的Student物件。12-2-2 一對多的聚合關係-說明與UML類別圖n n一對多的聚合關係是指1個類別對多個類別,也就是成品需要同樣的多個零件。例如:一輛車有4個輪胎,Student學生擁有住家電話、宿舍電話和手機等多個Phone電話物件。UML類別圖,如下圖所示:12-2-2 一對多的聚合關係-類別宣告n n筆者是使用物件陣列來實作一對多的聚合關係,如下所示:class Student class Student p
11、rivate private intint pos=0;pos=0;private Phone private Phone itsPhoneitsPhone=new =new Phone3;Phone3;class Phone class Phone 12-2-3 遞迴的聚合關係-說明n n遞迴結合關係(Self-associations)可以使用在結合、組成或聚合關係,它是指類別擁有參考到自已的指標,以聚合關係來說,類別本身是成品,也是零件。12-2-3 遞迴的聚合關係-UML類別圖n n例如:學校的科系Department類別可以分成很多子科系,每一個子科系物件也是一種Department
12、類別。UML類別圖,如下圖所示:12-2-3 遞迴的聚合關係-類別宣告n n我們一樣是使用物件陣列來建立一對多的遞迴聚我們一樣是使用物件陣列來建立一對多的遞迴聚合關係,如下所示:合關係,如下所示:class Department class Department private private intint pos;pos;private Department private Department itsSubitsSub=new Department2;new Department2;12-2-3 遞迴的聚合關係-UML物件圖12-3 抽象類別-說明n n在Java類別宣告使用abstrac
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 12 组成 聚合 关系 抽象 类别
限制150内