C# OOP技術(shù) 對(duì)象之間的關(guān)系
繼承是對(duì)象之間的一種簡(jiǎn)單關(guān)系,可以讓派生類完整地獲得基類的特性,而且派生類也可以訪問(wèn)基類內(nèi)部的一些工作代碼(通過(guò)受保護(hù)的成員)。對(duì)象之間還具有其他一些重要關(guān)系。
簡(jiǎn)要討論下述關(guān)系:
?包含關(guān)系:一個(gè)類包含另一個(gè)類。這類似于繼承關(guān)系,但包含類可以控制對(duì)被包含類的成員的訪問(wèn),甚至在使用被包含類的成員前進(jìn)行其他處理。
?集合關(guān)系:一個(gè)類用作另一個(gè)類的多個(gè)實(shí)例的容器。這類似于對(duì)象數(shù)組,但集合具有其他功能,包括索引、排序和重新設(shè)置大小等。
1.包含關(guān)系
用一個(gè)成員字段包含對(duì)象實(shí)例,就可以實(shí)現(xiàn)包含(containment)關(guān)系。這個(gè)成員字段可以是公共字段,此時(shí)與繼承關(guān)系一樣,容器對(duì)象的用戶可以訪問(wèn)它的方法和屬性,但不能像繼承關(guān)系那樣,通過(guò)派生類訪問(wèn)類的內(nèi)部代碼。
另外,可讓被包含的成員對(duì)象變成私有成員。如果這么做,用戶就不能直接訪問(wèn)任何成員,即使這些成員是公共的。但可以使用包含類的成員訪問(wèn)這些私有成員。也就是說(shuō),可以完全控制被包含的類對(duì)外提供什么成員(或者不提供任何成員),還可在訪問(wèn)被包含類的成員前,在包含類的成員上執(zhí)行其他處理。
例如,Cow類包含一個(gè)Udder類,Udder類有一個(gè)公共方法MilkO。Cow對(duì)象可以按照要求調(diào)用這個(gè)方法,作為其SupplyMilkO方法的一部分,但Cow對(duì)象的用戶看不到這些細(xì)節(jié),或者這些細(xì)節(jié)對(duì)Cow對(duì)象的用戶并不重要。
在UML中,被包含類可用關(guān)聯(lián)線條來(lái)表示。對(duì)于簡(jiǎn)單包含關(guān)系,可以用帶有1的線條說(shuō)明一對(duì)一的關(guān)系(一個(gè)Cow實(shí)例包含一個(gè)Udder實(shí)例)。為清晰起見(jiàn),也可以把被包含的Udder類實(shí)例表示為Cow類的私有字段,如圖所示。
2.集合關(guān)系
如何使用數(shù)組存儲(chǔ)多個(gè)同類型的變量,這也適用于對(duì)象(前面使用的變量類型實(shí)際上是對(duì)象)。例如:
Animal[] animals = new Animal[5];
集合基本上就是一個(gè)增加了功能的數(shù)組。集合以與其他對(duì)象相同的方式實(shí)現(xiàn)為類。它們通常以所存儲(chǔ)的對(duì)象名稱的復(fù)數(shù)形式來(lái)命名,例如用類Animals包含Animal對(duì)象的一個(gè)集合。
數(shù)組與集合的主要區(qū)別是,集合通常實(shí)現(xiàn)額外的功能,例如Add()和RemoveO方法可添加和刪除集合中的項(xiàng)。而且集合通常有一個(gè)ltem屬性,它根據(jù)對(duì)象的索引返回該對(duì)象。通常,這個(gè)屬性還允許實(shí)現(xiàn)更復(fù)雜的訪問(wèn)方式。例如,可以設(shè)計(jì)一個(gè)Animals,讓Animal對(duì)象根據(jù)其名稱來(lái)訪問(wèn)。
其UML表示如圖所示。圖中沒(méi)有包含成員,因?yàn)檫@里描述的是關(guān)系。連接線末尾的數(shù)字表示一個(gè)Animals對(duì)象可以包含0個(gè)或多個(gè)Animal對(duì)象。
點(diǎn)擊加載更多評(píng)論>>