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 / 3772 / 176 / 262 ) »
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 / 754 / 73 / 34 ) »
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 / 3942 / 105 / 885 ) »
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 / 754 / 73 / 34 ) »
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 / 4267 / 213 / 1140 ) »
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 / 754 / 73 / 34 ) »
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 / 4782 / 294 / 628 ) »
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 / 754 / 73 / 34 ) »
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 / 3772 / 176 / 262 ) »
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 / 0 ) »
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 / 3942 / 105 / 885 ) »
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 / 4267 / 213 / 1140 ) »
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

11
Antw.
7645
Views
Singleton
von Meex » 20.02.2006 09:02 • Verfasst in ABAP Objects®
0
Antw.
1500
Views
Statische HTMLs in integrierten ITS importieren
von speedy » 07.06.2007 14:25 • Verfasst in Web Application Server
8
Antw.
11597
Views
Gründe für die Instanziierung und gegen statische Methoden
von chrizz9988 » 19.03.2013 21:02 • Verfasst in ABAP Objects®
4
Antw.
2243
Views
Singleton einmal anders
von ralf.wenzel » 31.12.2018 10:23 • Verfasst in ABAP Objects®
1
Antw.
1243
Views
Eigener Modus für RFC-Call (Singleton)
von just » 10.05.2006 10:29 • Verfasst in Basis

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.