Gründe für die Instanziierung und gegen statische Methoden

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

Gründe für die Instanziierung und gegen statische Methoden

Beitrag von chrizz9988 (ForumUser / 11 / 5 / 0 ) »
Hallo ABAP-Freunde!
Wir möchten bei uns eine neue Software programmieren, wobei es hauptsächlich um eine Konverterfunktionalität zwischen Strukturen und Feldern eines Fremdsystems und dem SAP-System geht. Nachdem die Entscheidung fiel, das Ganze mit ABAP Objects zu lösen, gab es 2 Meinungsbilder. Die einen meinten man könne das Ganze in statischen Klassen mit statischen Methoden abbilden. Die andere Meinung (auch meine eigene) war eher, das man - wenn man schon OO verwendet - auch die Instanziierung verwenden sollte. Ich habe leider spontan nicht viele Vorteile der Instanziierung finden können, habe nun recherchiert und bin auf folgende Vorteile gestoßen:
  • statische Methoden werden bei erstem Aufruf sofort in den internen Modus geladen und bleiben bis zum Ende des Programms dort (höherer Speicherverbrauch) - Objekte werden vom Garbage-Collector gelöscht, sofern kein Zeiger mehr auf sie zeigt
  • mit Statischen Klassen ist keine Polymorphie möglich
  • ABAP OO verbietet die Redifinition statischer Methoden
  • der statische Konstruktor ist Parameterlos und kann keine Ausnahmen propagieren
Außer dem ersten Punkt, werden die 3 letzten keinen Nachteil im Sinne derer darstellen, die die statische Klasse favorisieren, da sie eigentlich "nur" eine Klasse als Funktionssammlung verschiedener Konvertermethoden sehen.

Habt ihr noch weitere Begründungen, warum die Instanziierung besser ist, oder ist es eigentlich legitim, dass man sich statische Klassen baut, um bestimmte Datenkonvertierungsroutinen etc. zu erzeugen? Wie ist Eure Meinung?

Vielen Dank im Voraus!

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


Re: Gründe für die Instanziierung und gegen statische Method

Beitrag von ralf.wenzel (Top Expert / 3927 / 200 / 280 ) »
Ich würde die Frage ganz anders stellen: Warum OO, wenn man eh nur statische Klassen verwendet? Welchen Vorteil hat das Ganze dann noch? Dann kann man gleich Funktionsgruppen schreiben, oder?

Bei einem meiner Kunden sitzt ein ganz "toller" Entwickler, der immer alles in OO macht und damit angibt wie ne Tüte Mücken -- aber wie man eine Factory-Methode schreibt, weiß er ebenso nicht wie er sich nicht mit Design-Patterns auskennt.

Folgende Benutzer bedankten sich beim Autor ralf.wenzel für den Beitrag:
chrizz9988

Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Gründe für die Instanziierung und gegen statische Method

Beitrag von a-dead-trousers (Top Expert / 4397 / 223 / 1182 ) »
Hi!

Wenn es um "einfache" Konvertierungen geht, mach ich eigentlich alles mit statischen Methoden.
Vorallem wenn die Konvertierungen mehrmals und unabhängig von irgendwelchen "Umgebungsinformationen" ablaufen, ist es IMHO sinnvoller statische Methode zu verwenden.
Man darf nicht außer acht lassen, dass auch eine Objekt-Instanzierung Laufzeit benötigt und wie du schon richtig bemerkt hast, müssen statische Methode nur einmal in den Speicher geladen werden.

Leider kann ich dir jetzt aber weder zu einem noch zum anderen raten. Das ist wirklich eine Entscheidung die man aus der Erfahrung heraus treffen muss.

Ich würde es vielleicht so sagen:
Sobald eine Methode viele Eingabeparameter besitzt und im Coding kommen ein Haufen Fallunterscheidungen ala "Par1 und Par2 sind gesetzt führe X aus" sollte man sich überlegen ob man das Ganze nicht besser "objektifizieren" sollte.
Auch wenn eine bestimmte Abfolge von Methoden immer wieder auftritt und das abhängig von bestimmten Variablen, dann wäre es ratsam das Coding in Objekten zu kapseln.

Vielleicht gibts ja noch weitere Beispiele von den anderen Foren-Teilnehmern, wann man statische Methoden einsetzen sollte und wann nicht.

