Dziedziczenie (informatyka): Różnice pomiędzy wersjami

Z Encyklopedia Zarządzania
m (Czyszczenie tekstu)
m (cleanup bibliografii i rotten links)
 
(Nie pokazano 4 wersji utworzonych przez 2 użytkowników)
Linia 1: Linia 1:
{{infobox4
'''Dziedziczenie (ang. inheritance)''' jest jedną z najważniejszych części [[Programowanie obiektowe|języków programowania zorientowanych obiektowo]]. Umożliwia ono kreowanie nowych klas, które opierają się na klasach już istniejących. Nowo utworzona klasa otrzymuje od klasy bazowej zmienne oraz metody a także rozszerza swoje możliwości poprzez dodanie własnych pól i metod<ref>Horstmann Cay S., Cornell Gary, [[Java]]. Podstawy, wydanie VIII, Helion, Gliwice 2008, s. 201</ref>
|list1=
<ul>
<li>[[Baza NoSQL]]</li>
<li>[[HTML]]</li>
<li>[[Open Source]]</li>
<li>[[SQL]]</li>
<li>[[Wykres kołowy]]</li>
<li>[[Wzorce projektowe]]</li>
<li>[[CAD]]</li>
<li>[[Analiza skupień]]</li>
<li>[[Topologia sieci]]</li>
</ul>
}}


'''Dziedziczenie (ang. inheritance)''' jest jedną z najważniejszych części [[Programowanie obiektowe|języków programowania zorientowanych obiektowo]]. Umożliwia ono kreowanie nowych klas, które opierają się na klasach już istniejących. Nowo utworzona klasa otrzymuje od klasy bazowej zmienne oraz metody a także rozszerza swoje możliwości poprzez dodanie własnych pól i metod.<ref>Horstmann Cay S., Cornell Gary, [[Java]]. Podstawy, wydanie VIII, Helion, Gliwice 2008, str. 201</ref>
Ciekawostką dla początkowych programistów jest fakt, iż dziedziczenie wykorzystywane jest zawsze wtedy gdy tworzymy nową klasę. Jeśli bowiem nie dziedziczymy bezpośrednio z innej klasy to robimy to automatycznie - z klasy bazowej Object<ref>Eckel Bruce, Thinking in Java, wydanie IV, Helion, Gliwice 2006, s. 212-214</ref>
 
Ciekawostką dla początkowych programistów jest fakt, iż dziedziczenie wykorzystywane jest zawsze wtedy gdy tworzymy nową klasę. Jeśli bowiem nie dziedziczymy bezpośrednio z innej klasy to robimy to automatycznie - z klasy bazowej Object.<ref>Eckel Bruce, Thinking in Java, wydanie IV, Helion, Gliwice 2006, str. 212-214</ref>


==Składnia dziedziczenia (Java)==
==Składnia dziedziczenia (Java)==
Aby uruchomić mechanizm dziedziczenia w języku [[Java]] tworząc nową klasę po słowie ''class'' oraz nazwie klasy musimy zawrzeć słowo kluczowe ''extends'' (rozszerza). Po nim należy umieścić nazwę klasy bazowej. Po wykonaniu powyższych czynności nowa klasa otrzymuje zmienne oraz metody klasy macierzystej.<ref>jw., str. 212-214</ref>
Aby uruchomić mechanizm dziedziczenia w języku [[Java]] tworząc nową klasę po słowie ''class'' oraz nazwie klasy musimy zawrzeć słowo kluczowe ''extends'' (rozszerza). Po nim należy umieścić nazwę klasy bazowej. Po wykonaniu powyższych czynności nowa klasa otrzymuje zmienne oraz metody klasy macierzystej<ref>jw., s. 212-214</ref>


Przykład:
Przykład:
Linia 28: Linia 13:
::...
::...
:}
:}
<google>ban728t</google>


==Modyfikatory dostępu==
==Modyfikatory dostępu==
Linia 34: Linia 18:
:* public - dostęp do elementu poprzedzonego modyfikatorem public pozwala na swobodne korzystanie z danego składnika zarówno z wnętrza jak i spoza klasy, w której jest zawarty
:* public - dostęp do elementu poprzedzonego modyfikatorem public pozwala na swobodne korzystanie z danego składnika zarówno z wnętrza jak i spoza klasy, w której jest zawarty
:* private - dostęp do elementu składowego klasy oznaczonego jako private możliwy jest jedynie z wnętrza metod tej klasy
:* private - dostęp do elementu składowego klasy oznaczonego jako private możliwy jest jedynie z wnętrza metod tej klasy
:* protected - dostęp do składnika możliwy jest jedynie z klas dziedziczących oraz klas zawartych w tym samym pakiecie<ref>jw., str. 196-202</ref>
:* protected - dostęp do składnika możliwy jest jedynie z klas dziedziczących oraz klas zawartych w tym samym pakiecie<ref>jw., s. 196-202</ref>
 
