Ci provo...
L'esempio che mi viene in mente è piuttosto calzante.
Class Triangolo
Private base As Integer
Private altezza As Integer
Sub New(ByVal b As Integer, ByVal a As Integer)
base = b
altezza = a
End Sub
Sub calcolaArea()
Console.WriteLine(base * altezza / 2)
Console.ReadKey()
End Sub
End Class
Ecco: ho costruito una classe Triangolo, che ha come proprietà Private base e altezza, che vengono definite all'atto dell'istanziazione della figura per mezzo del costruttore.
Il metodo calcolaArea restituisce il valore dell'area secondo la formula per il calcolo dell'area di un triangolo.
10Elementare, da un punto di vista matematico.
Tuttavia questo esempiuccio ridicolo offre una serie di sviluppi...
Intanto, istanziamo diversi triangoli di diverse misure.
Sub Main()
Dim figura As New Triangolo(5, 4)
figura.calcolaArea()
Dim figura2 As New Triangolo(6, 7)
figura2.calcolaArea()
Dim figura3 As New Triangolo(3, 6)
figura3.calcolaArea()
End Sub
10 21 9e ci sbizzarriamo a volonta...
Ma adesso facciamo qualcosa di più interessante...
Module Module1
Sub Main()
Dim figura As New Triangolo(5, 4)
Console.WriteLine(figura.Area)
Console.ReadKey()
End Sub
End Module
Class Triangolo
Private base As Integer
Private altezza As Integer
Sub New(ByVal b As Integer, ByVal a As Integer)
base = b
altezza = a
End Sub
Function Area() As Integer
Return base * altezza / 2
End Function
End Class
Ecco qua. Anzichè un metodo che metta a video il risultato del calcolo dell'area, è più serio creare una function che restituisca il valore dell'area, che può poi essere messa a video o usata in qualsiasi altro modo...
10
Ora creiamo una classe Rettangolo!
Class Rettangolo
Inherits Triangolo
Sub New(ByVal b As Integer, ByVal a As Integer)
MyBase.new(b, a)
End Sub
Overrides Function Area() As Integer
Return base * altezza
End Function
End Class
Dato che i costruttori con parametri non si ereditano, devo scrivere esplicitamente il costruttore e richiamare il corrispondente costruttore della classe base.Specifico Overrides dietro a Function.
Ma devo fare tutta una serie di modifiche alla classe base.
Class Triangolo
Protected base As Integer
Protected altezza As Integer
Sub New(ByVal b As Integer, ByVal a As Integer)
base = b
altezza = a
End Sub
Overridable Function Area() As Integer
Return base * altezza / 2
End Function
End Class
- dichiarare Protected le proprietà, altrimenti la classe derivata non le vede;
- dichiarare Overridable la function.
Sub Main()
Dim mioTriangolo As New Triangolo(5, 4)
Console.WriteLine(mioTriangolo.Area)
Console.ReadKey()
Dim mioRettangolo As New Rettangolo(5, 4)
Console.WriteLine(mioRettangolo.Area)
Console.ReadKey()
End Sub
10 20Perfetto!
Ma adesso sorge un dubbio: Perchè un Rettangolo dovrebbe essere una classe derivata da un Triangolo???
Nessun commento:
Posta un commento