Newsgroup: it.comp.lang.delphi
Titolo: Problema con gli oggetti.

Ciao a tutti,
premesso che la soluzione l'ho trovata, scrivo per chiedere se c'� una 
soluzione meno invasiva al problema seguente:
Ho due oggetti: TOggetto1 e TOggetto2.   In TOggetto1 imposto le propriet� 
di TOggetto2. Ora poich� TOggetto2 � accessibile solo da TOggetto1, per 
impostare le proprieta di TOggetto2 tramite una chiamata a TOggetto1 posso 
farlo in modo meno invasivo?
Spiego meglio cosa intendo per meno invasivo: intendo cio� definire le 
propriet� di TOggetto1 come in TOggetto2 e quindi impostarle alla stregua di 
TOggetto2.
Ora questa procedura mi sembra un po 'macchinosa e non molto pulita, per cui 
chiedevo se c'era un modo pi� semplice, pulito e sbrigativo.
Grazie in anticipo a chi mi risponde.
Cooper. 

Ma derivare Oggetto1 da Oggetto2?


Ecco, sapevo che una soluzione migliore c'era :) Sono nuovo con gli oggetti, 
mi puoi dare qualche esempio per favore o comunque un link da cui poter 
capire come procedere?
Grazie ancora : )
Cooper. 

Dichiari Oggetto1 = Class(Oggetto2)
in questa maniera hai tutte le funzioni di oggetto2 piu' quelle che 
aggiungerai ad oggetto1
Ti consiglio di cercare Incapsulamento Ereditarieta' e Polimorfismo su 
google (ovviamente aggiungi le stringhe Delphi e Oggetto) - di "roba" da 
leggere ce n'e' a tonnellate

 Ecco, sapevo che una soluzione migliore c'era :)
Niente affatto. Non � affatto detto che derivare sia una soluzione
migliore dell'aggregare; tanto meno LA soluzione migliore. Anzi, spesso si
rivela la soluzione sbagliata, perch� quella corretta � l'aggregazione. Ci
sono miliardi di casi che potrei portarti ad esempio. La derivazione �
qualcosa da usare con MOLTISSIMA cautela. Per capire se nel tuo caso va
usata aggregazione o derivazione, devi citare che cosa sono esattamente le
tue classi, che entit� modellano.
Poi, come gi� detto in un altro messaggio, gli "oggetti" sono una cosa, le
"classi" sono un'altra cosa. Usa la terminologia corretta: dovrebbe essere
TClass1 e TClass2, non TOggetto1 e TOggetto2. Ovviamente suppongo che una
nomenclatura che fa uso di progressivi 1, 2, 3... sia solo a scopo
d'esempio e che nella realt� del tuo problema le classi abbiano dei nomi
significativi.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 ha scritto nel messaggio 
news:gc59tr$t3o$1...@nnrp-beta.newsland.it...

Si infatti, per� questo non mi risolve un problema; che poi � quello reale 
(almeno credo).
Nel senso che l'Oggetto1 richiama di fatto due oggetti:  Oggetto2 e 
Oggetto3; ho capito come incapsulare un oggetto in un altro, ma posso 
incapsulare due oggetti o pi� oggetti in uno solo?
In caso affermativo come dovrei procedere?
Grazie ancora,
Cooper. 

 aggiungerai ad oggetto1
Non dare consigli di questo tipo se non conosci il dominio esatto del
problema, perch� rischi di fargli male e di brutto. Ed usa la terminologia
corretta: si tratta di classi, non di oggetti. Decidere se derivare o
aggregare dipende strettamente dal significato di quelle entit�.
La derivazione � uno strumento tanto potente quanto pericoloso, vederla
come un mezzo facile per "estendere" dei comportamenti, � potenzialmente
disastroso. "Estendere" pu� avere dei significati molto subdoli, quindi
bisogna stare attentissimi a quel che si fa.


 Oggetto3;
Tu hai bisogno dell'aggregazione, non della derivazione.
Chiarisci cosa sono queste *classi* (non oggetti).
Cita i loro nomi veri.


 Cooper.
La maniera piu' semplice e' dichiarare i due oggetti (azz CLASSI) 
Oggetto2 ed Oggetto3 nella sezione public di Oggetto1 e, dall'esterno, 
puoi far riferimento a questi con Oggetto1.Oggetto2.Metodo ma in questo 
caso le chiamate non sono controllate dall'oggetto (ari-azz CLASSE) padre.
Se magari posti una descrizione di come dovrebbe essere - e fare - 
sarebbe meglio


Beh i nomi veri sono nomi inventati da me, ovviamente pertinenti con il tipo 
di funzione che devono svolGiusto per non sbagliare... a che ci sono... la 
differenza fra oggetto e classe dove sta? A livello di codice mi sembra che 
siano la stessa cosa, e dalle nozioni informatiche ricevute a scuola tanti 
anni fa non mi risulta ci siano differenze se non di nomenclatura.
Puoi spiegarmi meglio?
 


Si chiaro � a scopo esemplificativo l'uso di questa terminologia.
Cooper. 

 La maniera piu' semplice e' dichiarare i due oggetti (azz CLASSI) 
Hai le idee molto confuse. 


 differenza fra oggetto e classe dove sta?
Te l'ho già spiegato: la classe è il tipo, l'oggetto è l'istanza della
classe.
La differenza è notevole.


> Hai le idee molto confuse. 
Pienamente daccordo....... ma ce le ho!

Unit; nel senso ogni TOggettoN 
Il tipo semmai è TClasseN, non TOggettoN, l'oggetto è l'istanza della
classe. In ogni caso, se vuoi un consiglio su come usare al meglio gli
oggetti, DEVI specificare che cosa modellano quelle classi. Questo
serve se si debba decidere di usare una gerarchia is-a oppure
aggregazione. Leggendo quel che scrivi, mi sembra molto probabile che
tu debba aggregare e non derivare.