Redefinierte Methode - Attribute

Getting started ... Alles für einen gelungenen Start.
22 Beiträge • Vorherige Seite 2 von 2 (current)
22 Beiträge Vorherige Seite 2 von 2 (current)

Re: Redefinierte Methode - Attribute

Beitrag von a-dead-trousers (Top Expert / 4285 / 214 / 1141 ) »
black_adept hat geschrieben:Hmm - ich finde das eigentlich gar nicht so schön. Es erfüllt sicherlich den Zweck, aber auch wenn SAP das selber verwendet zeigt das nur, dass sie selber das Overloading vermissen bzw. sich nur so zu behelfen wissen.
Aber gerade die Idee, dass man Pflichtparameter im Interface definiert um dann weitere Parameter via implementierender Klasse zur Verfügung zu haben stößt mir schon recht bitter auf. Dann kann doch gleich alle Methoden genau so definieren und sich die ganzen Schnittstellen von Methoden ganz sparen.
Da bin ich ganz deiner Meinung, aber ...
a-dead-trousers hat geschrieben:Wenn man in dieses Methoden-Schnittstelle-Interface-Konzept etwas Zeit investiert sollte man auch gänzlich ohne das CASTING auf die implementierende Klasse auskommen können.
Sieh die Schnittstelle einfach als eigenes Objekt an. Gleich wie bei "normalen" Klassen steht und fällt das Konzept damit wie es designed ist.
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

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


Re: Redefinierte Methode - Attribute

Beitrag von black_adept (Top Expert / 3946 / 105 / 886 ) »
a-d-t: Da du dieses Konzept ja scheinbar schon im Einsatz gesehen hast, darfst du jetzt die folgenden Fragen beantworten:
Schnittstellendefinition:
"Normale" Schnittstellen haben importing, exporting, changing Parameter: Diese werden durch die Signatur unterschieden. Wie unterscheidet SAP das denn in den Interfacemethoden? Namenskonvention oder die Anwesenheit von Set- und/oder Getmethoden für die Attribute?

Von mir gern verwendete Returningparameter scheinen ja implizit ausgeschlossen zu sein, da diese Methoden nur dieses Interface als Parameter haben, wodurch dann ja zusätzlicher Returning-Parameter entfällt. Somit entfällt auch die Frage nach "Preferred" Parametern.
Unterscheidung "byValue"/"byReference" kann ich mir vorstellen - das Arbeiten damit scheint mir hingegen unhandlich zu werden. ( Und fast zwingend den Einsatz von Settern und Gettern zu erfordern, wenn man einen einheitlichen Zugriff wünscht )
Aber "optionale" Parameter müssten ja auch irgendwie kenntlich gemacht werden. Auch hier die Frage: Wie?

Arbeiten mit der Schnittstelle
Wie wird denn bei dieser Methodik der Prädikatoperator "is supplied" abgebildet?




Und noch mal ein Kommentar zur Originalfrage dieses Thread an tseng:
Warum willst du überhaupt die Signatur der Methode ändern?
Diejenigen Aufrufer einer erweiterten Methode müssten ja vorher sicherstellen, dass sie es mit der abgeleiteten Klasse zu tun haben und nicht mit der Oberklasse um die Schnittstelle korrekt zu befüllen.
Aber wenn ich weiß, dass ich die Unterklasse zur Verfügung habe, kann ich auch alternativ vorgehen, indem ich der abgeleiteten Klasse eine neue Methode verpasse, welche dann von dem Aufrufer zusätzlich/alternativ zur Originalmethode aufgerufen wird.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Redefinierte Methode - Attribute