<google>n</google>


==Rodzaje klas==
==Rodzaje klas==
Linia 41: Linia 27:
Należy zwrócić uwagę na występującą zależność pomiędzy nadklasą i podklasą - trzeba bowiem pamiętać, że podklasa ma większą funkcjonalność niż nadklasa choć z językowego punktu widzenia wydaje się to dziwne. Dzieje się tak ponieważ klasa pochodna posiada wszystkie możliwości klasy bazowej oraz dokłada swoje, nowe zachowania.
Należy zwrócić uwagę na występującą zależność pomiędzy nadklasą i podklasą - trzeba bowiem pamiętać, że podklasa ma większą funkcjonalność niż nadklasa choć z językowego punktu widzenia wydaje się to dziwne. Dzieje się tak ponieważ klasa pochodna posiada wszystkie możliwości klasy bazowej oraz dokłada swoje, nowe zachowania.


Choć język [[Java]] nie pozwala na dziedziczenie wielokrotne to dotyczy ono wielu poziomów klas. Dla przykładu: mając klasę bazową [[Pracownik]] to jej rozszerzeniem może być klasa [[Menedżer]], a jej z kolei - klasa [[Dyrektor]]. Utworzona w tej sposób struktura nosi nazwę hierarchii dziedziczenia (ang. inheritance hierarchy).<ref>Horstmann Cay S., Cornell Gary, Java. Podstawy, str. 202-208</ref>
Choć język [[Java]] nie pozwala na dziedziczenie wielokrotne to dotyczy ono wielu poziomów klas. Dla przykładu: mając klasę bazową [[Pracownik]] to jej rozszerzeniem może być klasa [[Menedżer]], a jej z kolei - klasa [[Dyrektor]]. Utworzona w tej sposób struktura nosi nazwę hierarchii dziedziczenia (ang. inheritance hierarchy).<ref>Horstmann Cay S., Cornell Gary, Java. Podstawy, s. 202-208</ref>


==Wyłączanie dziedziczenia==
==Wyłączanie dziedziczenia==
Język [[Java]] dysponuje mechanizmem, za pomocą którego można zablokować wykorzystanie dziedziczenia. Jeśli z jakiś powodów programista nie chce aby tworzenie klas pochodnych było możliwe to musi skorzystać ze słowa kluczowego final. Klasy finalne to klasy, których nie można rozszerzyć. Należy pamiętać, iż wszystkie metody w klasy finalnej są finalne. Finalna może być również [[zmienna]] bądź [[metoda]] zawarta w klasie.<ref>jw., str. 213-214</ref>
Język [[Java]] dysponuje mechanizmem, za pomocą którego można zablokować wykorzystanie dziedziczenia. Jeśli z jakiś powodów programista nie chce aby tworzenie klas pochodnych było możliwe to musi skorzystać ze słowa kluczowego final. Klasy finalne to klasy, których nie można rozszerzyć. Należy pamiętać, iż wszystkie metody w klasy finalnej są finalne. Finalna może być również [[zmienna]] bądź [[metoda]] zawarta w klasie<ref>jw., s. 213-214</ref>
 
{{infobox5|list1={{i5link|a=[[Baza NoSQL]]}} &mdash; {{i5link|a=[[HTML]]}} &mdash; {{i5link|a=[[Open Source]]}} &mdash; {{i5link|a=[[SQL]]}} &mdash; {{i5link|a=[[Wykres kołowy]]}} &mdash; {{i5link|a=[[Wzorce projektowe]]}} &mdash; {{i5link|a=[[CAD]]}} &mdash; {{i5link|a=[[Analiza skupień]]}} &mdash; {{i5link|a=[[Topologia sieci]]}} }}


==Przypisy==
==Przypisy==
Linia 51: Linia 39:
==Bibliografia==
==Bibliografia==
<noautolinks>
<noautolinks>
* Eckel Bruce, Thinking in Java, wydanie IV, Helion, Gliwice 2006
* Eckel B. (2006), ''Thinking in Java'', Wydawnictwo Helion, Gliwice
* Horstmann Cay S., Cornell Gary, Java. Podstawy, wydanie VIII, Helion, Gliwice 2008
* Horstmann C., Cornell G. (2008), ''Java. Podstawy'', Helion, Gliwice
</noautolinks>
</noautolinks>



