dedlfix: 1: Instanzvariablen oder Funktionsparameter? 2: Überladene Funktionen?

Beitrag lesen

Tach!

Wenn ich Holz hacken möchte, benötige ich eine Axt. Die Axt ist kein Teil von mir sondern nur ein Werkzeug, das ich für die Funktion Holzhacken benötige. Also ist sie keine Instanzvariable sondern ein Funktionsparameter. Eigenschaften, die mich selbst beschreiben, sind hingegen Instanzvariablen.

Kannst du mir n einfaches konkretes beispiiel geben?

Ein Objekt erstellt man, weil eine Aufgabe erfüllt werden muss. Idealerweise erstellt man es so, dass die Beschreibung der Arbeitsweise ohne das Wort "und" auskommt. Das heißt, es hat eine konkrete Aufgabe und nicht mehrere.

In einem Spiel gibt es Figuren. Eine Figur ist ein Objekt. Die Figur hat Eigenschaften, einen Namen und Bewertungspunkte beispielsweise. Das sind die Eigenschaften. Die Figuren spielen auf einem Spielfeld. Das Spielfeld braucht eine Liste der Figuren. Das ist eine Eigenschaft des Spielfelds. Auf welchem Feld eine Figur steht, ist keine Eigenschaft der Figur. Und es ist auch keine Eigenschaft des Spielfelds. Da kommt eine dritte Klasse ins Spiel, die als Eigenschaften einen Verweis auf eine konkrete Figur und dazu deren Position hat. Diese PositionierteFigur ist das, was sich das Spielfeld in seiner Liste merkt. Nun kann es vorkommen, dass eine Figur aus dem Spiel genommen werden muss. Das ist eine Methode des Spielfelds. Im einfachsten Fall ist die Liste nur ein Array, das vom Spielfeld verwaltet wird. (In anderen Systemen nimmt man jedoch sowas wie eine List(e) oder Collection, und die kommen mit eigenen Verwaltungsroutinen (zum Beispiel hinzufügen, entfernen, suchen von Einträgen) daher.) Was das Spielfeld nicht hat, sind Methoden des Spiels, wie Berechnen von Zügen der Figuren. Das wäre ein "und" in der Beschreibung: "Das Spielfeld verwaltet die Figuren und berechnet die Spielzüge." Deswegen kommt da mindestens eine weitere Klasse hinzu, die sich um die Spielmechaniken kümmert.

wenn ich ein total selbsterklärendes konstrukt schreibe z.B.: new PDOException $e oder irgendetwas mit $o für Objekt das nur einmal in der gesamten klasse existiert, gilt das dann immer noch für selbstbezeichneten Variablen?

Wenn eine Variable einen sehr kleinen Lebensraum hat, wie die Exception-Variable im Catch-Block, also nur in einer Handvoll Zeilen von Code vorkommt, dann kann man eine Abkürzung nehmen. Besonders dann, wenn sich diese Abkürzung bereits so durchgesetzt hat, dass sie jeder Programmierer kennt, wie i als Laufvariable oder e oder ex für Exception. Aber o für Objekt ist viel zu allgemein.

Es gibt da einen Spruch: Es gibt nur zwei schwierige Dinge beim Programmieren, Cache- Invalidation und das Benennen von Dingen. Das Ding hat doch einen Verwendungszweck, also sollte der Name diesen Verwendungszweck einigermaßen beschreiben.

Original: There are only two hard things in Computer Science: cache invalidation and naming things. - Phil Karlton

dedlfix.