Mechanizm dziedziczenia

Podobne dokumenty
Mechanizm dziedziczenia

> C++ dziedziczenie. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki

Dziedziczenie i interfejsy

TEMAT : KLASY DZIEDZICZENIE

Technologie i usługi internetowe cz. 2

Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni. Wykład 4. Karol Tarnowski A-1 p.

Język C++ wykład VI. uzupełnienie notatek: dr Jerzy Białkowski. Programowanie C/C++ Język C++ wykład VI. dr Jarosław Mederski.

Wprowadzenie do programowanie obiektowego w języku C++

dr inż. Jarosław Forenc

Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r.

Programowanie w C++ Wykład 13. Katarzyna Grzelak. 4 czerwca K.Grzelak (Wykład 13) Programowanie w C++ 1 / 26

2.4 Dziedziczenie. 2.4 Dziedziczenie Przykłady programowania w C - kurs podstawowy

Wprowadzenie do programowanie obiektowego w języku C++

Dziedziczenie. Ogólna postać dziedziczenia klas:

Programowanie obiektowe w języku

TEMAT : KLASY POLIMORFIZM

Dziedziczenie. Zadanie 1

Zadania z podstaw programowania obiektowego

wykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp

Programowanie obiektowe Wykład 6. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Dziedziczenie. dr Jarosław Skaruz

Wstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this

1 Dziedziczenie. 1.1 Koncepcja dziedziczenia. Ćwiczenie 3

Informatyka II Laboratorium 3 : Programowania obiektowe C++ - dziedziczenie

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 4. Karol Tarnowski A-1 p.

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Wykład V. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Język C++ wykład VII. uzupełnienie notatek: dr Jerzy Białkowski. Programowanie C/C++ Język C++ wykład VII. dr Jarosław Mederski. Spis.

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Dokumentacja do API Javy.

Aplikacje w środowisku Java

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

Wprowadzenie w dziedziczenie. Klasa D dziedziczy klasę B: Klasa B klasa bazowa (base class), klasa D klasa pochodna (derived class).

Podstawy Języka Java

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 20 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 32

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie C++ - DZIEDZICZENIE.

Programowanie obiektowe

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

PROGRAMOWANIE OBIEKTOWE W C++ cz. 2. Dziedziczenie, operacje wej cia-wyj cia, przeładowanie operatorów.

Informatyka I. Dziedziczenie. Nadpisanie metod. Klasy abstrakcyjne. Wskaźnik this. Metody i pola statyczne. dr inż. Andrzej Czerepicki

Programowanie II. Lista 3. Modyfikatory dostępu plik TKLientBanku.h

Języki Programowania. Prowadząca: dr inż. Hanna Zbroszczyk. tel: Konsultacje: piątek:

Zaawansowane programowanie w języku C++ Programowanie obiektowe

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM

Laboratorium 1 - Programowanie proceduralne i obiektowe

Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np

Zajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Podstawy Programowania Obiektowego

Programowanie obiektowe, wykład nr 6. Klasy i obiekty

Programowanie komputerowe. Zajęcia 7

PARADYGMATY PROGRAMOWANIA Wykład 4

Wprowadzenie do obiektowości

Wstęp do Programowania 2

Programowanie w C++ Wykład 6. Katarzyna Grzelak. kwiecień K.Grzelak (Wykład 6) Programowanie w C++ 1 / 40

Wykład 5 Okna MDI i SDI, dziedziczenie

Języki i techniki programowania Ćwiczenia 3 Dziedziczenie

Polimorfizm. dr Jarosław Skaruz

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

Do czego służą klasy?

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Plik klasy. h deklaracje klas

Programowanie obiektowe

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

wykład V uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C++ klasy i obiekty wykład V dr Jarosław Mederski Spis Język C++ - klasy

Aplikacje w środowisku Java

Dziedziczenie & W slajdach są materiały zapożyczone z

Programowanie obiektowe Wykład 7. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/20

Dziedziczenie jednobazowe, poliformizm

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Do czego służą klasy?

Programowanie w C++ Wykład 11. Katarzyna Grzelak. 13 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30

Materiały do zajęć VII

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Listy powiązane zorientowane obiektowo

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

P R O G R A M O W A N I E O B I E K T O W E A S P E K T Y I M P L E M E N TA C Y J N E

Dziedziczenie. Streszczenie Celem wykładu jest omówienie tematyki dziedziczenia klas. Czas wykładu 45 minut.

Programowanie obiektowe

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

KLASY cz.1. Dorota Pylak

Enkapsulacja, dziedziczenie, polimorfizm

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Technologie cyfrowe semestr letni 2018/2019

Programowanie obiektowe w języku C++ Zarządzanie procesami. dr inż. Jarosław Forenc. Przeładowanie (przeciążanie) operatorów

Podstawy programowania w języku C++ Zadania - dziedziczenie i polimorfizm

