• Nie Znaleziono Wyników

"Anatomia i fizjologia" klas - dziedziczenie i polimorfizm

N/A
N/A
Protected

Academic year: 2021

Share ""Anatomia i fizjologia" klas - dziedziczenie i polimorfizm"

Copied!
20
0
0

Pełen tekst

(1)

Wyższa Szkoła Techniczno – Ekonomiczna w Świdnicy

2016-11-11 Metody programowania – 1 W4 1

Metody programowania – 1 dr inż. Tadeusz Jeleniewski

"Anatomia i fizjologia" klas - dziedziczenie i polimorfizm

Specjalizacja i uogólnianie

Dziedziczenie

Polimorfizm

Klasy abstrakcyjne

Klasy zamknięte

Klasa główna - Object

(2)

Specjalizacja i uogólnianie

Klasy i obiekty (egzemplarze klas) istnieją w sieci zależności i związków (relacji).

Specjalizacja to relacja jest-czymś np. pies jest ssakiem.

Wg tego stwierdzenia pies jest specjalnym rodzajem ssaka – ma wszystkie cechy ssaka, ale oprócz tego jeszcze parę innych właściwych tylko dla psów (canine domesticus).

Kot jest też ssakiem i ma wiele cech wspólnych z psem, ale też kilka właściwych tylko dla kotów.

Do graficznej ilustracji relacji specjalizacji i uogólniania, a ogólnie do opisu systemów często wykorzystuje się tzw. zunifikowany język modelowania (UML – Unified

Modeling Language).

Przykładową relację specjalizacji zapisaną w notacji UML pokazano na rysunku 4.1.

(3)

Wyższa Szkoła Techniczno – Ekonomiczna w Świdnicy

2016-11-11 Metody programowania – 1 W4 3

Metody programowania – 1 dr inż. Tadeusz Jeleniewski

Rys.4.1. Relacja jest-czymś

(4)

Dziedziczenie

W C# relacja specjalizacji jest realizowana za pomocą dziedziczenia.

Stwierdzenie, że klasa ListBox dziedziczy po klasie Control oznacza, że klasa ListBox jest wyspecjalizowaną wersją klasy Control.

Klasę Control nazywa się klasą bazowąa klasę ListBox – klasą pochodnąlub potomną.

Klasa ListBox dziedziczy cechy i zachowania klasy Control, ale oprócz tego może posiadać też wyspecjalizowane składowe.

Przykład klasy bazowej i klasy potomnej pokazuje listing 4.1.

(5)

Wyższa Szkoła Techniczno – Ekonomiczna w Świdnicy

2016-11-11 Metody programowania – 1 W4 5

Metody programowania – 1 dr inż. Tadeusz Jeleniewski

(6)
(7)

Wyższa Szkoła Techniczno – Ekonomiczna w Świdnicy

2016-11-11 Metody programowania – 1 W4 7

Metody programowania – 1 dr inż. Tadeusz Jeleniewski

(8)

Polimorfizm

Najważniejszym aspektem dziedziczenia jest polimorfizm.

Oznacza on możliwość używania typu w wielu formach, niezależnie od szczegółów klas.

Aby utworzyć metodę polimorficzną, należy ją oznaczyć jako wirtualnąw klasie bazowej.

W przykładzie 4.1 taką metodą polimorficzną jest metoda Wyświetl, której nazwa w klasie bazowej PUNKT_2D została poprzedzona słowem kluczowym virtual.

Dzięki temu w każdej klasie potomnej można umieścić nową wersję tej metody.

W klasie PUNKT_3D znalazła się metoda Wyświetl przeznaczona do wyświetlania

współrzędnych punktu w przestrzeni trójwymiarowej. W deklaracji tej metody pojawiło się słowo kluczowe override, które powoduje, że metoda w klasie potomnej o takiej samej nazwie jak metoda w klasie bazowej "przesłania" metodę bazową.

Słowo base w definicji konstruktora klasy potomnej oznacza wykorzystanie konstruktora bazowego jako części konstruktora obiektu klasy potomnej.

Uwaga! Słowo base odwołujące się do konstruktora klasy bazowej umieszczono po znaku dwukropka, co oznacza, że konstruktor klasy potomnej dziedziczy metodę konstruktora bazowego.

(9)

Wyższa Szkoła Techniczno – Ekonomiczna w Świdnicy

2016-11-11 Metody programowania – 1 W4 9

Metody programowania – 1 dr inż. Tadeusz Jeleniewski

(10)
(11)

Wyższa Szkoła Techniczno – Ekonomiczna w Świdnicy

2016-11-11 Metody programowania – 1 W4 11

Metody programowania – 1 dr inż. Tadeusz Jeleniewski

Przykład wykorzystania polimorfizmu przedstawia listing 4.2.

W tablicy zbiórzadeklarowanej jako kolekcja obiektów klasy bazowej Kontrolka umieszczono zarówno obiekt klasy bazowej jak i obiekty obydwu klas potomnych.

System prawidłowo rozpoznał i wybrał odpowiednią metodę wirtualną do wyświetlenia informacji o konkretnym obiekcie.

W metodzie Wyświetl, która w klasie potomnej Lista przesłania metodę Wyświetl klasy bazowej, użyto słowa kluczowego base do odwołania się do metody z klasy bazowej, a ta jest tutaj częścią definicji metody wirtualnej.

