簡體   English   中英

使用繼承VS。 C ++中的正交類

[英]Using Inheritance Vs. Orthogonal Classes in C++

在C ++中為各種應用程序編寫類時,最好使用正交類(相互不依賴的類),或者最好繼承。 我之所以這么問是因為,我注意到很多問題,其中有兩個或三個不交互的類,而其他人可能有3個通過繼承鏈接的類。

這是不是更偏向於在時間和地點都存在的地方,還是人們似乎更喜歡繼承(從我所見)的原因?

通常,當系統的某些部分看到不同類中的通用性時,可以使用繼承,這些類可以抽象為通用基類。 如果您在類的設計中沒有此方面,則可以將類分開。 因此,使用哪個不是問題,課程使用更多的馬。

我認為當你說

正交類(互不依賴的類)

您實際上的意思是它們不是通過繼承而是通過組合而聯系在一起的。 請注意,這確實是另一種依賴關系,盡管不如繼承強。

通常人們到面向對象的設計更喜歡繼承組成(見這個這個這個 )由於通過關系,這有助於避免類似問題的聯接器規定的不太嚴格水平脆基類

然而,沒有靈丹妙葯。 去收集經驗並自己決定。

這取決於項目的需求以及如何將需求轉換為設計。

您正在談論面向對象編程的三種不同原理。

單一責任 -

  • 班級應該只承擔一項責任,只有一個改變的理由。 這也被稱為具有高“內聚力”。
  • 另一種看待它的方式是,對耦合的依賴(對其他類別的依賴)應最小,最好是齊爾奇。

在這種情況下,正交類或獨立類是有意義的

繼承 -

  • 當您想重用某些類的功能並從中創建一個新類時,繼承就會浮現。 換句話說,如果您想擴展類功能。 如果您想保持類的某些功能完整並添加新功能或屬性,則不必重寫類定義,而只需從現有類繼承並創建一個新類即可。 繼承屬性的類稱為超級/基類。 繼承的類是派生類。 如果“ B”繼承自“ A”,那么我們說“ B”與“ A”類似。 'A'是基類'B'派生

組成

  • 組合表示類可以將另一個類型的對象作為其成員。如果類A的類型為類'B',則該類為成員。 在“ A”和“ B”之間存在一個組成關系。 'A'-有-'B'。

看例子

可以說我有一個班級家里有房間家里有家具家里有電子產品

單一責任示例

盡管家具和電子產品屬於家庭,但它們彼此完全獨立。 一個改變不會影響另一個。 因此,兩者之間存在松散耦合,並且它們在很大程度上正交。

繼承示例 Home還具有客房,床房

因此,客房將從客房床繼承

Class GuestRoom : public Room { }

Class BedRoom : public Room { }

構成示例

房間將配備家具和電子產品

class Room { 
   vector<furniture> furniture_vec;
   vector<electronics> electronics_vec;
    .
  // other members
}

在嘗試設計應用程序時,還有其他面向對象的原理會出現。 閱讀一本有關OOP原理的好書,並查看一些示例,可以進一步闡明這些概念。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM