Partnerstwo dla Przyszłości 1 Lekcja 28 Dziedziczenie i rodzaje dziedziczenia
Partnerstwo dla Przyszłości 2 Przedstawienie zagadnień Klasa i jej elementy Dziedziczenie klas Polimorfizm Konstruktory klas
Partnerstwo dla Przyszłości 3 Zaprojektowanie klasy Prostokat Klasa Prostokat Pola intBokA IntBokB Właściwości BokA BokB Metody Pole
Partnerstwo dla Przyszłości 4 Utworzenie nowej klasy Prostokat Zadanie1_28
Partnerstwo dla Przyszłości 5 Aplikacja Bryly i figury Private Sub btnOblicz_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOblicz.Click Dim P As Prostokat P = New Prostokat() P.BokA = CInt(txtBokA.Text) P.BokB = CInt(txtBokB.Text) lblPole.Text = CStr(P.ObliczPole()) End Sub Zadanie1_28
Partnerstwo dla Przyszłości 6 Dziedziczenie w programowaniu obiektowym Dziedziczenie jest to związek pomiędzy klasami obiektów określający przekazywanie cech (definicji atrybutów, metod, itd.) z nadklasy do jej podklas. Dziedziczenie służy do budowania hierarchii definiowanych klas przede wszystkim ze względu na przejrzystość budowanego kodu programu. Pozwala uniknąć wielokrotnemu powtarzaniu kodu. Klasa powstała w wyniku dziedziczenia to klasa pochodna danej klasy. Klasa pochodna może być także klasą bazową dla innej klasy pochodnej. Należy pamiętać, że dziedziczenie dotyczy klas nie obiektów.
Partnerstwo dla Przyszłości 7 Klasa bazowa i klasy potomne Klasa Prostokat Pola intBokA IntBokB Właściwości BokA BokB Metody Pole Klasa Prostpadloscian Pola intWysokosc Własciwosci Wysokosc Metody ObliczPoleProstpadloscianu ObliczObjetoscProstopadloscianu Klasa Ostroslup Pola intWysokosc Własciwosci Wysokosc Metody ObliczPoleOstroslupa ObliczObjetoscOstraslupa
Partnerstwo dla Przyszłości 8 Klasa Prostopadloscian Public Class Prostopadloscian Inherits Prostokat Private intWysokosc As Integer Public Property Wysokosc() As Integer Get Return intWysokosc End Get Set(ByVal Value As Integer) intWysokosc = Value End Set End Property Public Function ObliczPOleProstopadloscianu() As Integer Return (2 * BokA * BokB + 2 * BokA * intWysokosc + _ 2 * BokB * intWysokosc) End Function Public Function ObliczObjetoscProstopadloscianu() As Integer Return BokA * BokB * intWysokosc End Function End Class Zadanie2_28
Partnerstwo dla Przyszłości 9 Modyfikacja projektu formularza Private Sub RbtnProstokat_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbtnProstokat.CheckedChanged lblPole.Text = 0 txtBokA.Text = 0 txtBokB.Text = 0 lblObjetosc.Visible = False lblOb.Visible = False lblW.Visible = False txtWysokosc.Visible = False Wybor = 1 End Sub Zadanie2_28
Partnerstwo dla Przyszłości 10 Wykorzystanie klasy Prostopadloscian If Wybor = 2 Then Pr = New Prostopadloscian() Pr.BokA = CInt(txtBokA.Text) Pr.BokB = CInt(txtBokB.Text) Pr.Wysokosc = CInt(txtWysokosc.Text) lblPole.Text = CStr(Pr.ObliczPOleProstopadloscianu.ToString("N2")) lblObjetosc.Text = CStr(Pr.ObliczObjetoscProstopadloscianu.ToString("N2") End If
Partnerstwo dla Przyszłości 11 Porównanie kodu klasy bazowej i potomnej Public Class Prostopadloscian Inherits Prostokat Private intWysokosc As Integer Public Property Wysokosc() As Integer End Property Public Function ObliczPOleProstopadloscianu() As Integer End Function Public Function ObliczObjetoscProstopadloscianu() As Integer Return BokA * BokB * intWysokosc End Function End Class Public Class Prostokat Private intBokA As Integer Private intBokB As Integer Public Property BokA() As Integer End Property Public Property BokB() As Integer End Property Public Function ObliczPole() As Integer End Function End Class
Partnerstwo dla Przyszłości 12 Przesłanianie metod Przesłanianie metod polega na umożliwieniu stosowania tych samych nazw metod w klasach potomnych i bazowych. Kompilator rozpoznaje, na jakim poziomie jest dana metoda i wykonuje ją odpowiednio dla danego obiektu. Cechę tę nazywamy także polimorfizmem lub wielopostaciowością. By poinformować kompilator o przesłanianiu, używamy dwóch słów kluczowych: - Overridable - metoda przesłaniana (zawsze w klasie bazowej); - Overrides - metoda przesłaniająca (deklarowana w klasie potomnej).
Partnerstwo dla Przyszłości 13 Przesłanianie metod – modyfikacja klas Public Class Prostokat Private intBokA As Integer Private intBokB As Integer Public Property BokA() As Integer End Property Public Property BokB() As Integer End Property Public Overridable Function ObliczPole() As Integer End Function End Class Public Class Prostopadloscian Inherits Prostokat Private intWysokosc As Integer Public Property Wysokosc() As Integer End Property Public Function Ovverides ObliczPOle () As Integer End Function Public Function ObliczObjetoscProstopadloscianu() As Integer End Function End Class Zadanie3_28
Partnerstwo dla Przyszłości 14 Wykorzystanie przesłaniania metod w aplikacji If Wybor = 1 Then P = New Prostokat() P.BokA = CInt(txtBokA.Text) P.BokB = CInt(txtBokB.Text) lblPole.Text = CStr(P.ObliczPole()) End If If Wybor = 2 Then Pr = New Prostopadloscian() Pr.BokA = CInt(txtBokA.Text) Pr.BokB = CInt(txtBokB.Text) Pr.Wysokosc = CInt(txtWysokosc.Text) lblPole.Text = CStr(Pr.ObliczPole.ToString("N2")) lblObjetosc.Text = CStr(Pr.ObliczObjetoscProstopadloscianu.ToString("N2")) End If If Wybor = 3 Then Ostr = New Ostroslup() Ostr.BokA = CInt(txtBokA.Text) Ostr.BokB = CInt(txtBokB.Text) Ostr.Wysokosc = CInt(txtWysokosc.Text) lblPole.Text = CStr(Ostr.ObliczPole.ToString("n2")) lblObjetosc.Text = CStr(Ostr.ObliczObjetoscOstroslupa.ToString("N2")) End If Zadanie3_28
Partnerstwo dla Przyszłości 15 Konstruktor Konstruktor klasy – specjalna procedura o nazwie New, pozwalająca wprowadzać do obiektu (a dokładnie przypisać jego właściwościom) wartości początkowe podczas jego inicjowania. Użycie konstruktora przy inicjowaniu obiektu: Public Sub New(ByVal A, ByVal B) intBokA = A intBokB = B End Sub Deklaracja konstruktora w klasie Prostokat może wyglądać następująco: P = New Prostokat(CInt(txtBokA.Text), CInt(txtBokB.Text))
Partnerstwo dla Przyszłości 16 Wykorzystanie konstruktorów w aplikacji Public Sub New (ByVal A, ByVal B) ‘konstruktor inicjujący klasę Prostoką pojawi sie przy nim komentarz 1 intBokA = A intBokB = B End Sub Public Sub New (ByVal A, ByVal B, ByVal H) 'konstruktor inicjujący klase Prostropadloscian MyBase.New(A, B) 'wywyołanie konstruktora bazowego ć intWysokosc = H End Sub P = New Prostokat(CInt(txtBokA.Text), CInt(txtBokB.Text)) Pr = New Prostopadloscian(CInt(txtBokA.Text), CInt(txtBokB.Text), CInt(txtWysokosc.Text)) Zadanie4_28
Partnerstwo dla Przyszłości 17 Aplikacja Nowe auto Zadanie5_28
Partnerstwo dla Przyszłości 18 Klasa NoweAuto i klasy potomne