Newsgroup: it.comp.lang.vo-clipper
Titolo: Chiamare un metodo di un altra classe

Salve,
ci sto prendendo gusto ma le difficoltà non mancano.
Oltre tutto visto che i manuali sono in Inglese adesso comincio a capire
che mi tocca studiarlo assai meglio..........................
Trovandomi infatti dentro un certo metodo di una certa classe mi serve
chiamare un metodo di un'altra classe come devo fare?
La classe che contiene il metodo da chiamare è una sottoclasse di una
finestra di dialogo e il metodo che lo chiama è di un suo controllo.
Ho provato a chiamare il metodo semplicemente indicando il suo nome
seguito dalle parentesi tonde aperta e chiusa ma mi fa errore in
compilazione dicendo che la funzione è sconosciuta.
se metto MIACLASSE:SUOMETODO() mi fa errore in quanto dice che MIACLASSE
non posso usarla come variabile
Non capisco come devo fare!
Potete spiegarmelo
Grazie
Pietro

 ha scritto nel messaggio
news:3BE15C33...@msn.com...


Se la classe B eredita dalla classe A
un metodo della classe A può essere richiamato con SUPER... esempio :
CLASS A
METHOD Pippo() CLASS A
CLASS B INHERIT A
METHOD Pluto() CLASS B
    SUPER:Pippo()                   <------ metodo della classe A
Ciao
Enio

 chiamare un metodo di un'altra classe come devo fare?
Risposta generica sulla OOP: non si può invocare il metodo di una
"classe" bensì quello di una istanza della stessa (oggetto).
Praticamente, se hai una classe chiamata Fattura non puoi chiamare il
metodo
Fattura:Stampa()
ma puoi istanziare un oggetto fattura, inizializzandolo a dovere, e poi
chiamare il metodo su di esso:
UnaFattura:Stampa()
C'è un'eccezione a questa regola: possono esistere dati o metodi a
livello di classe. Ad esempio, in C++ si indicano i metodi di questo
tipo con la keyword static. Questo tipo di metodi può essere chiamato
attraverso il nome della classe dato che, per definizione, non sono
legati ad alcuna istanza della stessa.
EMG
EMAG Software Homepage:     
http://www.emagsoftware.it
The EMG's ZX-Spectrum Page: 
http://www.emagsoftware.it/spectrum
The Best of Spectrum Games: 
http://www.emagsoftware.it/tbosg

Ti ringrazio e ti e vi chiedo di ampliare le risposte coinvolgendo questa
nuova situazione:
Ho due finestre A e B
la finestra A ha una finestra figlia che chiamiamo AC.
Sulla finestra figlia c'è un pulsante il cui metodo compie delle azioni
sulla finestra B tra cui disabilitazione di un controllo.
Sulla finestra A deve cambiare il valore di una SLE.
Come posso sapere il nome dell'oggetto finestra A e dell''oggetto Finestra B
e viceversa dall'oggetto finestra A e dall'oggetto finestra B come posso
sapere il nome della finetra AC per chiamare un suo metodo?
Grazie
Pietro


 sapere il nome della finetra AC per chiamare un suo metodo?
Beh, da qualche parte queste finestre le avrai pure istanziate e quindi
avrai "appoggiato" il loro "handle" in una variabile, giusto? Ecco, devi
fare in modo che tali variabili siano visibili (possibilmente passandole
come parametro e non rendendole pubbliche, mi raccomando!) dove ti
servono.
Non so come funziona VO ma, ad esempio, in Visual Basic (orrore!) tutti
nomi delle form (in pratica delle variabili di cui sopra) sono pubblici
(doppio orrore!). Questo in Clipper/Fivewin non succede... :-)


 ha scritto nel
messaggio news:3BE265DD...@emagsoftware.it...

Fortunatamente anche in Vo dette variabili non sono pubbliche.
per renderle accedibili si possono definire dei metodi di tipo ACCESS (in
pratica le variabili di tipo read-only del C++) nel seguente modo:
class A
   protect AC as FinestraFiglia
