Newsgroup: it.comp.lang.vo-clipper
Titolo: Metodi Access e Assign - Aiuto x favore

Salve a tutto il Ng, sono alle prese con lo studio di Vo (fino ad ora è
quasi tutto chiaro almeno per ora) stò cercando di realizzare un piccolo e
semplice (a dirsi ma non a farmi ) programma tramite i metodi Access e
Assign praticamente voglio far calcolare l'età di una persona sottraendo
l'anno attuale e l'anno di nascita
ES. 2003-1975 = 28 anni
Creo la Classe
                        Class DataNascita
                        PROTECT dNascita AS DATE
Creo il Metodo nCalcoloEta con il Metodo ACCESS
                         ACCESS nCalcoloEta CLASS DataNascita
                           LOCAL nCalcoloEta := 0 AS INT
                           LOCAL dNascita := CToD("20-03-1975") AS DATE
                          nCalcoloEta := Year(Today()) - Year(dNascita)
                          TextBox{,"Calcolo Età","Io ho " +
NTrim(nCalcoloEta) + " Anni"}:Show()
                          RETURN nCalcoloEta
    Creo il Metodo Start con l'oggetto oCalcolo:nCalcoloEta che richiama il
metodo Access che mi mostra il risultato
    Method Start() Class App
    Local oCalcolo := Null_Object AS DataNascita
    oCalcolo:=DataNascita{}
    oCalcolo:nCalcoloEta        // richiamo il metodo ACCESS e ho l'età
dell'individuo
Il mio quesito è questo: io vorrei assegnare il valore della Variabile
dNascita tramite il METODO ASSIGN per poi farlo leggere nel METODO ACCESS
senza dover assegnare il valore della variabile dNascita nel metodo ACCESS.
Spero di essere stato il più chiaro possibile.
E' possibile fare ciò che ho chiesto? Come posso fare?
Ringranziando per l'attenzione
senza né fame e né gloria saluto tutto il Ng
Giuseppe Squitieri

 ha scritto nel messaggio
news:cuGJa.115673$lK4.3...@twister1.libero.it...


 ha scritto nel messaggio
news:7NGJa.232837$g92.5...@news2.tin.it...


                          ACCESS nCalcoloEta CLASS DataNascita
Hai provato
ACCESS nCalcoloEta(dNascita) CLASS DataNascita
Non ho provato ma dovrebbe funzionare
Paolo


 ha scritto nel messaggio
news:bd7f8t$pt637$1...@ID-119280.news.dfncis.de...


 wrote in message
YAHJa.115892$lK4.3...@twister1.libero.it...


Scusami Giuseppe, diamoci del tu vuoi ?, i metodi access ed assign hanno il
compito di rendere accessibili in lettura Access, ed in scrittura Assign le
istanze protect di una classe.
Tutto qui.
Le elaborazioni si fanno con i method
es:
Class miaclasse
protect a as int
//in genere access sono solo 2 righe
access a class miaclasse
return self:a
//in genere assign sono solo 3 righe
assign a(nVal) class miaclasse
self:a := nVal
return self:a=nVal
al limite puoi esagerare con
assign a(nVal) class miaclasse
if valtype(nVal) = "N"
    self:a := nVal
    return self:a=nVal
else
    return false
endif


 l'anno attuale e l'anno di nascita
Prova questa piccola classe che ho scritto, se hai dubbi fammi sapere.
Fai bene ad utilizzare gli ACCESS e ASSIGN per le elaborazioni, servono
anche per questo; e' una sciocchezza utilizzarli solo per ricavarne le
variabili protette.
Da un punto di vista interno a VO non c'e' differenza tra metodi e Access.
Ciao
Paolo Cherubini
CLASS DataNascita
PROTECT dNascita AS DATE
DECLARE ACCESS Data
DECLARE ASSIGN Data
DECLARE ACCESS Eta
METHOD Init(dData) CLASS DataNascita
SELF:Data:=dData
RETURN SELF
ACCESS Data AS DATE PASCAL CLASS DataNascita
RETURN SELF:dNascita
ASSIGN Data(dData) AS DATE PASCAL CLASS DataNascita
IF !Empty(dData) .and. IsDate(dData)
   SELF:dNascita := dData
ELSE
   SELF:dNascita:=NULL_DATE
ENDIF
RETURN SELF:dNascita
ACCESS Eta AS LONGINT PASCAL CLASS DataNascita
LOCAL nEta:=0 AS LONGINT
IF !Empty(SELF:dNascita)
   nEta := LONGINT(Year(Today())) - LONGINT(Year(SELF:dNascita))
ENDIF
RETURN nEta

 Da un punto di vista interno a VO non c'e' differenza tra metodi e Access.
Scusami non mi trovi daccordo, infatti se come giustamente dici non c'e'
differenza tra metodi e Access, a me pare formalmente più corretto
utilizzare access per accedere, e method per eseguire, in ogni caso non
direi che è una sciocchezza, ma un modo diverso di utilizzare strumenti che
il linguaggio mette a disposizione.


Se ho ben capito ... eccoti la soluzione :
---------------------------------------------
CLASS DataNascita
 PROTECT dNascita AS DATE
--------------------------------------------
ASSIGN dNascita(uValue) CLASS DataNascita
RETURN dNascita := uValue
------------------------------------------------
ACCESS nCalcoloEta CLASS DataNascita
  LOCAL nCalcoloEta := 0 AS INT
  nCalcoloEta := Year(Today()) - Year(SELF:dNascita)  ///  <-----  noti ????
  TextBox{,"Calcolo Età","Io ho "+NTrim(nCalcoloEta) + " Anni"}:Show()
RETURN nCalcoloEta
----------------------------------------------------
METHOD Start() CLASS App
    LOCAL oCalcolo AS DataNascita              //  meglio scrivere così !!!
    oCalcolo:=DataNascita{}
    oCalcolo:dNascita := CToD("23/05/58")    //  al metodo ASSIGN dnascita
assegni un valore !!!
    oCalcolo:nCalcoloEta
/*
senza dover assegnare il valore della variabile dNascita nel metodo ACCESS.
      */
Fai bene ad essere così puntiglioso... è così che si impara bene VO !!!
Ciao ciao
Enio

 ha scritto nel messaggio
news:ym0Ka.240554$g92.5...@news2.tin.it...


 Naturalmente questa è solo l'opinione di un umile novizio di VO.
--
Paolo Cherubini


Secondo me, sta scritto nella sintassi, ed il compilatore compila ACCESS in
modo diverso da come compila METHOD.
ACCESS è un metodo, ma di un ben determinato tipo e serve a fare una ben
determinata cosa, che non è possibile fare con lo statement Method.
Curiosità: se passo un secondo parametro ad ACCESS, viene letto ed è
possibile usarlo ?
Ciao
Massimo

 protetta di un'altra classe?"
In C++ si utilizzerebbe il concetto di "friend". In VO non ne ho idea...
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