(26.04.2011 14:15 )ceos schrieb: danke für die Downloadlinks!
das ist mal seeehr schön, so versteht es sich gleich viel besser
Danke.
(26.04.2011 14:15 )ceos schrieb: verstehe, ich muss das VI als dynamisches dispatch VI erstellen, damit es in den ableitenden Klassen auch erstellt wird, aber ich muss den Aufruf des dynamischen "showDialog" noch in ein statisches "displayDialog" einbetten und indirekt aufrufen, oder könnte ich das "showDialog" auch so mit einer Referenz einer abgeleiteten Klasse im Main-VI(!!!) füttern?
oder ist das jetzt eher nur OOP-Kosmetik? (in dem Falle weil die dispatch VIs protected sind.. oder sind die generell protected ?)
Dynamic Dispatch VIs können auch öffentlich sein und direkt aufgerufen werden. Der Vorteil meines Konstrukts, ein öffenliches statisches VI dem Benutzen anzubieten, liegt darin, dass ich ein pre-/post-processing von bzw. nach dem Aufruf des dynamic dispatch VIs erzwingen kann. Wenn das nicht nötig ist, kann man das dynamic dispatch VI auch direkt öffentlich machen. Meine Erfahrung zeigt aber, dass man selten beim ersten Versuch alles richtig bedacht hat. Bei meinem Konstruckt hat man noch die Möglichkeit nachzubessern, ohne das öffentliche Interface zu ändern bzw. an allen aufrufenden VIs zu ändern.
(26.04.2011 14:15 )ceos schrieb: Das einzige Problem ist nur wie ich dem Programm zur Laufzeit die Referenzen auf die entsprechenden Nachfolgerklassen vermittle (in dem Beispiel sind sie ja schon zur Entwicklungszeit bekannt) ... aber das Problem hab ich auch bei call by reference, nur bleibt durch die Elternklasse die Integrität der Referenz erhalten!
Die Auswahl des richtigen Overwrite-VI bleibt LV überlassen. Es ruft immer das Overwrite-VI der konkreten Klass des eingehenden Objektes auf. (Dabei ist die Performance kein wirkliches Problem. Das haben die LV-Entwickler gut gelöst.) Um zur Laufzeit ein Objekt einer bestimmten Klasse generisch zu erzeugen, gibt es ein entsprechendes VI (getDefaultObject o.ä.). Besser ist es die HGF_Factory zu benutzen, die gleich die Attribute als Variant-Attrribute an das Objekt übergibt und es sich selbst richtig initialisieren kann, siehe Diplomarbeit.
(26.04.2011 14:15 )ceos schrieb: vielleicht seh ich den Wald vor lauter Bäumen nicht ...
mir schwebt da so eine Art Auswahldialog vor, der beim Aufruf das Verzeichnis scannt und die LVLibs anbietet, daraus hol ich mir die Referenzen und pack sie in ein Array oder Cluster... kann cih DAS eventuell mit call by reference lösen ? quasi einen "selbstentpacker"/"loader" VI starten? so müsste ich nur ein einziges connection pattern editieren wenn ich mal den "loader" ändern will
Das Auswählen der verfügbaren Bibliotheken muss die/der Applikation/Entwickler schon selbst bereitstellen. Aber das dynaische Laden der Bibliothek kann zur Laufzeit erfolgen. Der Host des Agentensystems erledigt diesen Teil. (Es würde den Rahmen dieses Beitrags sprengen, dies hier im Detail zu erläutern.)
Ganz wichtig ist es noch, das Entwurfsmuster
Besucher (Visitor) zu verstehen. Das ist ziemlich mächtig, und absolut notwendig, wenn man generisch mit LV-Objekten als Entities arbeiten möchte.
Gruß Holger