Przejdź do głównej treści

Kwalifikacja: INF.03 - Tworzenie i administrowanie stronami i aplikacjami internetowymi oraz bazami danych

Zawód: Technik informatyk, Technik programista

Kategorie: Programowanie webowe Algorytmy i podstawy informatyki JavaScript

Słowa kluczowe: Hermetyzacja Klasa Modyfikatory dostępu

Dziedziczenie to zasada programowania obiektowego mówiąca o tym, że

A. funkcja może wywoływać samą siebie.
B. pola i metody wykorzystywane tylko przez daną klasę/obiekt są ograniczane zasięgiem private lub protected.
C. klasa pochodna przejmuje pola i metody klasy bazowej i może je rozszerzać.
D. typy pól mogą zmieniać się dynamicznie w zależności od przypisywanych danych.
Dziedziczenie w programowaniu obiektowym oznacza, że klasa pochodna, nazywana też podklasą, przejmuje pola i metody klasy bazowej, czyli nadklasy, a potem może je doprecyzować albo rozszerzyć. To jest właśnie sens odpowiedzi o przejmowaniu pól i metod. W praktyce dzięki temu nie trzeba pisać drugi raz tego samego kodu. Jeśli mamy klasę Uzytkownik z polami login, email i metodą zaloguj(), to klasa Administrator może dziedziczyć po Uzytkownik i dodać np. metodę usunKonto(). Kod jest krótszy, spójniejszy i łatwiejszy w utrzymaniu.

Moim zdaniem najważniejsze jest tu rozumienie relacji typu jest rodzajem. Administrator jest rodzajem użytkownika, więc dziedziczenie ma sens. Dobre praktyki branżowe mówią jednak, żeby nie nadużywać dziedziczenia. Lepiej stosować je wtedy, gdy faktycznie istnieje logiczna relacja między klasami, a nie tylko dlatego, że chcemy szybko skopiować kilka metod. W wielu językach, np. PHP, JavaScript, Java czy C#, dziedziczenie pozwala też na nadpisywanie metod, czyli zmianę zachowania odziedziczonej funkcjonalności w klasie pochodnej. To jest podstawa polimorfizmu, bardzo ważnej zasady OOP.
W tym pytaniu łatwo pomylić kilka różnych pojęć z programowania, bo wszystkie brzmią dość technicznie i faktycznie mogą występować w klasach albo obiektach. Ograniczanie dostępu do pól i metod za pomocą private lub protected nie jest dziedziczeniem, tylko hermetyzacją, czasem mówi się też enkapsulacją. Chodzi tam o ukrywanie szczegółów implementacji i kontrolowanie, kto może korzystać z danego elementu klasy. Private zwykle oznacza dostęp tylko wewnątrz tej samej klasy, a protected pozwala korzystać także klasom pochodnym. To jest związane z dziedziczeniem, ale nie jest jego definicją.

Wywoływanie funkcji przez samą siebie to rekurencja. Stosuje się ją np. przy przechodzeniu po drzewach katalogów, strukturach DOM albo przy klasycznych zadaniach algorytmicznych. Rekurencja dotyczy sposobu działania funkcji, a nie relacji między klasami. Z mojego doświadczenia uczniowie często mylą ją z obiektowością, bo oba tematy pojawiają się przy funkcjach i metodach, ale to zupełnie inny mechanizm.

Zmiana typu pól zależnie od przypisywanych danych kojarzy się raczej z dynamicznym typowaniem, np. w JavaScript albo PHP. Zmienna może raz przechowywać liczbę, potem tekst, jeśli język na to pozwala. Dziedziczenie nie polega jednak na zmianie typu danych, tylko na budowaniu hierarchii klas. Klasa pochodna dostaje zachowanie klasy bazowej i może dodać własne elementy albo nadpisać istniejące metody. W dobrym projekcie OOP dziedziczenie służy do modelowania zależności w domenie problemu, a nie do przypadkowego współdzielenia kodu, bo wtedy szybko robi się bałagan.

Wymagane logowanie

Ocenianie trudności pytań jest dostępne tylko dla zalogowanych użytkowników. Zaloguj się, aby skorzystać z pełni możliwości platformy.

Twoja ocena pomoże innym uczniom w przygotowaniu do egzaminu, a Tobie pozwoli na dostęp do spersonalizowanych statystyk.

Zgłoś błąd w pytaniu

Rozwiń sekcję i zmień pole, którego dotyczy błąd. Wysłane zostaną tylko zmienione sekcje.

Błędna kwalifikacja
Błąd w treści pytania
Błąd w treści odpowiedzi
Błąd w obrazie
Dane kontaktowe (opcjonalnie)
Podaj email, jeśli chcesz otrzymać informację o rozpatrzeniu zgłoszenia.