Da ABAP nur für Interfaces aber nicht für Klassen Mehrfachvererbung kennt, meinst du wahrscheinlich was anderes. Daher etwas anders formuliert: Welche der Klassen in deinem Konstrukt implementiert denn mehrere Interfaces? Und werden dann für diese Klasse jeweils unterschiedliche Mockklassen pro Interface einzeln aktiviert und deaktiviert?a-dead-trousers hat geschrieben:Wegen der Mehrfachvererbung (oder so ähnlich) die ich bei reiner Klassenvererbung nicht habe.
Nein, ich meinte schon die Mehrfachvererbung, aber da gibt es für Interfaces, soweit ich mich noch an meine Schulzeit erinnern kann, eine andere Bezeichnung. Weil man ja so nicht das Coding mehrfach vererben kann (wie in z.B. in C++) sondern nur die Schnittstellen.black_adept hat geschrieben:Da ABAP nur für Interfaces aber nicht für Klassen Mehrfachvererbung kennt, meinst du wahrscheinlich was anderes. Daher etwas anders formuliert: Welche der Klassen in deinem Konstrukt implementiert denn mehrere Interfaces? Und werden dann für diese Klasse jeweils unterschiedliche Mockklassen pro Interface einzeln aktiviert und deaktiviert?a-dead-trousers hat geschrieben:Wegen der Mehrfachvererbung (oder so ähnlich) die ich bei reiner Klassenvererbung nicht habe.
Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
ewx
Folgende Benutzer bedankten sich beim Autor ralf.wenzel für den Beitrag:
a-dead-trousers
Persistente Klassen habe ich mal im Zuge eines Projektes ausprobiert und direkt verworfen, weil es sich nicht verwenden ließ (ich hab mich hier darüber sehr ausgelassen, müsste man noch finden können).a-dead-trousers hat geschrieben:Weil es zum Thema passt:
Wie ich jetzt gerade nochmal in die persistenten Klassen reingeschaut hab, ist mir aufgefallen, dass die SAP hier ja sehr stark mit den Präfixen arbeitet.
Wenn man eine p. Klasse anlegt werden gleichzeitig eine CA und CB Klasse anlegt. Auch muss der Klassenname selbst mit CL beginnen.
Wozu noch eine Abstrakte Klasse ? Ein Interface ist nichts anderes, als eine Sonderform einer Abstrakten Klasse die keine Implementierungen besitzt. Der Sinn einer abstrakten Klasse, ist ja, dass sie teilweise Logik enthalten kann. Aber nicht muss. Ich kann somit ein Grundverhalten implementieren, und wiederum spezifische Teile dann wieder selbst als abstrakt definieren.erp-bt hat geschrieben:Also ich lege ja meistens eine abstrakte Klasse pro Interface an. Die abstrakte Klasse kann ja dann das Interface auch wieder abstrakt definieren, sodass die konkrete Implementierung des Interface auch wieder in der konkreten Klasse erfolgt. Das funktioniert natürlich auch für mehrere Interfaces. So habe ich eigentlich immer eine hohe Fexibilität und zusätzlich den Vorteil das ich gemeinsam genutztes Coding wunderbar in die abstrakte Klasse packen kann. Solltet ihr mal ausprobieren.
Die Präfixe erachte ich persönlich auch für überflüssig, zumal in der OO-Theorie es ja völlig egal sein sollte ob man jetzt ein Interface oder eine Klasse aufruft. Das von adt beschriebene Modell habe ich aber auch schon öfters gesehen.
Viele Grüße, Tapio
Weil nicht jeder moderne Releases von SAP einsetzt ^^. Der Vorteil der Verwendung SAP unabhängigen Entwicklungsdesigns ist eben die Unabhängigkeit von SAP.ralf.wenzel hat geschrieben:Das ist jetzt vllt eine blöde Frage, aber warum DAO-Klassen schreiben, wenn es BOPF gibt?
Ralf
Macht total Sinn. Du kannst in einem Interface kein Coding hinterlegen, müsstest es also in jeder Klasse die das Interface implementiert eine Methode neu implementieren. Mit einer abstrakten Klasse dazwischen, kannst Du gemeinsames Coding wunderbar in der abstrakten Klasse implementieren. Ich nutze das ständig, z.B. bei BAdI-Implementierungen. Du hast ein von SAP definiertes BAdI-Interface. Du hast unterschiedliche BAdI-Implementierungen, je nach Anwendungsfall. Du kannst jetzt alle gemeinsam genutzten Attribute, Typen und Methoden die Du für Deine individuellen BAdI-Implementierungen benötigst, in der abstrakten Klasse definieren und implementieren (in dem Fall kannst Du sogar noch nicht mal das Interface ändern da SAP Standard). Die konkrete BAdI-Implementierung erbt dann von der abstrakten Klasse, die das BAdI-Interface abstrakt definiert. Probier's einfach mal aus.gtoXX hat geschrieben:Wozu noch eine Abstrakte Klasse ? Ein Interface ist nichts anderes, als eine Sonderform einer Abstrakten Klasse die keine Implementierungen besitzt. Der Sinn einer abstrakten Klasse, ist ja, dass sie teilweise Logik enthalten kann. Aber nicht muss. Ich kann somit ein Grundverhalten implementieren, und wiederum spezifische Teile dann wieder selbst als abstrakt definieren.erp-bt hat geschrieben:Also ich lege ja meistens eine abstrakte Klasse pro Interface an. Die abstrakte Klasse kann ja dann das Interface auch wieder abstrakt definieren, sodass die konkrete Implementierung des Interface auch wieder in der konkreten Klasse erfolgt. Das funktioniert natürlich auch für mehrere Interfaces. So habe ich eigentlich immer eine hohe Fexibilität und zusätzlich den Vorteil das ich gemeinsam genutztes Coding wunderbar in die abstrakte Klasse packen kann. Solltet ihr mal ausprobieren.
Die Präfixe erachte ich persönlich auch für überflüssig, zumal in der OO-Theorie es ja völlig egal sein sollte ob man jetzt ein Interface oder eine Klasse aufruft. Das von adt beschriebene Modell habe ich aber auch schon öfters gesehen.
Viele Grüße, Tapio
Soll alles abstrakt sein, nehme ich ein Interface. Dann bin ich unabhängig von einer Vererbungshierarchie. Außer sie wäre absolut gewollt. Ist sie aber in allem abstrakt, hat sie m.E. nicht viel Sinn.
Es ging explizit um den Teil. Da beschreibst Du ja das Interface wieder als abstrakt zu definieren. Und das hat eben keinen Sinn, wenn es sich auf das komplette Interface bezieht. Mit dem Rest sind wir ja konform, das eine Grundlogik implementiert wird und ein Teil dann abstrakt ist. Wobei ich für eine abstrakte Methode nicht zwingend eine abstrakte Klasse brauche.erp-bt hat geschrieben:gtoXX hat geschrieben:erp-bt hat geschrieben:Also ich lege ja meistens eine abstrakte Klasse pro Interface an. Die abstrakte Klasse kann ja dann das Interface auch wieder abstrakt definieren,
Viele Grüße, Tapio
Nein, Du musst das Interface als abstrakt definieren, da Du es sonst nicht in der konkreten Klasse implementieren kannst. Du kriegst dann dort die Meldung Methode Interface-Methode ist in der Klasse Abstrakte-Klasse implementiert und das ist ja nicht das was wir wollen. Die Option ist ja nicht umsonst da. Wenn Du das Interface in der abstrakten Klasse abstrakt definierst, kannst Du in der konkreten Klasse ganz normal die Interface-Methode implementieren und alles was gemeinsam ist eben in der abstrakten Klasse.gtoXX hat geschrieben: Es ging explizit um den Teil. Da beschreibst Du ja das Interface wieder als abstrakt zu definieren. Und das hat eben keinen Sinn, wenn es sich auf das komplette Interface bezieht. Mit dem Rest sind wir ja konform, das eine Grundlogik implementiert wird und ein Teil dann abstrakt ist. Wobei ich für eine abstrakte Methode nicht zwingend eine abstrakte Klasse brauche.