Technologie cyfrowe semestr letni 2018/2019

PARADYGMATY PROGRAMOWANIA Wykład 2

Pola i metody statyczne

Programowanie obiektowe

Polimorfizm w pigułce

Programowanie Obiektowe i C++

Programowanie 2. Język C++. Wykład Relacje między klasami, klasy zagnieŝdŝone, klasy lokalne

Typy zmiennych proste i złożone. Programowanie komputerów. Tablica. Złożone typy zmiennych. Klasa. Struktura

Transkrypt:

Mechanizm dziedziczenia

Programowanie obiektowe jako realizacja koncepcji ponownego wykorzystania kodu Jak przebiega proces dziedziczenia? Weryfikacja formalna poprawności dziedziczenia Realizacja dziedziczenia w C++ Pola statyczne i redefinicja metod Hierarchia wywoływania konstruktorów Dziedziczenie wielobazowe Dalsza część wywiadu z Runnerem

Destruktor specjalna funkcja, która wykonuje czynności dla obiektu, który ma zostać usunięty. W danej klasie może być zdefiniowany tylko jeden destruktor.

Wyróżnia się dwa sposoby ponownego wykorzystania klas: Kompozycję oznacza, że obiekt jest zawarty w innym obiekcie i jest reprezentowana przez relację całość-część. Przykładowo lampa zawiera żarówkę (i nie bardzo sobie można wyobrazić lampę bez żarówki) Dziedziczenie oznacza przejmowanie własności innego obiektu i poddanie ich wyspecjalizowaniu. Jest reprezentowane przez relację generalizacji-specjalizacji np. Paprotka jest specjalizacją Rośliny. Technika dziedziczenia umożliwia tworzenie nowych klas na bazie klas już istniejących. Klasa, która dziedziczy po innej klasie, przejmuje jej metody i pola, oraz najczęściej dodaje własne by dostosować ją do konkretnego zadania. Wyjątkiem są konstruktory i destruktory nie są dziedziczone. Klasę po której się dziedziczy określa się nadklasą, klasą bazową lub klasą macierzystą. Nowo utworzona klasa nazywa się podklasą, klasą pochodną lub klasą potomną.

Szescian.h Tutaj koniecznie lista inicjalizacyjna Szescian.cpp

Załóżmy, że programista pomylił się przy redefinicji metody obliczpole(): double Szescian::obliczPole() { return 6 * obliczpole(); } Błąd! Nie jest określone, że ma zostać wywołana funkcja obliczpole() z klasy Kwadrat. Co więc się stanie? Zostanie wywołana rekurencyjnie funkcja obliczpole() z klasy Szescian.

Zasady rządzące sekcją protected: Składowe zadeklarowane jako protected są dostępne dla obiektów wszystkich klas pochodnych (tak jak składowe public). Składowe zadeklarowane jako protected są niedostępne dla obiektów innych, niezaprzyjaźnionych klas (tak jak składowe private). Specyfikator protected działa jak private, z tym wyjątkiem, że obiekty klas pochodnych otrzymują dostęp do składowych protected klasy bazowej. Pola i funkcje zadeklarowane w sekcji protected nazywane są chronionymi. class Kwadrat {... protected: double dlboku; }; double Szescian::obliczObjetosc() { return Kwadrat::obliczPole() * dlboku; }

Dla obiektu stolik aktywowany jest konstruktor klasy OkraglyStol. Ponieważ klasa ta dziedziczy po dwóch klasach (Stol, Okrag), na liście inicjalizacyjnej tego konstruktora umieszczone są odwołania do dwóch konstruktorów. W trakcie przetwarzania listy inicjalizacyjnej następuje aktywowanie obu tych konstruktorów. Kolejność aktywowania konstruktorów dla obiektu klasy pochodnej wynika z kolejności występowania nazw klas bazowych w deklaracji tej klasy. Nie jest istotna kolejność ich umieszczenia na liście inicjalizacyjnej konstruktora klasy pochodnej.

Proszę pobrać projekt pod adresem: http://www.tomaszx.pl/materialy/jpohierarchiaklas.zip oraz zapoznać się z jego zawartością. Następnie proszę odpowiedzieć na następujące pytania: Jaka jest kolejność aktywacji konstruktorów i destruktorów, gdy obiekt tworzony jest jako Absolwent a;? Jaka jest kolejność aktywacji konstruktorów i destruktorów, gdy obiekt tworzony jest jako Absolwent a( 10 );? Proszę usunąć aktywację konstruktorów klas bazowych z listy inicjalizacyjnej konstruktorów klas pochodnych Absolwent i Student oraz sprawdzić jak sytuacji wygląda po rekompilacji programu.

