Interfaces vs. Vererbung

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

Interfaces vs. Vererbung

Beitrag von ewx (Top Expert / 4784 / 294 / 628 ) »
Hallo zusammen!
welchen Vorteil bieten mir Interfaces bzw. wie setze ich sie an folgendem Beispiel gewinnbringend ein?

Ich habe auf diesem Blog ein paar tolle Infos und Hilfen gefunden.
Dabei würde ich mich gerne auf das "Spiderman-Problem" beziehen:
http://stefanhenneken.wordpress.com/201 ... nterfaces/

Laut Vererbungshierarchie kann es Spiderman nicht geben, da nicht von zwei Klassen geerbt werden kann.

Mit Interfaces wäre es anders:
Spiderman könnte demnach von HUMAN erben und das Interface IF_NETZ mit der Methode SPINNEN implementieren.
Ebenso würde SPIDER das gleiche Interface implementieren.

Nun aber zu meinem Hauptproblem:

Wenn ich irgendwo eine Objektreferenz zu LivingOrganism bekomme, woher weiß ich dann, dass SPIDER und SPIDERMAN die Methode SPINNEN implementiert haben?

Muss ich das
(a) "ausprobieren" mit REF_LIVING_ORGANISM->('SPINNEN') und die entsprechenden Exceptions abfangen ( CX_SY_DYN_CALL_ILLEGAL_METHOD), wenn die Methode nicht existiert?
(b) Oder muss ich mit einer Art von Verwaltungsklasse arbeiten, die weiß, welche Objekte welche Funktionen haben?
(c) Oder muss ich das Objekt "fragen" können, was es ist und welche Funktionen möglich sind?
(d) oder muss ich wissen, was für ein Objekt ich erwarte, dieses mittels CAST zuweisen und dann entscheiden, ob ich die Methode ausführen kann?

Für entsprechende Hinweise zu Spiderman bin ich dankbar.

Gruß
Enno

PS: Bitte keine Diskussionen über den Sinn und Zweck von Spiderman. Reale Anwendungsfälle gibt es sicherlich zuhauf. Nur eben jetzt nicht, weil es ein Beispiel ist...

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


Re: Interfaces vs. Vererbung

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
Nach der "reinen" Leere sollte es egal sein welchen Objekttyp du eigentlich hast.
Wenn du von Spiderman das SPINNEN in einer Methode benötigst verwendest du als Parameter das Interface IF_NETZ.
Wenn du aber einen LIVING ORGANISM brauchst beziehst du dich auf dessen Interface/Klasse.

Leider hab ich persönlich es noch nie geschafft diese reine Leere umzusetzen. Man müsste dazu wirklich das große Ganze von vornherein kennen. Daher behelfe ich mir meist mit einem Hauptinterface (z.b.: IF_OBJECT) das von jedem anderen Interface eingebunden wird und ein IDENTIFY Methode besitzt. Zusätzlich definiere ich dann noch Konstanten für jedes andere Interface im Hauptinterface. Die einzelnen Implementierungen geben dann im IDENTIFY Auskunft über ihre Interfaces.

Ein gutes Beispiel für eine "schöne" Interface-Verwendung, finde ich, ist das Collection Framework von Java.

lg ADT

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

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: Interfaces vs. Vererbung

Beitrag von ewx (Top Expert / 4784 / 294 / 628 ) »
Da wirst du aber filosofisch, mit deiner "reinen Leere"...! ;)
Erinnert mich an das "Tao der Programmierung".

Aber mal Ernst beiseite...

Wie das Interface verwendet wird, ist mir klar. Mir geht es um Konzepte, wie auf Unterschiede in den Objekten eingegangen wird.
Mit Identify hört sich das schon mal schlüssig an! Dann kann der Aufrufer je nach Typ reagieren.

Wie realisierst du deine IDENTIFY-Methode?
Einfach

Code: Alles auswählen.

lv_who_are_you = IDENTIFY( )

METHOD identify.
  i_am = 'Interface NETZ'.
ENDMETHOD
??

