Zpo-1-wyk-Slajd32: Różnice pomiędzy wersjami
Nie podano opisu zmian |
Nie podano opisu zmian |
||
Linia 4: | Linia 4: | ||
Porównanie kompozycji i dziedziczenia – relacji na pierwszy rzut oka nieporównywalnych – staje się uzasadnione, gdy | 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ę | 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
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.