← Neueste Arbeiten
💻 computer science

Beyond Objects

Dieses Papier argumentiert, dass das Kernprinzip der objektorientierten Programmierung, die Systemfunktionalität direkt auf Individuen der Problemdomäne abzubilden, von Natur aus fehlerhaft ist und zu Fragmentierung führt, und schlägt stattdessen vor, die Objektorientierung zugunsten eines Ansatzes aufzugeben, der Domänenindividuen von funktionalen Modulen entkoppelt.

Ursprüngliche Autoren: Daniel Jackson

Veröffentlicht 2026-06-26
📖 5 Min. Lesezeit🧠 Tiefgang

Ursprüngliche Autoren: Daniel Jackson

Originalarbeit lizenziert unter CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Dies ist eine KI-generierte Erklärung des untenstehenden Papers. Sie wurde nicht von den Autoren verfasst oder gebilligt. Für technische Genauigkeit konsultieren Sie das Originalpaper. Vollständigen Haftungsausschluss lesen

Die Kernidee: Der „Einheitsmaß“-Fehler

Stellen Sie sich vor, Sie bauen ein Haus. Seit 50 Jahren lautet die Standardregel in der Softwarekonstruktion: „Jedes Zimmer im Haus muss von der Person verwaltet werden, die darin wohnt.“

In der Welt der Software nennt man das objektorientierte Programmierung (OOP). Die Idee ist: Wenn es in der realen Welt einen „User“ (Nutzer) gibt, erstellt man im Code ein „User-Objekt“. Dieses Objekt soll alle Daten über diesen Nutzer halten (seinen Namen, sein Passwort) und auch die gesamte Arbeit erledigen, die mit ihm zu tun hat (einloggen, Bewertungen schreiben, Tische reservieren).

Daniel Jackson argumentiert, dass diese Regel eine Falle ist. Sie klingt logisch, führt aber in der Praxis dazu, dass Software zu einem wirren Geflecht wird. Er schlägt vor, dass wir aufhören sollten, zu versuchen, jeden Job in die „Person“ hineinzupressen, und stattdessen die Software nach dem zu organisieren, was gerade passiert (die Aktionen), und nicht nach dem, wer es tut (die Individuen).


Das Problem: Das „Schweizer Taschenmesser“ vs. das „Spezialwerkzeug“

Jackson sagt, dass der Versuch, jede Aufgabe einem einzelnen „User-Objekt“ aufzuerlegen, zwei Hauptprobleme verursacht:

1. Das „Schweizer Taschenmesser“-Problem (Konflation/Vermischung)

Stellen Sie sich vor, ein User-Objekt ist ein Schweizer Taschenmesser. Es hat eine Klinge, einen Schraubenzieher, einen Korkenzieher und eine Zahnbürste.

  • Das Problem: Wenn Sie den Korkenzieher benutzen wollen (um das Passwort eines Nutzers zu verwalten), müssen Sie das ganze schwere Messer mit sich herumtragen. Wenn Sie die Klinge ändern wollen (einen Fehler im Bewertungssystem beheben), könnten Sie versehentlich den Korkenzieher beschädigen.
  • In der Software: Ein „User“-Objekt endet damit, das Passwort des Nutzers, seine Bewertungshistorie, seine Benachrichtigungseinstellungen und seine Buchungslogik alles in einer riesigen Datei zu halten. Wenn Sie ändern wollen, wie Bewertungen funktionieren, müssen Sie durch den Code für Passwörter graben. Es ist unordentlich und schwer zu reparieren.

2. Das „Zu viele Hände“-Problem (Fragmentierung)

Stellen Sie sich eine Aufgabe wie „Einen Tisch reservieren“ vor.

  • Das Problem: Wer soll das machen? Der Nutzer? Das Restaurant? Der Tisch? Die Reservierung?
  • In der Software: Da die Regel besagt: „Ordne die Aufgabe dem Objekt zu, dem sie gehört“, wird der Code aufgeteilt. Das „User“-Objekt prüft, ob der Nutzer eine Buchung hat. Das „Restaurant“-Objkt prüft, ob der Tisch frei ist. Das „Reservation“-Objekt erstellt das Ticket.
  • Das Ergebnis: Um eine einzige Reservierung vorzunehmen, muss der Computer drei verschiedene Personen in drei verschiedenen Räumen laufen lassen und sie miteinander kommunizieren lassen. Wenn eine Person die andere vergisst zu informieren, bricht das System zusammen. Dies nennt man Fragmentierung.

Die Analogie: Die Restaurantreservierung

Jackson nutzt ein Restaurant, um dies zu erklären.

