Vor ein paar Jahren wurde ich bei einem Kunden eingeladen einen Kurs zu ABAP OO (aka. ABAP Objects) zu geben. Während des Trainings habe ich dann erfahren, dass einige Teilnehmer den dritten Kurs zu diesem Theam im Unternehmen besuchen. Es war Ihnen unmöglich nach den Trainings die 3-5 Tage lang gingen, die Inhalte adhoc umzusetzen. Nach ein paar Tagen der Beschäftigung mit dem täglichen Business war von dem gelernten weniger wie 1% in Erinnerung geblieben.
Dies war für mich der Startpunkt nach einer besseren Lösung zu suchen und auch die aufkommenden Probleme versuchen besser zu lösen.

"All software engineers can program, but not all programmers can engineer Software." - Samer Buna

Persönlich bin ich ein großer Verfechter der asiatischen Philosophie Kaizen.
Die ständige Beschäftigung mit der Frage, was kann verbessert werden führt manchmal zu spannenden Ergebnissen. Diese möchte ich hier mit euch teilen...

Eine neue Art der Objektorientierung?

Nein, keine Sorge hier wird nicht die Objektorientierte Programmierung neu formuliert. Dies ist aus meiner Sicht einfach eine logische Weiterentwicklung zu dem Thema Objektorientierung und der gelungene Einstieg in das Thema!

Obwohl das Thema so alt ist und es die meiste Fachliteratur im Zusammenhang mit OO gibt, habe ich im Laufe meiner Arbeit als Technology Coach festgestellt, dass gerade die offensichtlichen Inhalte manchmal nicht sicher sitzen. Seit den Anfängen dieses Paradigmas gab es immer verschiedene Interpretationen, wie die *richtige* Anwendung auszusehen hat. Es führte zu verschiedenen Gedanken-Stilen der Objektorientierung. Hier um nur einige zu nennen:

  • OOP nach den Prinzipien von Alan Kay
  • Radikale OO nach Ralf Westphal
  • Elegant Objects nach Yegor Bugayenko

Dies hat mich vor ein paar Jahren dazu bewogen dieses Paradigma nochmal neu zu durchdenken und es so zusammen zu stellen, dass es einige höhere Ziel im Fokus behält.

Applied OO habe ich für mich im Jahr 2017 fertig gedacht. Es ist so zusammengestellt, dass die Themen testbare Software, Robustheit und Clean-Code im Fokus stehen. Dies hat dazu geführt, dass das Set an Verwendung von OO-Syntax deutlich reduziert wird. (Ja, sorry für die Fans von maximaler Nutzung jedes Syntax-Befehls, dieses Vorgehen ist wahrscheinlich nichts für euch...) Dies ist dadurch entstanden, das die Anwendung hier immer höchste Priorität hatte. Sobald ich Prinzipien oder Praktiken nicht einfach mit einem Mehrwert hinsichtlich der drei Höheren Ziele anwenden konnte, habe ich der Verwendung keine weitere Zeit geschenkt.

Applied OO

Applied OO sind im wesentlichen Guidelines die ich ca. vor 2 Jahren fertig gestellt habe wie man OO lernt und vor allem praktiziert. Von Anfang an werden "höhere" Ziele wie testbare Software, Robustheit und Clean-Code Prinzipien verwendet.
Dabei habe galt der Fokus Praktikern die ein hohes Niveau erreicht haben, wie auch Inhalten aus meiner Coachingarbeit.

Entstanden sind Inhalte die Modernes ABAP umfassen, aber auch Guidelines die tatsächlich zu guten Designs führen. Dies habe ich im Selbstversuch probiert 😉 und dann später bei meinen Coaching-Kunden mit unglaublichen Erfolg umgesetzt…

Dieses Jahr habe ich beschlossen diese Art von OO zu teilen…

Das Ziel der Vorgehensweise Applied OO (ausgeschrieben Applied Object-Oriented) ist Guidelines in Objektorientierter Programmierung zu nutzen, die auch einen Auswirkung hinsichtlich Clean-Code, Testbarkeit und einfachen robusten Lösungen ermöglichen. Die eingesetzten Prinzipien werden im folgenden genannt und es wird auch ein Hinweis auf Einflüsse von bekannten Entwicklern gegeben.

Werte

Die Werte die Applied OO versucht zu erreichen sind:

  • testbare Software
  • robuste Software
  • Clean Code

Prinzipien

  • Alan Kay´s Prinzipien
  • Clean Code
  • IOSP nach Ralf Westphal
  • Refactoring
  • Symmetry
  • 4Rules of Simple Design nach J.B. Rainsberger
  • Domain and Role-based
  • Simplicity

Praktiken

  • Modernes ABAP
  • Subset an ABAP Objects

Fokus auf Prinzipien

Applied OO ist also nach wie vor Objektorientierte Programmierung, mit dem Zeil einer hohen praktischen Nutzbarkeit. Aus diesem Grund finden sich auch nur Prinzipien und Praktiken von Kollegen wieder, die unsere Industrie massgeblich geprägt haben und die selber eine hohe Meisterschaft beim Programmieren besitzen.

Hier in unsortierten Reihenfolge diejenigen die mich hier am meisten beeinflusst haben (Reihenfolge hat keine Wertigkeit und ist auch nicht in irgendeiner Art sortiert):
Alan Kay, Kent Beck, Uncle Bob, Ralf Westphal, Eric Evans, Trygve Reenskaug, James O. Coplien, J.B. Rainsberger, Martin Fowler, Michael Feathers, Kristen Nygaard, Ole-Johan Dahl

Prinzipien des Applied OO

Die folgende Übersicht zeigt die verwendeten Prinzipien des Applied OO.


Es wird hier ausdrücklich auf der Prinzipienebene gearbeitet, um diese für kontextbezogene Situation richtig einsetzen zu können. Ich glaube nicht an billige Programmiertricks die im Handumdrehen die Erlösung bringen. Für mich ist Software-Entwicklung stark mit Software-Engineering und Software-Craftmanship verbunden.

Applied OO ist nicht der heilige Gral, aber es ist durch die Programmierpraxis vieler Coaching-Kunden und auch meiner ist die Ansatz seit Jahren verprobt worden. Die dort erzielten Ergebnisse haben mich bewogen Applied OO der Community zu präsentieren. Sehr gute Ergebnisse lassen sich nur mit dem richtigen Mindset erzielen.

“It is not enough for code to work.” - Robert C. Martin

Weitere Informationen

Wer mehr erfahren möchte, kann sich gerne meinen Vortrag beim SAP Inside Track Vienna 2018 angucken: SITVienna 2018 - Damir Majer

Oder ist herzlich eingeladen einer meiner Webinare "Webinare powered by majcon" zu dem Thema zu besuchen.