Modellek végrehajtása, kódgenerálás

Hasonló dokumentumok
Modellező eszközök, kódgenerálás

Digitális technika VIMIAA01 9. hét Fehér Béla BME MIT

Digitális technika VIMIAA01 9. hét

Modell alapú tesztelés mobil környezetben

Programozási nyelvek Java

ISA szimulátor objektum-orientált modell (C++)

Fordító részei. Fordító részei. Kód visszafejtés. Izsó Tamás szeptember 29. Izsó Tamás Fordító részei / 1

Bevezetés a programozásba Előadás: Tagfüggvények, osztály, objektum

UML (Unified Modelling Language)

Metamodellezés. Simon Balázs BME IIT, 2011.

Modellek fejlesztése

Programozási nyelvek Java

Pénzügyi algoritmusok

Nagy bonyolultságú rendszerek fejlesztőeszközei

Modellek fejlesztése

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon

C++ programozási nyelv

GPU Lab. 4. fejezet. Fordítók felépítése. Grafikus Processzorok Tudományos Célú Programozása. Berényi Dániel Nagy-Egri Máté Ferenc

OOP #14 (referencia-elv)

3. Osztályok II. Programozás II

1. Bevezetés szeptember 9. BME Fizika Intézet. Szám. szim. labor ea. Tőke Csaba. Tudnivalók. feladat. Tematika. Moodle Házi feladatok

Programozás C és C++ -ban

Entity Framework alapú adatbáziselérés

A szemantikus elemzés helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok

LabVIEW példák és bemutatók KÉSZÍTETTE: DR. FÜVESI VIKTOR

Vizuális adatelemzés - Gyakorlat. Budapesti Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs Rendszerek Tanszék

OOP. Alapelvek Elek Tibor

Adatbázis rendszerek. dr. Siki Zoltán

BASH script programozás II. Vezérlési szerkezetek

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

Automatikus infrastruktúra menedzsment és alkalmazástelepítés

Occam 1. Készítette: Szabó Éva

Informatika terméktervezőknek

Programozási nyelvek (ADA)

Transzformációk integrált alkalmazása a modellvezérelt szoftverfejlesztésben. Ráth István

Az UPPAAL egyes modellezési lehetőségeinek összefoglalása. Majzik István BME Méréstechnika és Információs Rendszerek Tanszék

Java-ról Kotlinra. Ekler Péter AutSoft BME AUT. AutSoft

Számítógép-rendszerek fontos jellemzői (Hardver és Szoftver):

Funkcionális Nyelvek 2 (MSc)

Bevezetés a programozásba. 9. Előadás: Rekordok

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

C programozási nyelv Pointerek, tömbök, pointer aritmetika

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN

Programozás. C++ osztályok. Fodor Attila. Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék

A modellellenőrzés érdekes alkalmazása: Tesztgenerálás modellellenőrzővel

INFORMATIKAI ALAPISMERETEK

Szoftvertechnológia alapjai Java előadások

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?

Java programozási nyelv

AWK programozás, minták, vezérlési szerkezetek

Automatikus tesztgenerálás modell ellenőrző segítségével

A C# programozási nyelv alapjai

A modellellenőrzés érdekes alkalmazása: Tesztgenerálás modellellenőrzővel

Szerializáció. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Szerializáció / 22

Programozási alapismeretek 4.

Utolsó módosítás:

Bevezetés. Dr. Iványi Péter

A C programozási nyelv III. Pointerek és tömbök.

Programozás II gyakorlat. 6. Polimorfizmus

Programozás BMEKOKAA146. Dr. Bécsi Tamás 5. előadás

Szoftver karbantartási lépések ellenőrzése

1. SZÁMÚ FÜGGELÉK MŰSZAKI LEÍRÁS

Folyamatmodellezés (BPMN) és alkalmazásai

C++ programozási nyelv Konstruktorok-destruktorok