ACCESS AAC() class A
return SELF:AC
con questo sistema rendo disponibile l'instanza della classe AC.
Stessa cosa sarà per la variabile che contiene il controllo (pushbutton)
contenuta in AC.
Ciao,
    Fabrizio Malaguti

 pratica le variabili di tipo read-only del C++)
Mi sa che stai facendo un pochino di confusione nei termini utilizzati.
Un metodo per l'accesso ai dati privati (accessor) è un modo controllato
di accedere ad un dato che risulta completamente invisibile dall'esterno
(non solo read-only).
Comunque è fortemente sconsigliato ragionare in questi termini. Un
metodo deve fornire un servizio non l'accesso ad un dato privato.
Altrimenti si rompe comunque l'information hiding, uno dei concetti
cardine della OOP e di tutta l'informatica moderna dalla programmazione
strutturata in poi.
Inoltre in C++ esistono le const (appunto variabili di tipo read-only)
ma non hanno niente a che vedere con i metodi accessors.



Non credo di far confusione. In VO l'astrazione dei dati si effettua con due
metodi ACCESS (per accedere alle variabili d'instanza) e ASSIGN ( per
modificarle). Quindi se definisco una variabile d'instanza di tipo PROTECT o
HIDDEN per utilizzarla dall'esterno utilizzo i suindicati metodi. Lo scopo è
quello di non permettere l'accesso diretto alla variabile d'instanza (quindi
di avere codice più robusto). Ovvio che potrei tradurre tutto ciò definendo
la variabile di tipo EXPORT ma così perderei la possibilità di un pieno
controllo della variabile.
Per simulare una variabile d'instanza di tipo read-only del C++ occorre, in
VO, definire detta variabile come PROTECT o HIDDEN e creare soltanto il
metodo ACCESS.
Sei sconvolto da questo tipo di approccio di VO alla OOP?
Ti confesso che anch'io all'inizio lo ero (dopo aver visto lo SMALLTALK e il
C++), in seguito ho apprezzato questo modo di concepire l'astrazione dei
dati di VO. Ti confesso però che il modo seguito dal C++ forse mi piace di
più (nel senso che è più ortodosso) però se ci pensi il metodo di VO ha un
senso logico e pratico.
Ciao,
    Fabrizio Malaguti
P.S.
Per metodi ACCESSORS cosa intendevi?


 Per metodi ACCESSORS cosa intendevi?
Quelli che permettono l'accesso alle variabili private della classe. E,
come ho detto, non sono una buona pratica.


 EMG
Ok ho ripassato il C++ di bjarne Stroutrup ( si chiama cosě?) ultima
edizione e non esiste il tipo read-only perň una 15-ina di anni fa quando il
c++ diventava popolare, in alcune riviste c'erano variabili definite come
readonly ( o prendo un granchio? ).
Il problema č che tutto č in evoluzione e non ci si puň fermare un minuto
(sig).
Scherzi a parte comunque il succo del mio discorso era che č possibile
creare una variabile di sola lettura dichiarandola HIDDEN e il suo metodo
ACCESS.
Scusami se non sono cosě preciso. Mi manca il tempo per farlo e poi sono
sicuro che non mi risponderebbe piů nessuno.
Ciao,
    Fabrizio Malaguti

 ha scritto nel
messaggio news:EobG7.23362$zu5.8...@news1.tin.it...

Preciso meglio.
Mi piacerebbe essere piů preciso. Non avendo troppo tempo vado piů a memoria
che col libro in mano, sperando che i miei concetti espressi siano
comprensibili ai piů. Chiedo venia di ciň.
Pensiero filosofico:
Se scrivessi in maniera precisa e con concetti esatti, perň ho paura che al
massimo mi risponderebbero con un "ok la penso come te. ". Io preferisco, al
contrario, conoscere come la pensano gli altri in quanto ritengo che sia il
modo migliore per acquisire nuove conoscenze.
Ciao,
   Fabrizio Malaguti
P.S.
Ti faccio i miei complimenti perchč vai sempre a fondo nei problemi cercando
di essere il piů preciso possibile.
Penso che tu sia un buon maestro.

 sicuro che non mi risponderebbe piů nessuno.
Perché mai? Io ti sto rispondendo, no? :-)


 Penso che tu sia un buon maestro.
Ti ringrazio.
