24.1 — Wprowadzenie do dziedziczenia

W ostatnim rozdziale omówiliśmy kompozycję obiektów, w której złożone klasy są konstruowane z prostszych klas i typów. Kompozycja obiektów jest idealna do budowania nowych obiektów, które mają relację „ma” ze swoimi częściami. Jednak kompozycja obiektów to tylko jeden z dwóch głównych sposobów, w jakie C++ pozwala konstruować złożone klasy. Drugi sposób polega na dziedziczeniu, które modeluje relację „jest-a” pomiędzy dwoma obiektami.

W przeciwieństwie do kompozycji obiektów, która polega na tworzeniu nowych obiektów poprzez łączenie i łączenie innych obiektów, dziedziczenie polega na tworzeniu nowych obiektów poprzez bezpośrednie nabywanie atrybutów i zachowań innych obiektów, a następnie ich rozszerzanie lub specjalizację. Podobnie jak kompozycja obiektów, dziedziczenie jest wszędzie w prawdziwym życiu. Kiedy zostałeś poczęty, odziedziczyłeś geny swoich rodziców i nabyłeś cechy fizyczne od obojga – ale potem dodałeś na to swoją własną osobowość. Produkty technologiczne (komputery, telefony komórkowe itp.) dziedziczą funkcje po swoich poprzednikach (często używane w celu zapewnienia kompatybilności wstecznej). Na przykład procesor Intel Pentium odziedziczył wiele funkcji zdefiniowanych przez procesor Intel 486, który z kolei odziedziczył funkcje z wcześniejszych procesorów. C++ odziedziczył wiele funkcji od C, języka, na którym jest oparty, a C odziedziczył wiele funkcji od języków programowania, które powstały wcześniej.

Rozważmy jabłka i banany. Chociaż jabłka i banany to różne owoce, łączy je to, że owocami. A ponieważ jabłka i banany to owoce, prosta logika podpowiada nam, że wszystko, co dotyczy owoców, dotyczy również jabłek i bananów. Na przykład wszystkie owoce mają nazwę, kolor i rozmiar. Dlatego jabłka i banany mają również nazwę, kolor i rozmiar. Można powiedzieć, że jabłka i banany dziedziczą (nabywają) wszystkie właściwości owoców, ponieważ owocem. Wiemy również, że owoc przechodzi proces dojrzewania, dzięki któremu staje się jadalny. Ponieważ jabłka i banany są owocami, wiemy również, że jabłka i banany odziedziczą zachowanie związane z dojrzewaniem.

Ustawmy na diagramie, że związek między jabłkami, bananami i owocami może wyglądać mniej więcej tak:

Ten diagram definiuje hierarchię.

Hierarchie

Hierarchia to diagram pokazujący, w jaki sposób powiązane są różne obiekty. Większość hierarchii albo pokazuje postęp w czasie (386 -> 486 -> Pentium), albo kategoryzuje rzeczy w sposób przechodzący od ogólnego do szczegółowego (owoce -> jabłko -> Honeycrisp). Jeśli kiedykolwiek zajmowałeś się biologią, słynna dziedzina, królestwo, typ, klasa, porządek, rodzina, rodzaj i gatunek, porządek definiuje hierarchię (od ogółu do szczegółu).

Oto kolejny przykład hierarchii: kwadrat to prostokąt, który jest czworokątem, który jest kształtem. Trójkąt prostokątny to trójkąt, który jest również kształtem. Umieść na diagramie hierarchii, który wyglądałby tak:

Ten diagram przechodzi od ogólnego (na górze) do szczegółowego (na dole), przy czym każdy element w hierarchii dziedziczy właściwości i zachowania elementu znajdującego się nad nim.

Spojrzenie w przyszłość

W tym rozdziale omówimy podstawy działania dziedziczenia w C++.

Następny rozdział, zbadamy, w jaki sposób dziedziczenie umożliwia polimorfizm (jedno z najpopularniejszych haseł programowania obiektowego) za pośrednictwem funkcji wirtualnych.

W miarę postępów będziemy także mówić o kluczowych zaletach dziedziczenia, a także o niektórych jego wadach.

guest
Twój adres e-mail nie zostanie wyświetlony
Znalazłeś błąd? Zostaw komentarz powyżej!
Komentarze związane z poprawkami zostaną usunięte po przetworzeniu, aby pomóc zmniejszyć bałagan. Dziękujemy za pomoc w ulepszaniu witryny dla wszystkich!
Awatary z https://gravatar.com/ są połączone z podanym adresem e-mail.
Powiadamiaj mnie o odpowiedziach:  
40 Komentarze
Najnowsze
Najstarsze Najczęściej głosowane
Wbudowane opinie
Wyświetl wszystkie komentarze