Turbo Delphi használata az oktatásban Törley Gábor (
[email protected])
Bevezetés A „Turbo” márkanév ismerősen cseng a tapasztalt programozó fülében. Annak idején, ezen a néven adta ki a Borland a fejlesztőkörnyezeteit, akkor még, természetesen, pénzért. Az idők változtak azóta, megjelentek a negyedik generációs nyelvek és létrejött az igény – az üzleti életben és az oktatásban egyaránt – ilyen jellegű, azaz vizuális, könnyen kezelhető („windows”-os) programfejlesztő eszközökre, így jött létre – a „pascalos” vonal mentén a Delphi termékcsalád. 2005-ben újjáéledt a Turbo márkanév is, és több 4GL fejlesztőkörnyezet jelent meg, ezúttal ingyen; a Delphi égisze alatt az Explorer és a .NET1. Írásomban az Explorer kiadást fogom tárgyalni. A Turbo termékcsalád közös tulajdonsága, hogy lecsökkenti a fejlesztőkörnyezetek tudását a piacon árult környezetekhez képest és a számítógépen egyszerre csak egy Turbo termék lehet feltelepítve. Ingyenessége mindenképp előny és tudása, illetve szolgáltatásai elegendőek az alapvető programozási ismeretek megtanítására, megtanulására.
Miért pont a Delphi? Ez a fejlesztői környezet a Pascal nyelvre épül, amelyet pontosan azzal a céllal hoztak létre, hogy programozást tanítsanak vele. Az oktatásban általában használt nyelvek/környezetek közül a leginkább alkalmas a kezdeti lépések elsajátítására. Oktatási szempontból előnyős, ha a választott nyelv könnyen megjegyezhető alapszavakból áll és egyszerű programszerkezetet használ, különösen, ha a kezdeti lépésekről van szó. Fontos megvizsgálni, hogy milyen könnyű megírni az első értelmes programot, tehát az első olyan programot, amelynek gyakorlati haszna is van. Egy olyan nyelvre van szükség, amely közel áll az algoritmikus nyelvünkhöz, a tanuló megtanulja és megérti, a programozás alapvető elemeinek helyét, szerepét és használatát. A Pascal erős (és szigorú) típusossága, átlátható és memorizálható programszerkezete „rászoktatja” a tanulót, hogy ne felejtsen el változót deklarálni, típust definiálni, hogy programírás közben mindig gondolja végig, miket és hogyan akar használni az éppen aktuális eljárás megvalósításakor. A Pascal jó alap a továbblépéshez az objektum orientált programozás és/vagy egy 4GL fejlesztőrendszer felé. Utóbbi, vizualitása miatt, segítheti az objektum orientált paradigma megértését. A Delphi jó folytatása lehet a Pascalnak, mert a környezet ezt a nyelvet használja fel, új lehetőségekkel kiegészítve. Gyakorlatilag a Delphi nyelvének struktúrája, szintaktikája logikája ugyanaz. Használható-e a Delphi környezet, mint első nyelv? Véleményem és tapasztalatom szerint, jobb, ha a tanuló már némi előképzettséggel a birtokában találkozik a Delphivel. Előnyös, ha már a tanulók előtt
1
http://www.turboexplorer.com
1
ismertek az alapvető vezérlési szerkezetek, az egyszerűbb programozási tételek. Ezek ismeretében egyszerűbb váltani vizuális környezetre. Ennek a cikknek nem célja ecsetelni a Turbo Delphi és a Turbo Pascal környezete közötti különbségeket, és elmerülni ezek oktatás-módszertani kérdéseiben. Inkább rátérek a gyakorlatra, hogyan lehet használni ezt a környezetet az oktatásban.
Vizualitás és eseményvezérlés A környezet legnagyobb előnye a DOS-os testvérével szemben a vizualitás.2 Tehát nem csak karaktereket és villogó kurzort látok, hanem komponenseket: gombokat, táblázatokat, szövegbeviteli mezőket, képeket… A leginkább szembetűnő újdonság az eseményvezérlés: szabályozni tudom, hogy mi történjen egy gomb lenyomásakor, egy billentyű leütésekor, az egérkurzor mozgatásakor. A leggyakrabban használt egér-eseményekhez itt egy példaprogram: Pont-pont vesszőcske. (Lásd 1. ábra)
1. ábra Pont-pont vesszőcske
A program úgy működik, hogy az egérrel mozgunk a programablak felületén, és amíg lenyomjuk a jobb egérgombot, addig egy piros csík kövesse a kurzor vonalát, ha pedig elengedem a gombot, a rajzolás is maradjon abba. Ez a program három egéresemény működését mutatja be: OnMouseMove (mi történjen, amikor mozog az egérkurzor), OnMouseDown (mi történjen, amikor lenyomom a jobb oldali gombot) és OnMouseUp (mi történjen, amikor felemelem az egér jobb oldali gombját). Ez a segédprogram nem csak az eseményekhez jó, hanem megtanítja a tanulót használni a Form felületét (Canvas). var Pont: TPont; Elsore, Rajzolhat: Boolean; implementation 2
A Delphinek is van „DOS-os” arca. Az {APPTYPE CONSOOLE} direktívával lehet ilyen programokat készíteni.
2
{$R *.dfm} procedure TPont.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin If Rajzolhat Then Begin Canvas.Pen.Color:=clRed; //Pirosra állítjuk a toll színét Canvas.Pixels[X,Y]:=clRed; //Ha csak ennyit tennénk ki, elég széteső képet kapnánk. (a "lassú" feldolgozás miatt) If Not Elsore Then //Ha először megy az egér a vászonra, nem kell vonalat húzni; Canvas.LineTo(X,Y); Canvas.MoveTo(X,Y); //Ez az egyik többlet. Elsore:=False; //Hiszen egyszer már lefutott az esemény End; end; procedure TPont.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Rajzolhat:=True; //Így, ha lenyomjuk az egér gombját, a OnMouseMove esemény eljárása "engedélyt kap" a rajzolásra end; procedure TPont.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Rajzolhat:=False; //Így, ha felengedjük az egér gombját, a OnMouseMove esemény eljárástól "megtagadjuk" a rajzolás "engedélyesését" Elsore:=True; //Ez is kell, hogy tényleg CSAK AKKOR razjoljunk, ha le van nyomva az egér gombja end; Begin Elsore:=True; //Ezek az inicializáló lépések. Rajzolhat:=False; end.
Az eseményvezérlés megértését a pók és a pókháló hasonlatával lehet egyszerűen bevezetni: A pók várja a rovarokat, hogy beleszálljanak hálójába. Amint egy belerepül, megtörténik az esemény, a pók lemegy, és behálózza. Ha nem lenne háló, azaz nem lenne megírva az eseményvezérlő rutin, a pók sem tudná, hogy vacsorája érkezett. A fenti feladatot lépésről lépésre érdemes bevezetni az órán. Először beszélni magukról az eseményekről, mit is jelentenek pontosan, majd megtervezni a „sorrendjüket” (ez a kód szintjén nem fog látszani, mivel minden esemény külön eljárásban van), végül megírni az esemény kódját. A lényegi rész mindenképp az egérmozgás (OnMouseMove) eseménye lesz, ekkor meg kell magyarázni, miért nem elég csak egy pontot kirakni az esemény lefutásakor (a válasz a számítógép megszakításkezelésében rejlik).
3
Vizualitás és objektumorientáltság Az objektumorientáltság a másik újdonság a vizuális fejlesztőrendszereknél. Hogyan tud ennek megértésében segíteni a környezet? Az objektumorientáltság magyarázatát hétköznapi példákon keresztül érdemes bevezetni.
2. ábra A fő form tulajdonságai
Az Object Inspectoron (lásd 2. ábra) keresztül tudom állítani az adott objektum (jelenleg a fő form) tulajdonságait, ráadásul, ennek segítségével be is tudom mutatni azokat, és hétköznapi példákkal tudok párhuzamot vonni.
A programozást támogató fontosabb eszközök Programszerkesztés közben – a többi 4GL környezethez hasonlóan – a szerkesztő segít a programozónak kiválasztani, hogy az adott komponens melyik metódusát vagy propertyjét érheti el. Így nem kell pontosan fejből tudnia sem az azonosítót, sem a paraméter(ek) típusát (lásd 3. ábra). További online segítség: az összetartozó zárójeleket azonos színnel emeli ki, mikor a kurzorral valamelyiken megállunk vagy áthaladunk. Ez a funkció a zárójelezési hibák kiküszöbölésében és felderítésében jelent támaszt.
3. ábra Intellisense
4
A Delphi a lehetséges összes hibaüzenetet kiírja. Sőt hibajelzéseket már kódolási időben is ad: a háttérben dolgozó fordító folyamatosan figyelmeztet az éppen lekövetett szintaktikus hibákra (lásd 4. ábra, bal oszlop). Fordításkor kijelöli a hibás sort és lent kiírja az üzeneteket. Ez a megoldás jól megmutatja, hogy hol történt a hiba.
4. ábra A Delphi azonosítja a hibákat még fordítás előtt
A kódolás idejében, de még a programozó által indított fordítás előtt detektált hiba sok időt takaríthat meg a fejlesztőnek. A konkrét példánk esetében kódolás közben két hibajelzés is megjelenik, amelyek segítenek a probléma érzékelésében, sőt a megoldás megtalálásában is: a pirossal aláhúzott „ShhowMessage” és „else” is felhívja a figyelmet az elírásra. A hibaüzenetek tömörek, helyesek, rávilágítanak a problémára. A súgó itt jó segítőtárs a megoldásban. Az 5. ábra egy igényes megoldást mutat a nyomkövető rendszer megvalósítására. A bal oldalon láthatóak a programozó által figyelt változók és az automatikusan megmutatottak is. A kép közepén látszik, ahogyan az egérkurzor „felfedi” az egyik komponens értékét. A nyomkövető rendszer magától értetődően működik, könnyű a kezelése.
5. ábra A Delphi nyomkövető rendszere
A hibakeresésen kívül a vizuális fejlesztőkörnyezetek nyomkövető rendszere alkalmas arra, hogy a hibakeresésen túl segítsen bemutatni és megérteni az aktuális objektum szerkezetét és belső 5
működését. Az alábbi ábrát tekintve, a bal oldalon a „Self”-re kattintva lehet megtekinteni az összes osztályszintű változót és azok jellemzőit.
6