Im Konstruktor braucht man jetzt natürlich ein self.hunger = 0.

Die Methoden eat und wait könnten folgendermaßen implementiert werden:

  def eat(self):
    self.hunger = self.hunger-1

  def wait(self):
    self.hunger = self.hunger+1

Ein alternatives Design würde das Schrauben am Hunger zentralisieren. So ein Design würde sich lohnen, wenn die Überschreitung bestimmter Grenzen des Hungers zwingend bestimmte Folgen hätte, die wir dann nur an einer Stelle warten müssten:

  def _changeHunger(self, change=0):
    self.hunger = self.hunger+change
    # Add checks for hunger limits here

  def eat(self): self._changeHunger(-1)
  def wait(self): self._changeHunger(1)

– häufig sind viele kleine Methoden ein Zeichen guten Designs, aber nicht jedes Zerhacken eines Problems in kleine Funktionen ist auch gleich gutes Design. Gute ” Faktorisierung„ist nach wie vor kaum theoretisch zu begründen (obwohl angesichts der Wichtigkeit des Themas viel darüber nachgedacht wurde) und immer noch ganz wesentlich eine Erfahrungssache.

Auch in diesem Fall ist nicht klar, welche Fassung

” besser„ist, oder ob am Schluss eine dritte Möglichkeit (z.B. eine Methode _notifyHungerChanged, die immer aufgerufen werden muss, wenn jemand am Hunger dreht) besser geht. Letztlich hängt diese Entscheidung auch davon ab, wie das Plüschtier auf die verschiedenen Hungerzustände reagieren soll.”