Różnica między składem a dziedzictwem
- 2808
- 97
- Pani — Jóźwiak
W programowaniu kod wielokrotnego użytku jest wykorzystaniem istniejącego oprogramowania do budowania nowego oprogramowania przy użyciu zasad ponownego użycia. Ponowne użycie kodu jest uważane za podstawową funkcjonalność produktywną w firmach intensywnie informatycznych. Jest promowany w systemach zorientowanych na obiekt, ustanawiając relacje między klasami. Istnieją dwa podstawowe sposoby ustanowienia tych relacji w programowaniu obiektowym - dziedzictwo i skład. Wdrożenie dziedziczenia jest jednym ze sposobów powiązania klas, ale OOP zapewnia nowy rodzaj relacji między klasami zwanymi kompozycją. Ustanawiając relacje między nowymi i istniejącymi klasami, nowa klasa może odziedziczyć lub osadzić kod z jednej lub więcej istniejących klas.
W OOP dziedzictwo jest metodologią, według której obiekt nabywa cechy jednego lub więcej innych obiektów. Jest to jedno z najpotężniejszych narzędzi wdrażania ponownego użycia kodu w OOP. Podczas korzystania z dziedzictwa można stworzyć nową klasę, ustanawiając relacje rodzic-dziecko z istniejącymi klasami. Kompozycja obiektu jest alternatywą dla dziedziczenia klas. Używanie obiektu w innym obiekcie jest znane jako kompozycja. W wielu okazjach chcesz użyć obiektu jako pola w innej klasie, ponieważ łatwo jest tworzyć złożone klasy za pomocą wcześniej napisanych, dobrze zaprojektowanych klas jako komponentów. Nazywa się to kompozycją. Cóż, zarówno dziedziczenie, jak i skład zapewniają równoważną funkcjonalność w wielu przypadkach, skład obiektów jest lepszym modelem ponownego użycia niż dziedziczenie klasy. Ten artykuł porównuje dwa podejścia.
Co to jest dziedzictwo?
Dziedziczenie jest jednym z najpotężniejszych narzędzi wdrażania ponownego użycia kodu w programowaniu obiektowym. Odnosi się do funkcjonalności, w której jeden obiekt nabywa cechy jednego lub więcej innych obiektów. Dziedziczenie w C ++ oznacza, że możesz tworzyć klasy, które wynikają z ich atrybutów z istniejących klas. Oznacza to, że specjalizujesz klasę, aby stworzyć związek IS-A między klasami, co powoduje silne połączenie klas podstawowych i pochodnych. Wdrożenie dziedziczenia promuje ponowne użycie kodu, ponieważ nowe klasy są tworzone z istniejących klas. Dziedziczenie klas ułatwia również modyfikowanie wdrożenia ponownie wykorzystywania. Ale dziedzictwo klasowe ma też kilka wad. Po pierwsze, ponieważ dziedzictwo jest zdefiniowane w czasie kompilacji, nie można zmienić implementacji odziedziczonych po klasach nadrzędnych w czasie wykonywania.
Co to jest kompozycja?
OOP zapewnia kolejną relację między klasami zwaną kompozycją, która jest również znana jako związek A HAS-A. Jeśli cechy jednego obiektu muszą być częścią innego obiektu, związek wymaga kompozycji. Aby skomponować klasę z istniejących klas, obiekt każdej klasy należy ogłosić jako członek nowej klasy. Krótko mówiąc, użycie obiektu w innym obiekcie jest znane jako kompozycja. Wiele razy możesz użyć obiektu jako pola w innej klasie. Używasz obiektu wewnątrz klasy w kompozycji. W przeciwieństwie do dziedziczenia klas, skład obiektów jest definiowany dynamicznie w czasie wykonywania przez obiekty nabywające odniesienia do innych obiektów. Ponadto kompozycja stanowi lepszy sposób użycia obiektu bez narażania wewnętrznych szczegółów obiektu, w tym miejscu jest użyteczny.
Różnica między składem a dziedzictwem
Zbliżać się
Chociaż zarówno dziedziczenie, jak i skład promują ponowne użycie kodu w systemie zorientowanym na obiekt poprzez ustanowienie relacji między klasami i zapewniają równoważną funkcjonalność na wiele sposobów, stosują różne podejścia. Dzięki dziedzictwu możesz tworzyć klasy, które pochodzą z ich atrybutów z istniejących klas, więc przy użyciu dziedzictwa do tworzenia klasy możesz rozwinąć istniejącą klasę. Przeciwnie, użycie obiektu w innym obiekcie jest znane jako kompozycja. Kompozycja obiektu jest alternatywą dla dziedziczenia klas. Jeśli cechy jednego obiektu muszą być częścią innego obiektu, związek wymaga kompozycji.
Relacja
W dziedzictwie specjalizujesz się w klasie, aby stworzyć związek „IS-A” między klasami, co powoduje silne połączenie klas podstawowych i pochodnych. Umożliwia zaprojektowanie hierarchii klas, a hierarchia zaczyna się od najbardziej ogólnej klasy i przechodzi do bardziej konkretnych klas. Wdrażając dziedziczenie, funkcje członków z jednej klasy stają się właściwościami innej klasy bez kodowania ich jawnie w klasie. W kompozycji używasz obiektu w klasie, a wszelkie żądania do obiektu są przekazywane do obiektu. Wewnętrzne szczegóły nie są narażone na siebie w kompozycji, więc jest to związek „ma”.
Realizacja
Dziedziczenie klas jest zdefiniowane w czasie kompilacji, więc nie można zmienić implementacji odziedziczonych po klasach nadrzędnych w czasie wykonywania. Ponieważ dziedzictwo naraża podklasę na szczegóły wdrożenia rodzica, często łamie kapsułkowanie. Wszelkie zmiany w klasie nadrzędnej będą odzwierciedlać w podklasie, która może powodować problemy, gdy spróbujesz ponownie użyć podklasy. Przeciwnie, kompozycja obiektowa jest zdefiniowana dynamicznie w czasie wykonywania przez obiekty nabywające odniesienia do innych obiektów. A ponieważ do obiektów są dostępne wyłącznie za pomocą ich interfejsów, nie pęknie enkapsulacji. Każdy obiekt może zostać zastąpiony w czasie wykonywania innym obiektem, o ile ma ten sam typ.
Kompozycja vs. Dziedzictwo: wykres porównawczy
Podsumowanie kompozycji vs. Dziedzictwo
Wielokrotnie chciałbyś użyć obiektu jako pola w innej klasie, ponieważ złożone klasy są łatwiejsze do tworzenia za pomocą wcześniej pisanych, dobrze zaprojektowanych klas. Tutaj używasz kompozycji. Dziedzictwo stanowi sposób ponownego wykorzystania kodu poprzez rozszerzenie klasy przy minimalnym wysiłku, dlatego dziedziczenie jest cennym narzędziem w ustalaniu relacji między klasami. Ogólnie rzecz biorąc, preferowane jest użycie kompozycji, ponieważ zapewnia sposób użycia obiektu bez narażania wewnętrznych szczegółów obiektu, w którym skład jest przydatny. Dziedziczenie nie jest bez problemów, ale podobnie jak dziedziczenie, skład obiektów budzi podobne obawy dotyczące wydajności w odniesieniu do tworzenia i zniszczenia obiektów.