Programozási architektúrák, eseményvezérelt megoldások Vizuális programozás 5. előadás
Komponens-alapú programozás Kezdelteges formája, az első komponensek: DLL-ek Black box ujrahasznosítható kód Függvényeket definiál API (Application Programming Interface) WINDOWS/SYSTEM vagy fix útvonal Nincs verziókövetés Inkonzisztencia problémák (ua. a program másik DLL verzió, új alkalmazással telepített DLL már nem jó egy régihez) COM : Component Object Model Komponens alapú fejlesztés lehetősége Származtatott technológiák: OLE, ActiveX
Alkalmazások közötti adatcsere Clipboard (Win 3.1) Nagyon korlátozottak a lehetőségek DDE (Dynamic Data Exchange) OLE (Object Linking and Embedding) Egy alkalmazás használja egy másik adatait ActiveX/COM Flexibilisebb működés Az alkalmazások egymás funkcióit is használhatják Fejlesztőkörnyezettől függetlenül képesek eggyüttműködni COM objektumok
ActiveX/COM Egy programból egy másik programot vezérlünk, használjuk bizonyos funkcióit Kliens szerver kapcsolat A COM objektumok funkcionalitása az un. Interfaceeken keresztül érhető el Interfészek Tulajdonságok Metódusok
ActiveX pl. Property Node Invoke Node Interface Property (tulajdonság) Method (metódus / tagfüggvény )
Property Node (tulajdonságok...) Az objektum tulajdonságai beállíthatók / lekérdezhetők
Invoke Node (metódusok...) Az objektum metódusai (tagfüggvényei) meghívhatók
LabView mint ActiveX kliens Open Automation reference Set / Get Properties and Invoke Methods Close Automation reference Pl.: PPT slideshow lejátszása
LabView mint ActiveX konténer AcitveX Control / objektum beillesztése Set / Get Properties and Invoke Methods Pl.: MS Web Browser kontrol beillesztése (web böngésző LabView-ban)
ActiveX Container
Eseményvezérelt programozás Események a LabView-ban Dinamikus események Felhasználói események Eseményvezérelt programok
LabVIEW 6i és régebben A front panel folyamatos lekérdezése CPU-idő igényes Nem garantált, hogy minden eseményt lekezel Ha több dolog változik egyszerre, nem tudjuk a sorrendet
LabVIEW 6.1: Az esemény struktúra User Interface Események (statikusan regisztrált) Egérkattintás Billentyű lenyomás Kontrolok értékváltozása (nem programból) A felhasználó csinál valamit a front panelen
Az esemény struktúra használata ált Alapvetően egy While ciklusban használjuk Iterációnként pontosan egy eseményt kezel Billenő kapcsolókat az esemény struktúrán belül célszerű elhelyezni A stop gombhoz rendelt esemény állítja le az alkalmazást l Pl. prg
Az esemény struktúra használatának előnyei Nincs folyamatos lekérdezés: kevésbé CPU-idő igényes Minden eseményt lekezel Az események a bekövetkezésük sorrendjében kerülnek lekezelésre
Demo 1: LabVIEW 61 6.1 Esemény struktúra Egyszerű program az esemény struktúra használatával
Notify és Filter Események Notify Events ( Jelző események) Jelzi a LabView-nak, hogy egy felhasználói esemény történt Filter Events ( Szűrő események) Elfogadthatjuk, vagy megváltoztathatjuk az eseményhez tartozó adatokat mielőtt lekezelnénk az eseményt
A 6.1-es esemény struktúra korlátai Csak statikus tik események (az egész futásidőre előre definiálva) Nem tudunk programból új eseményeket definiálni (register event) Csak a user interface eseményeit tudjuk kezelni (nem tudunk eseményt rendelni egy érték programból való változtatásához) Nem tudunk programból eseményeket generálni Csak az a VI tudja kezelni az eseményeket, amihez azok statikusan definiálva lettek (nincs modularitás pl. egy sub VI nem kezelheti a szülőjének eseményét)
További lehetőségek Új objektum események Mouse Enter (Mouse over) Mouse Leave Új ActiveX Esemény struktúra Új érték (Value) tulajdonság Property Node-al való értékbeállítás is eseményt generál
Gyakori hibák eseménystruktúránál Billenőkapcsoló terminálja egy, a kapcsoló által triggerelt eseményben Egymásba ágyazott eseménystruktúrák holtpont alakulhat ki óiá óriási iköült körültekintés ki té kell
Alkalmazásfejlesztés LabView-banban Az alkalmazásfejlesztés fő lépései Programozási architektúra kiválasztása User interface fejlesztése Moduláris kód fejlesztése Sub VI-ok alkalmazása Vál á k kö é Változások követése Disztribúció
Programszerkezet (architektúra) kiválasztása Állapotgép (Automata, State machine) Párhuzamos ciklusok (Parallel loop VI) Végrhajtási sor / üzenetkezelés User interface interakció (eseménykezelés) Felhasználó akciók kezelése Producer / Consumer (Adatok) Producer / Consumer (Események)
Tervezési sablonok (design templates) File New...
State machine Az egyik leggyakrabban használt tervezési sablon Állapotokból és állapotátmenetekből áll Mikor használjuk? Folyamatosan fut a programunk Egyértelműen meghatározhatók az állapotátmenetek (pl. állapotdiagram) Pl. Üdítőautomata, Bankjegykiadó automata, stb.
State machine (szerkezete) While ciklus - folyamatosan végrehajtódik Shift regiszter - tartalmazza az állapotátmenetre vonatkozó információt Case struktúra az egyes állapotokhoz tartozó kód
Állapot diagram eszköz Állapotdiagramban tervezhető a kód A sablon automatikusan készül a diagram alapján
Ital automata (state machine) Egyszerű példa az állapotokkal és állapotátmenetekkel megoldható feladatra Vár a pénzre Ital választás Ital kiadás
Végrehajtási sor / üzenetkezelés
UI események kezelése Gombok lenyomása Sliderek kezelése Grafikonok nagyítása Grafikonok nagyítása, mozgatása
Producer / Consumer (data)
Producer / Consumer (events)
Architektúra választás szempontjai Folytonosan fut majd a program? Lesznek párhuzamosan futó folyamatok? A User interface egyszerű vagy összetett? Milyen gyakran van szükség felhasználói interakcióra? Mik a teljesítménnyel kapcsolatos elvárások? stb.