作文(composition)和繼承(inheritance)的區別

在程式設計中,可重用程式碼是利用現有軟體的可重用性原則來構建新的軟體。程式碼可重用性被認為是資訊科技密集型企業的一項基本生產功能。在面向物件的系統中,透過建立類之間的關係來促進它。在面向物件程式設計中,有兩種基本的方法來建立這些關係:繼承和組合。實現繼承是關聯類的一種方法,但是OOP提供了一種新的類之間的關係,稱為組合。透過在新類和現有類之間建立關係,新類可以從一個或多個現有類繼承或嵌入程式碼。...

在程式設計中,可重用程式碼是利用現有軟體的可重用性原則來構建新的軟體。程式碼可重用性被認為是資訊科技密集型企業的一項基本生產功能。在面向物件的系統中,透過建立類之間的關係來促進它。在面向物件程式設計中,有兩種基本的方法來建立這些關係:繼承和組合。實現繼承是關聯類的一種方法,但是OOP提供了一種新的類之間的關係,稱為組合。透過在新類和現有類之間建立關係,新類可以從一個或多個現有類繼承或嵌入程式碼。

在OOP中,繼承是一個物件獲取一個或多個其他物件特徵的方法。它是在OOP中實現程式碼重用的最強大的工具之一。使用繼承時,可以透過與現有類建立父子關係來建立新類。物件組合是類繼承的替代方法。在另一個物件中使用一個物件稱為合成。在許多情況下,您可能希望將物件用作另一個類中的欄位,因為使用以前編寫的、設計良好的類作為元件很容易建立複雜的類。這叫做作文。好吧,繼承和組合在很多情況下都提供了等價的功能,物件組合是比類繼承更好的重用模型。本文對這兩種方法進行了比較。

 

作文(composition)和繼承(inheritance)的區別

什麼是繼承(inheritance)?

在面向物件程式設計中,繼承是實現程式碼可重用性的最強大工具之一。它是指一個物件獲得一個或多個其他物件的特徵的功能。C++中的繼承意味著可以建立從現有類派生屬性的類。這意味著您專門化一個類來建立類之間的is-a關係,從而導致基類和派生類之間的強耦合。實現繼承可以提高程式碼重用性,因為新類是從現有類建立的。類繼承還使修改被重用的實現變得更容易。但是類繼承也有一些缺點。首先,因為繼承是在編譯時定義的,所以不能在執行時更改從父類繼承的實現。

 

作文(composition)和繼承(inheritance)的區別

什麼是作文(composition)?

OOP提供了類之間的另一種關係,稱為composition,也稱為has-a關係。如果一個物件的特徵需要成為另一個物件的一部分,那麼這種關係需要合成。要從現有類組成一個類,每個類的一個物件都應該宣告為新類的成員。簡單地說,在另一個物件中使用一個物件就是合成。很多時候,您可能希望將一個物件用作另一個類中的欄位。在合成中使用類中的物件。與類繼承不同,物件組合是在執行時透過物件獲取對其他物件的引用來動態定義的。此外,合成提供了一種更好的方法來使用物件,而不會損害物件的內部細節,這就是合成的有用之處。

 

構成與繼承的區別

方法

繼承和組合都透過建立類之間的關係來提高面向物件系統中的程式碼重用性,並且它們在許多方面提供等效的功能,但是它們使用不同的方法。透過繼承,您可以建立從現有類派生屬性的類,因此在使用繼承建立類時,可以在現有類上展開。相反,在另一個物件中使用一個物件稱為合成。物件組合是類繼承的替代方法。如果一個物件的特徵需要成為另一個物件的一部分,那麼這種關係需要合成。

關係

在繼承中,您專門化一個類來建立類之間的“is-a”關係,從而導致基類和派生類之間的強耦合。它允許設計類的層次結構,層次結構從最一般的類開始,並移動到更具體的類。透過實現繼承,來自一個類的成員函式成為另一個類的屬性,而無需在類中顯式編碼。在組閤中,在類中使用物件,對該物件的任何請求都會轉發給該物件。內部的細節在構圖中沒有相互暴露,所以是一種“has-a”關係。

實施

類繼承是在編譯時定義的,因此不能在執行時更改從父類繼承的實現。因為繼承將子類暴露給其父類實現的細節,所以它經常破壞封裝。父類中的任何更改都將反映在子類中,當您嘗試重用子類時,子類可能會產生問題。相反,物件組合是透過物件獲取對其他物件的引用在執行時動態定義的。而且由於物件僅透過其介面訪問,因此不會破壞封裝。任何物件都可以在執行時被另一個物件替換,只要它具有相同的型別。

組合與繼承:比較圖

作文(composition)和繼承(inheritance)的區別

 

總結 - 成分分析(of composition) vs. 繼承(inheritance)

在許多情況下,您可能希望將物件用作另一個類中的欄位,因為使用以前編寫的、設計良好的類更容易建立複雜的類。這是你用作文的地方。繼承提供了一種透過以最小的努力擴充套件類來重用程式碼的方法,這就是為什麼繼承是在類之間建立關係的一個有價值的工具。一般來說,最好使用合成,因為它提供了一種使用物件的方法,而不會影響合成有用的物件的內部細節。繼承並非沒有問題,但與繼承一樣,物件組合在物件建立和銷毀方面也會引起類似的效能問題。

 

  • 發表於 2021-06-26 02:18
  • 閱讀 ( 53 )
  • 分類:科技

