Dziedziczenie a kompozycja
Dziedziczenie i kompozycja to dwie ważne koncepcje występujące w programowaniu obiektowym (OOP). Mówiąc prościej, zarówno kompozycja, jak i dziedziczenie dotyczą dostarczania dodatkowych właściwości lub zachowania klasy. Dziedziczenie to zdolność klasy do dziedziczenia właściwości i zachowania z klasy nadrzędnej poprzez jej rozszerzenie. Z drugiej strony, Kompozycja to zdolność klasy do zawierania obiektów różnych klas jako danych składowych.
Co to jest dziedziczenie?
Jak wspomniano powyżej, dziedziczenie to zdolność klasy do dziedziczenia właściwości i zachowania z klasy nadrzędnej poprzez jej rozszerzenie. Dziedziczenie zasadniczo zapewnia ponowne wykorzystanie kodu, umożliwiając rozszerzenie właściwości i zachowania istniejącej klasy o nowo zdefiniowaną klasę. Jeśli klasa A rozszerza B, wtedy klasa B jest nazywana klasą nadrzędną (lub superklasą), a klasa A jest nazywana klasą potomną (lub klasą pochodną/podklasą). W tym przykładowym scenariuszu klasa A odziedziczy wszystkie publiczne i chronione atrybuty i metody superklasy (B). Podklasa może opcjonalnie nadpisać (zapewnić nową lub rozszerzoną funkcjonalność metodom) zachowanie odziedziczone z klasy nadrzędnej.
Dziedziczenie reprezentuje relację „jest-a” w obiektach obiektowych. Zasadniczo oznacza to, że A jest również B. Innymi słowy, B może być klasą z ogólnym opisem pewnej encji świata rzeczywistego, ale A określa pewną specjalizację. W prawdziwym problemie programistycznym klasa Person może zostać rozszerzona, aby utworzyć klasę Employee. Nazywa się to specjalizacją. Ale możesz też najpierw utworzyć klasę Employee, a następnie uogólnić ją również na klasę Person (tj.mi. uogólnienie). W tym przykładzie Pracownik będzie miał wszystkie właściwości i zachowanie Osoby (tj. Pracownik jest również Osobą) i może również zawierać pewne dodatkowe funkcje (więc Osoba nie jest Pracownikiem).
Co to jest kompozycja?
Kompozycja to zdolność klasy do zawierania obiektów różnych klas jako danych składowych. Na przykład klasa A może zawierać jako członka obiekt klasy B. Tutaj wszystkie publiczne metody (lub funkcje) zdefiniowane w B mogą być wykonywane w klasie A. Klasa A staje się kontenerem, a klasa B staje się klasą zawartą. Kompozycja jest również określana jako Containership. W tym przykładzie można powiedzieć, że klasa A składa się z klasy B. W OOP kompozycja reprezentuje relację „ma-a”. Należy zauważyć, że nawet jeśli kontener ma dostęp do wykonywania wszystkich publicznych metod zawartej klasy, nie jest w stanie zmienić ani zapewnić dodatkowej funkcjonalności. Jeśli chodzi o problem programowania w świecie rzeczywistym, obiekt klasy TextBox może być zawarty w klasie Form, a zatem można powiedzieć, że Form zawiera TextBox (lub alternatywnie Form składa się z TextBox).
Jaka jest różnica między dziedziczeniem a kompozycją?
Chociaż dziedziczenie i kompozycja to dwie koncepcje OOP, różnią się one znacznie pod względem tego, co pozwalają programiście osiągnąć. Dziedziczenie to zdolność klasy do dziedziczenia właściwości i zachowania z klasy nadrzędnej poprzez jej rozszerzenie, podczas gdy Kompozycja to zdolność klasy do zawierania obiektów różnych klas jako danych składowych. Jeśli klasa jest rozszerzona, dziedziczy wszystkie publiczne i chronione właściwości/zachowanie, a te zachowania mogą być nadpisane przez podklasę. Ale jeśli klasa jest zawarta w innej, kontener nie ma możliwości zmiany lub dodania zachowania do zawartego. Dziedziczenie reprezentuje relację „jest-a” w obiektach obiektowych, podczas gdy kompozycja reprezentuje relację „ma-a”.