Amiga E OOP Tutorial - Codice D'Esempio


MODULE 'tools/exceptions'

-> Queste costanti sono usate dopo per get() e memorize()
ENUM MEMORIZE_NAME=0, MEMORIZE_SURNAME

/*
   Ecco la nostra classe "person"
*/
OBJECT person
  PRIVATE                -> Tutti i dati sono privati
  name:PTR TO CHAR      
  surname:PTR TO CHAR
ENDOBJECT

PROC person() OF person  -> Costruttore dell'oggetto "person"
  self.name:=String(30)
  IF self.name = NIL THEN Raise("MEM")

  self.surname:=String(50)
  IF self.surname = NIL THEN Raise("MEM")
ENDPROC

PROC end() OF person     -> Distruttore dell'oggetto "person"
  DisposeLink(self.name)
  DisposeLink(self.surname)
ENDPROC

PROC clear() OF person   -> Qui puliamo tutte le stringhe
  StrCopy(self.name, '')
  StrCopy(self.surname, '')
ENDPROC

/*
  Questa proc è utilizzata per memorizzare i dati all'interno dell'oggetto.
  Per favore, notate il SELECT, che permette una espansione semplice
  dell'oggetto.
*/
PROC memorize(v, mode=MEMORIZE_NAME) OF person
  SELECT mode
    CASE MEMORIZE_NAME
      StrCopy(self.name, v)
    CASE MEMORIZE_SURNAME
      StrCopy(self.surname, v)
  ENDSELECT
ENDPROC


-> Questo comando ritorna i valori all'interno dell'oggetto
PROC get(mode=MEMORIZE_NAME) OF person
  DEF p=NIL

  SELECT mode
    CASE MEMORIZE_NAME
      p:=self.name
    CASE MEMORIZE_SURNAME
      p:=self.surname
  ENDSELECT
ENDPROC p

/*
    Qui inizia il nostro oggetto ioperson, una classe DERIVATA da
    "person" che permette l'I/O.
*/

OBJECT ioperson OF person
                           -> Non abbiamo nessun altro nuovo campo
ENDPROC

PROC ioperson() OF ioperson  -> COSTRUTTORE classe "ioperson"
  self.person()              -> invochiamo il COSTRUTTORE di "person" 
ENDPROC

PROC end() OF ioperson  -> il DISTRUTTORE di "ioperson" è lo stesso di "person"
  SUPER self.end()      -> Hey, un comando SUPER!!
ENDPROC

-> Questa procedura carica i dati da un file a un oggetto "ioperson"
PROC load(fname) OF ioperson HANDLE  
  DEF fh=NIL, buf[256]:STRING

  IF (fh:=Open(fname, MODE_OLDFILE))=NIL THEN Raise("file")

  FgetS(fh, buf, 255)
  StrCopy(self.name, buf)
  FgetS(fh, buf, 255)
  StrCopy(self.surname, buf)

EXCEPT DO
  IF fh THEN Close(fh)
  ReThrow()
ENDPROC

-> Questa proc salva i dati da un oggetto "ioperson" a un file
PROC save(fname) OF ioperson HANDLE
  DEF fh=NIL

  IF (fh:=Open(fname, NEWFILE))=NIL THEN Raise("file")

  FputS(fh, self.name)
  FputS(fh, self.surname)

EXCEPT DO
  IF fh THEN Close(fh)
  ReThrow()
ENDPROC

-> Ecco un esempietto veloce veloce
PROC main() HANDLE
  DEF iop=NIL:PTR TO ioperson

  NEW iop.ioperson()

  iop.memorize('Fabio')
  iop.memorize('Rotondo', MEMORIZE_SURNAME)
  iop.save('Ram:iopTest')

  iop.clear()

  iop.load('Ram:iopTest')
  WriteF('Nome:\s - Cognome:\s\n', iop.get(), iop.get(MEMORIZE_SURNAME))

EXCEPT DO
  report_exception()
  END iop
  CleanUp(0)
ENDPROC

Pagina Principale


    Scritto Da: Fabio Rotondo      e-mail: fsoft@intercom.it
                C.so Vercelli 9
                28100 Novara
                ITALY               tel:    (ITA) - (0)321 459676