z3 – Polimorfizm, pole kwadratu i kola
Copyright © 2017, mgr inż. Janusz Bonarowski 1
z3 - Polimorfizm – (z greckiego) wielopostaciowość; w informatyce pojęcie dla określenia różnych sposobów zachowania metody o tej samej nazwie w zależności od obiektu, na którym jest
wykonywana. Polimorfizm wiąże się ściśle z dziedziczeniem.
Zadanie
Utworzyć aplikację obliczającą pola 2 figur: kwadratu i koła.
Obliczenia wykonamy posługując się metodami o tej samej nazwie Pole.
Realizacja zadania
Zbudujmy klasę bazową Figura_plaska posiadającą
• właściwość Wymiar, pozwalającą zdefiniować długość jednego wymiaru oraz
• metodę Pole zwracającą (jakąkolwiek) wartość. Metoda w tej formie nie będzie wykorzystywana do obliczeń, ponieważ w klasach potomnych zamierzamy zastąpić (mówimy: nadpisać) tę metodę - metodami o tej samej nazwie, ale innej treści.
W takiej sytuacji w klasie bazowej Figura_plaska, w definicji metody Pole musimy użyć słowa kluczowego nadpisywana: Overridable.
Następnie utwórzmy dwie klasy potomne Kwadrat i Kolo (nazwy klas bez polskich znaków diakrytycznych) dziedziczące po klasie Figura_plaska właściwość Wymiar. Obie potomne klasy (Kwadrat i Kolo) będą posiadały swoje metody Pole.
Ponieważ te metody nadpisują metodę klasy bazowej Figura_plaska, o tej samej nazwie,
w deklaracji tych metod (czyli w funkcjach) w klasach potomnych musi być użyte słowo kluczowe
"nadpisuje" Overrides.
Class1.vb
Public Class Figura_plaska
'Klasa bazowa, po niej będzie dziedziczenie.
Private _Wymiar As Single
Public Property Wymiar As Single Get
Return _Wymiar End Get
Set(ByVal value As Single) _Wymiar = value
End Set End Property
Public Overridable Function Pole() As Single ' =========== (tzn. będzie nadpisywana)
Return 1 'Nie ważne jaka wartość, może być 1 lub nic.
End Function End Class
Public Class Kwadrat
Inherits Figura_plaska
Public Overrides Function Pole() As Single ' ========= (nadpisująca)
Return MyBase.Wymiar ^ 2 End Function
End Class
Public Class Kolo
Inherits Figura_plaska
Public Overrides Function Pole() As Single ' ========= (nadpisująca)
Return Math.PI * MyBase.Wymiar ^ 2 End Function
End Class
z3 – Polimorfizm, pole kwadratu i kola
Copyright © 2017, mgr inż. Janusz Bonarowski 2
Form1.vb
Public Class Form1
Dim mojaFigura As Figura_plaska
Private Sub Button1_Click(sender As Object, e As EventArgs) _
Handles Button1.Click mojaFigura = New Kwadrat
mojaFigura.Wymiar = CSng(textBoxWymiar.Text) txtPoleKwadratu.Text = mojaFigura.Pole
mojaFigura = New Kolo
mojaFigura.Wymiar = CSng(textBoxWymiar.Text) txtPoleKola.Text = mojaFigura.Pole
End Sub End Class