Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Dziedziczenie Maciek Mięczakowski 132731.

Podobne prezentacje


Prezentacja na temat: "Dziedziczenie Maciek Mięczakowski 132731."— Zapis prezentacji:

1 Dziedziczenie Maciek Mięczakowski

2 Dziedziczenie Dziedziczenie to niezwykle istotny mechanizm programowania zorientowanego obiektowo. Dzięki niemu mamy możliwość wielokrotnego używania tego samego kodu. Klasa bazowa (nazywana również superklasą, nadklasą lub klasą-matką) definiuje szkielet konstrukcji rodziny klas. Klasy potomne dziedziczą wszystkie składowe (pola danych i metody) swej klasy bazowej. Dzięki dziedziczeniu można ograniczyć się do zdefiniowania dodatkowych pól i metod, unikając przy tym wielokrotnego powtarzania fragmentów kodu.

3 Klasy potomne W tej części zostaną przedstawione podstawy dziedziczenia, czyli budowanie nowych klas na bazie już istniejących. Każda taka klasa przyjmuje zachowanie i właściwości klasy bazowej. Zobaczymy, jak tworzy się klasy potomne, jakie podstawowe zależności występują miedzy klasą bazową, a potomną oraz jak zachowują się konstruktory w przypadku dziedziczenia.

4 Dziedziczenie Przykład:
Załóżmy, że mamy stworzoną klasę Punkt, która przechowuje informacje o współrzędnej punktu na płaszczyźnie i która posiada dodatkowe metody, które pozwalają na ustawienie i pobranie tych współrzędnych. Zastanówmy się teraz co byśmy zrobili, gdybyśmy potrzebowali określać położenie punktu nie w dwóch, ale w trzech wymiarach, czyli do współrzędnych x i y trzeba było dodać współrzędną z.

5 Dziedziczenie Pomysł który się od razu nasuwa, jest napisanie dodatkowej klasy, np. o nazwie Punkt3D, w postaci: class Punkt3D { int x; int y; int z; } Do tej klasy należałoby dalej dopisać zestaw metod, które znajdowały się w klasie Punkt, takich jak pobierzX, pobierzyY, ustawX, ustawY itd. Oraz dodatkowe metody operujące na współrzędnej z.

6 Dziedziczenie Aby się nie powtarzać w już raz napisanym kodzie należy zastosować dziedziczenie. Ponieważ klasa Punkt3D jest pewnego rodzaju rozszerzeniem klasy Punkt. Rozszerza je o dodatkowe możliwości (pola, metody) pozostawiając stare właściwości bez zmian. Zamiast więc pisać całkiem od nowa klasę Punkt3D lepiej spowodować, aby przejęła ona wszystkie możliwości klasy Punkt, wprowadzając dodatkowo swoje własne pola i metody. Powiemy wówczas, że klasa Punkt3D dziedziczy z klasy Punkt, czyli przejmuje jej pola i metody oraz dodaje swoje własne.

7 Dziedziczenie W Javie dziedziczenie jest wyrażone za pomocą słowa extends, a cała definicja schematycznie wygląda następująco: class klasa_potomna extends klasa_bazowa { //ciało klasy } Zapis taki oznacza, że klasa potomna dziedziczy z klasy bazowej. //Listing Punkt

8 Konstruktory klasy bazowej i potomnej
Klasa Punkt3D posiada już metody operujące na polu z, tzn. ustawiające oraz pobierające jego wartość, brakuje jej jednak konstruktorów. Przypomnijmy, że w klasie Punkt napisaliśmy aż trzy konstruktory: Bezparametrowy, ustawiający wartość wsystkich pól na 1 Dwuparametrowy, przyjmujący dwie wartości typu int Jednoparametrowy, przyjmujący obiekt klasy Punkt

9 Konstruktory klasy bazowej i potomnej
Lepiej wykorzystać konstruktor klasy Punkt w klasie Punkt3D lub ogólniej konstruktor klasy bazowej w konstruktorze klasy potomnej. Do tego celu służy specjalna konstrukcja. Dokładniej w konstruktorze klasy potomnej należy wywołać metodę super() class klasa_potomna extends klasa_bazowa { klasa potomna() super(); //ciąg dalszy konstruktora }

10 Konstruktory klasy bazowej i potomnej
Jeśli metodzie super przekażemy parametry, zostanie wywołany konstruktor klasy bazowej, który tym parametrom odpowiada. Do praktycznego zobrazowania takiej konstrukcji doskonale nadaje się klasa Punkt3D.

11 Specyfikatory dostępu i pakiety
Specyfikatory dostępu pełnią ważna rolę w Javie, pozwalają bowiem na określenie swoistego rodzaju praw dostępu do składowych klas, a także do samych klas. W Javie przed każdym polem i metodą może, a czasami nawet powinien, pojawić się tak zwany specyfikator dostępu. Dostęp do każdego pola i każdej metody może być: publiczny, prywatny, chroniony, pakietowy.

12 Publiczne, prywatne czy chronione?
Domyślnie, jeżeli przed składową klasy nie występuje żadne określenie, dostęp jest pakietowy, co oznacza, że dostęp do tej składowej mają wszystkie klasy pakietu, w którym się one znajdują. Dostęp publiczny jest określony słowem public, dostęp prywatny słowem private, a dostęp chroniony słowem protected. Specyfikator dostępu należy umieścić przed nazwą typu: Specyfikator_dostępu nazwa_typu nazwa_zmiennej;

13 Dostęp prywatny - private
Składowe oznaczone słowem private to takie, które są dostępne jedynie z wnętrza danej klasy. To oznacza, że wszystkie metody danej klasy mogą je dowolnie odczytywać i zapisywać, natomiast żadna inna klasa nie może ani ich odczytać, ani zapisać. Dla innych klas są po prostu niewidoczne. Należy pamiętać że składowe prywatne nie będą dostępne nawet dla klas potomnych.

14 Dostęp chroniony - protected
Składowe klasy oznaczone słowem protected to składowe chronione. Są one dostępne jedynie dla metod danej klasy, klas potomnych oraz klas z tego samego pakietu. Oznacza to, że jeśli mamy przykładową klasę Punkt, w której znajdzie się chronione pole o nazwie x, to w klasie pochodnej Punkt3D, również będziemy mogli odwoływać się do pola x. Jednak dla każdej innej klasy, która nie dziedziczy z Punkt, pole x będzie niedostępne.

15 Czemu ukrywamy wnętrze klasy?
Zabraniamy bezpośredniego dostępu do niektórych składowych klas, stosując modyfikatory private i protected, aby ukryć implementacje wnętrza klasy. Programista, projektując daną klasę udostępnia na zewnątrz (innym programom) pewien interfejs służący do posługiwania się obiektami tejże klasy.

16 Czemu ukrywamy wnętrze klasy?
Czyli określa sposób, w jaki można korzystać z danego obiektu. To co znajduje się wewnątrz, jest ukryte, dzięki temu można całkowicie zmienić wewnętrzną konstrukcję klasy, nie zmieniając zupełnie sposobu korzystania z niej.


Pobierz ppt "Dziedziczenie Maciek Mięczakowski 132731."

Podobne prezentacje


Reklamy Google