if Abfrage vs Object Behavior

Alles, was nicht direkt mit Python-Problemen zu tun hat. Dies ist auch der perfekte Platz für Jobangebote.
Antworten
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Wir sollen für ein Uniprojekt Carcassonne implementieren. Bei diesem Spiel gibt es Karten, die aneinander gelegt werden (Regeln). Es gibt unter anderem Klöster, die für jede anliegende Karte einen Punkt bringen (max. 9 Punkte).

Beim legen der Karte passiert unter anderem folgendes (Smalltalk):

Code: Alles auswählen

aCard abbey activateAt: aPoint on: self.
``aCard abbey activateAt...`` führt entweder eine Aktivierung durch (Registrierung auf Events beim Legen einer Karte), oder, wenn die Karte kein Kloster hat, ist die entsprechende Methode ein `noop`.

Meine Kommilitonen argumentieren, dass sie dies als unintuitiv empfinden und lieber folgendes sehen würden:

Code: Alles auswählen

aCard hasAbbey ifTrue: [ aCard abbey activateAt: ...]
Damit bin ich allerdings nicht einverstanden, da für mich die Verantwortung bei dem entsprechenden Abbey-Object liegt.

Mich würde interessieren, was eure Meinung dazu ist.
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
BlackJack

@jbs: Solche Fragen treten bei Spielen öfter auf. Sollen die Spielelemente die Regeln kennen, oder soll die ein etwas zentraleres Objekt kennen. Ist unter anderem auch die Frage ob, und wie Regeln ausgetauscht werden können.
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Ja, nur möchte ich mich dem Vorwurf erwehren, meine Lösung sei nicht verständlich.
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
BlackJack

@jbs: Ich würde nicht unverständlich sagen, aber aus der zweiten Zeile wird einem Leser der keine Ahnung hat zumindest ersichtlich dass so eine Abtei optional ist. Bei der ersten Zeile könnte man auch denken jede Karte hat eine Abtei.
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Vielleicht hilft auch einfach eine Umbenennung der Nachricht.

Code: Alles auswählen

aCard abbey activateIfPresentAt: ...
oder so
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Antworten