Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di caralu
    Registrato dal
    Sep 2004
    Messaggi
    135

    [JAVA] Quesito di progettazione

    Ciao a tutti!
    Ho un problema di progettazione:
    In un videogioco ho creato una classe principale Entity estesa da tutte le classi che hanno un'animazione (come la classe Nemico, PersonaggioPrincipale e la classe Bonus). Dovrei creare però diversi tipi di Oggetti Bonus: un tipo che rimane fisso sullo schermo (come le monete di "Mario Bros" per intenderci..) e l'altro tipo invece compare per un'intervallo di tempo (inversamente proporzionale al suo punteggio) e poi sparisce.
    Io ho creato questo tipo di progettazione con 1 sola classe Bonus che estende Entity differenziando gli oggetti Bonus alla creazione, nel costruttore, in questo modo:
    codice:
    public Bonus(Game game, String riferimento_Immagine, Map map, float x, float y, char type) 
            {
            super(riferimento_Immagine, map, x, y, type);             
            this.game = game;
            this.tipo = type;
            
            if(type == map.MONETA)
                {
                    this.punti = 100;
                    this.visibile = true;
                }
            
            if(type == map.PREMIO)
                {
                    this.punti = 200;
                    this.visibile = false;
                    ContaTempo timer = new ContaTempo();
                }
            
            if(type == map.CHIAVE)
                {
                    this.punti = 0;
                    this.visibile = true;
                }
            }
    Non mi sembra molto corretto come stile i progettazione questa prima soluzione che ho implementato..Secondo voi sarebbe meglio fare un'interfaccia Bonus che estende la classe Entity e poi creare classi differenti per ogni oggetto Bonus che implementino l'interfaccia, oppure creare direttamente classi differenziate per ogni oggetto Bonus, ciascuna che estende la Classe Entity??
    Linux Slackware 11 - Kernel 2.6.18

  2. #2
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    le interfacce non possono estendere classi
    in ogni modo sono cose che vanno a discrezione di chi progetta, non credo ci sia una versione corretta, sicuramente ce ne sono + di una

  3. #3
    Utente di HTML.it L'avatar di caralu
    Registrato dal
    Sep 2004
    Messaggi
    135
    Originariamente inviato da floyd
    le interfacce non possono estendere classi
    in ogni modo sono cose che vanno a discrezione di chi progetta, non credo ci sia una versione corretta, sicuramente ce ne sono + di una
    Si, certo che è a discrezione..Ma ci sono scelte progettuali più o meno eleganti..Non vorrei creare un programma che funziona e basta,ma un qualcosa di ben progettato.
    Dato che per l'ereditarieta' multipla non si possono usare le Interfacce in Java, dovrei creare l'interfaccia Bonus con tutti i metodi che accomunano i diversi tipi di bonus e poi creo una classe per ogni tipo di bonus, ognuna di queste estende la classe Entity e implmenta l'interfaccia Bonus..Che te ne pare?
    Linux Slackware 11 - Kernel 2.6.18

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    In questo caso, credo che sia del tutto sufficiente creare una classe base generica che racchiude le caratteristiche comuni dei bonus in quanto tali, Bonus, e da questa creare tanti discendenti che implementino a loro modo i metodi virtuali e introducano tutte le specializzazioni necessarie in base alla tipologia di bonus, appunto, che rappresentano.

    Nel caso vi siano più livelli di analogie che si possono accomunare, ad esempio famiglia differenti di bonus, basta creare nuove classi discendenti da Bonus, ciascuna che introduca le caratteristiche proprie della famiglia di bonus e da queste ereditare poi le classi dei bonus specifici.

    Non mi sembra che vi sia bisogno di usare interfacce, in questo caso.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  5. #5
    a me pare che il tuo caso sia risolvibile con il pattern Inversion Of Control (IoC).
    Per maggiori informazioni vedi: http://www.martinfowler.com/articles/injection.html

    ciao
    Ivan Venuti
    Vuoi scaricare alcuni articoli sulla programmazione, pubblicati su riviste di informatica? Visita http://ivenuti.altervista.org/articoli.htm. Se vuoi imparare JavaScript leggi il mio libro: http://www.fag.it/scheda.aspx?ID=21754 !

  6. #6
    Utente di HTML.it L'avatar di caralu
    Registrato dal
    Sep 2004
    Messaggi
    135
    Originariamente inviato da alka
    In questo caso, credo che sia del tutto sufficiente creare una classe base generica che racchiude le caratteristiche comuni dei bonus in quanto tali, Bonus, e da questa creare tanti discendenti che implementino a loro modo i metodi virtuali e introducano tutte le specializzazioni necessarie in base alla tipologia di bonus, appunto, che rappresentano.

    Nel caso vi siano più livelli di analogie che si possono accomunare, ad esempio famiglia differenti di bonus, basta creare nuove classi discendenti da Bonus, ciascuna che introduca le caratteristiche proprie della famiglia di bonus e da queste ereditare poi le classi dei bonus specifici.

    Non mi sembra che vi sia bisogno di usare interfacce, in questo caso.
    Si, non sarebbe una soluzione molto comoda quella dell'interfaccia..In effetti questa mi sembra una soluzione abbastanza elegante e funzionale. Si sfrutta al massimo l'ereditarietà:
    Le varie classi dei diversi bonus estenderanno la loro classe principale Bonus (che implementa i metodi comuni) che a sua volta estende Entity. Mi piace questa idea, grazie del consiglio!
    Linux Slackware 11 - Kernel 2.6.18

  7. #7
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Originariamente inviato da caralu
    Si, non sarebbe una soluzione molto comoda quella dell'interfaccia...
    Più che comoda, così come hai descritto la problematica non sembrerebbe necessaria, ma ovviamente potrei sbagliarmi.
    Dipende da quanto si complica la tua struttura.

    L'uso delle interfacce potrebbe forse risultarti utile qualora tu debba invocare metodi che hanno lo stesso scopo assimilabile su classi appartenenti a gerarchia differenti.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  8. #8
    Utente di HTML.it L'avatar di caralu
    Registrato dal
    Sep 2004
    Messaggi
    135
    Originariamente inviato da alka
    Più che comoda, così come hai descritto la problematica non sembrerebbe necessaria
    L'uso delle interfacce potrebbe forse risultarti utile qualora tu debba invocare metodi che hanno lo stesso scopo assimilabile su classi appartenenti a gerarchia differenti.
    Si, hai proprio ragione..E quindi non è il caso di utilizzare l'interfaccia per quello che voglio fare! Ti ringrazio, sei stato chiarissimo!
    Linux Slackware 11 - Kernel 2.6.18

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.