Autore Topic: Funzione Sovrascrivibili  (Letto 2512 volte)

Offline xstriga

  • Gamberetto
  • *
  • Post: 8
    • Mostra profilo
Funzione Sovrascrivibili
« il: 10 Marzo 2014, 14:42:17 »
Mi sembra di capire che ogni funzione può essere sovrascitta in una classe derivata..
1. Ma nel caso volessi impedire ad una funzione specifica di essere sovrascritta in una classe derivata come posso fare ?
2. L'IDE di Gambas non prevede di creare nelle classi derivate le funzioni che posso essere sovrascritte ?

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Funzione Sovrascrivibili
« Risposta #1 il: 10 Marzo 2014, 14:45:32 »
Mi sembra di capire che ogni funzione può essere sovrascitta in una classe derivata..

Scusa la mia inesperienza, cosa intendi per "sovrascrivere una funzione" ?
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline xstriga

  • Gamberetto
  • *
  • Post: 8
    • Mostra profilo
Re: Funzione Sovrascrivibili
« Risposta #2 il: 10 Marzo 2014, 14:57:56 »
http://it.wikipedia.org/wiki/Overriding

Metodo Ridefinito nella Classe Derivata ....

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Funzione Sovrascrivibili
« Risposta #3 il: 10 Marzo 2014, 16:11:51 »
Mi sembra di capire che ogni funzione può essere sovrascitta in una classe derivata..
1. Ma nel caso volessi impedire ad una funzione specifica di essere sovrascritta in una classe derivata come posso fare ?
2. L'IDE di Gambas non prevede di creare nelle classi derivate le funzioni che posso essere sovrascritte ?

Non so come si comporta Gambas ma se definisci il metodo come privato, la classe ereditata non dovrebbe riuscire a modificarlo. Questo però non sempre è vero. Rimane solo da effettuare dei test. Tuttavia non capisco il perchè un metodo di un genitore non dovrebbe essere modificato da un figlio. Da dove nasce questa esigenza?

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.243
  • Tonno verde
    • Mostra profilo
Re: Funzione Sovrascrivibili
« Risposta #4 il: 10 Marzo 2014, 16:19:09 »
http://it.wikipedia.org/wiki/Overriding

Metodo Ridefinito nella Classe Derivata ....


Guarda se ti può essere utile questo. Tratto dal sito uficiale

Codice: [Seleziona]
' MyListBox class
INHERITS ListBox

PRIVATE $cPos AS NEW Collection
PRIVATE $aKey AS NEW String[]
...

' Reimplements the Add method
PUBLIC SUB Add(Text AS String, Key AS String, OPTIONAL Pos AS Integer = -1)

  ' Adds the item to the list box
  SUPER.Add(Text, Key, Pos)
  ' Adds the key to key array
  IF Pos < 0 THEN
    $cPos.Clear
    $cPos[Key] = $aKey.Count
    $aKey.Add(Key)
  ELSE
    $aKey.Add(Key, Pos)
  ENDIF

END


ciao gianluigi :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline xstriga

  • Gamberetto
  • *
  • Post: 8
    • Mostra profilo
Re: Funzione Sovrascrivibili
« Risposta #5 il: 10 Marzo 2014, 17:27:06 »
Sinceramente stò solo cercando di farmi un idea sulle potenzialità e limiti da Gambas.. Trovo la documentazione caotica o poco esaustiva.

Tanto per fare un paragone con Visual Basic.Net per definire un Metodo ridefinibile utilizzo la parola chiave Overridable ( se non la uso tale metodo non è ridefinibile ).
Per ridefinirlo utilizzo Overrides... Poi se voglio nascondere il metodo della classe base utilizzo Shadows...
Per l'Overloading utilizzo la parola chiave Overloads...
Nel caso voglio che una classe base ( astratta ) debba per forza essere ereditata utilizzo MustInherits...

Cercavo solo di fare un paragone tra i due linguaggi.. poi decidò come procedere...

Grazie
« Ultima modifica: 10 Marzo 2014, 17:28:59 da xstriga »

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Funzione Sovrascrivibili
« Risposta #6 il: 10 Marzo 2014, 18:21:32 »
Sinceramente stò solo cercando di farmi un idea sulle potenzialità e limiti da Gambas..

Fai benissimo. È una cosa saggia.

Cercavo solo di fare un paragone tra i due linguaggi.. poi decidò come procedere...

Se hai l'esigenza di usare VB allora usi VB. Gambas non è VB. In comune hanno solo il fatto che provengono dal BASIC ma non sono la stessa cosa e Gambas non nasce per essere un clone di nulla e di nessuno. Sarebbe come fare il paragone tra il sapore di una mela e di un cavolfiore. Sono entrambi prodotti vegetali ma nessuno dice che devono essere uguali.

Offline xstriga

  • Gamberetto
  • *
  • Post: 8
    • Mostra profilo