Aktualna wersja na dzień 22:33, 4 gru 2023

Dziedziczenie (ang. inheritance) jest jedną z najważniejszych części języków programowania zorientowanych obiektowo. Umożliwia ono kreowanie nowych klas, które opierają się na klasach już istniejących. Nowo utworzona klasa otrzymuje od klasy bazowej zmienne oraz metody a także rozszerza swoje możliwości poprzez dodanie własnych pól i metod[1]

Ciekawostką dla początkowych programistów jest fakt, iż dziedziczenie wykorzystywane jest zawsze wtedy gdy tworzymy nową klasę. Jeśli bowiem nie dziedziczymy bezpośrednio z innej klasy to robimy to automatycznie - z klasy bazowej Object[2]

Składnia dziedziczenia (Java)

Aby uruchomić mechanizm dziedziczenia w języku Java tworząc nową klasę po słowie class oraz nazwie klasy musimy zawrzeć słowo kluczowe extends (rozszerza). Po nim należy umieścić nazwę klasy bazowej. Po wykonaniu powyższych czynności nowa klasa otrzymuje zmienne oraz metody klasy macierzystej[3]

Przykład:

public class Example extends BasicClass {
...
ciało klasy
...
}

Modyfikatory dostępu

W niektórych językach programowania dostępne są możliwości ograniczające widoczność elementów dziedziczonych w ramach klasy pochodnej. Wyróżnia się trzy typy modyfikatorów:

  • public - dostęp do elementu poprzedzonego modyfikatorem public pozwala na swobodne korzystanie z danego składnika zarówno z wnętrza jak i spoza klasy, w której jest zawarty
  • private - dostęp do elementu składowego klasy oznaczonego jako private możliwy jest jedynie z wnętrza metod tej klasy
  • protected - dostęp do składnika możliwy jest jedynie z klas dziedziczących oraz klas zawartych w tym samym pakiecie[4]

Rodzaje klas

Klasa już istniejąca, z której dziedziczymy za pomocą słowa kluczowego extends nazywana jest na trzy sposoby: nadklasą, klasą macierzystą bądź też klasą bazową. W przypadku nowopowstałych klas możemy się spotkać z terminami: klasa pochodna, klasa potomna oraz podklasa.

Należy zwrócić uwagę na występującą zależność pomiędzy nadklasą i podklasą - trzeba bowiem pamiętać, że podklasa ma większą funkcjonalność niż nadklasa choć z językowego punktu widzenia wydaje się to dziwne. Dzieje się tak ponieważ klasa pochodna posiada wszystkie możliwości klasy bazowej oraz dokłada swoje, nowe zachowania.

Choć język Java nie pozwala na dziedziczenie wielokrotne to dotyczy ono wielu poziomów klas. Dla przykładu: mając klasę bazową Pracownik to jej rozszerzeniem może być klasa Menedżer, a jej z kolei - klasa Dyrektor. Utworzona w tej sposób struktura nosi nazwę hierarchii dziedziczenia (ang. inheritance hierarchy).[5]

Wyłączanie dziedziczenia

Język Java dysponuje mechanizmem, za pomocą którego można zablokować wykorzystanie dziedziczenia. Jeśli z jakiś powodów programista nie chce aby tworzenie klas pochodnych było możliwe to musi skorzystać ze słowa kluczowego final. Klasy finalne to klasy, których nie można rozszerzyć. Należy pamiętać, iż wszystkie metody w klasy finalnej są finalne. Finalna może być również zmienna bądź metoda zawarta w klasie[6]


Dziedziczenie (informatyka)artykuły polecane
Baza NoSQLHTMLOpen SourceSQLWykres kołowyWzorce projektoweCADAnaliza skupieńTopologia sieci

Przypisy

  1. Horstmann Cay S., Cornell Gary, Java. Podstawy, wydanie VIII, Helion, Gliwice 2008, s. 201
  2. Eckel Bruce, Thinking in Java, wydanie IV, Helion, Gliwice 2006, s. 212-214
  3. jw., s. 212-214
  4. jw., s. 196-202
  5. Horstmann Cay S., Cornell Gary, Java. Podstawy, s. 202-208
  6. jw., s. 213-214

Bibliografia

  • Eckel B. (2006), Thinking in Java, Wydawnictwo Helion, Gliwice
  • Horstmann C., Cornell G. (2008), Java. Podstawy, Helion, Gliwice


Autor: Karol Surówka