Newsgroup: it.comp.lang.c++
Titolo: gerachia un po' strana, e' corretta??

un mio amico ha trovato su un libro di C++ una gerarchia per me un po'
strana, vorrei un vostro parere:
come classe base un automobile e come sottoclassi, a scendere, le classi
telaio, motore.... formate a loro volta da latre sottoclassi.
Ma e' corretto??? secondo me no!
se e' corretto, comunque, sono gradite spiegazioni!
Thanks!!
--
Ciao by Beppe
Solo chi č stupido non cambia mai idea
(Aldo, "Cosě č la vita")

 wrote in message
LHv35.230424$VM3.1...@news.infostrada.it...


se e' corretto, comunque, sono gradite spiegazioni!
Mah, su un libro scritto da due professoroni americani ho visto
anch'io una cosa del genere. Loro spiegavano dicendo che ci possono
essere due modelli di ereditarieta' : quello per cui ogni sottoclasse
e' anche del tipo della classe madre (che e' quello che penso adotto
anche io, perche' mi sembra il piu' logico) ed uno e' quello per cui
ogni sottoclasse e' una scomposizione della classe madre.
--
Andrea Laforgia (
andrea_...@bigfoot.com
)
--------------------------------------------------------------
"Partire e' un po' morire e morire e' partire un po' troppo !"
--------------------------------------------------------------


Perchè no ?
Si tratta di una relazione "is a part of"
Le sottoclassi che indicano i componenti dell' automobile hanno il pregio (in
questa gerarchia) di avere accesso all' oggetto automobile di cui sono
componenti e passando per questo agli altri componenti.
Ditemi se sono fuori 
==================================================
E gia' che la verita' e' solo un' interpretazione
finche' il contrario non accadra'
==================================================

 se e' corretto, comunque, sono gradite spiegazioni!
No, non e' corretto per due motivi fondamentali. Da un punto di vista
concettuale l'ereditarieta' rappresenta la specializzazione di un tipo
esistente, ovvero la sua estensione, ottenuta aggiungendo
caratteristiche o modificando quelle esistenti. Proprieta' fondamentale
di un sotto-tipo e' poter essere perfettamente sostituito al suo
super-tipo ovunque questo sia utilizzato. Ora vai tu a dire a Schumacher
che il prossimo G.P. lo corre in bilico su una ruota :-) Non a caso si
parla di relazione is-a (e' un) per caratterizzare l'ereditarieta' (per
esempio una macchina e' un veicolo, anche se non e' detto che questo
abbia senso in un programma).
L'altro aspetto e' piu' pragmatico, ovvero legato ad aspetti di
programmazione; il punto e' che l'abuso dell'ereditarieta' introduce un
legame molto forte con la classe base, che ha senso se questa definisce
un'interfaccia fondamentale della classe figlia, meno se non e' che un
accorgimento per dotare la classe figlia di particolari funzionalita'.
In questi casi e' preferibile ricorrere all'aggregazione (relazione
has-a, ha un: una macchina ha un motore) ed a meccanismi di delega,
ovvero metodi della classe principale che non fanno altro che chiamare
metodi della classe contenuta.
Un esempio di dove crolla lo schema che hai riportato: e le ruote? una
macchina ne ha quattro: dovrebbe ereditare quattro volte dalla stessa
classe ruota?
Ciao,
Nicola

ogni sottoclasse e' una scomposizione della classe madre.
mai sentita, di sicuro non in C++.
Paolo
--------------------------------------------------
  Paolo Marotta
  Computer Science, University of Pisa
  home:   
http://www.cli.di.unipi.it/~marotta
--------------------------------------------------

mai sentita, di sicuro non in C++.
Be', il testo era 
 
"OOP in C++" di Lewis Pinson (se non ricordo male).
uno dei primi testi sul linguaggio (molto buono, tra l'altro).


componenti e passando per questo agli altri componenti.
A occhio, mi sembra un abuso. L'interfaccia della classe automobile non dovrebbe
essere di grande interesse per la classe ruota, ad esempio. Non è che facendo
così l'autore aumenta la complessità e l'accoppiamento della gerarchia solamente
per avere un po' di "zucchero sintattico" in più?
Ciao
AB
--
-------------------------------------------------------------
   Andrea Baruzzo
   Via Circonvallazione, 26
   Muzzana del Turgnano (UD) - Italy
   e-mail: 
andrea....@ud.nettuno.it
   home: 
http://www.dimi.uniud.it/~baruzzo
-------------------------------------------------------------

Si tratta di una relazione "is a part of"
Che non si modella tramite ereditarieta`...
ciascuna classe eredita dalla classe base cosi` si ha l'assurdo
che ciascuna componente e` anche l'automobile intera.
La relazione che indichi si modella con un riferimento
alla classe contenitore.


uno dei primi testi sul linguaggio (molto buono, tra l'altro).
Non lo conosco, ma di sicuro in C++ l'ereditarieta` non modella
una relazione "Is-part-of", e neanche in altri linguaggi OO
a me noti.


alla classe contenitore.
Ok ok avete ragione e ho toppato la relazione <<is a part of>> non và
implementata tramite ereditarietà