Beitrag von a-dead-trousers (Top Expert / 4285 / 214 / 1141 ) »
black_adept hat geschrieben:"Normale" Schnittstellen haben importing, exporting, changing Parameter: Diese werden durch die Signatur unterschieden. Wie unterscheidet SAP das denn in den Interfacemethoden? Namenskonvention oder die Anwesenheit von Set- und/oder Getmethoden für die Attribute?
Hauptsächlich Set- und Getmethoden.
black_adept hat geschrieben:Unterscheidung "byValue"/"byReference" kann ich mir vorstellen - das Arbeiten damit scheint mir hingegen unhandlich zu werden. ( Und fast zwingend den Einsatz von Settern und Gettern zu erfordern, wenn man einen einheitlichen Zugriff wünscht )
Ich selbst verwende für viele Sachen lieber Public Read-Only Attribute anstatt Getter, da ich diese z.B. direkt in SQL-Selects verwenden kann ohne zuerst ein lokales Datenfeld anlegen zu müssen. Setter sind jedoch meines Erachtens immer Pflicht z.B. für das Sanitizing.
black_adept hat geschrieben:Von mir gern verwendete Returningparameter scheinen ja implizit ausgeschlossen zu sein, da diese Methoden nur dieses Interface als Parameter haben, wodurch dann ja zusätzlicher Returning-Parameter entfällt.
Der Returning-Parameter kann ja auch wieder ein Interface sein. z.b. wenn die Funktionalität der Methode dazu dient ein neues Objekt zu erzeugen.
Oder es geht auch Changing wenn ein Objekt "transformiert" werden soll.
black_adept hat geschrieben:Somit entfällt auch die Frage nach "Preferred" Parametern.
Wenn du damit meinst, dass man nur schwer sicherstellen kann ob alle benötigten Parameter versorgt sind, kann man ja auch eine Prüfmethode hinzufügen die eine Exception im Fehlerfall wirft. Gut, es ist etwas aufwändiger als auf die Syntax-Prüfung zu vertrauen und schlägt auch erst zur Laufzeit an, aber wie es überall so ist, kann man nicht nur Vorteile haben.
black_adept hat geschrieben:Aber "optionale" Parameter müssten ja auch irgendwie kenntlich gemacht werden. Auch hier die Frage: Wie?
Gute Frage! Nächste!
Nein, ernsthaft: Darüber hab ich mir noch keine Gedanken gemacht. Vielleicht könnte man ein zusätzliches Attribut versorgen das bei Aufruf der Setmethode zum Parameter gesetzt wird. Aber siehe dazu auch deine nächste Frage.
black_adept hat geschrieben:Wie wird denn bei dieser Methodik der Prädikatoperator "is supplied" abgebildet?
Obwohl ich das selbst sehr gern verwende, habe ich mir sagen lassen das, dass eigentlich ein no-go ist. Die Programmlogik sollte nicht vom vorhandensein von Parametern beeinflusst werden können. Bestes Beispiel: Eine solche Methode lässt sich z.B. über die "Testen"-Funktion in der se80 nicht in allen Kombinationen ausführen.
black_adept hat geschrieben:Und noch mal ein Kommentar zur Originalfrage dieses Thread an tseng:
Warum willst du überhaupt die Signatur der Methode ändern?
Diejenigen Aufrufer einer erweiterten Methode müssten ja vorher sicherstellen, dass sie es mit der abgeleiteten Klasse zu tun haben und nicht mit der Oberklasse um die Schnittstelle korrekt zu befüllen.
Aber wenn ich weiß, dass ich die Unterklasse zur Verfügung habe, kann ich auch alternativ vorgehen, indem ich der abgeleiteten Klasse eine neue Methode verpasse, welche dann von dem Aufrufer zusätzlich/alternativ zur Originalmethode aufgerufen wird.
Da muss ich jetzt auch noch was dazu sagen, auch wenn die Fragen nicht direkt an mich gerichtet waren:
Ich nehme an er bezieht sich auf andere Programmiersprachen wie z.B. Java. Dort kann man jederzeit eine neue Methode einführen die denselben Namen hat wie eine andere der Oberklasse aber deren Parameter unterschiedlich sind. Ich finde, eine sehr elegante Lösung um sich neue Methodennamen nicht aus den Fingern saugen zu müssen. Was ich in SAP schon oft machen musste, vor allem bei nur 30 möglichen Zeichen. :x
ABER: Wie ich Eingangs schon erwähnt habe, handelt es sich bei solchen Methoden NICHT um Redefinitionen. Da in Java die Signatur einer Methode zu deren Definition gehört, handelt es sich in Wirklichkeit um eine von der Hauptklasse völlig losgelöste, neue Methode.

Warum er das trotzdem gerne hätte: Ganz einfach, er möchte Methode X einer Klasse überladen um zusätzliche Änderungen damit durchzuführen, aber trotzdem die Originalmethode auch noch aufrufen können, ohne jetzt einen neuen Methodennamen zu "verbrauchen". Erinnert ein bischen an das erwähnte Vorgehen unter Java. ;)

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: Redefinierte Methode - Attribute

Beitrag von black_adept (Top Expert / 3946 / 105 / 886 ) »
a-dead-trousers hat geschrieben:
black_adept hat geschrieben:Wie wird denn bei dieser Methodik der Prädikatoperator "is supplied" abgebildet?
Obwohl ich das selbst sehr gern verwende, habe ich mir sagen lassen das, dass eigentlich ein no-go ist. Die Programmlogik sollte nicht vom vorhandensein von Parametern beeinflusst werden können. Bestes Beispiel: Eine solche Methode lässt sich z.B. über die "Testen"-Funktion in der se80 nicht in allen Kombinationen ausführen.
Wer hat sich denn diese tolle Idee einfallen lassen bzw dir das erzählt? Für Importingparamer gehe ich ja gerne d'accord, aber gerade wenn ich einen Exporting-Parameter nicht benötige kann ich sehr oft auf zeitfressende Operationen verzichten, so dass ich dieser Aussage aufs Heftigste widersprechen möchte.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Redefinierte Methode - Attribute