1. Bazując na klasie Data (stworzonej wcześniej) zdefiniować z wykorzystaniem dziedziczenia klasę DataZKontrola w tej klasie należy dokonać redefinicji funkcji ustawiających wartości pól, tak by kontrolowały one poprawność wartości przekazywanych parametrów (roku, miesiąca, dnia). 2. Bazując na klasie Punkt (stworzonej wcześniej) oraz wykorzystując mechanizm dziedziczenia, zdefiniować klasę Punkt3D, reprezentującą punkt w przestrzeni trójwymiarowej. Klasa ta powinna posiadać dodatkowe pole z przechowujące współrzędną trzeciego wymiaru, odpowiednie funkcje dostępowe ustawz, pobierzz, własny konstruktor bezparametrowy i parametrowy.

3. Bazując na klasach opisu figur płaskich stworzonych wcześniej, zdefiniować ich klasy pochodne, reprezentujące bryły: sześcian, prostopadłościan, kula, graniastosłup o podstawie trapezu. W klasach pochodnych należy dodać wszelkie informacje konieczne dla obliczenia pól tych brył oraz należy przedefiniować funkcje składowe obliczania pola (funkcje obliczpole każdej z klas reprezentujących figurę płaską), tak by wyznaczały właściwe pola brył.

4. Poniżej podana została klasa Lista, która służy do przechowywania listy liczb całkowitych, uzupełnij metody tej klasy. class Lista { private: int liczby[100]; // tablicy na przechowywane liczby int pojemnosc; // liczba elementów, które można int rozmiar; public: Lista(); // pomieścić na liście // liczba elementów aktualnie // przechowywana na liście // dodaje nową liczbę do listy void dodaj(int liczba); // zwraca element listy znajdujący sie na podanym indeksie int dajelement(int indeks); // wyświetla aktualny rozmiar listy, tj. liczbę elementów int wezrozmiar(); };

4. c.d. Przykład użycia klasy lista: #include <iostream> #include <cstdlib> #include <ctime> #include "Lista.h" using namespace std; int main() { Lista l; srand(time(null)); for(int i = 0; i < 20; i++) l.dodaj( rand() % 100 ); cout << "Zawartosc listy: "; for(int i = 0; i < l.wezrozmiar(); i++) cout << l.dajelement(i) << " "; cout << endl; } return 0;

5. Zdefiniuj klasę Przedmiot reprezentującą przedmiot ćwiczeniowy studenta. Klasa powinna zawierać: pola prywatne: double oceny[]; // oceny studenta int nr_indeksu; // numer indeksu studenta int liczba_ocen; // liczba wprowadzonych ocen int limit_ocen; // maksymalna liczba ocen publiczny konstruktor z dwoma parametrami: int nr_indeksu, int limit_ocen metody publiczne: double obliczsrednia(); // oblicza średnią arytmetyczną ocen bool zaliczenie(); // określa, czy student otrzyma zaliczenie void dodajocene(double ocena); // dodaje nową ocenę void zmienocene(double ocena, int id); // zmienia ocenę void pisz(); // wypisuje na ekranie informację

5. Dodatkowe informacje: Funkcja obliczsrednia oblicza i zwraca średnią arytmetyczną wpisanych już ocen Funkcja zaliczenie ustala, czy student otrzyma zaliczenie (średnia wszystkich uzupełnionych ocen większa lub równa 3.0). Jeśli otrzyma, to zwraca true, w przeciwnym razie false Funkcja dodajocene dodaje nową ocenę (jeśli jest to możliwe nie przekroczy limitu) Funkcja zmienocene zmienia ocenę na podanej pozycji (id liczonej od 0), ale tylko jeśli taka ocena istnieje; Funkcja pisz wyświetla na ekran studenta, wszystkie uzupełnione oceny i informację, czy aktualnie dostałby zaliczenie (tak lub nie).

Załóżmy, że chcemy stworzyć program zarządzający pracownikami firmy X. W programie należy zapamiętać nazwisko pracownika i numer pokoju w którym przebywa. Na podstawie numeru pokoju odpowiednia funkcja ma wyświetlić numer telefonu (np. pokój 201 telefon 8431201). Firma X zatrudnia różnych pracowników (każdy to osobna klasa): Pracownicy pracujący na akord. Pensja pracownika równa się liczbie przepracowanej godzin razy stawka godzinowa. Sprzedawcy. Wypłata równa się stałej pensji (wyliczanej jak dla pracowników na akord) + dodatek wyliczony jako procent zrealizowanej w danym miesiącu sprzedaży. Dyrektorzy. Wypłata równa się stałej pensji (ustalonej odgórnie) oraz premii uzależnionej od liczby podległych mu pracowników. Każdy pracownik to 100 zł więcej premii. Każda klasa (Pracownik, Sprzedawca, Dyrektor) musi dziedziczyć z ogólnej klasy Personel (zawierającej nazwisko, numer pokoju i funkcję wyznaczającą numer telefonu). Należy pamiętać o zachowaniu pełnej hermetyzacji.