Alle Funktionen, die explizit auf Attribute der Objekte zugreifen, sollten gekapselt werden.
Als Beispiel: Du hast ein Klasse Mensch. Ein Mensch hat ein Gewicht und eine Größe. Möchtest du nun den BMI (Body-Mass-Index) errechnen, benötigst du beide Werte.
Es widerspricht nun grundsätzlich dem OOP-Gedanken eine Funktion zu implementieren, die ein "Mensch"-Objekt als Parameter übergeben bekommt, beide Werte ausliest, den BMI errechnet und zurückgibt. Sauberer wäre eine Kapselung der BMI-Berechnung als Methode in der Klasse.
Grundsätzliche Merkregel: Klassen sollten nur Methoden enthalten, die auch explizit mit den Attributen dieser zu tun hat.
Allgemeine Aufgaben, die unabhängig von den Klassenattributen erledigt werden (z.B. eine Methode, die die Anzahl der Merkmale eines Menschen (Größe, Gewicht, usw))) sollten als statische Methoden bzw. als Funktionen implementiert werden.
Es ist üblich, lose Sammlung von Funktionen zu einem Thema, die keinerlei Attribute benötigen, als statische Methoden einer Klasse zu implementieren. Natürlich sollte man dann die Klasse als abstrakt kennzeichnen, damit man sie nicht initiieren kann. Sie sollte dann keinerlei nicht-statische Methoden oder Attribute haben.
Ansonsten muss ich mich meinem Vorredner anschließen. Methoden sollten grundsätzlich nur in Vererbungshierarchien angelegt werden, wo sie auch Sinn machen. Einen BMI zu berechnen mag bei einem Menschen Sinn machen, aber bei einem allgemeinen Säugetier vielleicht noch nicht.
|