ÁTTÉRÉS LAZARUSRA GONDOLATOK ÉS TAPASZTALATOK EGY ÚJ NYELV BEVEZETÉSE KAPCSÁN SZLÁVI PÉTER 2005. NOVEMBER
Tartalom 0. Bevezetés...3 1. A múlt kiindulópontok...5 1.1 Módszertani...5 1.2 Programozás-fogalmi...5 1.3 Programozás-nyelvi...6 2. Paradigmaváltás osztály vs. típus...7 3. Fogalmi bemelegítés...9 4. Mankó a rutin megszerzéséhez...10 5. Tapasztalatok...16 Hivatkozott irodalom...17
3 nyomás 0. BEVEZETÉS Programozás(módszertan) tárgyunk oktatására három nyomás nehezedett: (1) programozás nyelv használati jog (license-ek száma); (2) használati nehézségek (XP kontra Turbo Pascal); (3) a fejlődés (vizuális nyelv igénye). próbálkozások Jó kiútnak tűnt a Borland Delphi, azonban a próbálkozásaink meghiúsultak: a kellő számban megvenni túl sokba kerülne, az adatbázis motor nélküli változat ingyenességére tett Borland ígéret szertefoszlott. módszertani elv Fontos kimondani a tárgy egyik alap tézisét: az oktatás nyomatéka a feladatspecifikáción és (főleg) a megoldó program algoritmusán fekszik, és nagyon kicsi súllyal a kódon. Azaz a programkészítési folyamat első két lépése a domináns. Látszólag tehát a kérdés, mi legyen a programozási nyelv, nem is kérdés. Közismert azonban, hogy oktatási szempontból különösen a közoktatásban a megoldás kódolása nem hagyható el, ui. nem igazán létezik más módszer arra, hogy a helyes működésről meggyőződjön a programozó 1, mint a futtatás alapú tesztelés. Ily módon kaphat bizonyítékot vagy éppen cáfolatot a program helyességére a programozni tanuló. Így lehet sikerélmény forrása, vagy a továbbgondolkodásnak útmutatója a kód. új Pascal variáns Az ezredforduló táján 2 bukkant fel az informatikai köztudatban egy új Pascal nyelvjárás a Free Pascal, egy újabb, szabadon terjeszthetett, és használható 32-bites változat. Ez felszabadítás lehetőségével kecsegtet a korábban említett (1) és (2) nyomás alól. Free, azaz nincs akadálya a kellő számú változat laborokban való installálásának, remélhetőleg (nagyobb) harmóniában van az XP-vel. És nem elhanyagolható előny: fenntarthatók a nyelvi és módszertani előnyök (pl. keretprogramok). Nem sokkal a Free Pascal után születik meg az a projekt, amely névadója egy Free Pascal-ra alapított vizuális nyelvi fejlesztői környezetnek: a Lazarus-nak. 3 E fejlesztői környezet mintául a Borland Delphi-jét választották, ami Pascal alapú, így értelmes gondolatnak látszik a felület alá a Free Pascal fordítóját illeszteni. Ezen elképzelések megvalósításáért küzdenek a fejlesztők egyre bővülő tábora. Mára a Free Pascal 2.0 változatáig jutottak el (2005. május 15.), illetve a Lazarus 0.9.10 verziójáig (2005.10.10.). 4 A Lazarus oktatásunkba való bevitele a (3) nyomást szűntetné meg. 1 A formális, matematikai módszereket még felsőoktatásban is csak kisméretű programok esetében szokás alkalmazni. 2 1998.12.23-dikáig vezetik vissza a Free Pascal hivatalos élettörténetét: http://www.freepascal.org/news.html. 3 Lásd http://www.lazarus.freepascal.org/modules.php?op=modload&name=staticpage&file=index&surl=about. 4 Free Pascal 2.0 (Win32): ftp://ftp.freepascal.org/pub/fpc/dist/i386-win32-2.0.0/fpc-2.0.0.i386-win32.exe Lazarus 0.9.10 (Win32): http://prdownloads.sourceforge.net/lazarus/lazarus-0.9.10-20051002- win32.exe?download. 3
0. Bevezetés didaktikai kérdőjelek A Lazarus legfrissebb változatát még β-nak minősítik a szerzők. Ez rossz hír. Egy bizonytalan működésű rendszer oktatásba bevitele igen kockázatos vállalkozás. Ha a tanár nem lehet biztos abban, hogy egy hallgatói/tanulói program rossz működése mögött a program hibája áll, amelynek kijavítása ifjú szerző feladata, az nagyon megnehezíti az oktatási folyamatot. Lépten-nyomon ellenőrizni kell a hiba természetét, és szerencsétlen esetben a környezetet kell okolni a hibáért. Ez a leendő programozóra kimondhatatlanul károsan hat: elveszti az esetleg még meg sem szerzett biztonságérzetét. Ilyen körülmények között igen nehéz programozni, tanulni meg egyenesen lehetetlen. Egy másik természetű didaktikai probléma is megfogalmazható. Az eddig hagyományos környezethez szokott hallgató hogyan fogadja a 4GL programkészítési szolgáltatásokat. Ez egy teljesen más programfejlesztési módszertant kíván. Továbbá az eddigi objektum-steril programozás után az OOP-s szemléletre áttérés módszertani kihívásaira is választ kell találni. döntés-előkészítés Az elmúlt nyarat többek közt arra szántam, hogy kiderítsem: mennyire β az akkori legújabb (0.9.8) változat; elgondolkozzam a 4GL-ség újdonságain, és megszelídítsem azt a hallgatóim számára egy előadás (ill. kézirata) formájában; végiggondoljam az előttünk álló félév tematikájához való illeszkedést, azaz megbecsüljem, hogy mennyire lehet a módszertani hangsúlyt megtartva nyelvet, környezetet, sőt némileg fejlesztési módszert is váltani. A konkrét és átvitt értelembe véve egyaránt izzasztó nyári munka után megszületett a döntés: áttérünk a Lazarus-ra. Kiderült jó néhány β-sága a Lazarusnak, de akkori megítélésem szerint kordában tarthatóak a kezdő programozók számára precízen kidolgozott, fejlesztési mankó segítségével (és persze a hallgatók fegyelmezettsége mellett), azaz egy olyan leírt lépéssorozattal, amely követése esetén a problémák elkerülhetők, vagy röviden orvosolhatók. 4
1. A MÚLT KIINDULÓPONTOK Ahhoz, hogy megértsük, mit miért éppen úgy gondoltam helyesnek, tudnunk kell pár dolgot arról, a tárgy megelőző két félévében milyen programozási tudást, rutint szerzetek a hallgatóink. Ismereteiket három szempontból tartom fontosnak csoportosítani: módszertani, programozás-fogalmi és -nyelvi. 1.1 Módszertani mit? hogyan? mivel? Ez alatt a program-gyártástani tudásukra gondolok, vagyis hogy valójában mit?, hogyan? és mivel? tudnak készíteni. Hagyományos, vagyis nem grafikus operációs rendszerben futó programot Hagyományos programkészítési elvekkel, mint a strukturált programozás, a felülről-lefelé tervezés, a lépésenkénti finomítás és az ezekhez kapcsolódó taktikai, technológiai, technikai, illetőleg ergonómiai elvek; valamint a funkcionalitás elve és a struktúraszerinti feldolgozás elve, valamint számos, kódolási szabállyal A programkészítési elvek irányítják a programozót az algoritmus tervezés egyes lépéseinek megtétele közben, vagy szempontokat adnak ahhoz, hogy mit kell és hogyan meggondolnia a minél kevesebb kudarc melletti algoritmustervezéshez és kódoláshoz. A struktúraszerinti feldolgozás elv vezérfonalat ad kezükbe az adatokból kiinduló algoritmus finomtervezéséhez. A funkcionalitás elvének figyelembe vételével a hármas tagolással (adatbeolvasás+feldolgozás+ adatmegjelenítés) születnek kezdettől a programok. A kódolási szabályok az éppen kiválasztott, konkrét programozási nyelvhez adnak gyorsan megérthető és mechanikusan alkalmazható sablonokat. Ily módon kívánjuk lerövidíteni a mélyebb programozási nyelvi ismeretek megszerzésére szükséges időt. Olyan hagyományos, azaz nem grafikus, egérmentes, billentyű-orientált programfejlesztő eszközzel, mint a Borland-ék Turbo környezete: programszerkesztő, nyomkövető és futtató rendszerek integrált környezete. 1.2 Programozás-fogalmi A programozás sajátos gondolkodásrendszeréből hallgatóink ismerik a programozási tételek fogalmát és egy sereg reprezentánsát. Ez a tárgy első félévének legfontosabb témája. A második félév a típus fogalmát járja körül. E közben ismerik meg a típusorientált programozás jellegzetességeit. Itt kerülnek szóba az alapvető adatszerkezetek néven jól ismert: tömbök, listák, vermek, sorok, táblázatok és különféle fájlcsaládok. A mi szóhasználatunk szerint ezek egy-egy konkrét reprezentánsa a típus fogalmának általánosításaként létrejött típuskonstrukcióknak. 5
1. A múlt kiindulópontok 1.3 Programozás-nyelvi Röviden szólva: rutinjuk a Turbo Pascal nyelvhez köthető. A Pascal standard nyelvi elemein túl megismertek számos kellemetlen nyelvi kötöttséget, úm. IO-korlátozások a típusok vonatkozásában (pl. absztrakt felsorolási típusú adat beolvashatatlansága, az alprogramok előfeltételellenőrzésének bonyolult módja stb.), a függvény korlátozott értéktípusa tekintetében, vagy a tömb igen szűkös mérete. A típusmegvalósítás nyelvi lehetőségeként (is) felkínált unit, illetőleg include hozzátartozik aktív szókincsükhöz. Ezekhez is kapcsolódik jó néhány nyelvi nehézség (pl. a unitok paraméterezhetetlensége stb.). 6
2. PARADIGMAVÁLTÁS OSZTÁLY VS. TÍPUS OOP típus egybevetés Tudjuk, hogy a Lazarus, mint afféle Delphi-klón, objektum-orientált programozás elveinek ismeretét és alkalmazását kívánja a programozótól. Eddig hallgatóink erről nem sokat tudhatnak. Kétségtelen tehát, hogy a programozás szemléletét is érinti a tervezett nyelvi áttérés. Mivel ahogy láttuk a tárgy szellemiségétől távol áll, hogy a nyelv legyen meghatározó, meg kellett gondolni e szellemiségmódosítás, divatos szóval élve: paradigmaváltás hogyan tehető minél könnyebbé. Mit is takar az objektum-orientált programozás (OOP) kifejezés? Idézetek következnek az OOP lényegének megragadása céljából Vég Csaba és dr. Juhász István tollából származó Objektum-orientált világ c. könyvéből [VCsJI]. Az objektum diszkrét entitás, amelyet adott időpillanatban adott tulajdonságokkal írhatunk le és amely tulajdonságok az időben változhatnak. Adott pillanatban az objektumot a tulajdonságaival, más néven attribútumaival jellemezzük, amelyeket együttesen állapotnak nevezünk. Az objektum állapotát a korábbi állapotok vagy bizonyos külső hatások függvényében változtathatja, amely változások együttesen a működést, a viselkedést alkotják. A módszertanok az összetett viselkedést műveletekre bontják. Az implementált műveletek a módszerek (methods). azonos attribútumokkal és műveletekkel rendelkező objektumok osztályokba (class) csoportosíthatók. Egy osztály objektumai, amelyeket az osztály példányainak nevezzük, minden egyes értékkel töltenek fel. Helyezzük e mellé Varga László a típushoz írt tömör matematikai definícióját [V]: A típus absztrakt fogalma alatt egy négyest értünk: T=(A,R,Σ,Κ), ahol adatelemek (nem üres) A halmaza (bázistípusok értékhalmazai), az adatelemeket egy struktúrává egyesítő R szerkezeti összefüggés, } a teljes struktúra részeit kiválasztó ún. szelekciós műveletek Σ halmaza, teljes struktúrát eredményező ún. konstrukciós műveletek Κ nem üres halmaza. } a típus statikus meghatározói asszociált műveletek, a típus dinamikus meghatározói A típus fenti, elvont megközelítéséből a kezdő programozók számára annyi felfogható és a jó programozási stílus kialakítása szempontjából elegendő, hogy a típushoz ismerni (megalkotásához definiálni) kell az értékhalmazt és az asszociált műveleteket. Az előbbit a típus reprezentációjának nevezzük, az utóbbiak megvalósítását (a lerögzített reprezentáció mellett) pedig implementációjának. A két idézetből számomra a lényeg a következőképpen sommázható. Párhuzamosíthatók a fogalmak: az objektum állapothalmaza az adat bázistípusainak egyesített halmaza; az objektumhoz tartozó műveletek az adathoz asszociált műveletek halmaza; végülis: az objektum osztály adattípus. 7
2. Paradigmaváltás OOP vs. típus Be kell ismernem a szokásos objektumjellemzők közül eltitkoltam (nem idéztem) az objektumok között kommunikációt lehetővé tevő üzenetek fogalmát. Ezt a fogalmat a legtöbb OOP-s rendszer visszavezeti a szóba hozott műveletekre. Így lényegi dolgot mégsem hagytam el. További OOP-s jellemzők közt emlegetik: az egységbe zárást és az öröklődést is. A típus precíz fogalmának bevezetésekor már eleve olyan leíró nyelvet használunk (a jól ismert algoritmikus nyelv kibővítéseként), amelyben az egységbe zárás teljesen természetes velejárója a típusnak. [SzP1] Így valójában az OOP-nek ez sem lesz a típushoz képest újdonsága. Az öröklődés valóban nóvum. Erre a vonásra természetesen fel kell hívni a figyelmet, de a hangsúlyt arra kell helyezni, hogy általa jutunk bizonyos leírási egyszerűséghez. Megspórolhatjuk azon kóddarabok újraprogramozását, amelyek a szülőosztályból változatlan formában továbbvihetők. Megjegyzem: e megjegyzés is csak annyiban lényeges, hogy a grafikus ablakokat megvalósító formok, mint osztályok automatikusan létrejövő kódjait megérthessék a hallgatók. következtetés Megállapíthatjuk, hogy a típusfogalom jó előkészítése után nem várhatók nagy nehézségek az OOP osztályfogalmának megértése, elfogadása körül. Ami az osztályfogalom őséből a típusfogalmából hiányzik, az öröklés, az a kitőzött céljaink szempontjából súlytalannak minősíthető. 8
3. FOGALMI BEMELEGÍTÉS Lássuk, mit terveztem elmondani egy előadáson a Lazarus bevezetése elé. [SzP2] madártávlatból A 4GL lényege Szómagyarázat (4GL); Egy mondatban, A grafikus kezelőfelület elemei és szervei, A működés filozófiája, Ablakkellékek és események Két példa és némi magyarázat Grafikus környezet és OOP Szómagyarázat (OOP), Néhány grafikus komponens bemutatása mint objektum (jellemzői, operációi) Az újszerű programozási stílusról Felülettervezés, esemény-kiválasztás, eseménykezelők megvalósítása Programfelépítés Az alkalmazások fejlesztéséhez szükséges információk és fájlok kapcsolata GUI A fejlesztői környezet ablakai, (minimális) funkciói Praktika A kezdőlépések, pontokba szedve; A grafikus paletta kezdetben szükséges komponenseinek rövid áttekintése; Pozitív és negatív praktikák (a Lazarus β-ságai) 9
4. MANKÓ A RUTIN MEGSZERZÉSÉHEZ A tárgyhoz kapcsolódó gyakorlatokon igyekeztünk olyan feladatokat kitűzni, amelyek lépésenként bővíti a Lazarus-szal kapcsolatos tárgyi ismereteiket. 5 Ezek a következők voltak: o egy skalár-inputú és egyszerű algoritmusú alkalmazás (form, label, edit, button ); pl. másodfokú egyenlet gyökei Első Lazarus alkalmazás A cél az volt, hogy általa (1) a gyakorlatban is megismerkedjenek a 4GL környezettel, (2) alapvető programozási felismerésekhez jussanak. Felismerendő egyrészt például az I/O komponensek string-alapúsága, ennek következtében elkerülhetetlen a típuskonverzió; másrészt a funkcionalitás elvének betartásával készült program könnyedén ültethető át, ui. elegendő az I/O újraalkotása: Input StrToTípus konverzió belső I-változók feldolgozó rutin belső O-változók TípusToStr konverzió Output. o egy sorozat-inputú (memo, stringgrid) egyszerű algoritmusú alkalmazás; pl. egy számsorozat páros elemeinek kiválogatása Második Lazarus alkalmazás 5 Lásd: http://izzo.inf.elte.hu/~szlavi/prm3felev/prm04_3felev.htm 10
4. Mankó a rutin megszerzéséhez o egy tipikus, menüvezérelt, egyszerű logikájú, textfájlt használó alkalmazás; Harmadik Lazarus alkalmazás Kézenfekvő lehetőség a memo, ui. ekkor sokszor olcsón megúszható a paraméterbeolvasás, ill. -kiírás (LoadFromFile, SaveToFile memo-műveletek miatt). Bár meg kell jegyezzem, a hallgatóink az előző félévben már a fájltípusokkal megismerkedtek, így a fájlkezelés sem okozhat különösebb gondot. (Tudnivaló, hogy a Delphi fájlkezelése igen közel áll a megszokott Pascaléhoz.) o egy fájlból olvasott tájékoztatóval rendelkező alkalmazás; pl. valamely korábbi alkalmazás kibővítése egy külön ablakban megjelenő tájékoztatóval Ezt követő gyakorlatok már a félév fő témájához kapcsolódtak, nevezetesen a szövegfeldolgozáshoz és az (szekvenciális) adatfeldolgozáshoz. E gyakorlatokon már kisebb hangsúlyt kap az alkalmazás felhasználói felülete. Elsősorban a témánk középpontjába helyezett típusokat megvalósító unitokra kellett összpontosítani. A témához tartozó alkalmazások kimondott célja a unitok megmozgatása, kipróbálása volt. Így időnként azt is megtettük, hogy a GUI-t magunk terveztük meg, s mintegy keretalkalmazásként vittük a gyakorlatra. Az elkövetkező gyakorlatok feladataiban elegendő egy (vagy több) unitba elkülönített rutinok megvalósítása. Alig van vagy egyáltalán nincs szükség az ablakok kezelését végző form unitjához nyúlni. Mondanivalónk bemutatásául álljon itt az alkalmazott unitok egy-egy jellemző részlete. 11
4. Mankó a rutin megszerzéséhez unit FoAblak; {$mode objfpc}{$h+} interface uses Classes, Buttons, Kar, Szoveg; type { TfmFoAblak } TfmFoAblak = class(tform) btvege: TButton; edkar1, edkar2, edkod1, edkod2, edszov1, edszov2, edujkod1, edujkod2: TEdit; lbcim, lbrendezes1, lbrendezes2, lbkar1, lbkar2, lbkisebbszov, lbkisebb1, lbkisebb2, lbkod1, lbkod2, lbujkod1, lbujkod2, lbszov1, lbszov2:tlabel; procedure btvegeclick (Sender: TObject); procedure edkar1editingdone (Sender: TObject); procedure edkar2editingdone (Sender: TObject); procedure edkod1editingdone (Sender: TObject); procedure edkod2editingdone (Sender: TObject); procedure edszov1editingdone (Sender: TObject); procedure edujkod1editingdone (Sender: TObject); procedure edujkod2editingdone (Sender: TObject); private { private declarations } public { public declarations } end; var fmfoablak: TfmFoAblak; implementation { TfmFoAblak } A karakter- és szövegtípus próba-alkalmazás formjához tartozó unit (részlet) unit Kar; {$mode objfpc}{$h+} interface uses Classes, SysUtils; type TKar=record fo:char; al:char end; Function CharToKar (const c:char):tkar; Function TKarToChar (const c:tkar):char; Function Sorszam (const c:tkar):longint; Function IntToKar (const k:longint):tkar; Function Kisebb (const c1,c2:tkar):boolean; Function Azonos (const c1,c2:tkar):boolean; const SorVegJel:TKar=(fo:#13; al:' '); LapVegJel:TKar=(fo:#12; al:' '); DokumentumVegJel:TKar=(fo:#26; al:' '); implementation unit Szoveg; {$mode objfpc}{$h+} interface uses Classes, SysUtils, Kar; const MaxHossz = 4095; type TSzoveg = record hossz:integer; jelek:array [1..MaxHossz] of TKar; end; const Ures:TSzoveg=(hossz:0{jelek:bármi}); function Vegere (const s:tszoveg; const k:tkar):tszoveg; function Elejere (const s:tszoveg; const k:tkar):tszoveg; function Hossz (const s:tszoveg):integer; function Kisebb (const s1,s2:tszoveg):boolean; function TolIg (const s:tszoveg; const tol,ig:integer):tszoveg; function Edik (const s:tszoveg; const i:integer):tkar; implementation A karakter- és szövegtípus próba-alkalmazás implementációs unitjai (részlet) 12
4. Mankó a rutin megszerzéséhez Negyedik Lazarus alkalmazás, amelyben a Karakter és Szöveg típus kipróbálása volt a cél E téma alkalmas arra is, hogy a TP egyik kényelmetlenségétől megmenekedjünk: a függvények értéktípusa Lazarus-ban már összetett típus is lehet. Most ez kapóra jön, hiszen a saját karakter típus bevezetésekor ábrázolást cseréltünk: minden jelhez kétbájtos kódot rendeltünk (kvázi UNICODE), amelyet kifejezőség növelése céljából rekorddal ábrázoltunk. Ekkor bizonyos függvényként megfogalmazható Karakter-értékű operáció függvény is maradhatott. Végezetül a további gyakorlatokra csak néhány képes emlékeztetővel utalunk: Ötödik Lazarus alkalmazás, a szövegigazításokról szól 13
4. Mankó a rutin megszerzéséhez Hatodik Lazarus alkalmazás, amellyel két hatékony szövegkereső algoritmust lehet összevetni sillabusz Hetedik Lazarus alkalmazás, egy makroprocesszor (2 fázisa) Gyakorlatról gyakorlatra bővültek a hallgatók Lazarus-os ismeretei és tapasztalatai. Ezen bővülő (kollektív) ismeretek tömör lenyomataként használható a hálóról letölthető: Első lépések dokumentum. [SzP3] Ebben pontokba szedve találhatók azok a minimális tudnivalók, amelyek a Lazarus-szal kapcsolatban okvetlenül ismerendők. Kezdve az új alkalmazásnyitás visszatérő tevékenységeitől, az újabb form vagy unit hozzávételén át, az egyes, felbukkant 14
4. Mankó a rutin megszerzéséhez komponensek legjellemzőbb tulajdonságainak beállításáig., és egyes Free Pascal-os újdonságokig. Itt szóba kerülnek (persze csak igen sűrű pontokba szedve, sillabusz-szerűen): o a legelemibb hogyan kezdjek hozzá? típusú kérdések, o mik a leggyakrabban használt komponensek, mely a komponenspalettán találhatók, és legfontosabb jellemzőik: StringGrid, Menu, OpenDialog, SaveAsDialog, Memo, PageControl, o módszertanhoz kapcsolódó, de az új nyelv eddigiektől eltérő megvalósítási lehetőségei, például: a hagyományos főprogram helyettesítése menüvezérlésű alkalmazással, az absztrakt felsorolási típus I/O-ja (ListBox felhasználásával), a sorozatok I/O-ja (StringGrid felhasználásával), fájlkezelés GUI-s módja (OpenDialog-ra, SavaAsDialog-ra vezetve), a tájékoztatókészítés legegyszerűbb módja (TextFile, második Formot használva), o nyelvi újdonságok (pl. a függvény értéktípusának általánosabb volta, konverziós függvények stb.) o és a problematikus szituációk, javasolt elkerülési módjuk 15
vizualitás β-ságok összefoglalás 5. TAPASZTALATOK Mindezek után pár mondat a megvalósulásról. Kedvező volt a vizualitás fogadtatása. Olyan hallgatók is, akik a múlt félévben egy kötetlen beszélgetésen őszintén bevallották, hogy a szak választásakor nem gondolták: ennyire hangsúlyos szerepet fog kapni a programozni tudás és egyébként a hátuk közepére sem hiányzik az a programozósdi nos ilyenek is örömmel gyártják a sikerélményeket gazdagabban nyújtó Lazarus alkalmazásokat. Megjegyzem, e hallgatók sikerélménynek tekintik már azt is, ha a program kellő esztétikával csinálja a semmit márpedig ilyen programot gyártani valóban nem kunszt. Hajlamos egy-egy fordítás közben a memo kezdőtartalmat elfelejteni; egy korábbi alkalmazás folytatólagos fejlesztésekor a form mérete visszaáll az opcionális méretére; a keretprogram bizonyos laborkörülmények (?) között elveszti a formra tett komponenseit Rosszul csinálja a string debug-ot (a karakterek sorszáma eggyel elcsúszik) Pozitív fogadtatás: hallgatói visszajelzések, kollégák motiváltsága megnyugtató pszichológiai érv lehet a Lazarus mellett. Haladó(bb) nyelvi közeget jelent az eddigieknél. Kimondható, hogy az OOP-gondolkodásmód módszertani szempontból, a 4GL-osztálybesorolás a praktika oldaláról egyértelműen előnyössé teszi. Gyermekbetegségei vannak és komolyan bosszantóak, de remélhetőleg hamarosan kinő belőle. 16
HIVATKOZOTT IRODALOM [SzP1] Szlávi Péter: Modul mint a típusmegvalósítás kerete, előadásjegyzet, ELTE IK, http://izzo.inf.elte.hu/~szlavi/prm2felev/pdf/prmea2_2.pdf [SzP2] Szlávi Péter: Programozás Vizuális/Grafikus Fejlesztői Környezetben, előadásjegyzet, ELTE IK, http://izzo.inf.elte.hu/~szlavi/prm3felev/pdf/4glkornyezet.pdf [SzP3] Szlávi Péter: Első lépések, Lazarus segédanyag, http://izzo.inf.elte.hu/~szlavi/prm3felev/pdf/elsolepesek.pdf [V] Varga László: Programok analízise és szintézise, Akadémiai Kiadó, 1981 [VCsJI] Vég Csaba dr. Juhász István: Objektum-orientált világ, IQSoft, 1998 17