Dziedziczenie : Dziedziczenie to nic innego jak definiowanie nowych klas w oparciu o już istniejące.



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

Projektowanie i programowanie obiektowe (materiały do wykładu cz. VI)

GEO-SYSTEM Sp. z o.o. GEO-RCiWN Rejestr Cen i Wartości Nieruchomości Podręcznik dla uŝytkowników modułu wyszukiwania danych Warszawa 2007

Nowe funkcjonalności

0.1 Hierarchia klas Diagram Krótkie wyjaśnienie

I. Zakładanie nowego konta użytkownika.

Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych ul. Koszykowa 75, Warszawa

Kancelaris - Zmiany w wersji 2.50

Rozliczenia z NFZ. Ogólne założenia. Spis treści

Kompozycja i dziedziczenie klas

Przedmiot: Projektowanie dokumentów WWW. Laboratorium 3: Strona domowa cz. III Formularze. Opracował: Maciej Chyliński

REGULAMIN PRZEPROWADZANIA OCEN OKRESOWYCH PRACOWNIKÓW NIEBĘDĄCYCH NAUCZYCIELAMI AKADEMICKIMI SZKOŁY GŁÓWNEJ HANDLOWEJ W WARSZAWIE

Wartości domyślne, szablony funkcji i klas

PROCEDURA PRZEGLĄDU I MONITORINGU KODEKSU ETYCZNEGO PRACOWNIKÓW POWIATOWEGO CENTRUM POMOCY RODZINIE W KOŁOBRZEGU

Instrukcja obsługi platformy zakupowej e-osaa (klient podstawowy)

elektroniczna Platforma Usług Administracji Publicznej

Użytkowanie elektronicznego dziennika UONET PLUS.

Opis zmian funkcjonalności platformy E-GIODO wprowadzonych w związku z wprowadzeniem możliwości wysyłania wniosków bez podpisu elektronicznego

Jak usprawnić procesy controllingowe w Firmie? Jak nadać im szerszy kontekst? Nowe zastosowania naszych rozwiązań na przykładach.

Akademickie Centrum Informatyki PS. Wydział Informatyki PS

JAK INWESTOWAĆ W ROPĘ?

INSTRUKCJA DLA UCZESTNIKÓW ZAWODÓW ZADANIA

Instalacja. Zawartość. Wyszukiwarka. Instalacja Konfiguracja Uruchomienie i praca z raportem Metody wyszukiwania...

Zad.1 Pokazać pierwszeństwo trybu odmów przed zezwalaj.

Spis treści. Rozdział 1 ewyniki. mmedica - INSTR UKC JA UŻYTKO W NIKA

Regulamin Usługi Certyfikat SSL. 1 Postanowienia ogólne

Spring MVC Andrzej Klusiewicz 1/18

Praca na wielu bazach danych część 2. (Wersja 8.1)

1. PODMIOTEM ŚWIADCZĄCYM USŁUGI DROGĄ ELEKTRONICZNĄ JEST 1) SALESBEE TECHNOLOGIES SP. Z O.O. Z SIEDZIBĄ W KRAKOWIE, UL.

Paweł Selera, Prawo do odliczenia i zwrotu podatku naliczonego w VAT, Wolters Kluwer S.A., Warszawa 2014, ss. 372

Projektowanie bazy danych

REJESTRACJA NA LEKTORATY Z JĘZYKÓW OBCYCH

E-faktura PKP Energetyka

PERSON Kraków

INSTRUKCJA WebPTB 1.0

INSTRUKCJE DLA UśYTKOWNIKÓW STREFY KLIENTA NA PORTALU INTERNETOWYM

Konfiguracja historii plików

Regulamin serwisu internetowego ramowka.fm

