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