Klasy potomne nie dziedziczą konstruktorów.

W konstruktorze klasy pochodnej konieczne jest jawne wywołanie konstruktora klasy bazowej. W przypadku konstruktora domyślnego robi to automatycznie kompilator.

Każdy konstruktor jawny w klasie potomnej musi wywoływać jeden z konstruktorów klasy bazowej. Do tego celu wykorzystuje się słowo kluczowe base.

(12)

Klasy abstrakcyjne

W przykładzie pokazanym na listingu 4.2 każda klasa potomna klasy Kontrolka powinna zawierać własną wersję metody Wyświetl.

W pokazanym przykładzie nie istnie mechanizm, który zmusiłby programistę do takiego postępowania.

Aby wymusić tworzenie nowych wersji metod klasy bazowej, należy oznaczyć taką metodę jako abstrakcyjną za pomocą słowa kluczowego abstract.

Umieszczenie w klasie przynajmniej jednej metody abstrakcyjnej powoduje, że cała klasa staje się abstrakcyjna.

Klasy abstrakcyjne stanowią bazę dla klas pochodnych.

W programie nie można tworzyć obiektów klas abstrakcyjnych.

Przykład definicji i użycia klasy abstrakcyjnej przedstawia listing 4.3.

(13)

Wyższa Szkoła Techniczno – Ekonomiczna w Świdnicy

2016-11-11 Metody programowania – 1 W4 13

Metody programowania – 1 dr inż. Tadeusz Jeleniewski

(14)
(15)

Wyższa Szkoła Techniczno – Ekonomiczna w Świdnicy

2016-11-11 Metody programowania – 1 W4 15

Metody programowania – 1 dr inż. Tadeusz Jeleniewski

(16)
(17)

Wyższa Szkoła Techniczno – Ekonomiczna w Świdnicy

2016-11-11 Metody programowania – 1 W4 17

Metody programowania – 1 dr inż. Tadeusz Jeleniewski

Klasy zamknięte

Klasy zamkniętestanowią przeciwieństwo klas abstrakcyjnych.

Od klas zamkniętych nie można tworzyć klas pochodnych.

Tworzeniu klas pochodnych zapobiega słowo kluczowe sealed umieszczone przed deklaracją klasy.

Stosuje się ten sposób, aby zapobiec przypadkowemu dziedziczeniu.

Próba utworzenia klasy potomnej w stosunku do klasy oznaczonej jako

"zapieczętowana" powoduje przerwanie kompilacji z komunikatem informującym o niemożności dziedziczenia.

(18)

Klasa główna - Object

Wszystkie klasy języka C# są klasami pochodnymi od klasy System.Object(dotyczy to także typów skalarnych).

Klasa Object udostępnia wiele metod wirtualnych, które mogą być przesłaniane w klasach potomnych. Przykładami są metody Equals(), GetType(), ToString().

W tabeli 4.1 zestawiono metody klasy Object.

Metoda Działanie

Equals() Sprawdza czy dwa obiekty są sobie równe

GetHashCode() Pozwala obiektom udostępnić własną funkcję haszującą, używaną w kolekcjach

GetType() Pozwala sprawdzić typ obiektu

ToString() Zwraca łańcuch znaków reprezentujący obiekt

Finalize() Porządkuje zasoby inne niż pamięć. Implementowana za pomocą destruktora.

MemberwiseClone() Tworzy kopie obiektu. Nie można jej przesłonić w klasach definiowanych przez użytkownika

(19)

Wyższa Szkoła Techniczno – Ekonomiczna w Świdnicy

2016-11-11 Metody programowania – 1 W4 19

Metody programowania – 1 dr inż. Tadeusz Jeleniewski

(20)

Cytaty

Powiązane dokumenty

2-biegowa sekwencyjna mocna skrzynia biegów

Na okrągłym stoliku gracze kładą złotówki, przy czym nie mogą one wystawać poza stolik ani nachodzić na siebie oraz nie wolno przesuwać leżących już monet.. W

4-biegowa sekwencyjna synchronizowana skrzynia biegów z silnikiem RC

Jest w niej uruchamiana (za pomocą super ) metoda f z klasy A, więc wyświetla się tekst Klasa A.... Jednak już z wnętrza klasy B za pomocą składni super możemy odwołać

Niektórym kojarzy się ono za pewne z trudem, wysiłkiem i poświęceniem, innym – z dobrocią, ciepłem, czułością, poczuciem bezpieczeństwa?. A z czym kojarzy

Wybierz spośród wymienionych witamin i podkreśl tę, którą organizm człowieka pozyskuje również dzięki wytwarzaniu jej przez bakterie jelitowe.. W pęcherzykach

 istnieje mo˙zliwo´s´c rzutowania wska´znika(referencji) do klasy pochodnej na wska´znik (referencj ˛e) do klasy bazowej;.  istnieje mo˙zliwo´s´c tworzenia obiektu klasy bazowej

Następnie korzystając z mechanizmu dziedziczenia zdefiniuj klasy pochodne Pies i Kot, zawierające dodatkową metodę publiczną Mow(), wypisującą na ekran „hau” lub