Für den Anfang, auch wenn ihr euch noch in ABAP OO einarbeiten müsst, würde ich den strengen OO Weg einschlagen. Selbst bei reinen Konvertierungesroutinen lassen sich Objekte modelieren. Außerdem ist das dann eine Gute Übung um für die OO Programmierung fit zu werden.

lg ADT

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

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: Gründe für die Instanziierung und gegen statische Method

Beitrag von chrizz9988 (ForumUser / 11 / 5 / 0 ) »
ralf.wenzel hat geschrieben:Ich würde die Frage ganz anders stellen: Warum OO, wenn man eh nur statische Klassen verwendet? Welchen Vorteil hat das Ganze dann noch? Dann kann man gleich Funktionsgruppen schreiben, oder?
In Klassen greift z.B. die Syntaxprüfung viel strenger. Außerdem werden auch beim Aufruf von Methoden die Parameter u. Typen der Parameter ordentlich geprüft, was man bei FuBas nicht sagen kann. Auch kann man Klassenattribute public (und natürlich Read-Only) machen-kein wichtiger Punkt. Aber man kann Ereignisse und Exceptions propagieren, was auch ein Vorteil ist, den man auch bei statischen Klassen nutzen kann.

Re: Gründe für die Instanziierung und gegen statische Method

Beitrag von chrizz9988 (ForumUser / 11 / 5 / 0 ) »
Danke soweit!
a-dead-trousers hat geschrieben:Man darf nicht außer acht lassen, dass auch eine Objekt-Instanzierung Laufzeit benötigt und wie du schon richtig bemerkt hast, müssen statische Methode nur einmal in den Speicher geladen werden.
Ich kann alles nachvollziehen nur o.g. kann man auch als Nachteil sehen: Läuft das Programm länger und ich habe eine sehr große statische Klasse mit vielen Methoden, so bleibt diese komplett bis zum Programmende im internen Modus geladen und benötigt ja auch Arbeitsspeicher. Ein Objekt belegt diesen nur so lange, wie ich es benötige.
Das mit der Instanzierung stimmt natürlich auch wieder...muss man abwägen.

Ich schreib das nur nochmal, damit der Thread auch mal beim Suchen vollständig bleibt ;)

Wenn man alles schön mit OO macht, müsste man sowieso anders vorgehen, da - diesen klugen Satz habe ich hier gelesen - Klassen um Daten modelliert werden und nicht als Funktionssammlung.

Ich freue mich auf weitere Ideen, evtl. gibts auch Tipps wie man bei anderen diese Blockade und Ablehnungshaltung löst.

Re: Gründe für die Instanziierung und gegen statische Method

Beitrag von black_adept (Top Expert / 4093 / 128 / 940 ) »
Hallo chriz9988,

interessant dass so ein Nachtthread doch recht gut frequentiert ist.

letztlich ist es tatsächlich egal welchen Weg du nimmst - Hauptsache du kannst für dich selbst begründen warum du den einen und nicht den anderen Weg nehmen möchtest.

Ich persönlich würde in dem von dir geschilderten Fall wahrscheinlich auf statische Methoden zurückgreifen.
Begründung: Faulheit - Ich habe keine Lust ewig darüber nachzudenken und hoffe dass die Programmierer bei SAP dieses [Überlegen] gemacht haben als sie die Klasse cl_bcs_convert geschrieben haben.

Aber die Anmerkung von Ralf bzgl. Funktionsgruppen ist nicht von der Hand zu weisen, zumal du in deinem Originalposting von Konvertierungen zw. Fremd- und SAP-System gesprochen hast. Und nur FuBa sind RFC-fähig.

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
chrizz9988

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Gründe für die Instanziierung und gegen statische Method

Beitrag von a-dead-trousers (Top Expert / 4397 / 223 / 1182 ) »
black_adept hat geschrieben:Aber die Anmerkung von Ralf bzgl. Funktionsgruppen ist nicht von der Hand zu weisen, zumal du in deinem Originalposting von Konvertierungen zw. Fremd- und SAP-System gesprochen hast. Und nur FuBa sind RFC-fähig.
Ja, aber man kann trotzdem das Coding in einer Klasse schreiben und im RFC-Fuba nur den Aufruf machen.