Kiterjesztések sek szemantikája

Modellezési alapismeretek

Java II. I A Java programozási nyelv alapelemei

Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3)

Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2)

A C programozási nyelv III. Pointerek és tömbök.

Programozás C++ -ban 2007/7

Szoftver újrafelhasználás

C# nyelvhez kapcsolódó programozási feladatok

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

Java II. I A Java programozási nyelv alapelemei

Felhasználó által definiált adattípus

Java I. A Java programozási nyelv

Intervenciós röntgen berendezés teljesítményszabályozójának automatizált tesztelése

A szoftverfejlesztés eszközei

Objektumok inicializálása

Orvosi készülékekben használható modern fejlesztési technológiák lehetőségeinek vizsgálata

Segédanyagok. Formális nyelvek a gyakorlatban. Szintaktikai helyesség. Fordítóprogramok. Formális nyelvek, 1. gyakorlat

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

DECOS Nemzeti Nap. DECOS Nemzeti Nap. DECOS Nemzeti Nap

Programozás alapjai gyakorlat. 2. gyakorlat C alapok

Programozási nyelvek Java

Bevezetés a programozásba Előadás: A const

Eseménykezelés. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor.

Operációs Rendszerek II. labor. 2. alkalom

Programozási nyelvek II.: JAVA

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós március 3. Széchenyi István Egyetem, Gy r

Mintavételes szabályozás mikrovezérlő segítségével

Tartalom Platform-független modellezés Alkalmazás-modellezés A DECOS hardver platform Platform modellezés Hardver-szoftver integráció Implementáció 2

Strukturális modellezés

Symfony kurzus 2014/2015 I. félév. Security: authentication, authorization, user provider, role-ok, access control, FOS user bundle

TSIMMIS egy lekérdezés centrikus megközelítés. TSIMMIS célok, technikák, megoldások TSIMMIS korlátai További lehetségek

Rendszermodellezés: házi feladat bemutatás

GENERIKUS PROGRAMOZÁS Osztálysablonok, Általános felépítésű függvények, Függvénynevek túlterhelése és. Függvénysablonok

Mutatók és címek (ism.) Programozás alapjai C nyelv 8. gyakorlat. Indirekció (ism) Néhány dolog érthetőbb (ism.) Változók a memóriában

Átírás:

Modellek végrehajtása, kódgenerálás Budapesti Műszaki és Gazdaságtudományi Egyetem Hibatűrő Rendszerek Kutatócsoport Budapesti Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs Rendszerek Tanszék 1

Modellező eszközök funkciói Modell Megjelenítés Visszavezetés Nézet Nézetek Szerkesztés Szöveges Grafikus Egyéb szerkesztőfelületek Demo internal: event A event B 2

Modellező eszközök funkciói Modell Megjelenítés Visszavezetés Nézet Nézetek Szerkesztés Funkcionális leírás Transzformáció + Információ: Hogyan generáljunk (fájlnevek, stratégia, ) Dokumentáció Konfiguráció Forráskód Rendszer leírása Különböző beállítások, elrendezések Leírásnak megfelelő program 3

Modellező eszközök funkciói Modell Megjelenítés Visszavezetés Nézet Nézetek Szerkesztés Rendszer leírás Szimuláció Megjelenítés Interakció + Információ: Rendszer paraméterei, környezete Lehetséges lefutások útvonala Rendszer paraméterek hangolása Tapasztalat 4

MODELLEZŐESZKÖZÖK 5

Yakindu modellezési funkciói Konkrét szintaxis (Szerkesztők) Grafikus Szintaxis Szemantika Modellező funkciók Ellenőrzés Kódgenerálás Szöveges Demo internal: event A event B Modell (Absztrakt szintaxis) 6 (Forráskód, dokumentáció, konfiguráció)

