Dziedziczenie a kompozycja
Dziedziczenie i skład to dwie ważne koncepcje występujące w OOP (programowanie obiektowe). Mówiąc prościej, zarówno Kompozycja, jak i Dziedziczenie zajmują się dostarczaniem dodatkowych właściwości lub zachowania klasie. 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 jest rozszerzeniem klasy B, wówczas klasa B nazywana jest klasą nadrzędną (lub superklasą), a klasa A nazywana jest klasą potomną (lub klasą pochodną / podklasą). W tym przykładowym scenariuszu klasa A odziedziczy wszystkie publiczne i chronione atrybuty oraz metody superklasy (B). Podklasa może opcjonalnie przesłonić (zapewnić nowe lub rozszerzone funkcje metodom) zachowanie odziedziczone z klasy nadrzędnej.
Dziedziczenie reprezentuje relację „jest-a” w OOP. Zasadniczo oznacza to, że A jest również B. Innymi słowy, B może być klasą z ogólnym opisem pewnej istoty świata rzeczywistego, ale A określa pewną specjalizację. W prawdziwym problemie programistycznym klasę Person można rozszerzyć, 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. 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ć 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ć obiekt klasy B jako element członkowski. Tutaj wszystkie publiczne metody (lub funkcje) zdefiniowane w B mogą być wykonywane w klasie A. Klasa A staje się kontenerem, podczas gdy klasa B staje się klasą zawartą. Kompozycja jest również określana jako kontenerowiec. 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 chociaż 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 programistyczny w świecie rzeczywistym, obiekt klasy TextBox może znajdować się w klasie Form,dlatego można powiedzieć, że Form zawiera TextBox (lub alternatywnie Formularz 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 tym, 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, natomiast 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 OOP, podczas gdy Kompozycja reprezentuje relację „ma-a”.