toscho.design

In Objekten denken: Konzept für das WordCamp Hamburg

Frank hat mich mal gefragt, ob es denn nicht sehr umständlich sei, meinen Code immer in Objekten zu schreiben. Zum Glück am Telefon, denn meine Stirnfalten hätten den Bergsteiger in Frank begeistert.

Wenn ich etwas programmiere, das komplexer als ein String ist, dann versuche ich immer, mehrere Perspektiven zu vereinen:

  • Die Userstory: Der User gibt dies ein, klickt dann auf jenen Button und bekommt ein bestimmtes Ergebnis.
  • Die Datenquellen: Woher kommen meine Daten? Wohin speichere ich sie? Datenbank, Fremd-API, Nutzereingaben?
  • Die Algorithmen: Wie muss ich welche Daten ändern?
  • Die einzelnen Objekte: Welche Aufgaben gehören unbedingt zusammen, welche möchte ich ohne Aufwand austauschen können?

Den User gehen meine Algorithmen und Datenquellen nichts an; er soll sie nicht wissen müssen. Also ist die Ausgabe an den einzelnen Stellen jeweils ein separates Objekt, ein View. Die Algorithmen müssen austauschbar sein, damit ich fix mal eine Alternative ausprobieren kann, ohne den ganzen Rest anzufassen. Und die Datenquellen wiederum müssen auch austauschbar sein, denn vielleicht merke ich ja irgendwann, dass eine separate Datentabelle doch performanter ist als das Wiederverwenden einer schon bestehenden Tabelle.

Daraus baue ich im Kopf meine Objekte, separiere die Aufgaben also in unabhängige Codeblöcke, bis ich eine brauchbare Architektur habe. Im Alltag ist das leichter als ich es hier beschreibe, zumindest seit der Groschen gefallen ist. Ich verstehe aber sehr gut, dass dies eine mentale Umstellung vom rein prozeduralen Denken, der schlicht linearen Perspektive, erfordert.

PHP hilft einem bei dieser Umstellung nicht gerade. Im Gegenteil: Es bietet zu viele Einstiegspunkte in klassen-orientiertes Denken an, die vom objekt-orientierten Denken ablenken. Schlüsselworte wie static, protected, abstract und extends sind immer Indizien für prozeduralen Code in einem Klassencontainer. Auf lange Sicht schadet sich der Entwickler damit selbst – oft ohne es zu merken.

Deshalb will ich beim WordCamp Hamburg eine Session anbieten, in der ich meinen aktuellen Stand darstelle. Letzte Weisheiten habe ich nicht im Gepäck; ich lerne ja immer noch jeden Tag dazu. Aber hoffentlich kann ich zeigen, wie man objekt-orientierten Code liest und schreibt.

Ich habe drei Abschnitte im Auge, deshalb habe ich auch eine Stunde Zeit bekommen.

Objekt-orientiertes Denken allgemein

  •  Was sind Klassen und Objekte? Was sind sie nicht? Welche Vor- und Nachteile haben sie?
  • Wie erkenne ich prozeduralen Code in einem Klassencontainer (God Object)? Wie repariere ich ihn?
  • Wie kommunizieren Objekte miteinander (vertikal und horizontal)? Wie finde ich die passende Struktur?
  • Was ist Inheritance, was Composition? Wann sollte ich was verwenden?
  • Wie funktioniert Dependency Injection, wie Service Location?
  • Wann brauche ich ein Interface, und was gehört hinein?
  • Welche Aufgaben fasse ich in einem Objekt zusammen, welche sollte ich separieren?
  • Welche Member und Methoden sollten private, protected oder public sein?
  • Model-View-Controller (MVC) als Denkhilfe.
  • Wichtige Entwurfsmuster (Pattern): Mediator, Adapter, Singleton, Courier

OOP in WordPress: typische Probleme

  • Abhängigkeiten von globalen Variablen
  • Fehlende Interfaces
  • Wie bietet man eine Plugin-API an? Wie vermeidet man das, ohne auf Hooks zu verzichten?

Diskussion

Im Anschluss hoffe ich auf eine lebhafte Diskussion. Bitte bringt eigenen Code mit, damit wir anhand konkreter Beispiele über Lösungen reden können. Dieser Teil wird hoffentlich der spannendste.


Wenn du jetzt schon Fragen zur Session hast, dann stell sie bitte hier.

3 Kommentare

  1. Frank am 03.06.2014 · 14:16

    Ich kann die Session nicht besuchen, gehe aber leider auch nicht in deinen Falten Bergsteigen. Kann ich die Inhalte später nachlesen?

  2. Thomas Scholz am 03.06.2014 · 14:22

    @Frank: Ja, ich werde dazu sicher einiges hier schreiben, und aufgezeichnet wird es ja auch.

  3. David am 10.06.2014 · 14:21

    Stell dich auf bohrende Fragen ein. ☺