Miejsce ustawiana wartości pola

0

Witam, zastanawiam się gdzie dokładnie ustawiać wartość pola czy w głównej klasie, czy w klasie, gdzie jest metoda korzystająca z referencji do obiektu.
Poniżej kod. Obie wersje działają, bo muszą ;). Ale pytanie jest moje jaka jest główna myśl, gdzie powinno się ustawiać wartości pól ?

public class Meal {

    private boolean isWarm =false;

    public boolean isWarm() {
        return isWarm;
    }
    public void setWarm(boolean warm) {
        isWarm = warm;
    }
    Meal heatUp()
    {
        setWarm(true); // Tutaj ?
        return Microwave.warm(this);
    }
}
public class Microwave{

    public static Meal warm(Meal meal)
    {
        meal.setWarm(true); // Czy tutaj ?
        System.out.println("Pogrzewam posiłek");
        return meal;
    }
}

0

Jeszcze nie widziałem posiłku, który podgrzałby się sam, zawsze jest za to odpowiedzialna jakaś kuchenka.

2

heatUp to nie jest odpowiedzialność / zachowanie posiłku. Ryba sama się nie podgrzewa. A nawet nie prosi mikrofali o podgrzanie.
Załóżmy że dostajesz na talerzu posiłek w złotku i chcesz stwierdzić czy jest ciepły.
Wtedy nie obchodzi Cię co klient zamówił, po prostu zbliżasz rękę do talerza.
Czyli np. tak:

import java.util.*;
import java.lang.*;
import java.io.*;

class Meal {
 
    public boolean isWarm() {
        return false;
    }
   
}

class Fish extends Meal {
 
}

class WarmMeal extends Meal {
    Meal meal;

    public WarmMeal(Meal meal) {
       this.meal = meal;
    }

    public boolean isWarm() {
        return true;
    }

    public String toString() {
       return meal.toString();
    } 
}

class Microwave {
 
    public static Meal warm(Meal meal)
    {
        System.out.println("Pogrzewam posiłek");
        return new WarmMeal(meal);
    }

}

class Ideone
{
	public static void main (String[] args) throws java.lang.Exception
	{
       Meal fish = new Fish();
       System.out.println("Potrawa gotowa do pieczenia: "+fish.toString());
       System.out.println("Czy ciepła?: "+fish.isWarm());
       fish = Microwave.warm(fish); 
       System.out.println("Potrawa podgrzana: "+fish.toString());
       System.out.println("Czy ciepła?: "+fish.isWarm());
	}
}

Wynik:

Potrawa gotowa do pieczenia: Fish@14ae5a5 
Czy ciepła?: false 
Pogrzewam posiłek 
Potrawa podgrzana: Fish@14ae5a5 
Czy ciepła?: true

http://ideone.com/WTCNoN

1 użytkowników online, w tym zalogowanych: 0, gości: 1