180 likes | 373 Views
Lekcja 28 Dziedziczenie i rodzaje dziedziczenia. Klasa i jej elementy Dziedziczenie klas Polimorfizm Konstruktory klas. Przedstawienie zagadnień. Zaprojektowanie klasy Prostokat. Klasa Prostokat Pola intBokA IntBokB Właściwości BokA BokB Metody Pole.
E N D
Klasa i jej elementy Dziedziczenie klas Polimorfizm Konstruktory klas Przedstawienie zagadnień
Zaprojektowanie klasy Prostokat • Klasa Prostokat • Pola • intBokA • IntBokB • Właściwości • BokA • BokB • Metody • Pole
Utworzenie nowej klasy Prostokat • Zadanie1_28
Aplikacja Bryly i figury • Zadanie1_28 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
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 <BAZOWEJ>. Klasa pochodna może być także klasą bazową dla innej klasy pochodnej. Należy pamiętać, że dziedziczenie dotyczy klas nie obiektów.
Klasa bazowa i klasy potomne • Klasa Prostpadloscian • Pola • intWysokosc • Własciwosci • Wysokosc • Metody • ObliczPoleProstpadloscianu • ObliczObjetoscProstopadloscianu • Klasa Prostokat • Pola • intBokA • IntBokB • Właściwości • BokA • BokB • Metody • Pole • Klasa Ostroslup • Pola • intWysokosc • Własciwosci • Wysokosc • Metody • ObliczPoleOstroslupa • ObliczObjetoscOstraslupa
Klasa Prostopadloscian Public Class Prostopadloscian Inherits Prostokat Private intWysokosc AsInteger 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
Modyfikacja projektu formularza • Zadanie2_28 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
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
Porównanie kodu klasy bazowej i potomnej 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 Public Class Prostopadloscian Inherits Prostokat Private intWysokosc AsInteger Public Property Wysokosc() As Integer End Property Public Function ObliczPOleProstopadloscianu() AsInteger End Function Public Function ObliczObjetoscProstopadloscianu() As Integer Return BokA * BokB * intWysokosc End Function End Class
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).
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 • Zadanie3_28 Public Class Prostopadloscian Inherits Prostokat Private intWysokosc AsInteger Public Property Wysokosc() As Integer End Property Public FunctionOvveridesObliczPOle () AsInteger End Function Public Function ObliczObjetoscProstopadloscianu() As Integer End Function End Class
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
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. • Deklaracja konstruktora w klasie Prostokat może wyglądać następująco: Public SubNew(ByVal A, ByVal B) intBokA = A intBokB = B End Sub • Użycie konstruktora przy inicjowaniu obiektu: P = New Prostokat(CInt(txtBokA.Text), CInt(txtBokB.Text))
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 • Zadanie4_28 P = New Prostokat(CInt(txtBokA.Text), CInt(txtBokB.Text)) Pr = New Prostopadloscian(CInt(txtBokA.Text), CInt(txtBokB.Text),CInt(txtWysokosc.Text))
Aplikacja Nowe auto • Zadanie5_28