410 likes | 549 Views
Algoritmusok megjelenítése egy magas szintű programnyelv vizuális nyomkövetőjén keresztül. Podoski Péter és Zabb László Témavezetők: Dr. Fekete István, Veszprémi Anna ELTE IK. Bevezetés (motiváció). „Milyen nyelven és fejlesztői környezetben lehet jól tanítani a programozást?”
E N D
Algoritmusok megjelenítése egy magas szintű programnyelv vizuális nyomkövetőjén keresztül Podoski Péter és Zabb László Témavezetők: Dr. Fekete István, Veszprémi Anna ELTE IK
Bevezetés (motiváció) • „Milyen nyelven és fejlesztői környezetben lehet jól tanítani a programozást?” • Lehetőleg ne hagyjuk bealudni a kitalálógépet (az elmét) • „Hogyan lehet egyszerűen, de mégis szemléletesen bemutatni a különféle algoritmusokat?” • Klasszikus módszer (tábla és kréta) • Mindenki írja meg magától a számára megfelelő megjelenítést • A mi válaszunk egy saját fejlesztésű algoritmus-megjelenítő segédeszköz, a Psimulex
Algoritmus-vizualizációk ma • Célja • főleg oktatási (esetleg kutatási) területre • segíti az ismertetéstés megértést • olykor algoritmusok fejlesztésekor könnyítheti a hibakeresést • Nehézség: könnyebb újat írni, mint találni egy megfelelőt • Jellemző, hogy egyszerűJava appletekkelvalósítják meg a demonstrációt
Az igény megfogalmazása • Elvárások egy jó megjelenítővel kapcsolatban: • Célközönség számára megfelelő ábrázolás • Könnyedén lehessen a vizualizációkat módosítani, bővíteni (pl. Hanoi tornyai) • Egyszerű telepítés • Épüljön be a tanítási folyamatba • Ne igényeljen magas szintű programozói tudást
Psimulex - lehetőségek • .NET-ben írt nyílt forráskódú keretrendszer • Algoritmusok megfogalmazása • C-szerű nyelven • Beépített fordítóprogram • Algoritmusok futtatása • Saját virtuális platform • Többprocesszoros, akár hálózati emuláció • Algoritmusok megjelenítése • a program változóit megjelenítő általános grafikai könyvtár (WPF) • Algoritmusok elemzése • Műveletigény, memóriaigény
Saját nyelv • Az algoritmusok szempontjából alapvető típusok (skalárisok, konténerek és fák, gráfok) • Gyengén típusos imperatív nyelv, C-szerű szintaxissal • Típuskonstrukció: rekord • Fontosabb vezérlési szerkezetek • Felhasználói függvények • Több forrásfájl használata • Globális változók
Saját virtuális platform • Virtuális gép („mini” OS ütemezővel), folyamatok, szálak (futási és hívási veremmel) • A virtuális gép processzora futtatja az ún. „Microlex” utasításokat (gépi kódnak megfelelő parancsokat) • Az ütemező cserélhető • Később virtuális hálózattá bővíthető • Miért nem használtunk egy meglévő VM-et? • szükségünk van a teljes kontrollra a futó program felett
Fordítás gépi kódra • Négy lépésben fordítunk, visitor (látogató) tervminta alkalmazásával
Parancsobjektumok • A „parancs” tervminta alapján készültek • Mindegyik gépi utasítás egy-egy parancsobjektum • Az aktuális futási környezeten (szálon) dolgoznak • Három fő csoportjuk van: • Vezérlés-átadó parancsobjektumok (pl. Call, Jump) • Konkrét (főleg aritmetikai) műveleteket végrehajtó parancsobjektumok • Változókat, adatszerkezeteket kezelő parancsobjektumok
Saját típusrendszer • Aránylag gazdag típuskészlet (skalár típusok, gyűjtemények, fák, gráfok) • Java-hoz hasonlóan közös őstípus • BaseType == Object • Reflection-re épül, emiatt könnyen elérhető az egész .NET osztályhierarchia • Felhasználói típus a rekord (egyelőre) • A komplex típusok egymásba ágyazhatóak • Automatikus típuskonverziók
Saját IDE • Funkciók • „LexLighter” (aktuális utasítás színezése) • „Syntaxhighlight” • Léptetési módszerek (hasonlóan a VS-hez) • Korszerű IDE, fülek, több forrásfájl kezelése, testre szabható, ergonomikus • Nézetek váltása
Saját vizualizáció • Az adatszerkezetek dinamikus, változást követő, interaktív megjelenítése • „Montázs” – tetszőleges elrendezhetőség: • Hívási verem megjelenítése • Egy-egy lényeges adatszerkezet kiemelése • Egymásba ágyazhatóság (fa elemei gráfok) • Adatszerkezetek szerkeszthetőek futás közben is
Mindez futás közben Egy bináris fa szintfolytonos bejárása a Psimulex-ben
Felhasználási területek • Oktatás • Algoritmusok • Programozás • Fordítóprogramok (assembly-szerű nyelvek logikája) • Kutatás • Elméletek tesztelése és bemutatása • Fejlesztés • Algoritmikus problémák megoldása itt és aztán implementálása • Demonstráció • Automatikusan létrejön a megjelenítés, csak a programot kell megírni, az inputot megszerkeszteni
Távlati tervek • Párhuzamos programozási eszközök teljes körű bevezetése • lock, monitor, erőforrások, stb… • .NET interoperabilitás növelése • Psimulex-ben írt programból C# vagy IL kód generálása • .NET BaseClassLibraryt-t elérhetővé tenni • Integráció a Visual Studiodebuggerébe • intelligens .NET adatszerkezet reflekció és saját grafikus „debuggervisualizer” • Internetes portál (pl. versenyekhez)
Értékelés • Tipikusan túlvállalt projekt: több kezdeti cél ma már csak terv • Felhasználóbarátság egyelőre nem jellemző • A megjelenítés nem grafikusi vénánkról árulkodik • 2. iterációhoz képest stabil rendszermag (200 unit teszt) • Könnyű bővíthetőség • Sikerélmény
Összefoglaló • Felmértük a jelenlegi igényeket és kínálatot az algoritmus megjelenítőkből • Elhatároztuk, hogy készítünk egy általános algoritmus megjelenítő rendszert • Ebből megvalósult a saját nyelven programozható virtuális gép, egy egyszerű grafikus csomag és egy alapszintű debugger • Célok: az eddigi tapasztalatok alapján egy komplett segédeszköz publikálása