Absztrakt szintaxis Definíció: a szerkesztés alatt álló rendszer strukturális modellje. Modellező program kezeli Emlékeztető: strukturális modell = gráf o csomópontok, élek és tulajdonságok gráfja Switch Router Server Workstation Workstation Printer Workstation 7

Absztrakt szintaxis példa: Yakindu Kérdés: Hogyan készítenénk modellező programot? Példa: Yakindu modell Absztrakt szintaxis 8

Absztrakt szintaxis példa: Yakindu Kérdés: Hogyan készítenénk modellező programot? Példa: Yakindu modell Neveket String-ként tároljuk name = "X" Absztrakt szintaxis Modellelemeket objektumként Kapcsolatokat pointerekkel Válasz: objektum-orientált program + Extra funkciók 9

Konkrét szintaxis: Szöveges szintaxis Cél: konkrét megjelenítés mögöttes modell Szöveges szintaxis (programozási nyelv) o Feladat: Szöveg Modell o Nyelvtani szabályok alapján Nyelvtan <Statechart>::= <Name> <Interface>* <Interface>::= ("internal" <Name>) ":" <Event>* <Event>::= "event" <Name> <Name>::= 10 Statechart Demo event Demo internal: event A event B Megfelelő technológiákkal (pl. Xtext) könnyű saját modellező / programozási nyelvet csinálni! A Absztrakt Szintaxis internal event B

