Oppure

Loading
24/06/10 11:45
Come fare? Se dovessi dichiarare un tipo derivato lo dichiarerei direttamente nell'interface. Però in questo caso mi serve implementare i metodie i costruttori/distruttori che dichiaro nella classe. Dove le metto le dichiarazioni di tali elementi? E dove dichiaro la classe???
24/06/10 13:04
Phi
La dichiarazione del tipo del tipo :
type
<nome> = object
private
...
public
...
end;
va inserita nell'interface.

Le procedure le dichiaro nell'implementazione.
Ultima modifica effettuata da Phi 24/06/10 13:04
aaa
24/06/10 14:28
Saladino
Ecco il sorgente :


unit Prova;

interface

type
  TProgrammatore = object
   private  //tutti i dati privati
     Linguaggio : String;
     Sito       : String;
   public   //le funzioni per la gestione dei dati 
     constructor Init;
     function  PrendiLin : String;
     function  PrendiSit : String;
     procedure SettaLin(NewLin : String);
     procedure SettaSit(NewSit : String);
  end;

  TEred = object(TProgrammatore)
   private
     
   public
     constructor Init; 
  end;

implementation

constructor TProgrammatore.Init;
begin
 Linguaggio  := '';
 Sito        := '';
end;

function  TProgrammatore.PrendiLin : String;
begin
 PrendiLin  := Linguaggio;
end;

function  TProgrammatore.PrendiSit : String;
begin
 PrendiSit  := Sito;
end;

procedure TProgrammatore.SettaLin(NewLin : String);
begin
 Linguaggio := NewLin ;
end;

procedure TProgrammatore.SettaSit(NewSit : String);
begin
 Sito := NewSit;
end;

constructor TEred.Init;
begin
 inherited Init; //eredita tutto ciò di TProgrammatore
 writeln('Questa è una classe ereditata');
end; 

end.



Nota la notazione a punto simile a quella dei record.

Ricorda di non mettere mai dati nella sezione public.
Questo garantisce infatti il mantenimento dell'incapsulamento.
Ultima modifica effettuata da Saladino 24/06/10 14:29
aaa
24/06/10 14:28
Saladino
La cosa migliore che ti consiglio è di andare al sito FreePascal e vedere la documentazione.
E' molto dettagliata.
Ultima modifica effettuata da Saladino 24/06/10 14:33
aaa
24/06/10 15:47
Grazie mille per la risposta. Non capisco però perchè non dovrei mettere dati nella public. Anzi per meglio dire, non ho capito proprio perchè c'è la divisione tra public e private..io considero la classe come un tipo derivato arricchito di procedure, funzioni, costruttori e distruttori..
24/06/10 19:02
Poggi Marco
Lo scopo delle classi, in programmazione, è quello di elaborare i dati in maniera sicura, e "semplice".
Di conseguenza, è importante non trattare direttamente le variabili.

In pascal, ho notato che i qualificatori public, protect e private, funzionano solo se le classi vengono implementate nelle unità.
aaa
24/06/10 19:10
Quindi dovrei modificare i dati tramite le procedure contenute nella classe? Ma allora che differenza c'è tra mettere un determinato dato nel membro public o private?

Cerco di spiegarmi meglio...i dati contenuti nella private sono modificabili solo dalle procedure/metodi/constructors/distructors contenuti nella classe e non da elementi esterni alla classe, no?..ma se io devo modificare tali dati con una procedura/metodo/constructor/distructor contenuta nella classe che senso ha fare distinzione tra i due membri (quando si va a dichiarare un determinato dato)? se un dato va o non va modificato con elementi esterni alla classe in fondo io (programmatore) lo so e userò solo procedure appartenenti alla classe per modificarlo, quindi qual'è il senso di tutto ciò???
Ultima modifica effettuata da 24/06/10 19:11
24/06/10 19:22
Poggi Marco
Fa differenza eccome!!

All' inizio, è difficile rendersene conto, ma immagina di progettare una classe che risolva un determinato problema.
Quindi , a questo punto, altri possono utilizzare senza problemi il tuo lavoro perchè i dati sono trattati esclusivamente dalle funzioni interne della classe. Non è neanche necessario confrontarsi nuovamente con la complessità del problema, basta solo sapere lo scopo delle funzioni, e quali dati ricevono.

Inoltre, col meccanismo dell' ereditarietà, è molto semplice ampliare o modificare la classe.
aaa