Implant ślimakowy wszczepiany jest w ślimak ucha wewnętrznego (przeczytaj artykuł Budowa ucha

MANIFEST Gastro Klasyka

Niniejszy dokument obejmuje: 1. Szablon Umowy zintegrowanej o rachunek ilokata, 2. Szablon Umowy zintegrowanej o rachunek ilokata oraz o rachunek

Charakterystyka systemów plików

Posiadane punkty lojalnościowe można również wykorzystać na opłacenie kosztów przesyłki.

emszmal 3: Automatyczne księgowanie przelewów w sklepie internetowym Magento (plugin dostępny w wersji ecommerce)

SKRÓCONA INSTRUKCJA OBSŁUGI ELEKTRONICZNEGO BIURA OBSŁUGI UCZESTNIKA BADANIA BIEGŁOŚCI

Regulamin i cennik Promocji TV+INTERNET NA PRÓBĘ

Aktualizacja CSP do wersji v7.2. Sierpień 2014

Postanowienia ogólne. Usługodawcy oraz prawa do Witryn internetowych lub Aplikacji internetowych

Polityka prywatności i wykorzystywania plików cookies w serwisie internetowym mateuszgrzesiak.tv

Pracownia internetowa w każdej szkole (edycja Jesień 2007)

Ćwiczenia IV - Kontenery (pojemniki)

InsERT GT Własne COM 1.0

REGULAMIN PRZESYŁANIA I UDOSTĘPNIANIA FAKTUR W FORMIE ELEKTRONICZNEJ E-FAKTURA ROZDZIAŁ 1. I. Postanowienia ogólne

Archiwum Prac Dyplomowych

PK Panie i Panowie Dyrektorzy Izb Skarbowych Dyrektorzy Urzędów Kontroli Skarbowej wszyscy


REGULAMIN INTERNETOWEJ OBSŁUGI KLIENTA

Programowanie Zespołowe

Edycja geometrii w Solid Edge ST

Pierwsze logowanie do systemu I-Bank

Waldemar Szuchta Naczelnik Urzędu Skarbowego Wrocław Fabryczna we Wrocławiu

Chmura obliczeniowa. do przechowywania plików online. Anna Walkowiak CEN Koszalin

Strategia rozwoju kariery zawodowej - Twój scenariusz (program nagrania).

Logowanie do mobilnego systemu CUI i autoryzacja kodami SMS

Wtedy wystarczy wybrać właściwego Taga z listy.

INSTRUKCJA KORZYSTANIA Z ELEKTRONICZNEJ ŚCIEŻKI WYKAZÓW

Szczegółowe zasady obliczania wysokości. i pobierania opłat giełdowych. (tekst jednolity)

Konferencja Sądu Arbitrażowego przy SIDiR WARUNKI KONTRAKTOWE FIDIC KLAUZULA 13 JAKO ODMIENNY SPOSÓB WYKONANIA ROBÓT A NIE ZMIANA UMOWY

Przypomnienie najważniejszych pojęć z baz danych. Co to jest baza danych?

Poniżej instrukcja użytkowania platformy

enova Workflow Obieg faktury kosztowej

Opis Najważniejsze cechy modułu: Predefiniowane opcje wysyłki Rozszerzony podgląd zamówień... 2

Audyt SEO. Elementy oraz proces przygotowania audytu. strona

PRZETWARZANIE DANYCH OSOBOWYCH

INFORMATOR TECHNICZNY GE FANUC. Rezerwacja w sterownikach programowalnych GE Fanuc. Standby Redundancy najprostszy system rezerwacji

PROGRAM ZAPEWNIENIA I POPRAWY JAKOŚCI AUDYTU WEWNĘTRZNEGO

INSTRUKCJA DLA INSPEKTORÓW DS. REJESTRACJI

I. Definicje. II. Postanowienia ogólne.

Logowanie do systemu Faktura elektroniczna

Ćwiczenie 6.5. Otwory i śruby. Skrzynia V

Umowa o pracę zawarta na czas nieokreślony

INTERAKTYWNA APLIKACJA MAPOWA MIASTA RYBNIKA INSTRUKCJA OBSŁUGI

INFORMATOR TECHNICZNY WONDERWARE

PROCEDURA WSPÓŁPRACY MIĘDZYOPERATORSKIEJ W ZAKRESIE OBSŁUGI ZLECEŃ PRESELEKCJI

Instrukcja obsługi Norton Commander (NC) wersja 4.0. Autor: mgr inż. Tomasz Staniszewski

Zobacz to na własne oczy. Przyszłość już tu jest dzięki rozwiązaniu Cisco TelePresence.

2) Drugim Roku Programu rozumie się przez to okres od 1 stycznia 2017 roku do 31 grudnia 2017 roku.

PFR Wstępnie wypełnione zeznanie podatkowe. PIT-37 i PIT-38 za rok 2015

Wykład 4 Wybrane zagadnienia programowania w C++

System Informatyczny CELAB. Przygotowanie programu do pracy - Ewidencja Czasu Pracy

Co zrobić, jeśli uważasz, że decyzja w sprawie zasiłku mieszkaniowego lub zasiłku na podatek lokalny jest niewłaściwa

Regulamin korzystania z Systemu invooclip przez Adresata i Odbiorcę

Kontrakt Terytorialny

Integracja systemów, integracja procesów

Komentarz do prac egzaminacyjnych w zawodzie technik administracji 343[01] ETAP PRAKTYCZNY EGZAMINU POTWIERDZAJĄCEGO KWALIFIKACJE ZAWODOWE

Bielsko-Biała INSTRUKCJA DLA KOORDYNATORA PROJEKTU

Przewodnik dla klienta Sigillum PCCE USŁUGI CERTYFIKACJI ELEKTRONICZNEJ. Polska Wytwórnia Papierów Wartościowych S.A.

Tworzenie modelu obiektowego

E-commerce dofollow list

Transkrypt:

Programowanie II prowadzący: Adam Dudek Lista nr 8 Dziedziczenie : Dziedziczenie to nic innego jak definiowanie nowych klas w oparciu o już istniejące. Jest to najważniejsza cecha świadcząca o sile programowania obiektowo zorientowanego. Dzięki tej technice możliwe jest najbardziej naturalne odzwierciedlenie związków jakie zachodzą pomiędzy obiektami modelowanej w programie rzeczywistości. Przykład najprostszy: class Tpunkt void odbij_wzgledem_poczatku() //... void obroc(int kat) //... Zawartość metod składowych została już dawno wymyślona podobnie jak i sama definicja punktu. Okazuje się jednak, już w przypadku ekranu komputerowego taka definicja już nie wystarcza. Klasę Tpunkt należało by bowiem rozszerzyć o wartości RGB, tak aby mógł on zostać poprawnie wyświetlony. class TPunkt_monitor Oczywiście w przypadku programowania strukturalnego musielibyśmy ponownie sprecyzować metody odbij_wzgledem_poczatku() i obroc(int kat), czyli musielibyśmy wykonać tę samą pracę ponownie. Dzięki jednak technice dziedziczenia możemy zaproponować nową klasę, wykorzystując możliwości starej: A następnie w programie głównym użyć konstrukcji: Tpunkt_monitor punkt; punkt.x=10; Punkt.obroc(90); Programowanie II studia niestacjonarne - Lista 8 1

Fakty bardzo istotne: - dziedziczenie nie polega na przekopiowaniu zawartości jednej klasy do drugiej. Składniki dziedziczone nadal mają zakres klasy podstawowej, na który to zostaje nałożony zakres klasy pochodnej - w przypadku ponownego definiowania składników w klasie pochodnej o takich samych nazwach jak w klasie podstawowej tracimy bezpośredni dostęp do tych ostatnich - aby odwołać się do pierwotnego znaczenia przesłoniętego składnika należy użyć kwalifikatora zakresu, np.: Tpunkt_monitor obiekt; obiekt.wypisz(); //metoda składowa klasy Tpunkt_monitor Obiekt.Tpunkt::wypisz(); //metoda składowa klasy Tpunkt - należy pamiętać, iż dziedziczenie dotyczy klas (czyli typów danych), a nie obiektów będących ich reprezentantami. Dziedziczenie kilkupokoleniowe : class A //--- ciało klasy A class B: public A //--- ciało klasy B class C: public B //--- ciało klasy C Wywoływanie konstruktorów : class Tpunkt Tpunkt() cout<<"konstruktor punktu"<<"\n"; Tpunkt_monitor() cout<<"konstruktor punktu ekranowego"<<"\n"; class TPunkt_3D:public Tpunkt_monitor TPunkt_3D() cout<<"konstruktor punktu 3D"<<"\n"; Programowanie II studia niestacjonarne - Lista 8 2

