Wykład 9: Polimorfizm i klasy wirtualne

Podobne dokumenty
Wykład 9: Metody wirtualne i polimorfizm

Podstawy programowania. Wykład: 7. Funkcje Przekazywanie argumentów do funkcji. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy programowania. Wykład: 12. Struktury, unie, pola bitowe. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Wykład 1: Wskaźniki i zmienne dynamiczne

Wykład 8: klasy cz. 4

Podstawy programowania. Wykład: 8. Wskaźniki. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Wykład 5: Klasy cz. 3

Języki programowania C i C++ Wykład: Typy zmiennych c.d. Operatory Funkcje. dr Artur Bartoszewski - Języki C i C++, sem.

Podstawy programowania. Wykład: 6. Tablice statyczne. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy programowania. Wykład: 4. Instrukcje sterujące, operatory. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy programowania. Wykład: 13. Rekurencja. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

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

Podstawy programowania. Wykład: 11. Trochę różnych przykładów. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Języki C i C++ Wykład: 2. Wstęp Instrukcje sterujące. dr Artur Bartoszewski - Języki C i C++, sem. 1I- WYKŁAD

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy programowania. Wykład: 5. Instrukcje sterujące c.d. Stałe, Typy zmiennych c.d. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy programowania. Wykład PASCAL. Zmienne wskaźnikowe i dynamiczne. dr Artur Bartoszewski - Podstawy prograowania, sem.

Wykład II Tablice (wstęp) Przykłady algorytmów Wstęp do języka C/C++

Języki i techniki programowania Ćwiczenia 3 Dziedziczenie

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

Programowanie obiektowe W1 Wprowadzenie. Dr hab. inż. Lucyna Leniowska, prof. UR Zakład Mechatroniki, Automatyki i Optoelektroniki

Dziedziczenie jednobazowe, poliformizm

Polimorfizm, metody wirtualne i klasy abstrakcyjne

C++ - polimorfizm. C++ - polimorfizm. C++ - polimorfizm. C++ - polimorfizm. C++ - polimorfizm POLIMORFIZM

Podstawy Programowania Obiektowego

Zaawansowane programowanie w C++ (PCP)

Programowanie obiektowe - 1.

Podstawy Programowania semestr drugi. Wykład czternasty

Dziedziczenie jednobazowe, poliformizm, tablice wskaźników na obiekty

C++ - [4-7] Polimorfizm

PARADYGMATY PROGRAMOWANIA Wykład 4

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

