Newsgroup: it.comp.lang.visual-basic
Titolo: inheritance - ancora mi sfugge

Ritorno da una stressante sessione di Javascript finalizzata all'apprendimento
della programmazione ad oggetti. Vediamo un po' se ho capito cos'è
l'inheritance...
["traduco" la mia funzione in Visual Basic - infatti, se non lo sapeste, in
realtà niente di quello che vedete è possibile in VB]
Public Sub Rect(x As Long, y As Long)
' In Javascript le funzioni sono degli oggetti. This è un alias della funzione
' stessa (inoltre - sì gente - in Javascript si possono aggiungere metodi
' e proprietà a runtime a qualsiasi oggetto, anche intrinseco, anche se
' più che di metodi, proprietà, ecc, dovremmo parlare di sotto-classi,
' dato che i tipi di dati non esistono, persino stringhe e numeri sono in
' realtà oggetti)
This.height = y
This.width = x
This.GetPerimeter = New Function("GetPerimeter = (This.height + This.width) *
2")
End Sub
ogni volta che io da qualche parte dichiaro che:
Dim myrect as Object
myrect = New Rect(100, 10)
da quel momento in poi per avere il perimetro potrò fare:
perimetro = myrect.GetPerimeter()
Mi spiego. Un oggetto Rect avrà questa struttura:
Rect
    - height
    - width
    - GetPerimeter()
dove GetPerimeter è una funzione creata "dal nulla", e che in pratica sarebbe:
Public Function GetPerimeter()
GetPerimeter = (This.height + This.width) * 2
End Function
(in realtà la si potrebbe addirittura nidificare nella Rect:
Public Sub Rect(...)
...
    Public Function GetPerimeter()
    ...
    End Function
End Sub
ma ho notato che non funziona altrettanto bene rispetto ad assegnare un oggetto
funzione ad una proprietà dell'oggetto Rect)
Ok, dopo tutta la pappardella faccio notare:
Public Function GetPerimeter()
GetPerimeter = (This.height + This.width) * 2
End Function
Non vi è alcun accenno al rettangolo di cui vogliamo sapere il perimetro, eppure
la funzione... funziona! Voi direte: ci sono This.width e This.height. Ma This è
un oggetto privato! Almeno, se viene usato all'interno di una funzione si
riferisce non all'ambiente dell'applicazione in generale, ma alla funzione
stessa. In pratica, sembra quasi che in realtà la struttura sia _questa_,
piuttosto che quella descritta più su:
Rect
    - height
    - width
    - GetPerimeter()
        - height
        - width
In pratica la funzione (ma chiamiamolo pure oggetto) GetPerimeter _sembra_
ricevere tutti gli attributi del genitore senza doverci scrivere una sola linea
di codice! (peraltro impossibile farlo da codice, perchè in Javascript non c'è
modo di risalire all'oggetto parent). Provato dal fatto che GetPerimeter()
dichiarata all'esterno di Rect causa un errore, dal momento che sia This.height
sia This.width contengono undefined (cioè: variabile non dichiarata)
Allora, è questa la famosa inheritance?

Mi sono perso il primo messagio ma vorrei dire alcune cose:
1. inheritanche o ereditarieta' vuol dire poter definire una classe ereditando il comportamento di un'altra classe e modificare una parte dei metodi.
2. in visual basic questo si puo' fare tra classi con la keywork IMPLEMENTS; vb permette di implementare interfacce o classi virtuali, ovvero classi che hanno tutti i metodi vuoti; la forte limitazione e anche la "rottura" e' che bisogna implementare per forza tutti i metodi della classe di riferimento.
3. l'ereditarieta' del vb deriva da quella di COM.
4. in vb7 pare che ci sara' l'ereditarieta' alla C++.
Antonio

 Forse potresti avere migliori chiarimenti da un newsgroup specifico.
Del tipo? Non credo ci sia qualche folle che ha fondato
it.comp.lang.non-vb.oop.inheritance.beginners...

 molte cose (a me era stato molto utile).
Non credo che potrò andarci, mi sono auto-tagliato l'abbonamento oggi, solo
Newsgroup d'ora in poi :-(
Vedrò se trovo qualcosa, e grazie di tutto.