Newsgroup: it.comp.lang.vo-clipper
Titolo: utilizzare metodi di altre classi

buon giorno,
scusate la mia ignoranza, ma sulla base della eleganza, praticità ed economia del codice scritto è una domanda che penso dover fare.
Nella classe DemRicettaEsente ho creato il metodo Privacy.
Lo stesso metodo dovrebbe essere utilizzato nella classe DemRicettaTicket.
Me la sono cavata con un copia incolla poco elegante ma efficace per cui ho creato il metodo privacy class DemRicettaTicket. 
Rimane la curiosità di sapere se sia possibile utilizzare metodi di altre classi e come.Posto il principio che utilizzano le stesse variabili (Anagrafe e Protocollo).
grazie sempre e comunque
Aurora Baccio


Puoi utilizzare l'ereditarieta', creando una classe "base" che contiene 
tutte le proprieta' ed i metodi comuni, poi nella definizione delle 
altre classi metterai la clausola per ereditare dalla classe base.
Le classi derivate conterranno tutte le proprieta' ed i metodi comuni 
della "base", senza bisogno di dichiararli.

Buon giorno Aurora,
 
come Le è già stato risposto: bisogna ereditare le due classi a una
classe comune, creando magari una classe DemRicettaBase e ereditare le
altre classi da quella, 
p.es
. class DemRicettaTicket inherit
DemRicettaBase.
 
Questo tipo di funzionalità è magari una delle caratteristiche più
importanti della programmazione a oggetti.
 
Poi ci sarebbe ancora la possibilità di scrivere una terza classe che
implementa il metodo Privacy - questo si potrebbe usare nel caso che
non fosse possibile usare la eredità.
 
Wolfgang

-- 
 


grazie delle risposte,
io ho creato una classe base, DemPrivacyBase. Fin qui c'ero arrivata.
Utilizzando il poco elegante sistema precedente nel momento il cui il metodo accerta che il paziente non ha firmato l'informativa viene richiamato il metodo DemPrivacy class DemRicettaEsente che procede con la stampa della informativa e segnala in anagrafe l'avvenuta stampa.( self:DemPrivacy)
Il tutto funziona egregiamente.
Penso di avere capito che debbo trasformare questo metodo (DemPrivacy) della classe DemRicettaEsente in DemPrivacy inherit DemPrivacyBase, semplicemente. 
Quando richiamo (self:DemPrivacy) il metodo provvederà a richiamare la classe corretta.
Verrebbe quindi scritto così : method DemPrivacy inherit DemPrivacyBase. Niente altro.
È corretto ??
grazie
aurora baccio

Buon giorno Aurora,
 
spiego con un esempio banale:
 
class Pippo
  protect _cMessaggio as string
 
method Ciao class Pippo
  InfoBox{ , "", _cMessaggio }:Show()
  return nil
 
class Pallino inherit Pippo
 
method Init() class Pallino
  _cMessaggio := "sono Pallino"
  self:Ciao() // -> sono Pallino
  return self
 
class Tizio inherit Pippo
 
method Init() class Tizio
  _cMessaggio := "sono Tizio"
  self:Ciam() // sono Tizio
  return self
 
function Prova()
  local oPallino as Pallino
  local oTizio as Tizio
 
  oPallino := Pallino{}
  oTizio := Tizio{}
  oPallino:Ciao() // -> "sono Pallino"
  oTizio:Ciao() // -> "sono Tizio"
 
  return nil
 
Questo in VO funziona perchè tutti i metodi sono virtuali e perciò
viene cercato nella gerarchia delle classi fino a trovare il metodo
giusto.
 
Inoltre funziona anche questo:
 
method Ciao() class Pallino
 
  // altro codice
  super:Ciao()  // -> "Sono Pallino"
  // altro codice
 
  return nil
 
Tutto chiaro?
 
Wolfgang

-- 
 


buon giorno,
si, tutto chiaro. Questo spiega dove erravo.
grazie
Aurora Baccio

Il giorno venerdì 27 luglio 2018 16:09:54 UTC+2, 
aurora...@gmail.com
 ha scritto:

buona sera,
contrariamente a questo pensavo non ho risolto l'errore.
rifacendomi all'esempio del signor Riedman, al posto di _cMessaggio := "sono pallino", io debbo inserire una variabile che chiaramente proviene da altra classe. 
In pratica non sono come trasferire la variabile dalla classe ElencoPazienti alla classe Pallino inherit Pippo.
Ho creato la riga export CopCodicePaziente as string nella Classe Elenco Pazienti, ma a questo punto mi fermo.
Come 'informo' cMessaggio
grazie
Aurora Baccio

