Newsgroup: it.comp.lang.c++
Titolo: Filosofia OOP

Salve NG,
vi pongo subito il quesito:
ho una classe A che esegue una certa funzione;
poi ho 3 classi B, C e D che considero dipendenti
di A (es.: si immagini l'inserimento di record correlati
in un DB, A mi inserisce un master e le altre classi i Detail).
Vorrei sapere se il C++ o altro linguaggio OOP
mi consente di istanziare B, C, o D, di eseguire la relativa
funzione, e AUTOMATICAMENTE mi esegua il codice definito
nella classe , cioč io non devo invocare esplicitamente la chiamata
alla funzione della classe A.
Esempio:
istanzio B
(automaticamente voglio che mi venga istanziato A)
eseguo B.FunzioneB
(automaticamente mi venga eseguito A.FunzioneA)
grazie
ciao
Tommaso Caldarola     mailto:
t.cal...@cresb.it

 alla funzione della classe A.
Non vedo il problema. Basta far eseguire il tutto nel costruttore della
classe che devi istanziare. Ma forse non ho capito bene la domanda...
EMG

 
Questo lo puoi ottenere solo indicando, nella
implementazione di FunzioneB, dove e quando
la FunzioneA vada invocata (prima del resto delle
funzionalita` di FunzioneB?  dopo tutte le altre?
nel bel mezzo...?).  Ad esempio:
	class A: ...
	class B: private A {
		void FunzioneB {
			qualcosa();
			FunzioneA();
			qualcosaltro();
		}
		// ... ecc ...
	}
In altri termini, il codice-cliente non ha bisogno di
sapere che invocare una FunzioneB su di un oggetto
di classe B implica automaticamente l'esecuzione
anche di una FunzioneA su di un certo oggetto di
classe A (che qui ho usato come base per l'oggetto
di classe B, ma, base privata, quindi "dettaglio di
implementazione"); ma il codice che implementa
FunzioneB deve specificare come e qualmente, e
soprattutto quando (e con quali eventuali argomenti,
se ve ne sono) la FunzioneA vada invocata.
Per la creazione, dichiarare A come base di B
implica necessariamente che l'oggetto A viene
istanziato "subito prima" nel corso della istanziazione
di B.  Avere A come membro ne comporterebbe
comunque l'istanziazione prima dell'esecuzione
del corpo del costruttore di B, per quanto dia piu`
controllo relativamente all'ordine di istanziazione
rispetto ad altri membri-dati dell'istanza di B.  Se
cio` non e` sufficiente, occorrera` avere invece
come membro un _puntatore_ ad A, e creare la
A esplicitamente (con un "new A") nel punto esatto
in cui questa operazione risulta opportuna nel corso
della esecuzione del corpo del ctor di B.
Alex

(automaticamente mi venga eseguito A.FunzioneA)
Hm, non e' chiarissimo :)
Quanto dici si puo' fare semplicemente definendo opportunamente A e B, 
cioe' aggregando A come membro di B (oppure derivando, se B e' un sottotipo 
di A, ma dall'esempio 'master/detail' che fai non mi pare) e invocando 
A.funzione() nel corpo di B. funzione().
Non c'e' un *costrutto* del linguaggio che faccia questo, ma devi 
codificarlo (a meno del caso particolare dei costruttori di default, dove 
il costruttore della classe base viene richiamato automaticamente dal 
costruttore della classe derivata, senza che tu debba specificarlo in 
codice; ma e', appunto, particolare)
Pero' mi sembra troppo banale per essere quello che chiedi, quindi 
probabilmente non ho capito qualcosa. :)
-- 
God is Real, unless declared Integer.
ObjectZone - 
http://space.tin.it/computer/csadun/


Era questo che volevo sapere, scusate la banalità
ma la questione riguarda un mio amico che non ha accesso
in qto momento al NG.
Cioè vorrei sapere se esiste un qualcosa che lega la classe B alla classe A,
ereditarietà, polimorfismo, etc... tanto per dire qualcosa,
che mi garantisce gratuitamente (non devo invocarlo direttamente) l'esecuzione
di A.funzioneA() in B!!!
grazie comunque dell'aiuto!!!
Tommaso Caldarola     mailto:
t.cal...@cresb.it

di A.funzioneA() in B!!!
A parte la catena di costruzione (e solo col costruttore di default; con altri 
costruttori, devi comunque specificare i parametri della classe base nella 
lista di costruzione: ad es Derivata::Derivata(int i) : Base(i) {} ), temo di 
no.
