Skip to: site menu | section menu | main content
Az objektum-orientált szemlélet az 1990-es években kezdett népszerűvé válni. Nemcsak a programozásban, hanem például az adatmodellezésben is megjelent. Megkülönböztetjük a tisztán OOP (objektum-orientált programozás) nyelveket azoktól, melyek csak kiegészülnek az OOP elemeivel.
A Delphi nyelv - melyről a fejezetben szó lesz - objektumorientált lehetőségeket magában rejtő, grafikus (vizuális) felülettel rendelkező Pascal fordítóprogram.
A programnyelv azoknak a szintaktikai (formai), illetve szemantikai (logikai) szabályoknak az összessége, melyek segítségével a számítógép által végrehajtani kívánt feladatot, továbbá a megoldáshoz szükséges adatstruktúrákat utasítások formájában leírhatjuk.
Egy programnyelv szemantikája azokat a szabályokat, módszereket foglalja magában, amelyek alapján a program végrehajtása során bizonyos bemeneti adatokból meghatározott kimeneti adatok lesznek.
A nyelvek szintaxisa azokat a formákat, szimbólumokat határozza meg, amelyekkel egy feladat végrehajtása leírható, melyeket a fordító értelmezni tud.
Minden géphez speciális utasításrendszert készítettek, az egyik gépre írt programot nem lehetett egy másik gép működtetésére felhasználni. Pl.: gépi kód, assembly
Struktúrájuk már a megoldandó problémához igazodik. Szimbolikájuk az emberi beszédre és a matematikai kifejezésformákra alapoz. Pl.:
FORTRAN: műszaki számítások elvégzésére alkalmas, nehézkesen kezeli a szövegeket. Sok beépített függvényt tartalmaz. (1957)
ALGOL: műszaki-tudományos, matematikai számítások elvégzésére hozták létre. Kis utasításkészlettel rendelkezik. Szabad formátumú nyelv, tehát az utasításokat tetszőleges helyre írhatjuk, csak pontosvesszővel kell elválasztani őket. (1955-68)
COBOL: könnyen programozható, az alfanumerikus karaktereket egyszerűbben kezeli, mint a FORTRAN. Többféle számítógépes környezetben eredményesen használható. (1963-74)
BASIC: könnyen elsajátítható, "tanulónyelv". (1963)
RPG: problémaorientált programnyelv. A bemeneti adatok feldolgozása után a bonyolult kimeneti listákat is könnyen el lehet készíteni segítségével.
Ezt a korszakot az erősen procedurális, az adatstruktúra jelentőségét hangsúlyozó szemlélet jellemzi. Pl.:
APL: matematikai problémák megoldására irányuló, többcélú interaktív, valósidejű nyelv. A görög betűket is egyszerűen kezeli, alkalmazásához speciális klaviatúrára van szükség. (1962)
PASCAL: az első átgondolt, strukturált szemléletű programnyelv. Moduláris felépítésű, kisszámú utasításkészlettel rendelkezik, szerkezete hierarchikus. Ismerete kiváló alapot nyújt további programnyelvek egyszerű elsajátításához. (1982)
MODULA-2: moduláris felépítésű, alkalmas kisméretű, valósidejű problémák megoldására.
ADA: az USA Védelmi Minisztériumának megrendelésére készült, s a NATO hivatalos programozási nyelve lett. Jól áttekinthető programok írhatók vele.
C: elsődlegesen a UNIX operációs rendszer fejlesztéséhez tervezeték. Egyesíti a hardverközeli assemblyt és a strukturált Pascalt, egyaránt alkalmas rendszerprogramok, illetve felhasználói programok írására. Viszonylag alacsony szintű nyelv. Nem biztosít egységes, jól formázható ki- és beviteli utasításokat, ezeket függvényhívásokkal kell megoldani. (1972)
Objektumorientált programnyelvek: SmallTalk, Eiffel, CLOS
Specializált programnyelvek: LISP (a mesterséges intelligencia problémák megvalósítását szolgálja); PROLOG (logikai nyelv)
Többféle típusú nyelv jellemzőit egyesítik. A felhasználó meghatározhatja a rendszerben végbemenő folyamatokat, és a működés körülményeit. Fejlesztőkörnyezete interaktív, integrált. Pl.: AS, CSP, QMF (IBM); Drive, ES (Siemens), Delphi (Borland Inc.); Oracle; Corba, Java...
Mi a programnyelv?
Mit értünk a programnyelv szintaktikáján?
Mit értünk a programnyelv szintaxisán?
Jellemezze a programnyelvek generációit!
Az egyes generációkba mely nyelvek tartoznak?
Néhány programnyelvnél nem egyértelmű, hogy melyik generációba tartozik, mivel bizonyos paraméterek alapján már előbbre sorolhatók, de hiányosságaik miatt inkább egy korábbi generációhoz tartoznának. Legvitatottabb az objektumorientált nyelvek besorolása.
Azokat a programnyelveket, melyek az adattípusokat a hozzájuk tartozó algoritmusokkal együtt egységes egészként kezelik, objektumorientált programnyelveknek nevezzük. Az OOP (objektumorientált programozás) az 1990-es évek új fejlesztési irányzata volt. Minden objektumot az azonosítója, tartalma és állapota határoz meg.
Az 1970-es évek elején fejlesztették ki, hogy egy hatékony, felhasználóbarát környezetet biztosítsanak a fejlesztők részére. A SmallTalk egy objektumokból (számok, szövegek, grafikák, editorok...) álló felhasználói felület, melynek elemeit, és tulajdonságait a fejlesztő tetszés szerint változtathatja. Ez a nyelv volt az első, amely az interaktív használatához grafikus felületet biztosított. Egyetlen elem van, az objektum, amely osztályokhoz tartozik. Az osztályok bővíthetők.
1988-ban fejlesztette ki B. Meyer. A hordozhatóság érdekében az Eiffel-programokat C nyelvre lehet fordítani. Nagyon jó OOP-nyelvnek tartották technikai képességei miatt. Hatékony memóriagazdálkodást végez.
OOP
Definiálja az OOP nyelveket!
Mi határozza meg az objektumot?
Mi jellemző a SmallTalk nyelvre?
Mi jellemző az Eiffel nyelvre?
A Delphi vizuális fejlesztő környezettel kibővített Pascal fordítóprogram. Egy Pascal nyelvű programot előbb le kell fordítani ahhoz, hogy azt a számítógép végre tudja hajtani. Ezt a fordítást a Delphibe integrált fordítóprogram (compiler) végzi el.
A komponensek előre készített "építőkockák", melyeket be lehet építeni egy projektbe. Vannak beépített komponensek, amelyeket a Delphi fejlesztői környezettel együtt kapunk meg. De komponenseket akár mi magunk is készíthetünk. Minden egyes komponenstípust valamilyen adott feladat elvégzésére terveztek meg, s egyféle típusból több is felvehető egy projektbe. Ilyen komponenstípus például az ún. Label (=címke, felirat), amely szöveg megjelenítésére alkalmas komponens. Ennek a komponensnek sokféle tulajdonságát tetszőlegesen beállíthatjuk (színe, nagysága, betűtípusa...), továbbá különböző eseményekre is reagálhat (pl. ha egérrel rákattintunk). Tehát egy-egy komponensegyedet, objektumot tulajdonságai, és eseményei jellemzik.
Egységbezárás. Az adatokat és a hozzájuk tartozó alprogramokat (metódusokat) egy egységként kezeljük, ez az egység alkotja az objektumot. Az objektum adatait csak saját metódusaival kezelhetjük. Az azonos attribútumokkal és metódusokkal rendelkező objektumok együttese az objektumosztály. A programozás során először az osztályokat definiáljuk, majd az osztályokból hozzuk létre az objektumpéldányokat.
Öröklés. Egy definiált osztályból származtathatunk egy másik osztályt úgy, hogy a leszármazott osztályban megtalálható az ősosztály összes attribútuma és metódusa. Az alosztályban módosíthatjuk az örökölt metódusokat, újabbakat tehetünk melléjük és az örökölt adatszerkezetet is bővíthetjük.
Többrétűség. Az alosztály metódusait megváltoztathatjuk, de a nevük ugyanaz marad: ugyanannak a metódusnak más-más osztályban más a viselkedése. Ha nem akarunk egy metódust megváltoztatni, akkor nem kell az alosztály deklarációjában felsorolni.
Delphi, compiler, komponens, egységbezárás, öröklés, többrétűség, metódus
Milyen programnyelv a Delphi?
Mire használjuk a komponenseket a programozás során?
Melyek az OOP legfontosabb alapelvei?
Mit jelent a metódus?
Mit jelent az osztály?
Melyik osztály bővebb, az alosztály vagy a szülőosztály?
Az osztályok hierarchiáját gráffal szemléltethetjük, ahol a kapcsolat iránya mindig az alosztálytól a szülőosztály felé mutat. Ha felfelé mozgunk a gráfban, általánosításról, ha lefelé, specializációról van szó.
A VCL (Visual Components Library) tárolja az összes komponens elődjét. A VCL összes objektuma egy hierarchia valamely szintjén található. Valamennyi osztály közös őse a TObject nevű osztály, ennek minden tulajdonságát és metódusát az összes komponens örökli. A hierarchia következő szintjén a TComponent osztály áll. Ez valamennyi komponens közös elődje. A komponenseknek többféle típusa létezik, alapvetően vizuális és nem vizuális. A vizuális objektumok futásidőben megjelennek, míg a nem vizuális komponensek nem láthatók. A TWinControl és a TGraphicControl osztály olyan komponenseket támogat, amelyek párbeszédablak-elemeket jelenítenek meg.
A vezérlők, más néven vizuális komponensek a TControl osztály leszármazottai. Ebbe a csoportba a képernyőn megjeleníthető objektumok tartoznak. Futásidőben a tervezéskor beállított helyzetben maradnak. Két típusukat különböztetjük meg:
ablak alapú vezérlők: rendszerablakra épülnek, tehát rendelkeznek ablakleíróval, beviteli fókuszba kerülhetnek, esetleg más vezérlőket is tartalmazhatnak;
grafikus vezérlők: nem ablak alapú vizuális komponensek, nem kerülhetnek fókuszba, nem tartalmazhatnak más vezérlőket, ilyen például a Címke komponens.
A TComponent azon osztályai, amelyek nem leszármazottai a TControl osztálynak. Tervezés közben kis ikonként vannak jelen. Futásidőben csak alkalmanként, például párbeszédablak formájában, vagy egyáltalán nem jelenítődnek meg. Tehát a nem vizuális komponensek futás közben nem láthatók, de tartozhat hozzájuk megjelenítendő felület.
Name: minden komponensnek kötelező nevet adni, melynek egyértelműnek kell lennie. Ezzel a névvel hivatkozhatunk később az objektumra, ezért érvényes Pascal azonosító lehet csak. Ha a komponens neve és felirata azonos, akkor a név módosítása maga után vonja a felirat megváltozását is. Az eseménykezelő eljárások nevei is a Name tulajdonságtól függnek.
Left, Top, Width, Height: a vezérlők pozícióját a Left és Top, méretüket a Width és Height tulajdonságok határozzák meg. A rendszer minden komponensnek tárolja a helyzetét, ezek az adatok a DFM fájlban találhatók meg.
Enabled: ha a komponens Enabled (=Engedélyezett) tulajdonsága igaz értékű, akkor a komponens aktív, amennyiben hamis, akkor a komponens nem aktív, s ez általában a komponens szürkítésével valósul meg.
Visible: a komponens láthatósági tulajdonsága.
Color, Font: színek, betűtípusok. A színeket nevükkel (pl. clBlue) vagy egy négybájtos hexadecimális számmal (pl. $00FF0000) adhatjuk meg.
VCL, vizuális komponens, nem vizuális komponens, ablak alapú vezérlő, grafikus vezérlő
Melyik a Delphi ősosztálya?
Milyen típusú komponensek léteznek?
Mely vezérlők származnak a TWinControl, illetve melyek a TGraphicControl osztályból?
Milyen általános tulajdonságokkal rendelkeznek a VCL-komponensek?
Mi a különbség az objektum neve és felirata között?
Hogyan tudjuk elrejteni a komponenst?
Hányféle színt adhatunk meg a hexadecimális számok segítségével?
A Delphi számos beépített komponenssel rendelkezik, ezeket a Komponenspalettáról választhatjuk ki.
Edit: egy sornyi szöveg beírását teszi lehetővé. Amikor a szövegre hivatkozunk, az Edit komponens Text tulajdonságát használjuk.
MaskEdit: a szerkesztőmezőbe való bevitel finomhangolására használjuk. EditMask nevű tulajdonságával meghatározhatjuk például, hogy a bevitt karakterlánc csak kisbetű, nagybetű vagy szám lehet, de más feltételeket is szabhatunk.
Memo, RichEdit: mindkét vezérlő több sornyi szöveg bevitelére alkalmas. A RichEditben többféle betűtípust, bekezdés-igazítást is használhatunk.
CheckBox: jelölőnégyzet, segítségével úgy állíthatunk be lehetőségeket, hogy azok függetlenek a többi jelölőnégyzet állapotától.
RadioButton: választógomb, amely egymást kizáró beállításokat tesz lehetővé.
GroupBox: a választógombok csoportjainak működését, elhelyezkedését hangolhatjuk össze segítségével.
RadioGroup: olyan csoportmező, melyben választógombok másolatai helyezkednek el. Képes egy vagy több oszlopba rendezni választógombjait.
ListBox: engedélyezhetjük egyszerre több elem kiválasztását. Fontos tulajdonsága az Items (elem), és az Itemindex (kiválasztott elem sorszáma). A lista első eleme a nulladik.
ComboBox: kombinált lista, a szerkesztőmező és a lenyíló lista tulajdonságait egyesíti. Használhatjuk a Text tulajdonságot a szöveg elérésére.
CheckListBox: minden elem előtt egy jelölőnégyzetet találhatunk.
Button: szerepe főleg a kattintással indított tevékenység elvégzésére irányul. Feliratát a Caption tulajdonságban állíthatjuk.
BitBtn: nemcsak feliratot, hanem különböző rajzokat is tartalmazhatnak. A Kind tulajdonsággal beállítható a rendszer által felkínált típus. A Glyph jellemző segítségével egy bittérképes kép adható meg.
SpeedButton: az eszköztárakon megjelenő gombok komponense. Többnyire grafikákat tartalmaznak, lehetnek "beragadt", vagy "felengedett" állapotban.
MainMenu: főmenü, amely az űrlapok tetején látható vízszintes menüsor.
PopupMenu: gyorsmenü, amely az egér jobb gombjának segítségével előhívható függőleges menü
Edit, MaskEdit, Memo, RichEdit, CheckBox, RadioButton, GrouBox, RadioGroup, ListBox, ComboBox, CheckListBox, Button, BitBtn, SpeedButton, MainMenu, PopupMenu
Milyen alapvető csoportokra oszthatjuk a komponenseket?
Melyik komponenst választjuk, ha több soros szöveget szeretnénk kezelni?
Melyik komponenssel hangolhatjuk össze a választógombok működését?
Melyik az a komponens, amely egymást kizáró választásokat tesz lehetővé?
Melyek azok a gombfajták, amelyek képeket is tartalmazhatnak?
Mely komponensekkel hozhatunk létre menüpontokat?
Milyen komponensek találhatók még a komponenspalettán?
A rendszer olyan eleme, mely kerettel, címsorral és általában menüvel ellátott, mozgatható, bezárható, nagyítható. Vannak főablakok és párbeszédablakok. Az ablak egy memóriaterület is egyben, amely a képernyő egy látható eleméhez kapcsolódik, és tartozik hozzá futtatható kód. A rendszer nyilvántartja az ablakokat és viselkedésükkel kölcsönhatásban áll. Minden ablakhoz tartozik egy függvény, az ún. ablakfüggvény, mely feldolgozza az ablak számára lényeges üzeneteket.
A form valójában ablak. Viselkedését főleg a hozzá tartozó kód határozza meg, de megjelenését több tulajdonság is befolyásolja. Megadhatjuk például a form és keretének stílusát.
átlapolt ablakok: ezek a klasszikus ablakok
előugró ablakok: párbeszédablakok, üzenetablakok
gyermekablakok: olyan ablakok, melyek nem hagyhatják el a szülőablak területét. A szülőablak egyben a tulajdonos is. A gyermekablak szülője belső területének koordinátáit használja.
A Delphiben minden form átlapolt ablakként működik, és a form a tulajdonosa a rajta elhelyezett összes ablak alapú komponensnek (a vezérlőknek).
A FromStyle lehetséges értékei:
fsNormal: a form normál SDI (egyablakos alkalmazás) ablak vagy párbeszédablak
fsMDIChild: a form MDI gyermekablak
fsMDIForm: a form MDI szülőablakként jön létre, tehát az MDI alkalmazás keretablaka lesz
fsStayOnTop: az összes többi ablakot eltakaró ablak
Az ablakok keretének stílusa hatással van az ablak viselkedésére is. Ha egy főablak vastag kerettel rendelkezik, akkor szabadon méretezhető.
bsDialog: vastag keretű, nem méretezhető párbeszédablak
bsSingle: olyan főablakot hozhatunk létre ezzel a stílussal, melynek átméretezése nem lehetséges
fsNone: keret, címsor nélküli form
MDI: (Multiple Document Interface) amennyiben az alkalmazás felügyelete alatt több ablakban jelenítjük meg az adatokat, és azokkal párhuzamosan dolgozhatunk, MDI alkalmazásról beszélünk. Részei a főablak (MDIFrame), melynek van címsora, rendszermenüje, főmenüje, állapotsora; gyerekablakok (MDIChild), melyekben az adatokat jelenítjük meg, s van címsoruk, rendszermenüjük, esetleg saját menüjük is. Mindig csak egy gyerekablak lehet aktív. A gyerekablakok a keretablak munkaterületén belül helyezkednek el. A keretablak bezárása a gyerekablakok bezárását is jelenti.
SDI: (Single Document Interface) van egy főablaka, de tartalmazhat még más ablakokat is, de köztük nincs egyértelmű gyerek-szülő kapcsolat.
Modális: ez a párbeszédablakok tipikus megjelenési formája. Az ablak megjelenítésétől a bezárásáig uralja az alkalmazást, a felhasználó nem használhatja a többi ablakot. Ilyen például a fájl megnyitási vagy mentési párbeszédablak.
Nem modális: az így megjelenített formról átléphetünk bármely másik ablakba.
ablak, ablakfüggvény, form, átlapolt ablak, előugró ablak, gyermekablak, MDI alkalmazás, SDI alkalmazás, modális ablak, nem modális ablak
A rendszer mely elemét nevezzük ablaknak?
Milyen fajtái vannak az ablakoknak?
Mi a szerepe az ablakfüggvénynek?
Milyen ablakstílusokat különböztetünk meg?
Milyen koordinátákat használ a gyerekablak?
Milyen stílusú ablak a form Delphiben?
Milyen stílusúra állíthatjuk a formokat?
Milyen keretstílusokat alkalmazhatunk?
Miben különbözik az MDI és az SDI alkalmazás?
A Delphi környezet milyen alkalmazás, SDI vagy MDI?
Mi a különbség a modális és a nem modális ablakok között?
Caption: címsorának szövege
BorderIcons [biSystemMenu, biMinimize, biMaximize, biHelp]: itt állíthatjuk be, hogy a formnak legyen-e rendszermenüje, minimalizáló, maximalizáló és súgó gombja?
BorderStyle: a keret stílusának beállítása
ClientWidth, ClientHeight: a ténylegesen használható terület méretei
Position: a form futáskori megjelenésének pozícióját szabályozza
WindowState [wsNormal, wsMinimized, wsMaximized]: a form futáskori megjelenítésének módja, amekkorára terveztük vagy minimalizálva vagy maximalizálva
ModalResult [mrOK, mrCancel...]: a form bezárása után ezzel a jellemzővel kérdezhetjük le a bezárás okát, tehát hogy az OK, Cancel vagy egyéb gomb miatt záródott-e be
FromStyle: a form stílusának beállítása
Show: eljárás, mely megjeleníti a formot
ShowModal: függvény, mely modálisan jeleníti meg a formot, majd vár, míg ezt bezárjuk. Visszatérési értéke a bezárás okát tükrözi.
Print: kinyomtatja a formot
Close: bezárja a formot. Ha egy alkalmazás főablakát zártuk be, akkor az alkalmazás is befejeződik.
OnCreate: inicializáláskor
OnShow: megjelenítéskor
OnActivate: aktivizáláskor
OnPaint: újrarajzoláskor
OnDeactivate: a form háttérbe kerülésekor
OnCloseQuery: a form bezárása előtt következik be, itt még megállítható a bezárás
OnClose: a form bezárásakor következik be
OnDestroy: a form megszüntetésekor
Sorolja fel a TForm fontosabb jellemzőit!
A felsoroltakon kívül a formnak mely tulajdonságait állíthatjuk még be?
Sorolja fel a TForm fontosabb metódusait!
Melyik eseményt írjuk meg, ha a form bezárása előtt még meg szeretnénk kérdezni a felhasználót, biztos-e a kilépésben?
Melyik eseményre írjuk meg egy ábra kirajzolásának kódját, ha azt szeretnénk, hogy az ábra átméretezés után se tűnjön el?
Minden Delphi alkalmazásban megtalálhatók az alábbi egységek:
projektállomány (.DPR): a Delphi alkalmazások főprogramja
formtervek (.DFM), és a form viselkedését leíró egységek (.PAS): minden formtervet külön állományban helyez el a Delphi. Fordításkor a PAS állományokból DCU állományok képződnek, programszerkesztéskor pedig a DFM és a DCU párok az EXE részeivé válnak.
rutinkönyvtárak: alkalmazásuk opcionális, a formok viselkedését leíró PAS állományokon túl olyan egységek (PAS fájlok) lehetnek, melyeknek rutin- és adatkönyvtár szerepük van. Lehetnek saját készítésű DLL-ek, melyek rutinjait felhasználhatjuk az alkalmazásban. Ezek nem szerkesztődnek hozzá a programhoz, a rutinok hívása futás közben, dinamikusan történik.
külső erőforrások (.ICO, .BMP, .HLP...): az alkalmazott erőforrásokat egy közös RES állományban is elhelyezhetjük, és az alkalmazás szerkesztésekor a RES tartalmát beépíthetjük az EXE állományba.
Mindezekből az alkotóelemekből a Delphi önálló futtatható állományt generál.
Új alkalmazás készítésekor a keretrendszer létrehoz egy projektállományt, egy űrlapot és az ehhez tartozó egységet. A projektállomány 3 fő része:
programfej: mint Pascalban
hivatkozási rész: beépített és saját egységek, valamint a hozzájuk tartozó formfájlok listáját
végrehajtó rész: az alkalmazást inicializálja, futtatja, majd befejezi
Ezekben a fájlokban a rendszer a form külalaki tulajdonságait tárolja bináris formátumban. A formra helyezett elemek vizuális tulajdonságai azonnal bekerülnek a formleíró állományba.
Részei:
egységfej,
illesztő rész (interfész),
kifejtő rész,
végrehajtó rész.
A rendszer a háttérben egy új osztályt hoz létre a form számára.
projektállomány, rutinkönyvtár, erőforrás
Milyen egységekből épül fel egy Delphi alkalmazás?
Milyen kiterjesztésű fájlokból áll össze az EXE állomány?
Mire használható a saját készítésű DLL?
Mi a különbség a DFM és a PAS fájlok között?
Hogyan jön létre egy új alkalmazás?
Milyen részekből áll a projektállomány?
Milyen részekből áll a PAS fájl, mely a form viselkedését írja le?