Zpo-1-wyk-Slajd32

From Studia Informatyczne

Dziedziczenie a kompozycja

Dziedziczenie a kompozycja


Porównanie kompozycji i dziedziczenia – relacji na pierwszy rzut oka nieporównywalnych – staje się uzasadnione, gdy poznamy fizyczny sposób implementacji relacji dziedziczenia. Utworzenie obiektu podklasy zawsze powoduje niejawne utworzenie instancji obiektu nadklasy (widać to m.in. w sposobie wywoływania konstruktorów nadklas) i zapamiętanie referencji do niej w zmiennej dostępnej pod nazwą super . Oznacza to, że kompozycja i dziedziczenie – mimo zupełnie innych zastosowań – są w praktyce implementowane w identyczny sposób. Którą z relacji zatem należy preferować?

Dziedziczenie jest relacją ustaloną w momencie kompilacji, która silnie wiąże ze sobą nadklasę i podklasę. Związek ten może nawet naruszać hermetyzację klas, ponieważ podklasa dziedziczy całe zachowanie nadklasy. Z kolei kompozycja może być modyfikowana w trakcie wykonywania programu, ponadto wiąże obiekty znacznie słabiej, poprzez typ.

Zatem zgodnie z ogólną zasadą (od której jednak istnieją wyjątki), należy preferować kompozycję od dziedziczenia.


<< Poprzedni slajd | Spis treści | Następny slajd >>