Példa Feladat: Email címek beolvasása, ellenőrzése Saját nyelvtan: könnyen megoldható Reguláris kifejezés: (?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t] )+ \Z (?=[\["()<>@,;:\\".\[\]])) "(?:[^\"\r\\] \\. (?:(?:\r\n)?[ \t]))*"(?:(?: \r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\]])) "(?:[^\"\r\\] \\. (?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\0 31]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\]])) \[([^\[\]\r\\] \\.)*\ ](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+ (?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\]])) \[([^\[\]\r\\] \\.)*\](?: (?:\r\n)?[ \t])*))* (?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\]])) "(?:[^\"\r\\] \\. (?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\ r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\]])) \[([^\[\]\r\\] \\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\]])) \[([^\[\]\r\\] \\.)*\](?:(?:\r\n)?[ \t] )*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\]])) \[([^\[\]\r\\] \\.)*\](?:(?:\r\n)?[ \t])* )(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t] )+ \Z (?=[\["()<>@,;:\\".\[\]])) \[([^\[\]\r\\] \\.)*\](?:(?:\r\n)?[ \t])*))*) *:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\]])) "(?:[^\"\r\\] \\. (?:(?:\r\n)?[ \t]))*"(?:(?:\r \n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?: \r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\]])) "(?:[^\"\r\\] \\. (?:(?:\r\n)?[ \t ]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031 ]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\]])) \[([^\[\]\r\\] \\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(? :(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\]])) \[([^\[\]\r\\] \\.)*\](?:(? :\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*) (?:[^()<>@,;:\\".\[\] \000-\031]+(?:(? :(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\]])) "(?:[^\"\r\\] \\. (?:(?:\r\n)? [ \t]))*"(?:(?:\r\n)?[ \t])*)*:(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\]])) "(?:[^\"\r\\] \\. (?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<> @,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\]])) " (?:[^\"\r\\] \\. (?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t] )*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\ ".\[\]])) \[([^\[\]\r\\] \\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(? :[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[ \]])) \[([^\[\]\r\\] \\.)*\](?:(?:\r\n)?[ \t])*))* (?:[^()<>@,;:\\".\[\] \000- \031]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\]])) "(?:[^\"\r\\] \\. (?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,; :\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\]])) \[([ ^\[\]\r\\] \\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\]])) \[([^\[\ ]\r\\] \\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\ [\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\]])) \[([^\[\]\ r\\] \\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ Egyetlen cím, vagy lista \t])+ \Z (?=[\["()<>@,;:\\".\[\]])) \[([^\[\]\r\\] \\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \0 00-\031]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\]])) "(?:[^\"\r\\] \\. (?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@, ;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\]])) "(? :[^\"\r\\] \\. (?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])* (?:[^()<>@,;:\\".\[\] Útvonallal \000-\031]+(?:(?:(?:\r\n)?[ kapcsolatos \t])+ \Z (?=[\["()<>@,;:\\". információk \[\]])) \[([^\[\]\r\\] \\.)*\](?:(?:\r\n)?[ is tárolhatóak \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[ ^()<>@,;:\\".\[\] \000- \031]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\] ])) \[([^\[\]\r\\] \\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)(?:,\s*(?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\ ".\[\]])) "(?:[^\"\r\\] \\. (?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[ \["()<>@,;:\\".\[\]])) "(?:[^\"\r\\] \\. (?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t ])*))*@(?:(?:\r\n)?[ Opcionálisan \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ név is írható \t ])+ \Z (?=[\["()<>@,;:\\".\[\]])) \[([^\[\]\r\\] \\.)*\](?:(?:\r\n)?[ \t])*)(? :\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\]])) \[([^\[\]\r\\] \\.)*\](?:(?:\r\n)?[ \t])*))* (?: [^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\ ]])) "(?:[^\"\r\\] \\. (?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\[" ()<>@,;:\\".\[\]])) \[([^\[\]\r\\] \\.)*\](?:(?:\r\n)?[ Hierarchikus \t])*)(?:\.(?:(?:\r\n) felépítés?[ \t])*(?:[^()<>@,;:\\".\[\] '.'\000-\031]+(?:(?:(?:\r\n)?[ elválasztással \t])+ \Z (?=[\["()<> @,;:\\".\[\]])) \[([^\[\]\r\\] \\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@, ;:\\".\[\]])) \[([^\[\]\r\\] \\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t] )*(?:[^()<>@,;:\\".\[\] \000- \031]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\ ".\[\]])) \[([^\[\]\r\\] \\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)? (?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\". \[\]])) "(?:[^\"\r\\] \\. (?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?: \r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\[ "()<>@,;:\\".\[\]])) "(?:[^\"\r\\] \\. (?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t]) *))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t]) + \Z (?=[\["()<>@,;:\\".\[\]])) \[([^\[\]\r\\] \\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+ \Z (?=[\["()<>@,;:\\".\[\]])) \[([^\[\]\r\\] \\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*))*)?;\s*) Forrás: http://www.ex-parrot.com/~pdw/mail-rfc822-address.html 11

Konkrét szintaxis: Grafikus szintaxis Grafikus szintaxis (Diagram) o Feladat: Diagram Modell o Könnyebben átlátható, nehezebben írható o Nézeti modell szabályok Feltétel a modellen Diagram elem létrehozása Feltétel a modellben teljesül Diagram elem létrejön Diagram változik Modell változik 12

Konkrét szintaxis: Grafikus szintaxis Eredmény: Megfelelő technológiákkal (pl. Sirius) könnyű saját modellező / programozási nyelvet csinálni! 13

Modellek validálása: szintaxisellenőrzés Szintaktikai ellenőrzés: modellező eszközök összekötik a logikailag egymásra épülő modellelemeket Deklarálás interfészen: var clock: integer = 60 Használat modellben: after 1 s [clock>0]/ clock -= 1 Szintaxisvezérelt szerkesztő o Szerkesztés közben hiba Couldn t resolve reference o Fejlett szerkesztőeszköz (például lehetőségek felkínálása) Kód és diagram együtt Programozás: Modellezés: szerkesztés közben hibás szerkesztés közben helyes 14

Modellek validálása: strukturális helyesség Strukturális ellenőrzés: modell gráf vizsgálata Hibaminták keresése szerkesztés közben Például elérhetetlen állapot: Node is not reachable. További ellenőrzések: hiányzó kezdőállapot, holtpont, változó értékadások, stb. 15

KÓDGENERÁLÁS BEMUTATÓ 16

Kódgenerálás feladatai Feladat: modellnek megfelelő viselkedésű program automatikus előállítása Több megoldás létezik tervezői döntések o Interpretált: modellt beolvassuk és végrehajtjuk Programkód: forráskód o Programozási nyelvek: Java, C, C++ o Optimalizálás: memória vs CPU Megfigyelhetőség vs Teljesítmény o Hogyan kapcsoljunk saját kódot a generálthoz? Kódgenerátor: paraméterezhető + kiterjeszthető 17

Kódgenerátor példán keresztül: Feldadat: Generáljunk C kódot Yakindu állapotgépekből Demo internal: event A event B Írjunk olyan függvényt: kap egy Modell objektumot visszaad egy szöveget A szöveg egy Demo.c fájlba kerül Fordító lefordítja 18

Sablon alapú kódgenerátor (Xtend) Cél: Állapotok Enum Összevágunk egy char*-ba a kimenetet, %s helyére írjuk az X,Y neveket Megoldás: C program sprintf(result, "enum states {\n\tstate%s,\nstate%s\n};", state1->name, state2->name); Sablon (Xtend): ''' enum_states { State«state1.name», State«state2.name» }''' Megírjuk a sablonosan 19 enum states { StateX, StateY }; Ez egyből működik! nehezen átlátható. Megadjuk a változások helyét Könnyebb írni Átláthatóbb Könnyű módosítani +1 technológia

Kódgenerátor példa: Állapotok Várt C kód: //States of the statemachine enum states { StateX, StateY }; Lehetséges állapotok: Enumként felsorolva Sablon: //States of the statemachine enum_states { «FOR state : states SEPARATOR ','» State«state.name» «ENDFOR» }; 20 Demo internal: event A event B 1.Összes állapoton végigmegyünk 2.Vesszővel elválasztva írjuk ki: State«név» Pl: StateX,StateY

Kódgenerátor példa: kezdőállapot Várt C kód: // The actual state // First = initial state. enum states currentstate = StateX Aktuális állapot = kezdőállapot Demo internal: event A event B Sablon: // The current state. // Initial value = the entry state. enum states currentstate = State«findEntry(states).name» 1.Megkeressük a kezdőelemet 2.Kiírjuk a nevét 21

Kódgenerátor példa: Állapotátmenet Várt C kód: // Execute "A" event void doa{ switch(actualstate) { case StateX: A / X Y } } actualstate = StateY; break; case StateY: break; A / - Egy (egyszerű) állapotgéphez ennyi a kódgenerátor! 22 Demo internal: event A event B Sablon (vázlatosan): 1. Minden eseményhez egy do«esemény neve» függvény 2. A tranzíciók alapján mást csinál a függvény

Kódgenerátor Összefoglalás Kódgenerálás = Fordító Ugyanaz a lépés: Állapotgép C Assembly Gépi kód A problémát a saját nyelvén: Produktivitás ++ Sok unalmas, bonyolult kód automatikusan Teljesítmény ++ Ellenőrizzük a saját nyelvén: Megbízhatóság ++ Tanszékünkön fejlesztett projektek: akár 95% generált kód 23

PÉLDA ECLIPSE ALAPÚ MODELLEZŐ ESZKÖZÖK 24

EclipseLink: Java objektumok Adatbázisok Feladat: Objektumok adatbázisban tárolása Megoldás: Kapcsolat modellezése annotációkkal Automatikus karbantartás @Entity @Table(name="Car_Table") public class Car { @Id long identifier; String numberplate; Person owner; Car_Table } Identifier NumberPlate Ovner_ID 1 EGG153 17 2 KSS122 55 3 KAF984 56 25

XMind: Mindmap tervező 26

Bonita: Üzleti folyamatok modellezése 27

Kalypso: Vízügyi tervezés + szimuláció 28