Zpo-1-wyk-Slajd32: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Bwalter (dyskusja | edycje)
Nie podano opisu zmian
 
Bwalter (dyskusja | edycje)
Nie podano opisu zmian
 
Linia 4: Linia 4:




Porównanie kompozycji i dziedziczenia – relacji na pierwszy rzut oka nieporównywalnych – staje się uzasadnione, gdy znany jest sposób implementacji 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ć?
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.
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ę nad dziedziczenie.
Zatem zgodnie z ogólną zasadą (od której jednak istnieją wyjątki), należy preferować kompozycję od dziedziczenia.




[[zpo-1-wyk-Slajd31 | << Poprzedni slajd]] | [[zpo-1-wyk-toc|Spis treści ]] | [[zpo-1-wyk-Slajd33 | Następny slajd >>]]
[[zpo-1-wyk-Slajd31 | << Poprzedni slajd]] | [[zpo-1-wyk-toc|Spis treści ]] | [[zpo-1-wyk-Slajd33 | Następny slajd >>]]

Aktualna wersja na dzień 10:45, 17 paź 2006

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 >>