Passare un field tra due oggetti di tipo diverso

di il
2 risposte

Passare un field tra due oggetti di tipo diverso

Buonasera,

Ho questo esempio che mi ha fatto nascere alcuni dubbi e avrei un paio di domande , inizio dalla prima

Ci sono 3 classi World, Tile , Player:

-Player eredita Tile perchè Player è un Tile dedicato a qualcosa di meno generico.
-World non ha sotto-classi nè super-classe e non c'entra nulla con Player e Tile se non per un qualcosa che dirò a breve.

La classe World ha tre metodi setter e getter : public String getTemperature(); public String getLight() ; public String getName();
Vengono utilizzati per conoscere la temperatura ambiente, le condizioni del tempo , il ciclo giorno/notte, il nome del mondo in cui Player vive.

World non sembra c'entrare nulla con Player , ma Player vorrebbe conoscere il valori ritornati dai metodi della classe World.
Player non ha metodi in comune con World ma fa parte del "mondo" appunto World.

-Ho provato a far ereditare World a Player attraverso Tile . Ma in Player il getter ad esempio getLigth() ritorna null.
-Ho provato a instanziare un oggetto World dentro un metodo Player ma continua a dare null.

Secondo voi il design è giusto ?o forse è sbagliato e quindi mi ritrovo avere problemi


Player

public class Player extends Tile{

    public Player(String name) {
        super(name);
    }
    
    @Override
    public void update() {
        World w;
        
        w = new World("Giant Cave:",5000,2000,1440,900);
        System.out.println(w.GetLight());
    }

    @Override
    public void updateBounds() {
    }

    @Override
    public void updatePostscaler() {
    }

    @Override
    public void collision() {
    }
}
Tile

public class Tile {

    public Tile(String name) {
    }
    
    
    public void update(){}
    public void updateBounds(){}
    public void updatePostscaler(){}
    public void collision(){}
 }
Main

public class GiantCave {

    private final int mWhite = 5000;
    private final int mHeight = 2000;
    private final int wPanel = 1440;
    private final int hPanel = 900;
            
    public GiantCave() {
    
    Player player;
    World world;
    
    world = new World ("Giant Cave:",mWhite,mHeight,wPanel,hPanel);
    world.SetLight();
    System.out.println(world.GetLight());
    System.out.println(world.getName());
    
    player = new Player("Sig.Rossi");
    
    player.update();
    
    }

    public static void main(String[] args) {
        GiantCave cave = new GiantCave();
    }
}
World

 private String name;
    private int mWidth;
    private int mHeight;
    private int pWidht;
    private int pHeight;
    
    private String temperature;
    private String light;
    
    public World(String name , int mWidht, int mHeight, int pWidht, int pHeight){
        
        this.name    =  name;
        this.mWidth  =  mWidht;
        this.mHeight =  mHeight;
        this.pWidht  =  pWidht;
        this.pHeight =  pHeight;
    }
    
    public String getName()
    {        
            return this.name;
    }
    
    public void SetTemperature(){
        this.temperature = "la Temperatura è di 14°C";
    }

    public String GetTemperature(){
          return temperature;
    }

    public  void SetLight(){
            this.light = "è l'alba.";
    }        

    public String GetLight(){
          return this.light;
    }        
}  
Edit: corretto il post

2 Risposte

  • Re: Passare un field tra due oggetti di tipo diverso

    Cyrano ha scritto:


    Secondo voi il design è giusto ?o forse è sbagliato e quindi mi ritrovo avere problemi
    Beh, è sicuramente un po' "dubbio". E comunque devi cercare di avere le idee un po' chiare sul design a livello object-oriented ... non è che puoi "tentare" di estendere le classi così per prova o finché non vedi che qualcosa "quadra". Procedere così non ha proprio senso (e non dà risultati).

    Mi viene in mente un caso visto in passato su un forum. Un tizio stava facendo un esercizio relativo ai conti delle banche. Aveva appunto le classi Conto e Banca. Mi ricordo che siccome nella classe Banca aveva dei campi che gli tornavano chissà come "utili" in Conto, aveva pensato (male) di fare che: Conto extends Banca. Argghhhh .. NOO!
    Ecco, non estendere una classe "solo" perché ti fa comodo. Deve filare il concetto dal punto di vista concettuale e secondo il principio di sostituibilità (principio di sostituzione di Liskov).

    Quindi, per iniziare: quale è il senso di Tile? Il codice di Tile è esattamente quello che hai postato? Se sì, allora:
    - perché Tile è "concreta" pur non facendo nulla di effettivo?
    - perché il suo costruttore non fa nulla con il parametro name?

    Insomma, sarebbe tutto da (ri)valutare bene.
  • Re: Passare un field tra due oggetti di tipo diverso

    Ciao ,

    Concordo credo sia inutile scrivere codice se prima non si han ben chiaro come progettare le classi.
    Da Barbara LIskov sono arrivato a questo solid-design-principles.
    Praticamente metà del progetto lo potrei fare con una penna ,un righello ed un foglio ?:D:D.Il codice è l'ultima cosa

    Rivedo il "design" grazie
Devi accedere o registrarti per scrivere nel forum
2 risposte