Beitrag von ewx (Top Expert / 4784 / 294 / 628 ) »
black_adept hat geschrieben:[...] aber gerade wenn ich einen Exporting-Parameter nicht benötige kann ich sehr oft auf zeitfressende Operationen verzichten, so dass ich dieser Aussage aufs Heftigste widersprechen möchte.
Aufs Allerheftigste (aus genanntem Grund)! ;)

Re: Redefinierte Methode - Attribute

Beitrag von a-dead-trousers (Top Expert / 4285 / 214 / 1141 ) »
black_adept hat geschrieben:Wer hat sich denn diese tolle Idee einfallen lassen bzw dir das erzählt? Für Importingparamer gehe ich ja gerne d'accord, aber gerade wenn ich einen Exporting-Parameter nicht benötige kann ich sehr oft auf zeitfressende Operationen verzichten, so dass ich dieser Aussage aufs Heftigste widersprechen möchte.
Die "reine" Leere würde auch von Exporting-Parametern abraten und auf Returning-Parameter verweisen :wink:
Wenn du z.B. zwei Elemente als Rückgabe benötigst sind das eigentlich zwei unterschiedliche Methoden. Benötigt man um beide Elemente zu erhalten eine gemeinsame Vorgehensweise (auch um Zeit zu sparen) ist das eine weitere Methode. Diese liefert als Ergbnis etwas aus dem die ersten beiden Elemente generiert bzw. ausgelesen werden können und als Importing Parameter für die anderen zwei Methoden dient.
Oder du verpackst dein Ergebnis in ein Objekt und erst wenn man davon eine GET_X bzw. GET_Y Methode aufruft werden die weiteren zeitfressenden Operationen ausgeführt.

lg ADT

P.S.: Ich sag ja jetzt nicht, dass ich immer so "sauber" unterwegs bin und mache mir oft auch das Leben mit EXPORTING bzw. IS SUPPLIED leichter, aber ich denke doch das der Zug in diese Richtung gehen sollte. Wenn schon OO dann aber richtig. :evil:
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: Redefinierte Methode - Attribute

Beitrag von gtoXX (Specialist / 185 / 34 / 31 ) »
black_adept hat geschrieben:
a-dead-trousers hat geschrieben: Oder als (einzigen) Parameter in der Methoden-Schnittstelle ein Interface (als Parametertyp) verwenden. Dieses Interface definiert alle notwendigen "Parameter" für die korrekte Verarbeitung der Methode als Attribute oder über SET-/GET-Methoden.
Hmm - ich finde das eigentlich gar nicht so schön. Es erfüllt sicherlich den Zweck, aber auch wenn SAP das selber verwendet zeigt das nur, dass sie selber das Overloading vermissen bzw. sich nur so zu behelfen wissen.
Aber gerade die Idee, dass man Pflichtparameter im Interface definiert um dann weitere Parameter via implementierender Klasse zur Verfügung zu haben stößt mir schon recht bitter auf. Dann kann doch gleich alle Methoden genau so definieren und sich die ganzen Schnittstellen von Methoden ganz sparen.
Zumal man hier in meinen Augen deutlich schönere Alternativen hätte:
Pflichtfelder braucht man eigentlich nicht über diese Krücke zu übergeben, da diese direkt in die Signatur der Methode eingehen sollten. Wenn man dann tatsächlich noch overloading unterstützen will kann man das ja von mir aus mit der o.a. oder einer alternativen Technik machen ( DataRef auf Struktur wäre wohl ähnlich geeignet ) - aber eben nur für den Nicht-Pflichtteil der Methode .

Für den Nicht-Pflichtteil einer Methode machen das andere auch relativ einfach. Sie übergeben ein Objekt. Du findest oft die Kombination z.b. ParamArgs oder Metadata, gerade bei Events. Sicher wäre hin- und wieder ein Overloading wünschenswert. Gerade wenn man Framworks macht. Allerdings ist auch immer die Frage ob Overloading nicht Dinge komplizierter macht. Verwendbar ist es ja sowieso nur in der implementierenden Klasse.
"Code lügt nicht ^^"

Vergleichbare Themen

5
Antw.
4506
Views
Doppelte Attribute finden
von isensatus » 23.08.2018 10:56 • Verfasst in ABAP® für Anfänger
8
Antw.
10807
Views
Aufruf statischer privater Attribute
von Hotzenplotz » 13.01.2018 18:28 • Verfasst in ABAP® für Anfänger
0
Antw.
1501
Views
SRM eigene Attribute aus Org-Struktur entfernen
von jspranz » 20.02.2007 12:52 • Verfasst in Sonstige Module
0
Antw.
1289
Views
Datei Attribute am Frontend lesen
von PI2301 » 27.10.2009 13:35 • Verfasst in ABAP® für Anfänger
0
Antw.
3524
Views

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.