Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    ereditarietà: in tal caso è giusta ????

    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

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Perche' non una classe Device ?

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,465
    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!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  4. #4
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    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

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  5. #5
    raga grazie mille. Mi sa che è meglio ridare un'occhiata al concetto di generalizzazione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.