Re: Funzione Sovrascrivibili
« Risposta #7 il: 10 Marzo 2014, 18:37:20 »
A parte la retorica ... Vogliamo fare un pò di cultura iniziando dalle mie considerazioni ?
Rispondiamo alle seguenti domande :
- Le classi in Gambas sono tutte ereditabili ?
- Non esistono parole chiave per imporre che una classe debba essere ereditata e non creata ?
- Per sovrascrivere un metodo basta solo riscriverso nella classe derivata con la stessa firma ?
- In gambas esiste l'overloading ? Come si applica ?

Grazie

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Funzione Sovrascrivibili
« Risposta #8 il: 11 Marzo 2014, 02:04:17 »
.... seguenti domande :

Ciao, volevo sapere se al riguardo nel frattempo avevi eseguito qualche test.
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline xstriga

  • Gamberetto
  • *
  • Post: 8
    • Mostra profilo
Re: Funzione Sovrascrivibili
« Risposta #9 il: 11 Marzo 2014, 12:02:33 »
Naturalmente .. tempo permettendo ...!!
Qui ho trovato maggiori dettagli :
http://files.allbasic.info/Gambas/help/help/doc/object-model.html
e in una discussione, in spagnolo, mi sembra di aver capito che per l'overloading non ci sia niente da fare.. poichè normalmente
tale compito viene demandato al compilatore.
Essendo Gambas un linguaggio imperativo, fortemente e staticamente tipizzato non è possibile sperare che tale funzione venga inserita anche in futuro (spero di sbagliarmi).

Ora prima di fare un punto sulla situazione stò cercando di capire come ottenere il tipo di un istanza di un oggetto ereditato.
La funzione typeof mi restituisce solo che l'oggetto creato è un object .. a mè interessa sapere che tipo di oggetto ho creato.
Es..
1. Creao una classe xObject con le sua variabili, proprietà e metodi..
2. Eredito dale classe in xLine e aggiungo variabili, proprietà e metodi..
3. Una classe Document mi gestisce la creazione degli oggetti .. per esempio creo una xLine e la aggiungo ad una collezzione di xObject
4. Ora per visualizzare il tutto itero la collezione e eseguo un metodo comune presente in xObject .. per esempio Draw()..
5. Se devo manipolare un singolo oggetto xObject avrei la necessità di sapere se è una xLine o un altro tipo di oggetto e quindi eseguite un Casting
   Es.. http://www.codeproject.com/Articles/5044/Cheat-Sheet-Casting-in-VB-NET-and-C
   Se non è implementato inserisco una variabile interna, magari di tipo STATIC ed una proprietà in sola lettura.. ( vediamo )


Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Funzione Sovrascrivibili
« Risposta #10 il: 11 Marzo 2014, 12:52:18 »
La funzione typeof mi restituisce solo che l'oggetto creato è un object .. a mè interessa sapere che tipo di oggetto ho creato.

Scusami, hai provato Object.Type(...) ?
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline xstriga

  • Gamberetto
  • *
  • Post: 8
    • Mostra profilo
Re: Funzione Sovrascrivibili
« Risposta #11 il: 11 Marzo 2014, 13:26:13 »
Sto appunto leggendo dell'oggetto statico Object e dei sui metodi ...
Ora vedo se esiste il Casting o visto che sono disponibili i puntatori come procedere...  8)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Funzione Sovrascrivibili
« Risposta #12 il: 11 Marzo 2014, 16:45:27 »
Ho tentato di fare qualche prova, seppur semplice e di getto. Mi sembra - se ho effettuato correttamente le prove  :-\ - che non sia possibile l'Overriding né l'Overloading.
« Ultima modifica: 11 Marzo 2014, 17:15:29 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline xstriga

  • Gamberetto
  • *
  • Post: 8
    • Mostra profilo
Re: Funzione Sovrascrivibili
« Risposta #13 il: 11 Marzo 2014, 17:24:25 »
L'Overriding si ... se riscrivi la funzione nella classe derivata con la stessa filma .. L'Overloading .. no ... ( non puoi scrivere la stessa funzione con firme differenti )
Esempio :

Classe 1
  Public Sub Prova()
     Print "Classe 1"
  End Sub

Classe 2
  Inherits Classe 1

  'Ridefinisco Prova
  Public Sub Prova()
     Print "Classe 2"
  End Sub

'Non posso nascondere il metodo della classe base .. come con Shadows
'Posso sempre chiamare il metodo della classe base con Super.Prova

Quello che non posso fare è l'overloading, ossia nella stessa classe definire la stessa funzione con firme differenti :

Public Sub Prova()

Public Sub Prova(item as integer)

Public Sub Prova(item as long)   8)

'Per il Casting direi che non ci sono funzioni specifiche a parte la conversione di interi e stringhe..
'Abbiamo i Variant ed il tipo di oggetto al quale fanno riferimento ..



    
« Ultima modifica: 11 Marzo 2014, 17:59:07 da xstriga »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Funzione Sovrascrivibili
« Risposta #14 il: 11 Marzo 2014, 17:29:06 »
Bene.
Sarebbe interessante scrivere qualcosa nella nostra WIKI al riguardo.
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »