Newsgroup: it.comp.lang.delphi
Titolo: Ereditarietà

Ciao a tutti,
credo che quello che voglia fare sia impossibile,
ma ve lo espongo lo stesso può essere che a voi vi venga qualche
idea.
Ho una Form che eredita da una Form la quale eredita da un'altra form.
FormNonno --> FormPadre --> FormFiglio
Allora, io vorrei richiamare la gestione del pulsante click 
sulla FormNonno dal FormFiglio.
Voglio precisare che nella FormaPadre, ovvero quella di mezzo, 
sullo stesso evento, non ho ereditato.
Esiste una cosa così : FormFiglio.FormPadre.FormNonno.BottoneClick
bà...
Grazie a tutti.
Inviato da 
www.mynewsgate.net

 Esiste una cosa così : FormFiglio.FormPadre.FormNonno.BottoneClick
Credo di non aver afferrato molto quello che intendi, come per esempio
il fatto di poter ereditare singoli eventi (metodi) piuttosto che tutto
il codice della classe genitrice.
Non credo che esista la possibilità di fare come hai indicato.
Antonio

sullo stesso evento, non ho ereditato.
Spiega meglio che forse intendi "non ho fatto l'ovveride" di questo evento.
-- 
Morde. (
mo...@despammed.com
)
M-List di icld: 
http://it.groups.yahoo.com/group/icld/
Firefox, il miglior browser: 
http://www.gxware.org/mozilla/

 evento.
No, io nel padre, ovvero la classe di intermedia, ho fatto l'override
dell'evento.
Infatti il bottone in questione nella classe nonno ed in quella padre
f&agrave; cose differenti. 
Ma nel figlio, a tale evento, vorrei fare quelle del nonno.
S&ograve; che, potr&ograve; solo ereditare l'evento click del padre, infatti
io vorrei riuscire a richiamarlo.
Inviato da 
www.mynewsgate.net

 Grazie a tutti.
-- 
Ciao, Anto', [37, 143, AQ] 
MB C SC 220 CDI Magma Rot
"Di sempre cio' che senti e fai cio' che pensi."
    G.G. Màrquez

 Ma nel figlio, a tale evento, vorrei fare quelle del nonno.
imho, questa tipo di struttura lo rivedrei.
Non è molto pulito che "figlio" erediti da "padre" ma se si tratta del 
metodo x deve ereditare da "nonno".
AS

 metodo x deve ereditare da "nonno".
Ok, mi dai qualche consiglio?
Inviato da 
www.mynewsgate.net

 Ok, mi dai qualche consiglio?
Occorre capire bene cosa devi fare, in questo caso adotterei un'altra
soluzione piuttosto che l'ereditarietà, ma IMHO ha ragione Alberto. In
questo caso devi rivedere il tutto.
Antonio

 ha scritto nel messaggio
news:200407150...@mynewsgate.net...

Ciao, senti per quel che ne so io e per come ti hanno detto nn ha senso
derivare un solo metodo o a questo punto dovresti utilizzare le funzioni
virtuali per l'ereditarietà
dipende dalla modalità di derivazione cioè se pubblica privata o protetta :
supponi di avere :
padre
   |
figlio
   |
nipote
   |
utente
1) se figlio eredita  padre in modalità pubblica : allora figlio nipote
accederano alle componenti   protette e pubbliche ma non private di Padre e
utente solo alle componenti pubbliche di Padre;
2)se figlio eredita  padre in modalità protetta :
allora figlio nipote accederano alle componenti protette e pubbliche ma non
private di Padre , utente non accede a nessun componente di Padre;
3)se figlio eredita  padre in modalità privata :
allora figlio  accederà alle componenti protette e pubbliche ma non private
di Padre ,nipote ed utente non accederanno a nessun componente di P;
Quindi nel tuo caso dovrebbe andare la prima se ho capito bene la tua
domanda.

Sicuro, ma il problema sta nel fatto che io nel figlio ho fatto
l'override del metodo del padre.
E quindi, il nipote non riuscirà ad utilizzare il metodo del padre
ma solo quello del figlio.
Infatti, io volevo una cosa del genere :
   Nipote.Parent.Parent.Metodo
Ma forse non è possibile.
Vi prego, smentitemi.
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 ha scritto nel messaggio
news:81Z73Z60Z30Y10...@usenet.libero.it...

Scusa ma non puoi definire piu semplicemente un metodo virtuale nella classe
base e ridefinirlo quando serve se serve diverso altrimeti mi pare che usi
proprio quello che usi nella classe base, ma la funzione deve essere solo
virtuale e non virtuale pura?

non mi è molto chiaro....


 Inviato via 
http://arianna.libero.it/usenet/
Allora se tu dichiari nella classe base una funzione o metodo virtuale
avrai la possibilità di ridefinire la stessa nelle classi derivate
ovviamente se non la ridefinisci mi pare che viene richimata quella della
classe base e attivi la chiamata con un polimorfismo.
Spero di essere stato chiaro
Ciao
Antonio.

 ovviamente se non la ridefinisci
ti ricordo che io gli ho fatto l'override nella classe FIGLIO.
A meno chè tu non intenda di RIDEFINIRLA nel NIPOTE.
ciao


 ha scritto nel messaggio
news:81Z73Z60Z30Y10...@usenet.libero.it...

Scusa ma se ho capito bene dovresti definire la funzione virtual in classe
base e poi le ridefinisci nelle derivate cosi attivi il late binding, quindi
in realta mi pare che l'unica soluzione sia ridefinirla, anche se a questo
punto vedi quale puo essere il tipo di derivazione migliore per il tuo
problema.Tutto questo sempre che il tuo scopo sia il late binding altrimenti
nn so.

)

 Ciao! :-)


Grazie a tutti.
	Ciao
	MassimoB
 
---------------------------
http:\\
www.massimobeschi.it

 pezza". :P
certo, questa era la via più facile e forse come avevo anticipato : l'unica!
Però ora mi sorge un dubbio...ma se fossi partito da zero...come avrei
fatto?
Forse avrei seguito la stessa strada, oppure...
Tu come avresti strutturato la cosa?


 Altre possibili soluzioni?
Personalmente, ritengo che la situazione descritta non sia assolutamente 
OOP, quindi che non ci sia un metodo per ottenerla in modo eticamente 
valido.
Quando una classe definisce un metodo, tale metodo viene ereditato dalle 
classi figlie...non ha senso parlare di un metodo che eredita solamente 
da una classe superiore di più livelli nella gerarchia; al massimo, è 
possibile ereditare una classe che, a sua volta, eredita un metodo 
virtuale su cui non effettua l'override.
Non conosco il problema che deve essere risolto, ma mi pare che il modo 
con cui si sta cercando di risolverlo sia in realtà una cattiva 
applicazione dell'OOP e andrebbe riveduta. :-)


 applicazione dell'OOP e andrebbe riveduta. :-)
Concordo con te Marco. In alcuni casi si pecca, IMHO, di eccessive
tecnicità che alla fine violano i principi dell'OOP.
Descrivere il problema da un punto di vista più architetturale potrebbe
essere utile per capire come risolvere il problema, per esempio,
applicando uno o più pattern.
Antonio