Daniel Thoma: Fragen zur Objektgestaltung

Beitrag lesen

Hallo Tomas,

Wirklich natürliche Vorgänge zu modellieren ist schwierig und meiner Meinung nach auch nicht wirklich sinnvoll, da man so etwas in echten Programmen normalerweise nicht hat. Dort geht es meist um Verwaltung oder Technisches.

Nun zurück zum Apfel: Was passiert beim Essen eines Apfels: Der Mensch nimmt irgendwie Nahrung zu sich, der Apfel ist hinterher im wesentlichen weg, evtl. kann man noch den nicht gegessenen Rest berücksichtigen, die Teile, die aber tatsächlich gegessen wurden, dürften nicht mehr interessant in ihrer rolle als Apfelbestantteile sein ;)

Wenn man den Apfel nach dem Essen einfach als verschwunden betrachtet, ist die Situation einfach. Die Methode "essen" gehört zum Menschen, ändert dessen Zustand und hinterher löscht man einfach die Referenz auf das Objekt Apfel.

Wenn man den Zustand "gegessen" / "teilweise gegessen" mit berücksichtigen will, wird der Fall schwieriger, da sich an beiden Objekten etwas ändert.

Ich würde das so modellieren:

  
class Apfel {  
  double getGegessenerAnteil();  
  void esseAnteil(double anteil);  
}  
  
class Mensch {  
  void essse(Apfel apfel);  
}  

Der Mensch würde also den Apfel essen, in dem er einen Teil von ihm entfernt. Das Essen des Apfels würde zudem vom Menschen koordiniert, wärend der Apfel nicht wüsste, von wem er da eigentlich gegessen wird. Es wäre z.B. auch möglich "Mensch" so zu erweitern, dass mehrere Menschen der Reihe nach von dem Apfel abbeißen könnten.
Diese Modellierung entspricht denke ich ganz gut der üblichen Vorstellung vom Essen eines Apfels ;)

Schwierig an solchen Operationen die mehre Objekte gleichzeitig betreffen, ist oft, die Operation richtig auf beide Objekte aufzuteilen. In diesem Fall geht das noch recht intuitiv, aber nicht immer ist so klar, welches Objekt den Ablauf eigentlich koordinieren sollte.

Grüße

Daniel