Hab schon öfters sowas gemacht: Ich rufe die Methode einer Klasse auf. Wenn als Parameter eine RFC Destination mitgegeben wird, dann wird ein Fuba im Fremdsystem aufgerufen, der meine Methode mit denselben Parametern im Zielsystem aufruft.

lg ADT
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: Gründe für die Instanziierung und gegen statische Method

Beitrag von ewx (Top Expert / 4849 / 313 / 642 ) »
ralf.wenzel hat geschrieben:Ich würde die Frage ganz anders stellen: Warum OO, wenn man eh nur statische Klassen verwendet? Welchen Vorteil hat das Ganze dann noch? Dann kann man gleich Funktionsgruppen schreiben, oder?
Weil man z.B. aus statischen Klassen instanzierbare Klasen machen kann. Aus Funktionsgruppen nicht.
Ausserdem wird bei Klassen nur das Coding gelesen, was auch verwendet wird.
Bei Funktionsgruppen wird die komplette Funktionsgruppe in den Speicher geladen.

Ich mag zudem die Möglichkeit der funktionalen Schreibweise:

Code: Alles auswählen.

Ergebnis = zcl_hilfsklasse=>compute( irgendwas ).
oder

Code: Alles auswählen.

IF zcl_klasse=>check_irgendwas( eingabe ) is Initial.
Hier gibt es übrigens gerade die gleiche Diskussion:
http://zevolving.com/2013/03/abap-stati ... -use-when/

Re: Gründe für die Instanziierung und gegen statische Method

Beitrag von chrizz9988 (ForumUser / 11 / 5 / 0 ) »
Vielen Dank so weit für die Einblicke!
Also ich bin mittlerweile wohl auch der Meinung, dass wenn es um Methoden geht, die wirklich auf granularer Ebene arbeiten, statische Methoden nichts verwerfliches sind. Ein Beispiel dafür ist: Eingabe X = Ausgabe Y, z.B. mache aus JahrMonatTag --> TagMonatJahr. Oder eben die von black_adept angesprochene Klasse cl_bcs_convert.
Sobald es aber um mehrere Felder oder gar ganze Strukturen geht, die wirklich auch ein Objekt abbilden (z.B. wandle die Struktur eines Geschäftspartners aus dem Fremdsystem in das SAP-System um), macht es glaub ich mehr Sinn, diese "Schicht darüber" dann auch mit Objekten zu machen (in dem o.g. Fall mit einem Geschäftspartnerobjekt). Das Objekt selbst kann ja dann - wenn es um die einzelnen Felder geht - u.a. auf die statischen Methoden einer Utility-Klasse zurück greifen.
Grüße!

Seite 1 von 1

Vergleichbare Themen

3
Antw.
2151
Views
Gründe für Datendownload auf Appl.-Server
von chrislo » 09.05.2012 14:16 • Verfasst in ABAP® für Anfänger
11
Antw.
6233
Views
Singleton vs. statische Klasse
von ralf.wenzel » 17.12.2013 09:26 • Verfasst in ABAP Objects®
0
Antw.
1704
Views
Statische HTMLs in integrierten ITS importieren
von speedy » 07.06.2007 14:25 • Verfasst in Web Application Server
2
Antw.
2174
Views
Statische Code-Analyse zur Identifizierung von Änderungen an Datenobjekten
von abeape » 26.06.2024 09:44 • Verfasst in Tips + Tricks & FAQs
9
Antw.
9440
Views
GET und SET Methoden
von yuro » 02.12.2014 10:37 • Verfasst in ABAP® für Anfänger

Aktuelle Forenbeiträge

Trennen Strasse und Hausnummer
vor 12 Stunden von msfox 18 / 11019
Dialog-Container mit Toolbar/Status
vor 14 Stunden von black_adept gelöst 27 / 4138
IT0024 Qualifikationen CP-ID
vor 16 Stunden von ArjenR 1 / 121

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

Trennen Strasse und Hausnummer
vor 12 Stunden von msfox 18 / 11019
Dialog-Container mit Toolbar/Status
vor 14 Stunden von black_adept gelöst 27 / 4138
IT0024 Qualifikationen CP-ID
vor 16 Stunden von ArjenR 1 / 121

Unbeantwortete Forenbeiträge

IT0024 Qualifikationen CP-ID
vor 16 Stunden von ArjenR 1 / 121
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 3056
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9651