Hast du ein Beispiel, in welchem Zusammenhang/ kontext du dieses Verfahren benutzt?

Das Collection-Framework kenne ich nicht. Liegt vielleicht daran, dass ich auch Java nicht kenne... ;)


Danke!!

Re: Interfaces vs. Vererbung

Beitrag von MrBojangles (Specialist / 367 / 3 / 30 ) »
Sorry, konnte nicht widerstehen...
41-rc61S4aL.jpg
Weiterhin viel Freude mit SAP...
Cheers
MrB.


Re: Interfaces vs. Vererbung

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
ewx hat geschrieben:Wie realisierst du deine IDENTIFY-Methode?
Einfach

Code: Alles auswählen.

lv_who_are_you = IDENTIFY( )

METHOD identify.
  i_am = 'Interface NETZ'.
ENDMETHOD
Ja, so in etwas. Nur halt mit Konstanten.
Wobei mir grade einfällt, dass ja mehrere Interfaces zusammenkommen können.
Also wäre die Methode so vielleicht besser:

Code: Alles auswählen.

lv_are_you_x = IDENTIFY( co_interface_x )

METHOD identify.
  i_am = 'X'.
ENDMETHOD
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: Interfaces vs. Vererbung

Beitrag von black_adept (Top Expert / 3943 / 105 / 886 ) »
ewx hat geschrieben: (a) "ausprobieren" mit REF_LIVING_ORGANISM->('SPINNEN') und die entsprechenden Exceptions abfangen ( CX_SY_DYN_CALL_ILLEGAL_METHOD), wenn die Methode nicht existiert?
(b) Oder muss ich mit einer Art von Verwaltungsklasse arbeiten, die weiß, welche Objekte welche Funktionen haben?
(c) Oder muss ich das Objekt "fragen" können, was es ist und welche Funktionen möglich sind?
(d) oder muss ich wissen, was für ein Objekt ich erwarte, dieses mittels CAST zuweisen und dann entscheiden, ob ich die Methode ausführen kann?
Antwort a)
Das ist der pragmatische Ansatz

Antwort b)
Der saubere Ansatz
Besorge dir eine Beschreibung von Spiderman ( CL_ABAP_CLASSDESCR ) und schau dann in der Beschreibung nach, ob das SPINNEN erwähnt wird ( CL_ABAP_CLASSDESCR hat einige public Attribute, die ziemlich genau Auskunft geben, welche Interfaces implementiert werden, welche Attribute und Methoden vorhanden sind etc).

Antwort c)
Nur möglich, wenn Spiderman kooperationswillig - und das ist er meist nicht, es sei denn er wurde von adt programmiert.

Antwort d) huh?

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

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Interfaces vs. Vererbung

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
black_adept hat geschrieben:Antwort c)
Nur möglich, wenn Spiderman kooperationswillig - und das ist er meist nicht, es sei denn er wurde von adt programmiert.
:oops: :oops: :oops:
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

1
Antw.
150
Views
Methoden eines Interfaces in Klasse implementieren
von MiTip » 06.12.2023 10:24 • Verfasst in ABAP® für Anfänger
2
Antw.
2841
Views
Metoden/Interfaces aus bestimmten Klassen ermitteln
von SteveOh » 02.07.2010 09:50 • Verfasst in ABAP® für Anfänger
0
Antw.
1266
Views
Vererbung von CL_RSR_WWW_MODIFY_TABLE
von ratoshuan » 04.04.2006 18:45 • Verfasst in Web-Dynpro, BSP + BHTML
2
Antw.
1596
Views
Exceptions und Vererbung
von SaskuAc » 08.11.2018 13:43 • Verfasst in ABAP® für Anfänger
12
Antw.
5991
Views
Textelemente und Vererbung, Ideen?
von GastX » 21.01.2015 09:17 • Verfasst in ABAP Objects®

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.

Unbeantwortete Forenbeiträge

Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 71
Group Items auf einer Filterbar
vor einer Woche von Bright4.5 1 / 111
tRFC Transaktionen SM58
vor 4 Wochen von A6272 1 / 141