Informatika a felsőoktatásban 2011 konferencia Debrecen, 2011. augusztus 24-26. _____________________________________________________________________________________________________
SEA: DSL TANTÁRGYAK KEZELÉSÉRE SEA: A DSL FOR HANDLING COURSES AT THE UNIVERSITY Sterbinszky Nóra1, Dr. Fazekas Gábor2 Összefoglaló: Az egyetemi kurzusok oktatóinak egyik legfontosabb feladata, hogy félévről félévre átadják a hallgatóknak a kellő ismeretanyagot, segítsék azok elsajátítását. Ehhez egyre újabb és fejlettebb eszközök állnak rendelkezésükre, mint például az elektronikus és az e-learning tananyagok, vagy a különböző szkript-nyelveken és általános célú programozási nyelveken írt programok, amelyek az elektronikus dolgozatokat, házi feladatokat kezelik, tesztelik, pontozzák. A sokrétű tananyag és számonkérések kezelésére célszerű létrehozni egy olyan általános felületet, amelynek segítségével az előbbieken túl egyéb funkcionalitások is leírhatóvá válnak. Ennek a legrugalmasabb módja egy olyan szakterület-specifikus nyelv (domain-specific language – DSL) létrehozása, amely az oktatók számára ismert fogalmakkal, műveletekkel dolgozik, és megpróbálja az oktatási folyamatot kényelmesebbé, automatizáltabbá és eredményesebbé tenni. Célunk egy ilyen nyelv modellezése, a későbbiekben implementálása és kipróbálása a gyakorlatban. A tananyag témakörökre és kisebb egységekre bontása, a számonkérések lebonyolítása vagy csupán kiértékelése, az oktatók és hallgatók számára történő visszacsatolás a kurzus eredményességéről mind-mind a nyelv részét képezik. A SEA a hallgatók számára a számonkérés során elért részeredmények alapján visszaigazolást adhat arra vonatkozólag, hogy melyek azok a témakörök, amelyek alaposabb ismétlést igényelnek. Az oktatók a hallgatók által nyújtott teljesítmény feldolgozásával kimutatásokat készíthetnek, és visszaigazolást kaphatnak az alkalmazott tananyagfelosztásról, a témaköri sorrend megválasztásának helyességéről. Kulcsszavak: egyetemi kurzus, oktatás, tanulás, szakterület-specifikus modellezés, szakterület-specifikus nyelv. Abstract: One of the most important tasks of instructors at universities is to transmit appropriate knowledge to the students and to help them in studying in every semester. To do this, there are modern tools such as e-learning systems or programs written in scripting languages that handle, test, and score electronic exams or homeworks. It may be practical to produce a general interface for handling diverse learning materials and exams. The most flexible method for describing such an interface is to make a domain-specific language that works with concepts which are familiar to instructors. This interface tries to make the teaching-learning process more comfortable, automated, and prosperous. Our aim is to model such a language, later to implement it, and to try it in practice. The language contains concepts like partitioning the learning material to separate topics, setting up exams, evaluating exam results, or giving feedback about the efficiency of courses for instructors and students. SEA may give feedback for students during the semester, so they find out which topics they should learn deeper. Instructors can make statistics about the performance of their students with the help of SEA, so they can get feedback about their work, the partitioning of learning materials, the correctness of topic order. Keywords: university course, teaching, learning, domain-specific modeling, domain-specific language, DSL.
1. Bevezetés Manapság az oktatás sem maradhat ki az informatika által meghódított területekből. A Debreceni Egyetem Informatikai Karán oktatott alapozó tantárgyak, illetve a programozáshoz kötődő más kurzusok magas hallgatói létszámot érintenek, ezért ezeknél a tárgyaknál az automatizáltság meghatározó jelentőséggel bír. Ennek ellenére jelenleg csak az elektronikusan beadott házi feladatok kezelése, tesztelése, kiértékelése történik automatikusan. A következőkben röviden áttekintjük a leginkább érintett tantárgyak jellemzőit. A további fejezetekben a nagy hallgatói létszámú alapozó tárgyakról, a SEA nyelv céljairól, a DSLekről, majd saját szakterület-specifikus nyelvünk felépítéséről, működéséről lesz szó. 1
Debreceni Egyetem, Informatikai Kar,
[email protected],
[email protected] 2 Debreceni Egyetem, Informatikai Kar,
[email protected]
750
Informatika a felsőoktatásban 2011 konferencia Debrecen, 2011. augusztus 24-26. _____________________________________________________________________________________________________
2. A programozási alapozó tárgyak főbb jellemzőinek ismertetése A Magas szintű programozási nyelvek 1 tárgy célja az imperatív programozási nyelvek családjába tartozó eljárás-orientált paradigma elsajátítása a C programozási nyelven keresztül. A hallgatók megismerik a paradigma főbb jellemzőit, a nyelv alkotóelemeit, miközben megtanulják az algoritmikus gondolkodásmódot, és fejlesztik problémamegoldó képességüket is. A Magas szintű programozási nyelvek 2 tárgy az imperatív programozási nyelvek családjának egy másik ágát, a manapság leggyakrabban használt objektumorientált paradigmát mutatja be a Java nyelven keresztül. Itt az algoritmikus gondolkodásmódon –, amellyel a hallgatók már megismerkedtek, – kisebb a hangsúly, a problémamegoldó képesség fejlesztése kerül inkább előtérbe. A Java nyelv számos beépített osztállyal, típussal, és azokon belül metódusokkal könnyíti a programozást. A nehézséget éppen a lehetőségek sokasága jelenti, mivel a probléma jellegétől függően végig kell gondolnunk azt a módszert, amellyel a leghatékonyabban vagy a legrövidebb idő alatt készíthető el programunk. Aki nem tudja „fejben” összeállítani a hozzávetőleges megoldást, nem sok hasznát veszi a beépített eszközök sokaságának. Mindkét tárgy számonkérése két részből tevődik össze: az elektronikusan beadott, kötelező házi feladatokból, illetve a papír alapú zárthelyi dolgozatokból. Mivel mind a kétféle számonkérésre szükség van, ez megsokszorozza a tárgyat oktatók feladatait. Az algoritmikus gondolkodás és a problémamegoldó képesség kifejlesztésére nem elegendő heti 100 perc tanórai foglalkozás, ehhez nagyon sok otthoni gyakorlás is szükséges, amelynek egyik módja az elektronikusan beadott kötelező házi feladatok elkészítése. Az oktatók által összeállított házi feladatsorok száma félévente változhat, általában 3 és 6 között mozog. Minden feladatsor 6-10 feladatot tartalmaz. A beadott feladatok tesztelését a szerveren futó szkript-nyelven írt programok végzik. Ha a beadott program a teszten „elbukik”, a szkript ezt hibaüzenetekkel jelzi. A hallgatók együttműködését a házi feladatok megoldása során egy, szintén szkript-nyelven írt program ellenőrzi a JPlag csomag segítségével. Abban az esetben, ha az egyezések száma egy korlátot túllép, a hallgatóknak meg kell védeniük beadott programjukat. Sikeres védés esetén a rendszer a beadott programot helyesnek fogadja el, ellenkező esetben a hallgatók elveszítik a feladatra kapott pontszámukat. A beadandó házi feladatok elektronikus kezelésén túl további területek is igényelnék az automatizáltság előnyeit. Ilyen terület a számonkérés másik formája, a zárthelyi dolgozatok kezelése. A papír alapú zárthelyi dolgozatokra azért van szükség, mert ott a hallgatók kénytelenek saját maguk elkészíteni programjaikat. A dolgozatok „írása” történhetne számítógépen is, így azok javítása automatikussá válna. A félév végén az összesített pontszámok alapján derül ki, hogy a hallgatók sikeresen teljesítették-e a tantárgy gyakorlati kurzusát. A ponthatárok általában rögzítettek, olykor kiegészíthetik egymást, sőt az is előfordulhat, hogy módosítani kell őket. Ilyenkor vagy az eredményekből generált táblázatban kell átírni a ponthatárokat, és a kiszámításukra vonatkozó szabályokat, vagy a szerveren futó szkriptekben. Ez utóbbi hatékonyabb, mert az eredmények exportálása előtt történik a módosítás, de még így is több hosszú fájlban kell felkutatnunk az átírandó kódrészletek helyét. Ez a probléma paraméterek használatával orvosolható. Egy megfelelő DSL segítségével, az adatokból kinyerhető információ alapján, a ponthatárok változtatása egyszerűen történik. A beadott feladatok kezelését néhány éve grafikus felhasználói felület könnyíti, amelyről gombnyomással vagy menürendszerből futtathatók a fent említett szkriptek. Ez barátságosabbá teszi a rendszer használatát, mint a parancssorból kiadott utasítások. A hallgatónkénti alapvető kiértékeléseken kívül, a rendszer – jelen állapotok szerint – nem sok statisztikai kimutatást tesz lehetővé (aggregátumok különböző szempontok szerint, előnézetek például a ponthatárok csökkentésére). A ponthatárok mozgatása függ a hallgatói évfolyamoktól, így ezek általában az évfolyam teljesítményét, hozzáállását is tükrözik. A zárthelyi dolgozatok eredménye, a versenyeken elért eredmények, és az esetleges egyéb többletpontok később adódnak hozzá az összesített pontszámhoz. A hallgatói teljesítmények értékelésére csak a félév végén kerül sor.
751
Informatika a felsőoktatásban 2011 konferencia Debrecen, 2011. augusztus 24-26. _____________________________________________________________________________________________________
3. A SEA nyelv célja, részei Az előzőekben bemutatott környezetet szeretnénk kiegészíteni egy olyan felülettel, amely a szakterület fogalmainak (tantárgy, kurzus, tananyag, témakör, számonkérés) kezelését a lehető legegyszerűbb, minél inkább emberközeli formában biztosítja. Ez a SEA szakterület-specifikus nyelv megtervezését és elkészítését jelenti, amellyel az oktatók és a hallgatók könnyen dolgozhatnak, és amely köztes rétegként ékelődik a grafikus felhasználói interfész és a szkript-nyelven megírt, szerveren futó programok közé. A modell elkészítése után egyszerű az újabb funkcionalitások hozzáadása. Ezután a szkriptek, valamint a grafikus felhasználói felület akár párhuzamosan is fejleszthető, bármelyik rész könnyen lecserélhető. Több programozási nyelvet használhatunk a DSL kódjának a modellből történő generálásához. (Itt csak az internális, belső DSL-ekkel foglalkozunk, amelyek egy, már létező, általános célú programnyelv eszközeit használják implementációjukban.) Célunk egy olyan szakterület-specifikus nyelv modellezése, amely az oktatóknak és a hallgatóknak egyaránt lehetővé teszi a folyamatosan történő visszacsatolást az egész félév során. A folyamatosan rendelkezésre álló eredményekből levont tanulságok még az adott félévben hasznosíthatók, ezáltal több hallgató teljesítheti a tárgyat. A SEA nyelv három fő részre tagolódik: a tananyag rögzítése témakörökre osztva; e témakörök, kisebb egységek összefüggéseinek, egymáshoz való viszonyának megadása, a témakörök és a számonkérés viszonya, egymáshoz képesti lefedettségének rögzítése, az eredmények feldolgozása, amely az eddig rögzített adatok (témakörök, feladatok, pontszámok) alapján a leggyakoribb kérdéseket, lekérdezéseket tartalmazza. Ezen a helyen a nyelv tervezésével, modellezésével foglalkozunk. A későbbi implementáció kapcsán említést kell tennünk az ún. LMS-ekről (Learning Manangement System). Magyar fordításuk a legtöbb helyen oktatásszervező rendszerek. Ezen rendszereknek három fő részük van: az adminisztrálás, a tananyag rendelkezésre bocsátása, és a számonkérések lebonyolítása, kiértékelése. DSL-ünk megvalósításánál kapcsolatot teremthetünk ezekkel a rendszerekkel, felhasználhatjuk többek között a kiértékelésre vonatkozó eszközeiket. Az átfedés azonban nem teljes e rendszerek és nyelvünk között. Utóbbinak bővíthetősége és meglehetősen speciális környezetben történő felhasználása okán az LMS-ektől esetlegesen eltérő funkcionalitásokat is el kell látnia.
4. DSL-ekről, röviden A szakterület-specifikus nyelvek régóta jelen vannak az informatikában. Az általános célú programozási nyelvekkel ellentétben, mint például a Java vagy a C#, a DSL-ek egy meghatározott tudományterület fogalmaival dolgoznak. Elmondható, hogy az általános célú nyelvek az imperatív programozási paradigmához tartoznak, míg a szakterület-specifikus nyelvek deklaratívak. A DSL-ek mérete változó: a kisebbek csupán néhány kódsorból álló szkriptek, és kevés programozó írja őket, míg a nagyok mögött fejlesztői csapatok állnak, és olyan széles körben használtak, hogy már szinte általánosnak tekinthetők. Ilyen nyelvek a funkcionális vagy a logikai paradigma programozási nyelvei, az adatbázisok kezelésére szolgáló SQL vagy a statisztikai R programcsomag. A szoftverfejlesztésben állandó problémát jelent a fejlesztők és a megrendelők (a szakterület művelői, résztvevői) kölcsönös megértése, kommunikációja. A DSL-ek legfőbb előnye e kommunikáció javítása. Egy jól elkészített DSL egyszerű használatot, kényelmes felületet nyújt a felhasználó szakértőknek, akik a szakterületükhöz közel álló gondolkodásmódot találják meg a nyelvben. A közös fogalomrendszer hozzásegíti őket a DSL-ben történő programozás könnyű elsajátításához. A DSL-ek egyik hátránya a szakterülethez kötöttség (amennyiben ez hátránynak tekinthető), mivel az általános célokat feláldozzuk az adott szakterület minél hatékonyabb kezelése érdekében. A DSL-ek egy felületet „húznak” a programkönyvtárak, keretrendszerek elé. Ezek a nyelvek nem a mögöttük lévő programcsomagokat fejlesztik tovább, hanem azok megértését és így használatát teszik egyszerűbbé a programozáson kívüli tudományterületek művelői számára. A programkönyvtárakat a DSL nézőpontjából összefoglalóan szemantikus modellnek is nevezik, míg a szakterület-specifikus
752
Informatika a felsőoktatásban 2011 konferencia Debrecen, 2011. augusztus 24-26. _____________________________________________________________________________________________________
nyelvek által nyújtott felület egyfajta parancs-lekérdezés interfészt (command-query API) valósít meg.(Fowler 2010)
4.1.
DSL-ek csoportosítása
Martin Fowler szerint a szakterület-specifikus nyelv egy olyan számítógép-programozási nyelv, amely korlátolt kifejezőerejű és egy bizonyos szakterületre összepontosít. A DSL-eknek három fajtáját különbözteti meg: Belső (Internal) DSL: a szakterület-specifikus nyelv egy általános célú programozási nyelv egy részét használja a szakterület kezelésére. A dinamikus és dinamikusan típusos nyelvek (Ruby, Python, Groovy) használata éppúgy célravezető lehet, mint a statikusan típusosaké (Java, C#). Az előbbiekkel gazdagabb és simulékonyabb DSL hozható létre, az utóbbiak nagy előnye a közismertségük, és a hozzájuk tartozó fejlesztői környezetek (IDE-k) gazdag eszköztára a fejlesztés támogatására. Külső (External) DSL: a szakterület-specifikus nyelvet teljes egészében új nyelvként hozzuk létre, amely egyedi szintakszissal rendelkezik. A legelterjedtebb formátum egy külső DSL létrehozására az XML. Nyelvi munkapad (Language Workbench): ez egy integrált fejlesztői környezet a DSL-ek struktúrájának és az e nyelveken írt szkripteknek a definiálásához és létrehozásához.(Fowler 2010)
4.2.
Belső DSL-ek
A továbbiakban belső DSL-ekkel foglalkozunk. A belső DSL-ek tervezését és létrehozását nagyban befolyásolja a gazdanyelv, amely egy általános célú programozási nyelv. A megfelelő gazdanyelv kiválasztásakor a szakterület igényeinek megfelelően kell mérlegelnünk. Minden általános célú nyelvnek vannak előnyei és hátrányai is. A dinamikus nyelvek használata a futás közbeni rugalmasságot növeli, így a felhasználó is definiálhat olyan eszközöket, például metódusokat, amelyek a futás során jönnek létre, és attól kezdve a nyelv részeként használhatók. Hátrányuk viszont, hogy a DSL-szkript írása közben a fejlesztői környezetük nem nyújt olyan mértékű támogatást, mint egy statikusan típusos nyelv esetében. Előfordulhat, hogy a gazdanyelv nem támogat nyelvi szinten bizonyos eszközöket, amelyeket a DSL-ben használni szeretnénk. Például a C#-ban meglévő lambdakifejezések (más néven anonim metódusok, klozsúrák (closures), lezárások vagy lezártak) a Javából egyelőre hiányoznak. A belső DSL-ek implementálásának egyik legfontosabb eszköze a folyamatos vagy folyékony interfész (Fluent Interface). Ennek segítségével a nyelven belül is emberközeli, mondatszerű formában fogalmazhatunk. A folyamatos interfészt függvénysorozattal (Function Sequence), beágyazott függvényekkel (Nested Function), valamint metódusláncolással (Method Chaining) valósíthatjuk meg. A függvénysorozat hátránya, hogy a jól használhatóság érdekében minden függvénynek globálisan hozzáférhetőnek kell lennie. Beágyazott függvényeket más függvények paramétereként adhatunk meg. A globális hozzáférhetőséget ebben az esetben is célszerű biztosítanunk. Ezenkívül a beágyazott függvények használata ronthatja a kód olvashatóságát a számos zárójel és egyéb, paramétereket határoló jelek miatt. Mégis célszerű lehet a használatuk például metódusláncba ágyazva a lánc megszakadásának elkerülése érdekében, vagy ha a szakterület funkcionalitása úgy kívánja, illetve ha általuk egyszerűbb kód nyerhető a háttérben. Legtöbb esetben a metódusláncok használata a legcélravezetőbb, mivel nem szükséges a metódusok globális láthatóságáról gondoskodnunk. Az objektumok –, amelyeknek a metódusait összeláncoljuk, – hatásköre (Object Scoping) eltérő lehet. A függvénysorozatot, beágyazott függvényeket és a metódusláncolást felváltva is használhatjuk attól függően, hogy a DSL egyes részeihez melyik a legpraktikusabb. A folyamatos interfészeken kívül fontos implementáló eszközök a lezártak és a beágyazott lezártak. Ezen eszközöket nem minden nyelv támogatja (pl. Java). A lezártak erőssége abban rejlik, hogy egy objektum helyére egy önálló kódrészletet illeszthetünk, amelyet szükség esetén paraméterekkel is elláthatunk. Olyan DSL-ek megvalósításánál van a lezártaknak nagy jelentőségük, amelyek különböző feltételek alapján hajtanak végre valamely tevékenységet (például adatok feldolgozása). Ennek
753
Informatika a felsőoktatásban 2011 konferencia Debrecen, 2011. augusztus 24-26. _____________________________________________________________________________________________________
segítségével bármely feltétel megfogalmazható (a nyelv korlátai között). A fejlesztőknek elegendő annyit tudniuk, hogy azon a helyen egy feltétel fog állni, vagyis egy olyan kódrészlet, amely egy logikai értéket eredményez. A lezártak alkalmazása rendkívüli módon növelheti a programozói produktivitást. A DSL-ek implementálására szolgáló eszközök bemutatása korántsem teljes, de még meg kell említenünk a meta-programozást. Az általános célú programnyelvek több olyan eszközt tartalmaznak (például reflexió-keretrendszer, annotációk), amelyek a program szövegének feldolgozását teszik lehetővé. Ezek DSL-szkriptek feldolgozása során használatosak. DSL-ünk megfogalmazásakor további módszereket, eszközöket is igénybe vehetünk. Ilyenek például a döntési tábla (Decision Table), a függőségi háló (Dependency Network), a szabályalapú rendszerek (Production Rule System) vagy az állapot-automaták (State Machine).
5. A SEA nyelv Az általunk tervezett DSL fő célja a következő (és hozzájuk hasonló) pontok kezelése: A tananyag témakörökre és kisebb egységekre bontásának és a közöttük fennálló viszonyoknak a megadása. A számonkérés feladatainak felosztása témakörök szerint, a pontozás megadása. Elektronikusan beadott házi feladatok kezelése. Az elektronikus tesztelés során kapott hibaüzenetekhez bővebb magyarázatok rendelése. A plágiumellenőrzés szigorúságának megadása. (Az alkalmazandó algoritmus beállítása.) Bizonyos elemek jelenlétének ellenőrzése a kódban. (A hallgató a feladatot az előírásnak megfelelően csinálta-e meg.) Óránkénti témakör-felosztás megadása. A zárthelyi dolgozatok és az elektronikusan beadott házi feladatok összehasonlítása különböző szempontok alapján. Oktatói kérdések, tevékenységek: Mely témakör a legnehezebb? (Mely témakörből ért el a legtöbb hallgató rossz eredményt?) Mely témakör a legkönnyebb? Témakörök sorba rendezése nehézség szerint. A témakörök időigényének módosítása a zárthelyi dolgozatok, vagy az elektronikusan beadott házi feladatok, vagy mindkettőnek az eredménye alapján. Hallgatók sorba rendezése aszerint, hogy hány témakört sajátítottak el sikeresen. Eltérő módszerek eredményességének meghatározása több évi adatok alapján. (Például zárthelyi dolgozatok számának meghatározása. Témakörök legmegfelelőbb sorrendjének azonosítása.) Az egy félévben íratott zárthelyi dolgozatok, elektronikusan beadott házi feladatok eredményeink összehasonlítása. Részben személyre szabott feladatsorok készítése a korábban beadott házi feladatsorok eredménye alapján. Csoportmunkában betöltött szerepkör rögzítése hallgatókhoz és feladatokhoz. Csoportmunka és egyéni munka összehasonlítása. Egyénre szabott feladatsor összeállítása adott feladathalmazból. Tesztesetek használata alapján részfeladatok pontozása. Hallgatói kérdések, tevékenységek: Témakörök sorba rendezése nehézség szerint a zárthelyi dolgozatok feladatai vagy az elektronikusan beadott házi feladatok alapján. Elektronikusan beadott házi feladatok tipikus hibáinak lekérdezése. Az eredmények alapján felállított sorrendben elért helyezés lekérdezése. Az összes hallgató százalékos arányának lekérdezése a témakörök eredményessége szerint.
754
Informatika a felsőoktatásban 2011 konferencia Debrecen, 2011. augusztus 24-26. _____________________________________________________________________________________________________
5.1.
A SEA szemantikus modellje
1. ábra A SEA nyelv szemantikus modelljének diagramja
Az Oktató adja meg a Tantárgy Témakörökre osztását, és a hozzájuk tartozó Kulcsszavakat, Tanórákat. Az Oktató és a Hallgató lekérdezéseket fogalmazhat meg a Témakörök és Feladatsorok vonatkozásában. A Tantárgy tartalmazza a Témaköreit, amelyekhez Kulcsszavak rendelhetők. Minden Témakörhöz csatlakozik egy vagy több Tanóra, amelyeken a Témakör szóba kerül. Egy Tanórán több Témakör is feldolgozható. A Feladatsor Feladatokból áll, amelyek tárolják a kapcsolódó Témaköröket.
5.2.
A SEA felépítése, működése
A SEA a belső DSL-ek csoportjába tartozik. A már elkészült részek implementálása Java és C# nyelvű kóddal történt. A nyelv két részre tagolódik. Az első rész a tantárgyak témakörökre bontását, majd ezekhez kulcsszavak megadását teszi lehetővé. A második rész olyan lekérdezések megfogalmazásához nyújt könnyen kezelhető felületet, amelyek a tantárgy féléves hallgatói eredményeit érintik, figyelembe véve a témakörök és a számonkérések szerinti megoszlást. 1.2.1. Az adatok és összefüggéseik megadása A nyelv első részének modellje olyan osztályokból áll, amelyek két különálló csoportba sorolhatók. Az első csoport azokat az osztályokat tartalmazza, amelyek a szemantikus modellben szintén szerepelnek. Ezek a szakterületi fogalmakat reprezentálják. A második csoportban találhatók az értelmező osztályok. Ezek neve a –Builder szóra végződik. A szakterületi fogalomrendszer és maga a szakterület-specifikus nyelv használatának kényelmessé és érthetővé tétele megkívánja, hogy Builderosztályokkal dolgozzunk. Nem célszerű a fogalomrendszerbe integrálni azokat a technikai fogásokat, amelyek mentén felépítjük a nyelvet. A Builder-osztályok állítják majd elő azokat az objektumokat, amelyek a fogalomrendszert alkotó osztályok példányai. Szakterületi osztályok A szakterület osztályai a következők: Tantárgy, Témakör, Kulcsszó, Tanóra, Feladat, Feladatsor. A Tantárgy objektumai tárolják a tárgyhoz tartozó témaköröket és kulcsszavakat. A Témakör osztály szintén tárolja a kulcsszavakat. A Tanóra statikus adattagjai Tanóra típusú példányok, amelyek a félév során tartandó órák sorszámát reprezentálják, vagyis azt, hogy hányadik héten van az óra. A Feladat osztály témakörök adattagja tartalmazza a feladathoz tartozó témaköröket. Értelmező osztályok A Builder-osztályok metódusai olyan objektumpéldányokkal térnek vissza, amelyek lehetővé teszik az értelemszerű láncolást. Egy témakör vagy egy kulcsszó megadása után szükségtelen jeleznünk, hogy egy újabb következik: a láncolás folyamatos. A lánc a tantárgy megadásával indul, a TantárgyBuilder osztály metódusa segítségével. A TémakörBuilder osztály metódusaival témaköröket, kulcsszavakat adhatunk meg. A tanóra megadása befejezi a láncolást, így ezt mindig utolsóként célszerű beállítanunk. Az igényli metódus paraméterlistájában sztringként adhatók meg azok a témák, amelyek elsajátítása előfeltétele témakörünknek. E metódus segítségével egy függőségi háló írható le a
755
Informatika a felsőoktatásban 2011 konferencia Debrecen, 2011. augusztus 24-26. _____________________________________________________________________________________________________
témakörök egymásra épülése szerint. A FeladatBuilder osztály témakör metódusával rendelhetünk témákat feladatunkhoz. Mivel a rögzíteni kívánt egységek előre nem ismertek, a metódusok paraméterei minden esetben sztring típusúak. A DSL ezen részének megvalósításához érdemesebb lehet egy dinamikus gazdanyelvet igénybe vennünk. Példa témakörök és kulcsszavak tantárgyhoz rendelésére: TantargyBuilder tbuilder = new TantargyBuilder(); tbuilder .tantargy("Magas szintű programozás 1") .temakor("alapszavak") .temakor("literálok") .temakor("konstansok") .temakor("változók") .temakor("vezérlési szerkezetek") .igenyli("alapszavak", "változók") .kulcsszo("kétirányú elágaztatás","többirányú elágaztatás","ciklus") .temakor("tömbök") .kulcsszo("tömb", "gyűjtemény", "kollekció"); FeladatBuilder fbuilder = new FeladatBuilder(); fbuilder .setSorszam(2) .setCim("Rendezés növekvőleg") .temakor("tömbök") .temakor("vezérlési szerkezetek");
1.2.1. Az eredmények összesítése, lekérdezése A SEA második része a féléves hallgatói eredmények lekérdezésére szolgál. Erre kétféle módszert kínálunk. Az egyik azon felhasználóknak előnyös, akik otthonosan mozognak az adatbázis-kezelő rendszerek világában, és jól ismerik az SQL nyelvet. E módszer SQL-lekérdezések megfogalmazásához nyújt folyamatos interfészt. SQL-közelisége miatt e módszer kifejezőereje nagyobb, mint a másodikként bemutatásra kerülőé. A második esetben olyan metódusokkal dolgozunk, amelyek működésének megértése egyszerűbb, mint az SQL-utasításoké. Azon felhasználóknak javasoljuk a második módszert, akik nem vagy csak kevésbé ismerik az adatbáziskezelők lekérdezőnyelvét. E kódrészlet gazdanyelve C#, amely egy harmadik alternatívát kínál a LINQ (Language Integrated Query) használatával. Ezáltal SQL-közeli szintakszissal fogalmazhatók meg lekérdezések a C# nyelvi szintjén, tekintet nélkül arra, hogy az adatok hol helyezkednek el (adatbázisban vagy a memóriában).
2. ábra Láncolható metódusok SQL-lekérdezések megfogalmazására (osztálydiagram)
Az első módszer folyamatos interfésze segíti a helyes alkalmazást. A lekérdezés különböző részeihez kapcsolódó metódusok más-más osztályban helyezkednek el az SQL-lekérdezés korrekt szintakszisának megfelelően. A metódusok paraméterei sztring típusúak. A második módszer esetében a szakterületi fogalomrendszer kibővül. A Témakör osztály mellett megjelenik a Hallgató, Pontszám, Eredmény osztály is, amelyek az adatbázis-kezelő rendszerben tárolt táblák objektumorientált megfelelői. A Pontszám osztály a zárthelyi dolgozatok és az elektronikusan beadott házi feladatok pontszámait tárolja. E módszer metódusainak implementálásakor eldönthetjük,
756
Informatika a felsőoktatásban 2011 konferencia Debrecen, 2011. augusztus 24-26. _____________________________________________________________________________________________________
hogy az adatbázisból kérjük le a megfelelő adatokat, vagy automatikusan végzünk objektum-relációs leképezést, és a memóriában tárolt objektumokon hajtjuk végre a lekérdezést. Az alapvető csoportosító függvényeken kívül további metódusok is rendelkezésünkre állnak, amelyeknek egyforma a felépítése. A metódusok neve azt határozza meg, hogy mit szeretnénk lekérdezni, míg paraméterük szűrőfeltétel megadására szolgál. A paraméterek típusai a Feltétel delegált eltérő darabszámú típusparaméterrel rendelkező változatai. E metódusok hívásakor paraméterlistájukban lezártak helyezkednek el, amelyek logikai visszatérési típussal rendelkeznek. A metódusok paraméter nélküli változatai szűrés nélkül adják vissza a kívánt egyed-előfordulásokat tartalmazó kollekciókat. A csoportosítás implementációja bővítő metódusok segítségével történt, így alkalmazható a metódusláncolás technikája. Bővítő metódusok nélkül a beágyazott függvények módszerét kellene igénybe vennünk. Ez esetben a beágyazott függvények fő hátránya a nehezebb átláthatóság és a rosszabb érthetőség, mert a logikailag egymás után következő tevékenységeket más sorrendbe kényszerítik. Példa hallgatói eredmények lekérdezésére: Console.WriteLine(DARABSZAM(Hallgato())); Console.WriteLine(DARABSZAM(Hallgato(p => p.Hallgato.Szak.Equals("PTI")))); Console.WriteLine(Hallgato(p => p.Pontszam.getPontszamOsszes() < 40) .Csoportosit(new Temakor()).DARABSZAM().Max()); Console.WriteLine(Hallgato(p => p.Pontszam.getPontszamOsszes() == MIN(Pontszam(), PONTSZAM_OSSZES)) .Csoportosit(new Temakor()).DARABSZAM().Max()); Console.WriteLine(Hallgato(p => p.Pontszam.getPontszamOsszes() == MAX(Pontszam(), PONTSZAM_OSSZES)));
6. Összegzés, jövőbeni munka Összegzésként megállapíthatjuk, hogy a kezdő, illetve az alsóbb évfolyamok alapozó tárgyainak oktatása a magas hallgatói létszám, valamint a folyamatos és bőséges számonkérés következtében a tananyag átadása mellett aránytalanul sok további feladattal terheli e tárgyak oktatóit. A SEA DSL használata az oktatókat és a hallgatókat egyaránt segíti abban, hogy a félévi tapasztalatok alapján, a bennük kialakult összkép számszerűen is áttekinthetővé váljon, visszacsatolásként rámutatva azokra a területekre, amelyek több figyelmet igényelnek, és támogatva az adott tárgyon alapuló további kurzusok felépítésének megtervezését. A SEA még fejlesztés alatt áll. Jövőbeni terveink között szerepel a nyelv funkcionalitásának kibővítése, és szeretnénk a felhasználóknak arra is lehetőséget adni, hogy maguk is könnyen csatolhassanak hozzá további eszközöket. Irodalomjegyzék Fowler, Martin (2010) Domain-Specific Languages. The Addison-Wesley Signature Series Parr, Terence (2010) Language Implementation Patterns. The Pragmatic Bookshelf Rinard, Martin () Using Programming Language Concepts to Teach General Thinking Skills http://people.csail.mit.edu/rinard/paper/wowcs08.pdf Doukas, N., Andreatos, A. (2006) e-Xaminer: An automated system for electronic test delivery and assessment. ICVL – The 1st International Conference on Virtual Learning, http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.98.3091&rep Martens, A., Harrer, A. (2007) An Integrative Approach for Teaching/Tutoring Process Models Using Meta-Models. IADIS – International Conference on Cognition and Exploratory Learning in Digital Age (CELDA 2007) Learning Management System Assessment Processes – COGGNO LMS (2011) http://coggnolms.wetpaint.com/page/Learning+Management+System+Assessment+Processes
757