Klasa dziedzicząca posiada wszystkie cechy klasy bazowej (plus swoje własne) dodawanie nowego kodu bez edycji (i ewentualnego wprowadzania

Programowanie 2. Język C++. Wykład 9.

Zaawansowane programowanie w języku C++ Programowanie obiektowe

Interfejsy i klasy wewnętrzne

Funkcje wirtualne. Wskaźniki do klas pochodnych są podstawą dla funkcji wirtualnych i polimorfizmu dynamicznego.

Dziedziczenie. Tomasz Borzyszkowski

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

Programowanie obiektowe

Metodyki i techniki programowania

Zaawansowane programowanie w C++ (PCP)

Programowanie obiektowe

Zaawansowane programowanie w języku C++ Klasy w C++

Podstawy programowania. Wykład PASCAL. Wstęp do programowania obiektowego. dr Artur Bartoszewski - Podstawy programowania, sem.

Wykład 3 Składnia języka C# (cz. 2)

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

Instrukcja do pracowni specjalistycznej z przedmiotu. Obiektowe programowanie aplikacji

Klasy abstrakcyjne i interfejsy

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

Język programowania. Andrzej Bobyk

Kurs WWW. Paweł Rajba.

Wstęp do programowania obiektowego. Wykład 1 Algorytmy i paradygmaty Podstawowe pojęcia PO

Wstęp do programowania obiektowego, wykład 7

Programowanie obiektowe

Metodyki i techniki programowania

Materiały do zajęć VII

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

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

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

KOTLIN. Język programowania dla Androida

Polimorfizm. dr Jarosław Skaruz

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

Programowanie obiektowe

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

Pola i metody statyczne

Programowanie obiektowe 2 - opis przedmiotu

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

PRYWATNA WYŻSZA SZKOŁA BUSINESSU, ADMINISTRACJI I TECHNIK KOMPUTEROWYCH S Y L A B U S

TEMAT : KLASY DZIEDZICZENIE

Wykład 1. Program przedmiotu. Programowanie Obiektowe (język C++) Literatura. Program przedmiotu c.d.:

Politechnika Krakowska im. Tadeusza Kościuszki. Karta przedmiotu. obowiązuje w roku akademickim 2012/2013. Przedmioty kierunkowe

Podstawy Programowania

Politechnika Krakowska im. Tadeusza Kościuszki. Karta przedmiotu. obowiązuje studentów rozpoczynających studia w roku akademickim 2012/2013

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

Programowanie obiektowe w języku

ZASADY PROGRAMOWANIA KOMPUTERÓW

PRZEWODNIK PO PRZEDMIOCIE

Programowanie obiektowe

Języki C i C++ Wykład: 1. Wstęp Budowa programu Operacje we/wy Instrukcje wyboru. dr Artur Bartoszewski - Języki C i C++, sem.

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

Języki i paradygmaty programowania

PROE wykład 4 pozostałe operatory, forward declaration, dziedziczenie. dr inż. Jacek Naruniec

PHP 5 język obiektowy

KARTA PRZEDMIOTU. 1. Informacje ogólne. 2. Ogólna charakterystyka przedmiotu. Programowanie II C16

Czym jest polimorfizm?

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

Wykład IV PASCAL - łańcuch znaków, - procedury i funkcje, - sortowanie bąbelkowe

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

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

WYKŁAD. Jednostka prowadząca: Wydział Techniczny. Kierunek studiów: Elektronika i telekomunikacja. Nazwa przedmiotu: Język programowania C++

KARTA PRZEDMIOTU. 1. Informacje ogólne. 2. Ogólna charakterystyka przedmiotu. Programowanie I C6

Język C++ Programowanie obiektowe

Dziedziczenie. dr Jarosław Skaruz

Wykład VI PASCAL procedury i funkcje przekazywanie parametrów,

Aplikacje w środowisku Java

Transkrypt:

Programowanie obiektowe Wykład 9: i klasy wirtualne 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD

Programowanie obiektowe i metody wirtualne 2

W programowaniu obiektowym polimorfizm (wielopostaciowość) to cecha umożliwiająca różne zachowanie tych samych metod wirtualnych (funkcji wirtualnych) w czasie wykonywania programu. w C++ Statyczny Dynamiczny Przeciążanie funkcji Funkcje wirtualne Przeciążanie operatorów 3

Wiązania statyczne i dynamiczne Wiązania: deklaracja zmiennej powoduje związanie zmiennej z typem, wykonanie instrukcji podstawienia powoduje związanie zmiennej z (nową) wartością Wiązania dzielimy na dwie klasy: 1. Wiązania statyczne (wczesne wiązania) czyli takie, które następują przed wykonaniem programu i nie zmieniają się w trakcie jego działania. 2. Wiązania dynamiczne (późne wiązania) to te, które następują lub zmieniają się w trakcie działania programu. 4

Wiązania statyczne i dynamiczne 1. Wiązania statyczne (wczesne) 2. Wiązania dynamiczne (późne) 5

Wiązania statyczne i dynamiczne dla obiektów Obiekty zadeklarowane za pomocą zmiennych niewskaźnikowych są alokowane na stosie (jak zwykłe zmienne lokalne); wiązanie jest wówczas zawsze statyczne. Obiekty stworzone za pomocą wskaźnika i operatora new są powiązane dynamicznie 6

W języku C++ możemy korzystać z polimorfizmu za pomocą metod wirtualnych. Dzięki niemu mamy pełną kontrolę nad wykonywanym programem, nie tylko w momencie kompilacji (wiązanie statyczne) ale także podczas działania programu (wiązanie dynamiczne) niezależnie od różnych wyborów użytkownika. W C++ nie ma konieczności korzystania z polimorfizmu. Zostanie on automatycznie włączony podczas zadeklarowania przynajmniej jednej metody wirtualnej w danej klasie. 7

Typ statyczny obiektu Typ dynamiczny obiektu Zmienna wskaźnikowa mająca typ pewnej klasy bazowej może wskazywać obiekty tejże klasy oraz klas pochodnych 8

9

To, która metoda zostanie wywołana zależy od typu wskaźnika na obiekt. Jest to wspomniane wcześniej wiązanie statyczne. Kompilator już podczas kompilacji programu wie, jakiego typu statycznego są obiekty i jakie metody mają zostać wywołane. 10

11

Dzięki dodaniu do klasy bazowej metod wirtualnych, uruchomimy mechanizm polimorfizmu. Wczesne wiązanie statyczne nie będzie miało wtedy żadnego znaczenia, ponieważ to która funkcja zostanie wywołana będzie zależało od późnego wiązania dynamicznego. 12

Metodę wirtualną (abstrakcyjną) deklaruje się za pomocą virtual i dodatkowego pseudopodstawienia =0 (nie ma sensu pisać ciała metody jeżeli w żadnych okolicznościach kod ten nie może zostać wykonany) 13

Zmienna wskaźnikowa mająca typ pewnej klasy bazowej może wskazywać obiekty tej klasy oraz klas pochodnych - a zatem jest polimorficzna. Zmienne niewskaźnikowe nie mogą być polimorficzne. Gdy używamy zmiennej polimorficznej do wywołania metody zdefiniowanej w jednej z klas pochodnych, wywołanie to musi zostać związane z właściwą definicją metody. Metody, które mają być wiązane dynamicznie, deklaruje się ze słowem kluczowym virtual. virtual oznacza, że dana metoda może być zredefiniowana w klasach pochodnych, a zatem jej wywołanie należy traktować jako polimorficzne. 14

Programowanie obiektowe Klasy abstrakcyjne 15

Klasy abstrakcyjne Klasy abstrakcyjne to klasy dla których nie można stworzyć obiektu. Klasy abstrakcyjne istnieją po to, aby z niej dziedziczyć. Często zdarza się że mamy kilka klas które mają pewną ilość cech wspólnych choć między nimi samymi nie zachodzi relacja dziedziczenia (żadna z klas nie jest szczególnym przypadkiem innej klasy). W takiej sytuacji można wydzielić bazową klasę gdzie zawarte były by wszystkie wspólne cechy. Daje to szereg korzyści: jeśli postanowimy zmienić jakieś pole wspólne, to zmiany dokonujemy tylko w klasie bazowej, jeśli pojawią się nowe wspólne cechy które potrzebujemy to dodajemy je tylko w jednej klasie możliwość wywołań polimorficznych 16

Klasy abstrakcyjne Aby klasa była abstrakcyjna to musi mieć przynajmniej jedną metodę czysto wirtualną - czyli metodę wirtualną która nie ma ciała. Próba utworzenia obiektu klasy abstrakcyjnej skończy się błędem kompilatora. 17

Klasy abstrakcyjne jako interfejsy Interfejs to klasa abstrakcyjna która ma tylko i wyłącznie metody czysto wirtualne i nie ma żadnych pól. Interfejsy są przydatne gdy chcemy zupełnie niezwiązanym ze sobą obiektom udostępnić taki sam zestaw metod. W ten sposób możemy napisać uniwersalne funkcje które wymagają od obiektów jedynie określonego zestawu metod, W języku C++ interfejs może być zdefiniowany jako klasa abstrakcyjna 18

Literatura: W prezentacji wykorzystano przykłady i fragmenty: Grębosz J. : Symfonia C++, Programowanie w języku C++ orientowane obiektowo, Wydawnictwo Edition 2000. Jakubczyk K.: Turbo Pascal i Borland C++ Przykłady, Helion. Warto zajrzeć także do: Sokół R. : Microsoft Visual Studio 2012 Programowanie w Ci C++, Helion. Kerninghan B. W., Ritchie D. M.: język ANSI C, Wydawnictwo Naukowo Techniczne. Dla bardziej zaawansowanych: Grębosz J. : Pasja C++, Wydawnictwo Edition 2000. Meyers S.: język C++ bardziej efektywnie, Wydawnictwo Naukowo Techniczne 19