Was die OOP-Tutorials verschweigen

oder: Wie man objektorientiert denkt

Abstract

Zielgruppe: OOP-Einsteiger und -Fortgeschrittene, sowie alle, die das Gefühl haben, die OOP noch nicht ganz verstanden zu haben. Ein OOP-Tutorial sollte man aber zumindest mal gelesen haben.

Die ersten Gehversuche in der OOP fallen oft recht schwer. Und in der Tat klappt das, was dabei heraus kommt, meinst mehr schlecht als recht.
Die OOP erweitert erst einmal die Möglichkeiten, Fehler zu machen. Eine der Ursachen dafür ist, dass Objektorientierung eine andere Denkweise erfordert. Ohne diese objektorientierte Denkweise programmiert man vielleicht “prozedural mit Klassen”, nicht aber wirklich objektorientiert. Und so bleiben auch die schönen Vorteile der OOP wie Wiederverwendbarkeit und Änderbarkeit aus. Wie aber denkt man objektorientiert? Dieser Vortrag stellt einige objektorientierte Denkmuster und Prinzipien vor und zeigt, dass Objektorientierung mehr ist als Klassen und Vererbung.

Folien

Das war Thema meines Vortrags auf den diesjährigen Delphi-Tagen. Die Folien gibts wie versprochen zum Download: Was die OOP-Tutorials verschweigen (5573 Downloads) .

Ich habe versucht, die Folien so zu gestalten, dass sie auch verständlich sind, wenn man meinen Vortrag nicht gehört hat. Dennoch war der Vortrag selbstverständlich mehr als auf den Folien stehen kann. Einiges davon wird aber wohl nach und nach hier in diesem Blog landen…

Hinweise

Ein bisschen was an Feedback habe ich ja bereits bekommen. Vielen Dank dafür. Damit auch andere was von meinen Antworten haben, hier mal zusammengefasst:

  • Zum genannten Negativbeispiel kann ich leider keine verbesserte Version zeigen, da diese nicht existiert. Einen Eindruck kann man aber beim Beispiel zur Navigierbarkeit bekommen. Es handelt sich hierbei um ein ähnliches Programm. Hier werden nur DVDs statt Büchern verwaltet. Die funktionalen Anforderungen sind aber ähnlich. Trotzdem ist die Vergleichbarkeit leider etwas eingeschränkt, da die Voraussetzungen hier etwas anders sind. Da es sich dabei um eine Aufgabe für Studenten handelt, gibt es die zusätzliche Anforderung, dass es sich um eine Client-Server-Anwendung handeln musste und die Kommunikation über RMI stattzufinden hatte (Die Software war in Java umzusetzen). Die Diagramme zeigen den Client-Teil. Deshalb kann man das leider nicht direkt mit dem Bibliotheksprogramm vergleichen. Man kann aber wohl trotzdem erkennen, dass dieser Entwurf deutlich übersichtlicher und durchdachter ist.
  • Wer sich für den Unterschied zwischen Kapselung und Information Hiding interessiert, kann sich mal das angucken: Encapsulation is not information hiding
  • Zu dem einzelnen Prinzipien und Daumenregeln habe ich vor, Blogartikel zu verfassen. Eigentlich wollte ich ein Tutorial schreiben, aber ich fürchte, wenn ich damit anfange, werde ich nicht fertig. Deshalb gibts zuerst mal ne Übersicht über einzelne Prinzipien (damit hab ich schon angefangen) und dann immer mal wieder einen Artikel zu einzelnen Prinzipien.
  • Ich habe erzählt, dass es Leute gibt, die Properties bzw. Getter- und Settermethoden für tendenziell problematisch halten. Dabei kommt es natürlich drauf an, wie diese verwendet werden. Wert holen (get), Wert verarbeiten und Wert setzen (set) widerspricht dem „Tell, don’t ask“-Prinzip. Beispiel: Um die Ausleihfrist eines Buches zu verlängern könnte man folgendes tun: book.DueDate := IncDays(book.DueDate, 14); Das würde die Ausleihfrist um 14 Tage verlängern. Objektorientiert ist das aber genau genommen nicht. Besser wäre es, wenn das Objekt das selbst täte: book.IncDueDate(14); Beides geht in einer Zeile, der Unterschied ist nur der Ort an dem die Berechnung stattfindet. Einmal im Objekt und einmal außerhalb. Wenn man schon Properties hat, ist es aber natürlich viel verlockender, diese einfach zu verwenden, anstatt eine neue Methode einzuführen. Nur führt das etwas weg von der OO. Daneben gibt es aber natürlich auch viele sinnvolle Einsatzmöglichkeiten von Properties bzw. Gettern und Settern. Aufpassen sollte man nur da, wo wirklich Berechnungen außerhalb stattfinden. Selbst, wenn das nur ein Aufruf von IncDays() ist.
  • Auf das Pipe-and-Filter-Pattern bin ich nicht näher eingegangen, da das zu weit geführt hätte. Ich habe aber schon einen Blog-Artikel darüber in Arbeit. Besonders interessant ist hierbei, wie man die Ressourcenfreigabe löst. Erklärung und Beispielcode wird es dann also in nächster Zeit irgendwann mal geben.

