Im Moment absolviere ich an der Uni ein Softwarepraktikum, bei dem man in einer Gruppe von 7-8 Studenten innerhalb von 6 Wochen zwei Java-Projekte umsetzten muss. Ganz interessant zu beobachten ist dabei, dass viele der Studenten — die meist zum ersten mal praktische Erfahrungen in OOP machen — die gleichen Anfängerfehler machen, die ich auch in meinen Anfängen gemacht habe.
Kategorie-Archiv: Allgemein
array vs. object
Arrays gehören wohl mit zu den Gründen, wegen denen PHP als anfängerfreundlich gilt. Als mir in der Schule mit Java das erste Mal eine andere Programmiersprache als PHP begegnet ist, war ich erstaunt über die wenigen Möglichkeiten, die mir die Arrays dort boten. Aber es soll hier nicht um einen Vergleich der Programmiersprachen gehen, sondern um die Probleme, die dieser Luxus bereiten kann.
Das Gesetz der Demeter
Durch Objektorientierte Programmierung versucht man unter anderem, die einzelnen Komponenten einer Software möglichst lose zu koppeln und Abhängigkeiten zu vermeiden. Ein erster Schritt in diese Richtung ist es, die Eigenschaften eines Objektes als private oder protected zu kennzeichnen. Der Zugriff auf diese Eigenschaften erfolgt ausschließlich über entsprechende set- und get-Methoden. Dadurch haben wir z.B. die Möglichkeit, den Namen der Eigenschaft zu verändern ohne die Änderung an allen Stellen durchführen zu müssen, die die Eigenschaft des Objektes verwenden.
Das hier beschriebene Prinzip nennt sich Kapselung. Schauen wir uns das bei folgendem (sinnfreien) Beispiel an.
class Car { private $_name; public function __construct($name) { $this->_name = $name; } public function getName() { return $this->_name; } } class Person { private $_name; private $_car; public function __construct($name, Car $car) { $this->_name = $name; $this->_car = $car; } public function getName() { return $this->_name; } public function getCar() { return $this->_car; } } class Logger { public function log(Person $value) { printf( '%s fährt einen %s', $value->getName(), $value->getCar()->getName() ); } } $car = new Car('VW Golf'); $person = new Person('John', $car); $logger = new Logger(); $logger->log($person);
Soweit so gut, unsere Daten sind alle ordentlich gekapselt. Was aber, wenn wir nun aus der getName-Methode eine getShortName-Methode machen wollen? Nun stehen wir vor dem gleichen Problem, das wir schon bei der Kapselung hatten. Wir müssen unsere Änderungen unter Umständen an vielen Stellen durchführen. Auch wenn die IDE heutzutage viel Arbeit abnimmt, wir haben eine Menge Abhängigkeiten geschaffen und genau das wollten wir ja eigentlich vermeiden.
CMS, Framework oder selbstprogrammiert?
Wer ein neues Projekt beginnt, stellt sich oft zu Beginn die Frage, wie er es realisieren soll. Man kann alles selbst programmieren, die Hilfe eines Frameworks in Anspruch nehmen oder zu einem CMS wie Joomla oder Drupal greifen.