位置:首頁 > 軟件操作教程 > 編程開發(fā) > C# > 問題詳情

C# OOP技術(shù) 對象之間的關(guān)系

提問人:劉團圓發(fā)布時間:2020-12-04

    繼承是對象之間的一種簡單關(guān)系,可以讓派生類完整地獲得基類的特性,而且派生類也可以訪問基類內(nèi)部的一些工作代碼(通過受保護的成員)。對象之間還具有其他一些重要關(guān)系。

簡要討論下述關(guān)系:

    ?包含關(guān)系:一個類包含另一個類。這類似于繼承關(guān)系,但包含類可以控制對被包含類的成員的訪問,甚至在使用被包含類的成員前進行其他處理。

    ?集合關(guān)系:一個類用作另一個類的多個實例的容器。這類似于對象數(shù)組,但集合具有其他功能,包括索引、排序和重新設(shè)置大小等。

1.包含關(guān)系

    用一個成員字段包含對象實例,就可以實現(xiàn)包含(containment)關(guān)系。這個成員字段可以是公共字段,此時與繼承關(guān)系一樣,容器對象的用戶可以訪問它的方法和屬性,但不能像繼承關(guān)系那樣,通過派生類訪問類的內(nèi)部代碼。

    另外,可讓被包含的成員對象變成私有成員。如果這么做,用戶就不能直接訪問任何成員,即使這些成員是公共的。但可以使用包含類的成員訪問這些私有成員。也就是說,可以完全控制被包含的類對外提供什么成員(或者不提供任何成員),還可在訪問被包含類的成員前,在包含類的成員上執(zhí)行其他處理。

    例如,Cow類包含一個Udder類,Udder類有一個公共方法MilkO。Cow對象可以按照要求調(diào)用這個方法,作為其SupplyMilkO方法的一部分,但Cow對象的用戶看不到這些細節(jié),或者這些細節(jié)對Cow對象的用戶并不重要。

    在UML中,被包含類可用關(guān)聯(lián)線條來表示。對于簡單包含關(guān)系,可以用帶有1的線條說明一對一的關(guān)系(一個Cow實例包含一個Udder實例)。為清晰起見,也可以把被包含的Udder類實例表示為Cow類的私有字段,如圖所示。

image.png

2.集合關(guān)系

如何使用數(shù)組存儲多個同類型的變量,這也適用于對象(前面使用的變量類型實際上是對象)。例如:

    Animal[] animals = new Animal[5];

    集合基本上就是一個增加了功能的數(shù)組。集合以與其他對象相同的方式實現(xiàn)為類。它們通常以所存儲的對象名稱的復數(shù)形式來命名,例如用類Animals包含Animal對象的一個集合。

    數(shù)組與集合的主要區(qū)別是,集合通常實現(xiàn)額外的功能,例如Add()和RemoveO方法可添加和刪除集合中的項。而且集合通常有一個ltem屬性,它根據(jù)對象的索引返回該對象。通常,這個屬性還允許實現(xiàn)更復雜的訪問方式。例如,可以設(shè)計一個Animals,讓Animal對象根據(jù)其名稱來訪問。

    其UML表示如圖所示。圖中沒有包含成員,因為這里描述的是關(guān)系。連接線末尾的數(shù)字表示一個Animals對象可以包含0個或多個Animal對象。

image.png

繼續(xù)查找其他問題的答案?

相關(guān)視頻回答
回復(0)
返回頂部