你可能感興趣的文章

混合成的(composite)和非複合轉座子(non composite transposons)的區別

...格形式的複合與非複合轉座子 6. 摘要 什麼是複合轉座子(composite transpos***)? 複合轉座子是一段DN**段,兩側有兩個相似的**序列元件。複合轉座子中有一箇中央蛋白編碼區。這些基因通常是抗藥性基因。它們也可能含有分解代謝...

  • 發佈於 2020-09-16 00:59
  • 閲讀 ( 58 )

分帶(zonation)和繼承人(succession)的區別

...例子。一般來說,二次演替比一次演替快。 分帶(zonation)和繼承人(succession)的共同點 地帶性和演替是描述生態系統群落組成變化的兩種現象。 分帶(zonation)和繼承人(succession)的區別 地帶性是指物種在生境中分佈的逐漸變化,而...

  • 發佈於 2020-09-22 19:48
  • 閲讀 ( 47 )

作文(composition)和反應化學計量學(reaction stoichiometry)的區別

...反應化學計量的表格形式 5. 摘要 什麼是成分化學計量學(composition stoichiometry)? 化學計量學是對一種化合物的原子組成進行定量分析。這個術語是指在一種特定化合物中存在的原子的型別及其數量。我們可以用化合物的化學式來...

  • 發佈於 2020-09-30 16:08
  • 閲讀 ( 77 )

混合理論(blending theory)和孟德爾遺傳理論(mendelian inheritance theory)的區別

...不管兩朵花的顏色如何。 什麼是孟德爾遺傳理論(mendelian inheritance theory)? 孟德爾遺傳理論是孟德爾提出的。孟德爾遺傳學的概念是以顯性理論為基礎的。在他對豌豆植物的觀察之後,他提出了兩個定律,即分離定律和獨立分類...

  • 發佈於 2020-10-14 19:39
  • 閲讀 ( 74 )

細胞質遺傳(cytoplasmic inheritance)和核遺傳(nuclear inheritance)的區別

...遺傳與板狀遺傳比較 6. 摘要 什麼是細胞質遺傳(cytopla**ic inheritance)? 細胞質遺傳是一種涉及細胞質細胞器DNA的遺傳。在這種遺傳中,後代接受來自細胞質細胞器的基因(血漿基因或核外基因)。線粒體和葉綠體含有由DNA組成的...

  • 發佈於 2020-10-16 03:40
  • 閲讀 ( 54 )

靜止的(static)和java期末考試(final in java)的區別

...始化的變數以後不能在程式中更改。 圖03:帶有最終變數和繼承的程式 根據上述程式,x是最終變數。它被賦值為5。不能更改其他值,因為它被宣告為final。Java支援面向物件程式設計(OOP)。OOP的一個支柱是多型性。一種多型性...

  • 發佈於 2020-10-19 07:48
  • 閲讀 ( 53 )

倍數(multiple)和多層次遺傳(multilevel inheritance)的區別

...格形式的多重與多級繼承 6. 摘要 什麼是多重繼承(multiple inheritance)? 多重繼承是指一個類繼承多個基類。 圖01:多重繼承 A B和C是類。A和B是基類,C是派生類。C類必須同時管理基類A和B的依賴關係。多重繼承在軟體專案中並沒有...

  • 發佈於 2020-10-19 20:00
  • 閲讀 ( 48 )

聚合(aggregation)和作文(composition)的區別

...聚合是兩個物件之間的關聯,它描述了“has a”關係,而composition是一種更具體的聚合型別,它意味著所有權。 目錄 1. 概述和主要區別 2. 什麼是聚合 3. 什麼是構圖 4. 聚合與合成的相似性 5. 並列比較-以表格形式彙總與組合 6. 摘...

  • 發佈於 2020-10-19 20:29
  • 閲讀 ( 46 )

多型性(polymorphism)和oop中的繼承(inheritance in oop)的區別

...向物件程式設計中的一個主要概念。 什麼是oop中的繼承(inheritance in oop)? 參考下面用Java編寫的程式。 圖03:繼承示例 根據上面的程式,A類有sum()方法,B類有sub()方法。 類A的sum()方法可以在B類中使用extend關鍵字。重用...

  • 發佈於 2020-10-19 21:16
  • 閲讀 ( 57 )

孟德爾式(mendelian)和非孟德爾遺傳(non mendelian inheritance)的區別

孟德爾式(mendelian)和非孟德爾遺傳(non mendelian inheritance)的區別 遺傳是遺傳資訊從父母傳給後代的過程。1860年代,格雷戈·門德爾提出了遺傳理論,並解釋了等位基因是如何分離的,顯性性狀是在雜合子中表達的。這個理論被...

  • 發佈於 2020-10-23 22:08
  • 閲讀 ( 61 )
ltflttn
ltflttn

0 篇文章

作家榜

  1. admin 0 文章
  2. 孫小欽 0 文章
  3. JVhby0 0 文章
  4. fvpvzrr 0 文章
  5. 0sus8kksc 0 文章
  6. zsfn1903 0 文章
  7. w91395898 0 文章
  8. SuperQueen123 0 文章

相關推薦