Dziedziczenie a kompozycja
Dziedziczenie i kompozycja to dwa ważne pojęcia znalezione w OOP (Object Oriented Programming). Mówiąc najprościej, zarówno Skład, jak i Dziedziczenie zajmują się zapewnianiem klasy dodatkowych właściwości lub zachowania. Dziedziczenie to zdolność klasy do dziedziczenia właściwości i zachowania od klasy nadrzędnej poprzez jej rozszerzenie. Z drugiej strony Composition to zdolność klasy do przechowywania obiektów różnych klas jako danych członka.
Co to jest dziedziczenie?
Jak wspomniano powyżej, dziedziczenie to zdolność klasy do dziedziczenia właściwości i zachowania od klasy nadrzędnej poprzez rozszerzenie jej. Dziedziczenie zasadniczo zapewnia ponowne użycie kodu, umożliwiając rozszerzenie właściwości i zachowania istniejącej klasy o nowo zdefiniowaną klasę. Jeśli klasa A rozszerza B, to 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 i metody nadklasy (B). Podklasa może opcjonalnie zastąpić (zapewnić nową lub rozszerzoną funkcjonalność 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 ze świata rzeczywistego, ale A określa pewną specjalizację. W prawdziwym problemie programistycznym klasa Person może zostać rozszerzona w celu utworzenia klasy Employee. Nazywa się to specjalizacją. Ale możesz również najpierw utworzyć klasę Pracownik, a następnie uogólnić ją również na klasę Osoba (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 zawierać dodatkowe funkcje (więc osoba nie jest pracownikiem).
Co to jest kompozycja?
Kompozycja to zdolność klasy do przechowywania obiektów różnych klas jako danych członka. Na przykład klasa A może zawierać obiekt klasy B jako element członkowski. Tutaj wszystkie metody publiczne (lub funkcje) zdefiniowane w B mogą być wykonywane w klasie A. Klasa A staje się kontenerem, podczas gdy klasa B staje się klasą zawartą. Skład określany jest również 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 zmieniać ani zapewniać dodatkowej funkcjonalności. Jeśli chodzi o problem z programowaniem w świecie rzeczywistym, obiekt klasy TextBox może być zawarty w formularzu klasy, a zatem można powiedzieć, że formularz zawiera obiekt TextBox (lub, alternatywnie, formularz składa się z obiektu TextBox).
Jaka jest różnica między Dziedziczeniem a Kompozycją?
Chociaż Dziedziczenie i Kompozycja są dwiema koncepcjami OOP, różnią się znacznie tym, na co pozwalają programiście. Dziedziczenie to zdolność klasy do dziedziczenia właściwości i zachowania od klasy nadrzędnej poprzez rozszerzenie jej, podczas gdy Kompozycja to zdolność klasy do przechowywania obiektów różnych klas jako danych elementu. Jeśli klasa jest rozszerzona, dziedziczy wszystkie publiczne i chronione właściwości / zachowanie, a te zachowania mogą zostać zastąpione przez podklasę. Ale jeśli klasa jest zawarta w innej, kontener nie ma możliwości zmiany lub dodania zachowania do zawartej. Dziedziczenie reprezentuje relację „jest-a” w OOP, podczas gdy Kompozycja reprezentuje relację „ma-a”.