Języki programowania z programowaniem obiektowym

Transkrypt

Języki programowania z programowaniem obiektowym
Instytut Mechaniki i Inżynierii Obliczeniowej
www.imio.polsl.pl
fb.com/imiopolsl
@imiopolsl
Wydział Mechaniczny Technologiczny
Politechnika Śląska
Języki programowania
z programowaniem obiektowym
Laboratorium 14:
Dziedziczenie
Opracowali:
dr hab. inż. Witold Beluch
[email protected]
dr inż. Jacek Ptaszny
[email protected]
Gliwice 2016
Języki programowania z programowaniem obiektowym. Laboratorium 14
1
1. Wprowadzenie
Dziedziczenie to technika obiektowa, pozwalająca tworzyć nowe klasy na podstawie już istniejących klas.
Jak pisze J. Grębosz w książce „Symfonia C++ standard”: „Dziedziczenie jest jedną z najwspanialszych cech
obiektowo orientowanych języków programowania”.
Zalety takiego podejścia to:
1. Oszczędność czasu:
Załóżmy, że istnieje jakaś klasa, która „nie spełnia wszystkich oczekiwań”. Można ją poprzez dziedziczenie
dopasować do naszych potrzeb tworząc na jej bazie tzw. klasę pochodną. Np. mając klasę Telewizor_LCD
można na jej podstawie stworzyć klasę Telewizor_LCD_3D.
Nie musimy znać kodu źródłowego klasy podstawowej (a tylko jej definicję w pliku .h) – możemy
zatem korzystać z klas napisanych przez kogoś innego...
2. Stworzenie hierarchii klas:
Często klasy są w pewnej logicznej zależności i tworzą „naturalną” hierarchię, np.:
Zamiast osobnych klas mamy zatem sytuację: jakaś klasa jest szczególnym rodzajem innej klasy, np. Laptop
i Stacjonarny są rodzajami czegoś takiego, jak Komputer.
2. Dziedziczenie
Dziedziczenie pozwala na wykorzystanie tego, co istniejąca klasa już posiada i dostosowanie jej do innych
potrzeb poprzez:
- dodanie nowych danych składowych i funkcji składowych;
- stworzenie nowych wariantów funkcji składowych lub ew. danych składowych.
Np.: mając klasę Pralka:
moglibyśmy chcieć stworzyć (postęp techniczny!) klasę Lepsza_Pralka, która posiada nową daną składową
(dla uproszczenia np. tylko godzina):
oraz zmodyfikowaną funkcję składową:
Języki programowania z programowaniem obiektowym. Laboratorium 14
2
Przykładowa realizacja może wyglądać następująco:
Wyjaśnienia:
— Klasa Pralka jest w tym przypadku klasą podstawową dla klasy Lepsza_Pralka (Lepsza_Pralka jest w
tym przypadku klasą pochodną klasy Pralka).
— Nowa wersja funkcji składowej pranie „zastępuje” (zasłania) wersję funkcji pranie z klasy podstawowej.
— Wyrażenie po dwukropku to lista pochodzenia.
— Specyfikator public przy liście pochodzenia – o tym nieco później...
Stwórzmy obiekt moja_nowa_pralka klasy Lepsza_Pralka:
Wywołanie funkcji pranie dla obiektu klasy Lepsza_Pralka uruchamia funkcję klasy pochodnej:
Jeśli chcemy wywołać funkcję pranie z klasy podstawowej, to należy skorzystać z kwalifikatora zakresu ::
2.1. Konstruktory
Kolejność uruchamiania konstruktorów w przypadku dziedziczenia jest następująca:
— najpierw uruchamiany jest konstruktor klasy podstawowej (starsi mają pierwszeństwo...);
— w następnej kolejności wykonywane są konstruktory obiektów składowych klasy pochodnej (jeśli występują
składowe obiekty innych klas);
— dopiero na końcu uruchamiany jest konstruktor klasy pochodnej.
Konstruktor klasy pochodnej jest zwykłym konstruktorem, przy czym na jego liście inicjalizacyjnej można
(a często trzeba!) umieścić wywołanie konstruktora klasy podstawowej.
Wywołanie takie można pominąć, jeśli:
1. klasa podstawowa nie ma żadnego konstruktora (więc nie ma czego wywołać...);
2. klasa podstawowa ma konstruktory a wśród nich jest konstruktor domyślny.
2.2. Dostęp do składników w warunkach dziedziczenia
To, które dane i funkcje składowe klasy podstawowej będą dostępne i dla kogo określają stosowne etykiety.
Dotychczas określając dostęp do danych składowych i funkcji składowych klasy korzystaliśmy z etykiet private
oraz public. Oprócz tego istnieje etykieta protected.
Składniki za taką etykietą są dostępne dla klas pochodnych (jak gdyby były public) a dla „całego świata”
są niedostępne (jak gdyby były private).
O dostępie do odziedziczonych składników decyduje też (w zakresie ograniczonym do składników
public i protected – do danych prywatnych oczywiście nie ma dostępu!) klasa pochodna. Np.: w klasie
Lepsza_Pralka jest to słowo public przed nazwą klasy podstawowej, co oznacza, że w tym przypadku nic
się nie zmieni:
— składniki public z klasy podstawowej będą nadal public;
— składniki protected z klasy podstawowej będą nadal protected.
Języki programowania z programowaniem obiektowym. Laboratorium 14
3
Jak to wygląda w innych przypadkach możesz znaleźć np. w wykładach do niniejszego przedmiotu. W ramach naszych rozważań ograniczymy się do wariantu public.
Przykład:
Czy
wiesz,
że...
INTEGRATOR (eintegrator.com.pl) wspomaga zatrudnianie studentów i absolwentów zwłaszcza kierunków
technicznych a także wymianę informacji dotyczących
bieżącej działalności kół naukowych, organizacji studenckich i innych jednostek akademickich z przedsiębiorstwami specjalistycznymi powiązanymi branżowo celem
nawiązania współpracy.

Podobne dokumenty