programowanie obiektowe 05, c c++, c#


Przeciążanie

Przegląd zagadnień

0x08 graphic

Tematem tego modułu jest przeciążanie metod. Wprowadzone zostaną związane z tym tematem pojęcia metod wirtualnych i abstrakcyjnych, a także zamknięcia metody przed przeciążaniem.

Wprowadzenie teoretyczne zostanie uzupełnione przykładami kodu w języku C# oraz schematami klas w notacji UML.

W dalszej części zdobyta wiedza zostanie podsumowana oraz sprawdzona pytaniami kontrolnymi, po czym studenci samodzielnie wykonają ćwiczenia laboratoryjne.

Metody wirtualne

0x08 graphic

Na poprzednich zajęciach wprowadzone zostało pojęcie dziedziczenia klas oraz wiążąca się z dziedziczeniem możliwość przesłaniania metod klasy bazowej w klasie pochodnej za pomocą słowa new.

Pisząc klasę, która będzie służyła jako klasa bazowa, możemy wskazać metody, których funkcjonalność może być zmieniana w klasach pochodnych. Robimy to dodając w definicji klasy słowo virtual.

W przykładzie tworzymy klasę Prostokat, której składowymi są długości boków oraz metoda obliczająca pole. Zamierzamy stworzyć klasę Kwadrat dziedziczącą po klasie Prostokat i zmodyfikować metodę Pole(), dlatego oznaczamy ją jako wirtualną.

Przeciążanie metod

0x08 graphic

W klasie Kwadrat dziedziczącej po klasie Prostokąt definiujemy ponownie metodę Pole(). Ponowna definicja metody w klasie pochodnej to przeciążanie metody. Oznaczamy je przy pomocy słowa kluczowego override.

Klasy abstrakcyjne

0x08 graphic

Zanim przejdziemy do pojęcia metody abstrakcyjnej, musimy zapoznać się z pojęciem klasy abstrakcyjnej.

Klasa abstrakcyjna nie może być instancjonowana, może służyć tylko jako klasa bazowa dla klas pochodnych. Klasa abstrakcyjna zawiera metody i zmienne składowe, jakie będą wchodziły w skład klas pochodnych.

Na przykładzie przedstawionym na slajdzie tworzymy klasę abstrakcyjną Figura. Nie możemy utworzyć obiektu tej klasy - w tym przypadku niewiele wiemy na przykład o kształcie figury. Próba instancjonowania klasy abstrakcyjnej kończy się błędem.

Możemy jednak określić wspólne elementy figur: współrzędne środka figury. Możemy też zdefiniować metodę, która będzie funkcjonowała dla wszystkich obiektów klas pochodnych klasy Figura - będzie to Odleglosc(), metoda obliczająca odległość środka figury od początku układu współrzędnych.

Po prawej stronie przedstawiony jest schemat klasy w notacji UML - nazwa klasy abstrakcyjnej jest podana kursywą.

Metody abstrakcyjne (1)

0x08 graphic

Klasa abstrakcyjna może zawierać metody abstrakcyjne (nie mogą one występować w klasach, które nie są abstrakcyjne). Metoda oznaczona słowem abstract musi zostać przeciążona w klasie pochodnej.

Na slajdzie w abstrakcyjnej klasie Figura pojawiła się abstrakcyjna metoda Pole(). Każda klasa dziedzicząca po klasie Figura musi przeciążać metodę Pole().

Na schemacie klasy abstrakcyjna metoda jest wyróżniona kursywą.

0x08 graphic
Metody abstrakcyjne (2)

Ponownie tworzymy klasę Prostokat, tym razem dziedzicząc po abstrakcyjnej klasie bazowej Figura. Musimy przeciążyć metodę Pole() - odbywa się to za pomocą słowa kluczowego override.

Przeciążona metoda może być ponownie przeciążona w klasie pochodnej. Utworzona wcześniej klasa Kwadrat może pozostać bez zmian, nie ma potrzeby oznaczania metody Pole() jako metody wirtualnej stosując słowo virtual.

Metody zamknięte

0x08 graphic

Jeśli chcemy, aby metoda nie była więcej przeciążana w klasach pochodnych, zamykamy ją słowem kluczowym sealed.

Podsumowanie

0x08 graphic

Na zajęciach przedstawiony został mechanizm przeciążania metod. W tym celu wprowadzone zostało pojęcie metody wirtualnej oraz szereg modyfikatorów funkcji: virtual, override, abstract, sealed.

Omówiono abstrakcyjne klasy oraz abstrakcyjne metody, przedstawione zostały przykłady kodu w języku C#.

Pytania sprawdzające

0x08 graphic

Pytania dla studentów:

  1. Czym są metody wirtualne i na czym polega ich przeciążanie?

  2. Czym jest klasa abstrakcyjna?

  3. Czym jest metoda abstrakcyjna?

Laboratorium

0x08 graphic

Zadania do wykonania przez studentów:

  1. Korzystając z mechanizmu przeciążania oraz klas abstrakcyjnych, napisz klasy na potrzeby programu wykonującego obliczenia z geometrii analitycznej. Przedstaw różne rodzaje wielokątów, koło, elipsę.

  2. Do klas figur dodaj metody obliczające pola powierzchni, obwody i odległości między charakterystycznymi punktami.

L

L



Wyszukiwarka

Podobne podstrony:
programowanie obiektowe 05
Programowanie obiektowe(ćw) 1
Zadanie projekt przychodnia lekarska, Programowanie obiektowe
Programowanie obiektowe w PHP4 i PHP5 11 2005
Programowanie Obiektowe ZadTest Nieznany
Egzamin Programowanie Obiektowe Głowacki, Programowanie Obiektowe
Jezyk C Efektywne programowanie obiektowe cpefpo
Programowanie Obiektowe Ćwiczenia 5
Programowanie obiektowe(cw) 2 i Nieznany
Intuicyjne podstawy programowania obiektowego0
Programowanie obiektowe, CPP program, 1
wyklad5.cpp, JAVA jest językiem programowania obiektowego
projekt01, wisisz, wydzial informatyki, studia zaoczne inzynierskie, programowanie obiektowe, projek
przeciazanie metod i operatorow, Programowanie obiektowe
projekt06, wisisz, wydzial informatyki, studia zaoczne inzynierskie, programowanie obiektowe, projek
projekt07, wisisz, wydzial informatyki, studia zaoczne inzynierskie, programowanie obiektowe, projek
Programowanie Obiektowe Cz2, Dziedziczenie proste
Programowanie obiektowe, w2, 2

więcej podobnych podstron