Dziedziczenie, a dostęp do składników Mechanizm dziedziczenia pozwala określać w jaki sposób mają być dziedziczone składniki klasy podstawowej. Prywatne składniki klasy podstawowej są dziedziczone, ale nie ma do nich dostępu. Nie prywatne składniki klasy podstawowej są dostępne w zakresie klasy pochodnej bezpośrednio. Dziedziczenie, a składniki chronione Składniki chronione (PROTECTED) traktowaliśmy do tej pory jak prywatne. W praktyce klauzula PROTECTED oznacza, że składnik jest zastrzeżony tylko dla klas pochodnych. W praktyce oznacza to, że składnik typu PROTECTED: dla całego świata powinien być traktowany jak prywatny czyli niedostępny dla wszystkich klas pochodnych od danej klasy powinien być dostępny, tak jakby był składnikiem publicznym. Można zatem powiedzieć, iż to klasa podstawowa poprzez odpowiednią specyfikację dostępu decyduje, które składniki zamierza udostępnić otoczeniu, a które tylko klasom pochodnym. Sposoby dziedziczenia Również klasa pochodna ma możliwość określania sposobu w jaki chce dziedziczyć składniki klasy podstawowej. Wybór taki dokonywany jest w momencie definicji klasy pochodnej: Słowo public może zostać zastąpione protected lub private. Dzięki temu mamy możliwość określenia sposobu dziedziczenia składników nie prywatnych (!!!). Zasada definiowania sposobu dziedziczenia jest prosta: PUBLIC powoduje, że wszystkie składniki publiczne dziedziczone są w sposób publiczny, chronione jako chronione, a prywatne jako prywatne PROTECTED powoduje, że wszystkie składniki publiczne i chronione dziedziczone są jako chronione PRIVATE powoduje, że wszystkie składniki dziedziczone są jako prywatne. Funkcje wirtualne Funkcje wirtualne sprawiają, że program jest obiektowo zorientowany inaczej mówiąc orientuje się względem obiektów. Przykład najprostszy: class instrument char nazwa[30]; cout<<"intrument wydaje dzwiek... \n"; class trabka:public instrument Programowanie II studia niestacjonarne - Lista 8 3

cout<<"teraz gra trabka... \n"; class fortepian:public instrument cout<<"teraz gra fortepian...\n"; int main(int argc, char* argv[]) instrument jakis_instrument; trabka jakas_trabka; fortepian jakis_fortepian; jakis_instrument.graj(); jakas_trabka.graj(); jakis_fortepian.graj(); Return 0; } A teraz dla odmiany inna wersja funkcji głównej: instrument *wsk_na_instrument; instrument jakis_instrument; trabka jakas_trabka; fortepian jakis_fortepian; wsk_na_instrument = &jakis_instrument; wsk_na_instrument = &jakas_trabka; wsk_na_instrument = &jakis_fortepian; W praktyce wirtualny oznacza tyle co możliwy, czy też mogący zaistnieć, gdyż funkcja oznaczona jako wirtualna może, ale nie musi być zrealizowana w klasach pochodnych jeszcze raz. Virtual mówi, że od tej pory po wszystkie dalsze pokolenia kompilator ma użyć swojej inteligencji, gdy chodzi o wywołania tejże funkcji przez wskaźnik. Polimorfizm W zależności od wywołania funkcji wirtualnej, wywoływany jest w praktyce inny kod. Zatem np. fragment kodu: referencja.graj(); wywoływany jest praktycznie w postaci: referencja.instrument::graj(); referencja.trąbka::graj(); lub lub Programowanie II studia niestacjonarne - Lista 8 4

referencja.fortepian::graj(); Mówimy tutaj o wielości formy programu, czyli polimorfizmie. Fragment kodu zmienia się tak, że raz odpowiada wywołaniu w wersji pierwszej raz w innej. Zadanie 1 (20 pkt) Proszę zoptymalizować strukturę klas swojej wersji gry Monopolly. W każdym miejscu, w którym dokonana zostanie modyfikacja w stosunku do poprzedniej wersji, proszę w formie komentarza opisać możliwie szczegółowo na czym zmiany polegały i na jakiej podstawie podjęto taką, a nie inną decyzję. Oczywiście modyfikacja ma dotyczyć wykorzystania mechanizmów dziedziczenia. Zadanie 1 (30 pkt) Zaproponuj rozwiązanie, które umożliwiło by przechowywanie obiektów różnych klas (w grze monopoly.) w jednej liście dwukierunkowej. Oczywiście poza listą należałoby zaimplementować możliwość wypełnienia istotnymi danymi wszystkich pól w grze, możliwość ustalenia właściciela danego pola, postawienia na polu domku czy też hotelu, oraz pobrania opłaty (na różnych typach pól). Ważna jest implementacja funkcjonalności "wyświetlania" planszy gry. "Wyświetlanie" realizowane ma być w formie zapisu do pliku HTML (aplikacja generuje plik HTML). W pliku należy w przejrzystej formie przedstawić wygląd stanu planszy w grze. Dla ułatwienia można wykorzystać dużą tabelę (okienko w przeglądarce może się przewijać). Przy użyciu okienka konsolowego proszę zrealizować sterowanie grą, przy użyciu przeglądarki - wyświetlanie. Rozwiązanie powinno umożliwiać przeprowadzenie rozgrywki. Programowanie II studia niestacjonarne - Lista 8 5