Buon giorno,
 
questa variabile deve venire da un'altra classe fuori dalla gerarchia?
 
Praticamente non da DemRicettaTicket e non da DemRicettaEsente?
 
Saluti
 
Wolfgang

-- 
 


no, la variabile viene dall'interno di dem...
in ogni caso ho risolto con variabili globali e sono sicura che sbaglio stupidamente. Ancora non ho capito dove, ma so che sbaglio io in qualche metodo.
grazie comunque dell'aiuto
aurora baccio

 in qualche metodo.  grazie comunque dell'aiuto aurora baccio
 
variabili globali normalmente sono una pessima soluzione.
 
La variabile andrà messa nella classe padre, DemRicettaBase, e potrà
essere accessa allora da tutte e tre le classi (se non viene definita
come hidden).
 
Saluti
 
Wolfgang
 
 
 
-- 
 

Il giorno venerdì 27 luglio 2018 16:09:54 UTC+2, 
aurora...@gmail.com
 ha scritto:

Buona sera a tutti,
ho creato Class PrivacyPazienti
Protect PrivacyCodice as string
Protect PrivacyNome as string
Protect PrivacyCoFi as string
 
quindi do Creato il metodo:
Method CreaPrivacy Class PrivacyPazienti
...codice
 
return nil
 
Ho quindi creato la classe :
Class PrivacyEsenti inherit PrivacyPazienti
La privacy dei pazienti esenti è sostanialmente diversa dai pazienti che pagano un ticket o da quelli a pagamento (cosiddetti pazienti privati), da qui la triplice suddivisione. 
 
nel metodo VaBene della classe DemRicettaEsente ho inserito
 
Local oPrivacy as PrivacyEsenti
 
------Codice
 
oPrivacy     := PrivacyEsenti{}
 
oPrivacy:CreaPrivacy()
 
return nil
 
e se utilizzo le variabili globali per le protect tutto funziona bene.
Giustamente le variabili globali sono una cattiva soluzione, ma come 'informo' la classe PrivacyPazienti ?
Ho creato delle variabili export in DemRicettaEsente, ma non sono come esportarle.
Qui sta il tutto.
Grazie
Aurora Baccio

Buon giorno Aurora,
 
una variable export è disponibile dall'esterno della classe. Una
variabile protect è disponbile all'interno della classe e di tutte le
sottoclassi:
 
class Persona
  protect cProtetta as string
  export cExport as string
 
class Pippo inherit Persona
 
method Prova() class Pippo
  cProtetta := "ok"
  cExport := "ok"
  return nil
 
function Prova()
  local oPippo as Pippo
 
  oPippo := Pippo{}
  oPippo:cExport := "ok"
  oPippo:cProtetta := "ko" // errore di compilazione
 
  return nil
 
Saluti
 
Wolfgang

-- 
 

Buon giorno Aurora,
 
penso che export oppure variabili globali non siano la soluzione pulita.
 
Ovviamente è lecito fare le domande, ma penso che ci sia proprio un
problema di capire bene come dovrebbe funzionare.
Penso che qui non riesco a spiegare - magari possiamo fare
telefonicamente e con una sessione TeamViewer/AnyDesk. Questa comunque
è una cosa che generalmente non faccio, ma penso che non risolveremo
in altro modo.
Se è interessata, me lo faccia sapere per mail: wriedmann at gmail dot
com, oppure trova il mio indirizzo anche sul mio sito 
riedmann.it
 
 
Saluti
 
Wolfgang

-- 
 

Il giorno venerdì 27 luglio 2018 16:09:54 UTC+2, 
aurora...@gmail.com
 ha scritto:

buon giorno,
ho risolto tutti i problemi legati alla ereditarietà, in particolare al passaggio delle variabili da una classe ad un'altra.
Grazie dei consigli, delle dritte e del sostegno.
Sono una ragazza testarda, e questo mi ha aiutato, ma non senza il suo sostegno.
In pratica è bastato creare la classe non semplicemente class PrivacyPazienti, ma class PrivacyPazienti inherit Datadialog.
A questo punto le variabili export 'passano' dalla classe principale, e questo fa lavorare perfettamente la classe PrivacyPazienti, che non è più duplicata in tutte le procedure in cui serve, ma è unica per l'intero applicativo e quindi applicabile senza problemi dove serve.
Dopo ferragosto farò lo stesso per le copertine, il tutto nel preciso intento di svecchiare e snellire l'applicativo.
In ogni caso è solo per dirle che il suo aiuto è stato valido.
grazie
Aurora Baccio

Grazie, mi fa piacere che i problemi sono stati risolti.
 
Saluti
 
Wolfgang

--