LabVIEWForum.de
Dynamic Dispatch VI vor Zugriff schützen - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: LVOOP (/Forum-LVOOP)
+---- Thema: Dynamic Dispatch VI vor Zugriff schützen (/Thread-Dynamic-Dispatch-VI-vor-Zugriff-schuetzen)



Dynamic Dispatch VI vor Zugriff schützen - Kiesch - 13.06.2012 14:57

Hallo liebe LVOOP Nutzer,

stehe aktuell etwas auf dem Schlauch glaube ich, ist aber auch schon kurz vor Feierabend ;-)

Problem:

Ich habe eine fromString Methode die ich auf einer Mutterklasse als Schnittstelle zur Verfügung stelle. Die liest aus dem String ne ID mit der Sie eine Instanz von sich selbst oder einer beliebigen durch die ID bezeichneten Kindklasse erzeugt. Anschließend soll eine fromStringIntern aufgerufen wird die mittels Dynamic Dispatching die erzeugte Instanz entsprechend dem String initialisiert.
Diese Interne Methode würde ich ungern frei zur Verfügung stellen wollen, daher würde ich die gerne auf Zugriffe aus der Mutterklasse und Ihren Abkömmlingen beschränken. Privat geht ja nicht wegen Dynamic Dispatching, Protected ist wenn ich das richtig verstehe auch keine Lösung, da ich damit nicht die VIs auf den unteren Ebenen schnützen kann, oder? (hat mir grade irgendwie als ich versucht habe das automatisch setzen zu lassen Labview abgeschossen)

Muss ich das als Gruppe machen? Oder wäre doch Protected richtig gewesen und ich muss das händisch für jedes VI setzen?

Gruß Kiesch


RE: Dynamic Dispatch VI vor Zugriff schützen - BNT - 25.06.2012 14:01

Hi Kiesch
Ich habe Deinen Beitrag erst heute wahrgenommen.

Dein Problem kann mit dem Entwurfsmuster Channeling gelöst werden.

Das Du kreierst ein öffentliches static-dispatch-VI, welches das protected dynamic-dispatch-VI aufruft.

Gruß Holger


RE: Dynamic Dispatch VI vor Zugriff schützen - Kiesch - 25.06.2012 17:32

So habe ich es quasi auch gemacht. Eine Öffentliche from(bzw. to)String methode die statisch ist und eine from(bzw. to)StringIntern, die dann dynamisch dispatched. Mir ist nur nicht klar wie ich die "Sicherheitseinstellungen" bei den einzelnen kindklassen und Enkelklassen setzen muss. Die "oberste" (in der Elternklasse) als Protected ist klar. Aber dann? Alle weiteren auch auf Protected? Ich hatte die Erklärung von Protected so verstanden, dass das nicht funktionieren würde und wie gesagt beim ersten versuch das zu setzen kam ne Warnung und dann hats mein Projekt erstmal geschossen. Wollte deswegen vermeiden weiteren Schaden anzurichten bevor ich weis was ich tue. (die Wiederherstellungsfunktion von Labview ist mir irgendwie jedes mal Suspekt und macht teils komische Sachen).

Gruß Kiesch


RE: Dynamic Dispatch VI vor Zugriff schützen - BNT - 25.06.2012 20:29

Genauso ist es richtig. Die statische VI der Basisklasse ist öffentlich.

Das dynamic-dispatch-VI der Basisklasse und die overwrite-VIs aller Kindklassen, deren Kinder und Enkel etc. sind protected.

Dann kannst Du in der Basisklasse noch definieren, ob das entsprechende VI der Mutterklasse (Heisst das Call-Parent VI?) zwingend aufgerufen werden muss oder nicht.

Gruß Holger


RE: Dynamic Dispatch VI vor Zugriff schützen - Kiesch - 25.06.2012 20:56

Zitat:Dann kannst Du in der Basisklasse noch definieren, ob das entsprechende VI der Mutterklasse (Heisst das Call-Parent VI?) zwingend aufgerufen werden muss oder nicht.

Wo geht das? Hab die Option zuletzt genauso gesucht wie die "Muss überschrieben werden" Funktion. Hab immer nur die "Muss überschreiben weiterreichen an Kindklassen" gefunden.

Gruß Kiesch

P.S: Danke :-)


RE: Dynamic Dispatch VI vor Zugriff schützen - BNT - 26.06.2012 08:31

Class Properties -> Category: Item Settings: Methode auswählen. Rechts erscheinen dann die Optionen.
Unter den Access Scope Optionen sind die für das Channeling Muster wichtigen zu finden.
  • Require descendant classes to override this dynamic dispath VI
  • Require overrides of this dynamic dispatch VI to always invoke the Call Parent Methode node.

Gruß Holger