PDA

Visualizza la versione completa : [*] Ereditarietà: casi d'uso


puntovale
20-09-2005, 14:05
Salve avrei bisogno di un consiglio. Per motivi di studio sto progettando una lavapiatti ma ho un dubbio. Nella lavapiatti ci sono dispositivi come valvole e pompe che possono essere aperte o chiuse. Ora avrei pensato di creare una classe (o meglio interfaccia) generale OpenCloseDevice e dispositivi come valvole e pompe che ereditano da questa. Il problema è che c'è un dispositivo VaschettaDetersivo che può essere solo aperta. E' lecito porre tale VaschettaDetersivo come sottoclasse di OpenCloseDevice non avendo un metodo close??? avete altre soluzioni concettualmente migliori ??? grazie

oregon
20-09-2005, 14:12
Perche' non una classe Device ?

alka
20-09-2005, 15:35
Salve avrei bisogno di un consiglio.
[...]
Se capisco bene il tuo esempio, suppongo che Vaschetta non possa essere chiusa per il semplice fatto che la chiusura è manuale, giusto?

Detto questo, suggerirei solamente di fare molta attenzione a raggruppare determinate classi in un'unica gerarchia se non ottieni un vantaggio utile.

Mi spiego: sebbene i dispositivi, ad eccezione della "vaschetta", siano tutti "apribili" e "chiudibili", non è detto che farli derivare da una superclasse comunque porti un vantaggio e sia corretto concettualmente, così come non è corretto far derivare una televisione o un automobile dalla medesima superclasse per il fatto che entrambe possono essere accese o spente: sono entità talmente differenti che la loro radice comunque è inutile. Tutt'al più, supponendo di tradurre quest'ultimo esempio in codice, al massimo potresti disporre di due classi distinte, anche a livello di gerarchia, che hanno metodi dal medesimo significato, con lo stesso nome eventualmente (es. Accendi e Spegni) ma con implementazioni totalmente differenti.

Nel tuo caso, se la classe comune è un requisito che non puoi evitare, si potrebbe anche valutare di rendere la classe Vaschetta con OpenCloseDevice, ma con il metodo Close che non fa nulla.

Credo sia più corretto comunque, come ti è stato peraltro suggerito, implementare un metodo Device generico, poichè difficilemente sfrutterai anche il polimorfismo poichè le classi discendenti dal tuo OpenCloseDevice non avranno comunque caratteristiche in comune e intercambiabili se non quella di discendere dalla stessa classe.

Ciao! :ciauz:

anx721
20-09-2005, 17:47
Se non raggruppi gli oggetti nella stessa gerarchia puoi pensare ad untilizzare le interfacce con cui puoi specificare una cartteristica di un oggetto, ad esempio che è "apribile" o "chiudibile", senza in questo modo caratterizzare completamente gli oggetti facendoli derivare da una clase comune

puntovale
20-09-2005, 21:30
raga grazie mille. Mi sa che è meglio ridare un'occhiata al concetto di generalizzazione

Loading