Errata

  • Auf Folie 35 muss es natürlich „strangers“ und nicht „stragers“ heißen.

Mein Eindruck

Mein Vortrag war ganz gut besucht und bisher habe ich auch durchweg positive Rückmeldungen bekommen. Selbst die Zeit, die für mich bei Vorträgen bisher oft mehr oder weniger ein Problem darstellte, war hier kein Thema. Ich habe – ohne den Vortrag jetzt vorab zeitlich durch zu proben – mal versucht, die Zeit zu schätzen, die ich brauchen würde und war erstaunt, dass meine Schätzung nie mehr als zwei Minuten abgewichen hat. Ob das jetzt Glück war oder ich mittlerweile tatsächlich besser die Zeit planen kann, wird die Zukunft zeigen.

Mit Mikrofon in der Hand zu sprechen ist ein bisschen merkwürdig. Ich hab eigentlich gerne meine Hände frei. Wenn das hier jemand liest, der den Vortrag gehört hat, würde mich mal interessieren, wie man mich akustisch verstanden hat.

Weiteres Feedback/Fragen/Kritik/Anregungen/Eigene Eindrücke/WasAuchImmer ist herzlich willkommen. Im Forum, per Mail oder hier im Blog.

10 Kommentare


  1. Hallo Christian,

    auf diesem Wege wollte ich mich nochmal für deinen tollen Vortrag bedanken. Ich glaube es gab keinen im Saal, der sich nicht bei dem ein oder anderem Punkt ertappt gefühlt hat.
    Danke für die guten Anregungen. 🙂

    Akustisch warst du sehr gut zu verstehen. 🙂

    Gruß,
    Stefan


  2. Hallo Christian,

    ich schließe mich gerne der positiven Kritik, die du bisher bekommen hast an und fand auch super, dass du noch auf LSP näher eingegangen bist, als am Ende keine weitere Fragen mehr gab und daher noch etwas Zeit blieb.

    Mich hatte auch etwas irritiert, dass sie dort kein Headset bzw. Kragenmikro hatten. Aber auch mit dem Handmikro warst du super zu verstehen.

    Nochmal vielen Dank für den Vortrag und den Upload der Folien. Wisst ihr vielleicht, ob noch andere Vortragende ihre Folien online stellen? Man kann ja leider nur immer an einem Vortrag zur Zeit sein.

    Viele Grüße
    Christof


  3. Danke. Freut mich, dass es euch gefallen hat. 🙂

    Christof Kluß:
    Nochmal vielen Dank für den Vortrag und den Upload der Folien. Wisst ihr vielleicht, ob noch andere Vortragende ihre Folien online stellen? Man kann ja leider nur immer an einem Vortrag zur Zeit sein.

    Ja, die anderen Folien würden mich auch interessieren. Bisher weiß ich von denen aber noch nichts. Mal sehen…

    mfg

    Christian








Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert