Singleton vs. statische Klasse

Die Objektorientierung mit ABAP®: Vererbung, Dynamische Programmierung, GUI Controls (u.a. ALV im OO).
12 Beiträge • Seite 1 von 1
12 Beiträge Seite 1 von 1

Singleton vs. statische Klasse

Beitrag von ralf.wenzel (Top Expert / 4004 / 208 / 282 ) »
Moin moin,

Grundsatzfrage: Ich habe die Wahl, eine Klasse statisch (nicht instanziierbar) anzulegen oder als normale, instanziierbare Klasse mit einem Singleton-Pattern. In den SAP-Programmierrichtlinien wird letzteres empfohlen (leider ohne wirkliche Begründung), ich bin der Meinung: Bei einer statischen Klasse habe ich den Vorteil, dass ich SEHE, dass es eine solche ist (erkennbar am Aufruf). Singleton wäre dann wohl die reine Lehre.

Was würdet ihr bevorzugen und warum?
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Singleton vs. statische Klasse

Beitrag von Thomas R. (Expert / 766 / 84 / 40 ) »
Hallo Ralf,
Singleton würde ich nur verwenden, wenn klar ein __Objekt__ (und __genau ein__ Objekt) vorliegt.
Bei Klassen, die nur eine Sammlung von Methoden sind (analog von Funktionsgruppen) würde ich die statische Variante wählen.
Eine (globale oder überall durchgereichte) Referenz verwenden zu müssen um 'zwei Zahlen zu addieren' ;-) halte ich für overdressed.

MfG
Thomas R.

Re: Singleton vs. statische Klasse

Beitrag von black_adept (Top Expert / 4157 / 136 / 959 ) »
Hallo Ralf,

der Vorteil den ich bei Singletons sehe ist die Möglichkeit der Vererbung / Redefinition von Methoden. Aber wenn das nicht gegeben ist würde ich auch auf "klassische" statische Methoden setzen.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Singleton vs. statische Klasse

Beitrag von Thomas R. (Expert / 766 / 84 / 40 ) »
Hallo zusammen,
nun grabe ich den alten Thread wieder aus, denn nun sollte ich ein Singleton haben mit Vererbung.
Mein Problem ist nur dabei, dass ich - wie immer mit zwei Tomaten auf den Augen - nicht sehe, wie ich bei der statischen GetInstance-Methode der Oberklasse eine Referenz auf ein Objekt der Unterklasse zurückgeben kann. In der Oberklasse kenne ich ja nur die Oberklasse.
Will ich dann aber die redefinierten Methoden der Unterklasse aufrufen brauche ich eine Objektreferenz der Unterklasse.

Wie löst Ihr das Problem? Oder ist Vererbung und Singleton im ABAP gar nicht (so einfach) möglich?

MfG
Thomas R.

Re: Singleton vs. statische Klasse

Beitrag von a-dead-trousers (Top Expert / 4481 / 231 / 1205 ) »
Hi!

Deiner GET_INSTANCE-Methode könntest du z.B. einen Parameter spendieren mit dem entschieden wird, welche Klasse instanziert werden soll.
Oder, sofern das geht, du baust dein Klassen-Design etwas um:
Klasse A (Keine GET_INSTANCE-Methode; beinhaltet das ganze "gemeinsame" Coding)
Klasse B (Abgeleitet von A; Erweitert/Ergänzt Methoden aus A; GET_INSTANCE-Methode liefert B)
Klasse C (Abgeleitet von A; Erweitert/Ergänzt Methoden aus A; GET_INSTANCE-Methode liefert C)

lg
ADT

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
Thomas R.

Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Singleton vs. statische Klasse

Beitrag von Thomas R. (Expert / 766 / 84 / 40 ) »
Hallo ADT,
Vorschlag 2 scheint mir gut umsetzbar, danke Dir
(Die Tomaten darfst Du gerne behalten ;-))

MfG
Thomas R.

Re: Singleton vs. statische Klasse

Beitrag von ewx (Top Expert / 4913 / 332 / 653 ) »
Vorteil bei einem instantiierten Objekt ist, dass man im Debugger Zugriff auf alle Variablen hat (ME).
Das funktioniert bei einer statischen Methode nicht.
Ich verwende trotzdem für kleine Funktionen gerne statische Methoden, da diese beim Aufruf einfacher sind (Ein Mal CALL METHOD anstelle CREATE OBJECT + CALL METHOD).

Re: Singleton vs. statische Klasse

Beitrag von Thomas R. (Expert / 766 / 84 / 40 ) »
Hallo Enno,
unter 7.31 funktioniert auch

Code: Alles auswählen.

singleton_class=>get_instance( )->meth1( ).
Will 7.31 haben....
(unter 7.01 funktioniert es definitiv nicht).

MfG
Thomas R.

Re: Singleton vs. statische Klasse

Beitrag von ralf.wenzel (Top Expert / 4004 / 208 / 282 ) »
Thomas R. hat geschrieben:Will 7.31 haben....
(unter 7.01 funktioniert es definitiv nicht).
Ich hab hier ein 7.40er Release beim Kunden, das ist schon ziemlich geil, welche neuen Möglichkeiten man damit hat. Ich will nix Älteres mehr haben ;)
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Singleton vs. statische Klasse

Beitrag von Sral (ForumUser / 4 / 0 / 1 ) »
ewx hat geschrieben:Vorteil bei einem instantiierten Objekt ist, dass man im Debugger Zugriff auf alle Variablen hat (ME).
Das funktioniert bei einer statischen Methode nicht.
Ich verwende trotzdem für kleine Funktionen gerne statische Methoden, da diese beim Aufruf einfacher sind (Ein Mal CALL METHOD anstelle CREATE OBJECT + CALL METHOD).
Im neuen Debugger hat man doch inzwischen auch Zugriff auf alle statischen Attribute einer Klasse. Man kann ja zum Beispiel im neuen Debugger über den Reiter Data Explorer > Einzelanzeige dort auch den Klassennamen angeben. Anschließend hat man dann Zugriff auf alle statischen Attribute dieser Klasse.

Oder meintest Du etwas anderes?

Viele Grüße,
Lars

Re: Singleton vs. statische Klasse

Beitrag von black_adept (Top Expert / 4157 / 136 / 959 ) »
a-dead-trousers hat geschrieben:Hi!

Deiner GET_INSTANCE-Methode könntest du z.B. einen Parameter spendieren mit dem entschieden wird, welche Klasse instanziert werden soll.
Oder, sofern das geht, du baust dein Klassen-Design etwas um:
Klasse A (Keine GET_INSTANCE-Methode; beinhaltet das ganze "gemeinsame" Coding)
Klasse B (Abgeleitet von A; Erweitert/Ergänzt Methoden aus A; GET_INSTANCE-Methode liefert B)
Klasse C (Abgeleitet von A; Erweitert/Ergänzt Methoden aus A; GET_INSTANCE-Methode liefert C)

lg
ADT
Hallo adt,

Vorschlag 1 ist mir klar - aber bei Vorschlag 2 habe ich wohl die Tomaten von Thomas geerbt und wollte ich noch mal nachhaken ob ich das richtig verstanden habe.
Klasse A wie beschrieben, Klassen B und C implementieren ein Interface mit der statischen Methode GET_INSTANCE, welches von Klasse A explizit nicht verwendet wird, da man statische Methoden ( in ABAP ) nicht redefinieren kann?
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Singleton vs. statische Klasse

Beitrag von a-dead-trousers (Top Expert / 4481 / 231 / 1205 ) »
black_adept hat geschrieben:
a-dead-trousers hat geschrieben:Hi!

Deiner GET_INSTANCE-Methode könntest du z.B. einen Parameter spendieren mit dem entschieden wird, welche Klasse instanziert werden soll.
Oder, sofern das geht, du baust dein Klassen-Design etwas um:
Klasse A (Keine GET_INSTANCE-Methode; beinhaltet das ganze "gemeinsame" Coding)
Klasse B (Abgeleitet von A; Erweitert/Ergänzt Methoden aus A; GET_INSTANCE-Methode liefert B)
Klasse C (Abgeleitet von A; Erweitert/Ergänzt Methoden aus A; GET_INSTANCE-Methode liefert C)

lg
ADT
Hallo adt,

Vorschlag 1 ist mir klar - aber bei Vorschlag 2 habe ich wohl die Tomaten von Thomas geerbt und wollte ich noch mal nachhaken ob ich das richtig verstanden habe.
Klasse A wie beschrieben, Klassen B und C implementieren ein Interface mit der statischen Methode GET_INSTANCE, welches von Klasse A explizit nicht verwendet wird, da man statische Methoden ( in ABAP ) nicht redefinieren kann?
Nein, B und C haben jede eine eigene GET_INSTANCE Methode. Ein Interface bringt da nix, weil dann ja erst wieder ein Down-Cast notwendig wird.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Seite 1 von 1

Vergleichbare Themen

4
Antw.
3377
Views
Singleton einmal anders
von ralf.wenzel » 31.12.2018 10:23 • Verfasst in ABAP Objects®
1
Antw.
1787
Views
Eigener Modus für RFC-Call (Singleton)
von just » 10.05.2006 10:29 • Verfasst in Basis
0
Antw.
3091
Views
Statische HTMLs in integrierten ITS importieren
von speedy » 07.06.2007 14:25 • Verfasst in Web Application Server
8
Antw.
14576
Views
Gründe für die Instanziierung und gegen statische Methoden
von chrizz9988 » 19.03.2013 21:02 • Verfasst in ABAP Objects®
2
Antw.
9678
Views
Statische Code-Analyse zur Identifizierung von Änderungen an Datenobjekten
von abeape » 26.06.2024 09:44 • Verfasst in Tips + Tricks & FAQs

Aktuelle Forenbeiträge

Pflegeview zeigt nicht alle Daten an
vor 2 Tagen von sapdepp gelöst 7 / 477
ALV Grid und Dynprofeld
vor 3 Tagen von PeterPaletti 5 / 509

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

Pflegeview zeigt nicht alle Daten an
vor 2 Tagen von sapdepp gelöst 7 / 477
ALV Grid und Dynprofeld
vor 3 Tagen von PeterPaletti 5 / 509

Unbeantwortete Forenbeiträge

Benutzerdefinierte Felder PSP
letzen Monat von Rabea1103 1 / 50822
Spool vereinen OTF und PDF
letzen Monat von anna2205 1 / 67070
XSLT und Loipro05 Transformation
December 2025 von Torsten1965 1 / 78828