Autor Thema: OOP: Verwendung Use statement  (Gelesen 2229 mal)

Offline Gutierrez

  • Aktives Mitglied
  • ***
  • Beiträge: 112
OOP: Verwendung Use statement
« am: 25.11.15 - 13:59:38 »
Moin liebe Gemeinde ;-)

Ich habe zwei Scriptbibliotheken Module_A und Module_B (vereinfacht; es sind ein paar mehr). Jetzt möchte ich folgendes tun:

Code
-------Module_A---------
Option Declare

Public Class AClass
  Sub New()

  End Sub

  Sub Init(c as BClass)

  End Sub
End Class



-------Module_B---------
Option Declare
Use "Module_A"

Public Class BClass

  Private m_cAc as AClass

  Sub New()

    Set m_cAc = New AClass
    Call m_cAc.Init(Me)

  End Sub

End Class

Kompilieren lassen sich die Sourcen, aber beim Ausführen kennt Module_A die in Module_B definierte Klasse BClass nicht (ist mir eigentlich auch klar).

Um gehen kann ich das, in dem ich in AClass die Sub Init umschreibe...
Code
  Sub Init(c as Variant)

  End Sub

... aber dann müsste ich ja mit dem IsA-Operator arbeiten, um zu prüfen, ob die Variable den korrekten Typ/Klasse hat. Das finde ich doof. Gibt es eine bessere Möglichkeit?

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: OOP: Verwendung Use statement
« Antwort #1 am: 25.11.15 - 15:12:21 »
Das geht leider nicht ohne einiges an Workarounds. Hier ist eine Artikelserie, die sich mit diesem Thema beschäftigt und das Ganze ermöglicht...
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline Gutierrez

  • Aktives Mitglied
  • ***
  • Beiträge: 112
Re: OOP: Verwendung Use statement
« Antwort #2 am: 25.11.15 - 15:30:03 »
Danke für den Lesestoff :-)

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: OOP: Verwendung Use statement
« Antwort #3 am: 30.11.15 - 09:06:47 »
Wenn du dazu noch typsicher sein willst, dann musst du alle Klassen "sehen".
Du kannst entweder deine Klassen alle in eine Script-Bibliothek packen (unschön) oder in einer gemeinsamen Scriptbibliothek nur die "Interfaces" mit leeren Rumpfmethoden aufnehmen und wie Tode schon gepostet hat, mit Dynaloading dann entsprechende Instanzen erzeugen.

Ein ähnliches Verfahren verwenden wir auch in unserem Framework und das Ergebnis ist performant (da die "großen" Programmteile erst bei Bedarf geladen werden) und der Code bleibt wartbar. (da typesafe)
Das einzige Problem ist halt die Mehrarbeit für die Interfaceklassen.

Code
------- Commons ---------
Option Declare

Public Class AInterface
  Public Sub Init(c as BInterface)
     error 2000, "AbstractMethodCalled"
  End Sub
End Class

Public Class BInterface
  Public Sub Init(c as AInterface)
     error 2000, "AbstractMethodCalled"
  End Sub
End Class

public function dynaload(className as String)
'... hier muss das dynamische Classloading rein
end function

-------Module_A---------
Use "Commons"
Option Declare

Public Class AClass extends AInterface
  Function Produce(param as Variant)
    Dim instance as new AClass()
    if param isA BInterface then call instance.init(param)
    set produce = instance
  End Sub


  Sub Init(c as BInterface)

  End Sub
End Class



-------Module_B---------
Option Declare
Use "Commons"

Public Class BClass extends BInterface

  Private m_cAc as AInterface

  Sub Produce(param as variant)
    dim instance as new BClass()
    Set instance.m_cAc = newObj("Module_A", "AClass", me)
    set produce = instance
  End Sub

End Class

Hab das jetzt mal frei Hand geschrieben, kann also noch der ein oder andere Fehler versteckt sein
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz