Aufgabe
In dieser Aufgabe wird eine neue Klasse für einen sehr einfachen ersten Würfel angelegt. Diese wird nur Attribute enthalten, die sogar öffentlich zugänglich sind. Also eigentlich nicht das, was man von einer objektorientierten Vorgehensweise erwarten würde.
Wir wollen diese Aufgabe dafür nutzen, um das Verständnis für Attribute und den Unterschied zwischen statischen Attributen und den Attributen einer Objektinstanz zu schärfen.
Dazu würfeln 10 Runden mit jeweils einem neuen Würfel. Das gewürfelte Ergebnis wird angezeigt und mit der Runde im Würfel gespeichert. Nach den 10 Runden werden die Ergebnisse nochmals angezeigt und verglichen. Dabei soilte uns etwas auffallen...
Vorgehensweise
Klasse und Attribute
- Klasse
ZCL_BC_AOO_##_DIE_STR anlegen mit Beschreibung Brandeis Training: ABAP Objects - Würfel - Strukturiert ##
- Anlegen einer statischen Variable
ROUND vom Typ Integer in der PUBLIC SECTION
- Anlegen einer Variable
NUMBER vom Typ Integer in der PUBLIC SECTION
Code Snippet Attribute
CLASS-DATA round TYPE i.
DATA number TYPE i.
- mit Pretty-Printer (
Strg-F1) formatieren und aktivieren (Strg-F3)
Test
Zum Testen das persönliche Testtool ZCL_BC_AOO_##_TESTTOOL_BEC mit der Teilnehmernummer aufrufen.
Die Methode für diese Übung heißt: run_str. Dazu muss die zu testende Methode entweder in die main-Methode mit aufgenommen oder über den Debugger die Variable lv_method auf die entsprechene Methode gesetzt werden.
Die Ausgabe der Console prüfen. Schauen Sie sich genau die Ergebnisse der 10 Würfel an und vergleichen Sie die erste Liste mit der zweiten Liste.
Tipp: Vor dem Start des Tests einmal die Console löschen.
Lösung
Lösung
CLASS zcl_bc_aoo_##_die_str DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
CLASS-DATA round TYPE i.
DATA number TYPE i.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS zcl_bc_aoo_##_die_str IMPLEMENTATION.
ENDCLASS.
Zusatzaufgaben
- Etwas mit dem Debugger üben und beobachten, wann das statische Attribut
ROUND überschrieben wird
- Innerhalb der Methode run_str werden die 10 Würfel erzeugt und in eine Tabelle geschrieben. Man kann dort schön beobachten, wie dort die statischen Attribute aller Objektinstanzen auf einen Schlag verändert werden
- Hinweis: Das Programm verwendet dynamische Aufrufe für die Klassen. Wir verwenden das hier nur, weil das Programm für alle Teilnehmer funktionieren soll. Wenn Sie die Klassen vorher kennen, ist die notwendige Syntax natürlich einfacher. Für etwas flexibleren ABAP Code sind auch Interfaces hilfreich.
Weitere Hinweise
Wenn man Attribute seiner Klassen öffentlich zugänglich macht, muss man sich bewusst sein, dass das vermutlich ausgenutzt werden könnte und zu unvorhersehbaren Ergebnissen führen kann.
Da man im Debugger alle Werte ändern kann - auch die privaten - gibt es kaum gute Gründe, so etwas zu tun. Daher die Empfehlung, erst einmal alle Attribute protected anzulegen und dann ggf. bei veständlichen Gründen noch einmal ändern.
Statische Variablen sind gefährlich, wenn man sich darauf verlässt, dass sie der objektorientierten Instanz gehören. Es gibt aber durchaus Szenarien, wo statische Veriablen sehr gut sind: z.B.
- Datenaustausch zwischen den Objektinstanzen
- Caching von Daten
- Singleton-Entwurfsmuster