JavascriptProva

venerdì 2 agosto 2013

Classe derivata Trapezio dalla classe astratta della figura geometrica: aggiunta di una proprietà nella classe derivata.

Ecco un esempio di overloading!
E' possibile usare una funzione Somma per numeri di diverso tipo.
Posso applicarlo al mio esempio delle figure geometriche...

Ma prima deriviamo dalla classe astratta figura il trapezio, con il calcolo dell'area...

Class Trapezio
    Inherits figura

    Private baseMinore As Integer

    Sub New(ByVal b As Integer, ByVal a As Integer, ByVal bm As Integer)
        MyBase.New(b, a)
        baseMinore = bm
        Console.WriteLine("la base minore è " & baseMinore)
        Console.ReadKey()
    End Sub

    Public Overrides Function Area() As Object
        Return (base + baseMinore) * altezza / 2
    End Function
End Class
Ecco: a parte overridare la funzione per il calcolo dell'area, ovviamente, devo aggiungere fra le proprietà la base minore, e inserirla nei parametri del costruttore.
Le righe in rosso non sono necessarie per la funzione, ma sono un mio test per vedere se effettivamente la base minore viene modificata come da parametri del costruttore, richiamando il costruttore della classe base e aggiungendo la base minore col valore del terzo parametro.
Ecco l'istanziazione e l'output:
    Sub Main()
        Dim mioTrapezio As New Trapezio(5, 3, 2)
    End Sub
la base minore è 2


Perfetto!

Ecco quindi la classe derivata Trapezio:
Class Trapezio
    Inherits figura

    Private baseMinore As Integer

    Sub New(ByVal b As Integer, ByVal a As Integer, ByVal bm As Integer)
        MyBase.New(b, a)
        baseMinore = bm
    End Sub

    Public Overrides Function Area() As Object
        Return (base + baseMinore) * altezza / 2
    End Function
End Class
E adesso, oltre a istanziarla, ne mettiamo a video il risultato della funzione per il calcolo dell'area:
    Sub Main()
        Dim mioTrapezio As New Trapezio(5, 3, 2)
        Console.WriteLine(mioTrapezio.Area)
        Console.ReadKey()

    End Sub
Ed ecco l'output:
10,5


Giusto: infatti (5+2)*3=21 e 21/2=10.5

Bene: HO COMMESSO UN ERRORE CLAMOROSO! Dal momento che nella classe astratta ho dimenticato di specificare il tipo della funzione Area(), l'IDE me l'ha tipizzata automaticamenteo come Object. Per questo ottengo un risultato decimale!
Correggo tutto:
Module Module1

    Sub Main()
        Dim mioTrapezio As New Trapezio(5, 3, 2)
        Console.WriteLine(mioTrapezio.Area)
        Console.ReadKey()

    End Sub

End Module

MustInherit Class figura
    Protected base As Integer
    Protected altezza As Integer

    Sub New(ByVal b As Integer, ByVal a As Integer)
        base = b
        altezza = a
    End Sub

    MustOverride Function Area() As Integer
End Class

Class Triangolo
    Inherits figura

    Sub New(ByVal b As Integer, ByVal a As Integer)
        MyBase.New(b, a)
    End Sub

    Public Overrides Function Area() As Integer
        Return base * altezza / 2
    End Function
End Class

Class Rettangolo
    Inherits figura

    Sub New(ByVal b As Integer, ByVal a As Integer)
        MyBase.New(b, a)
    End Sub
    Public Overrides Function Area() As Integer
        Return base * altezza
    End Function
End Class

Class Trapezio
    Inherits figura

    Private baseMinore As Integer

    Sub New(ByVal b As Integer, ByVal a As Integer, ByVal bm As Integer)
        MyBase.New(b, a)
        baseMinore = bm
    End Sub

    Public Overrides Function Area() As Integer
        Return (base + baseMinore) * altezza / 2
    End Function
End Class
Ed ecco l'output senza decimali:
10



Nessun commento:

Posta un commento