Der alte Weg (Objektorientiert):
Sie haben ein „User“-Objekt und ein „Restaurant“-Objekt.

  • Wenn Alice einen Tisch buchen möchte, fragt sie ihr „User“-Objekt.
  • Das User-Objekt fragt das „Restaurant“-Objekt, ob ein Tisch frei ist.
  • Das Restaurant-Objekt fragt das „Slot“-Objekt (Platz-Objekt).
  • Das „Reservation“-Objekt wird erstellt.
  • Das Chaos: Wenn Sie die Regel ändern wollen, dass „Alice nicht zwei Tische gleichzeitig buchen kann“, müssen Sie das User-Objekt, das Restaurant-Objekt und das Reservation-Objekt aktualisieren. Sie sind alle miteinander verstrickt.

Der neue Weg (Konzepte):
Anstatt zu fragen „Wer besitzt das?“, fragen wir: „Wovon handelt diese Gruppe von Regeln?“
Jackson schlägt vor, Software in Konzepte zu organisieren. Betrachten Sie ein Konzept als ein spezialisiertes Team oder eine Abteilung in einer Firma, statt als eine Person.

  • Konzept 1: „Reservieren“ (Reserving)
    • Dieses Team kümmert sich um alle Regeln bezüglich der Verbindlichkeiten. Es ist egal, wer der Nutzer ist; es kümmert sich nur um den Akt des Reservierens. Es hält die Liste darüber, wer was gebucht hat.
  • Konzept 2: „Verfügbarkeit“ (Availability)
    • Dieses Team kümmert sich um den Akt, zu prüfen, ob ein Platz frei ist. Es ist egal, wer bucht; es kümmert sich nur um die Plätze.
  • Konzept 3: „Benutzerauthentifizierung“ (User Authentication)
    • Dieses Team prüft lediglich, ob die Person die ist, für die sie sich ausgibt.

Wie sie zusammenarbeiten:
Anstatt dass das User-Objekt das Restaurant-Objekt aufruft, kommunizieren diese „Konzepte“ über Synchronisationen (wie eine Ampel) miteinander.

  • Regel: „Wenn eine Anfrage (Request) eingeht, prüfe, ob die Verfügbarkeit ‚Ja‘ sagt und ob die Authentifizierung ‚Go‘ sagt, dann kann das Reservieren die Buchung vornehmen.“

Warum das besser ist

  1. Keine verhedderten Knoten: Das „Reservieren“-Team muss nicht wissen, wie man ein Passwort prüft. Das „Authentifizierungs“-Team muss nicht wissen, wie man einen Tisch prüft. Sie sind getrennt.
  2. Keine Diskussionen über „Wem gehört das?“: Sie müssen nicht darüber streiten, ob der „Abbrechen“-Button zum User oder zur Reservierung gehört. Sie legen die „Abbrechen“-Logik einfach in das Konzept, das den Status der Reservierung verwaltet.
  3. Klarere Karten: Wenn Sie den Code betrachten, sehen Sie die Geschäftsregeln (Reservieren, Verfügbarkeit) klar vor sich, anstatt einer verwirrenden Karte dessen, wem welche Daten gehören.

Das „Konzept“ vs. das „Objekt“

  • Objekt: Eine kleine Maschine, die versucht, alles zu sein (Daten + Logik + Identität). Es ist wie eine Person, die gleichzeitig Koch, Kellner und Kassierer sein will.
  • Konzept: Ein Modul, das eine bestimmte Aufgabe oder Beziehung handhabt. Es ist wie eine spezialisierte Abteilung. Die „Koch-Abteilung“ kümmert sich ums Kochen; die „Kellner-Abteilung“ kümmert sich um das Servieren. Sie koordinieren sich, aber sie verschmelzen nicht zu einer einzigen Person.

Das Fazit

Jackson sagt nicht, dass wir die gesamte Software wegwerfen sollten. Er sagt, dass die Kernregel der objektorientierten Programmierung – „Ordne jede Aufgabe der Person zu, der sie gehört“ – die Wurzel des Problems ist.

Indem wir zu Konzepten wechseln, hören wir auf zu versuchen, die Software so aussehen zu lassen wie eine Sammlung von Menschen. Stattdessen organisieren wir sie wie eine Sammlung von Regeln und Beziehungen. Dies macht den Code leichter lesbar, leichter zu reparieren und weniger anfällig für Fehler, wenn man eine kleine Sache ändern möchte.

Es ist eine Rückkehr zu einer älteren, einfacheren Denkweise (wie bei relationalen Datenbanken), die jedoch für moderne Softwarebedürfnisse aktualisiert wurde, um Systeme zu bauen, die weniger fragil und logischer sind.

Ertrinken Sie in Arbeiten in Ihrem Fachgebiet?

Erhalten Sie tägliche Digests der neuesten Arbeiten passend zu Ihren Forschungsbegriffen — mit technischen Zusammenfassungen, in Ihrer Sprache.

Digest testen →