Proghalado 1

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 6

I.

Objektumorientált
programozás
1. Az objektumorientált programozás alapjai
Objektumok és objektumosztályok
A számítógépes programok közvetve vagy közvetlenül a körülöttünk lévô világ elemeihez illesz-
kednek, gyakorlati feladatokat oldanak meg. Ilyen feladatnak tekinthetjük az adatbázis-kezelésen,
a mérnöki-tudományos számításokon túl akár egy videó lejátszását vagy játékprogramok futtatását
is. Ezért célszerû olyan programozási modellt alkalmazni, amely illeszkedik a környezô világ építô-
köveihez, leírja tulajdonságaikat és viselkedésüket. Ezt az elvet valósítja meg az objektumorientált
programozás, röviden OOP. Az OOP olyan módszert nyújt a programozók számára, amely lehetôvé
teszi a programok bonyolultságának csökkentését, a megbízhatóság és a hatékonyság növelését.
Az OOP objektumokból építi fel a programot.

Objektum: a valós világ elemeinek programozási modellje. Az objektum adatokat tárol, és


kérésre tevékenységeket végez.

Lássunk példát objektumokra! Az iskolában diákok tanulnak. Egy diák adataihoz tartozik a
neve, születési ideje, lakcíme. A diák a tanórán felel, hiányzást igazol, tornázik. A diák objektum-
modelljének – többek között – ezeket az adatokat kell tartalmaznia, ezeket a tevékenységeket vé-
geznie.
A grafikus felhasználói felület programozásakor is objektummal dolgozunk. Megadjuk például
egy parancsgomb helyzetét, méretét, feliratát. Elkészítjük eseménykezelô eljárásait. A Programozási
ismeretek tankönyv bemutatja a grafikus felhasználói felület számos objektumát.
Egy osztályba sok diák jár, a programablakban több parancsgombot helyezhetünk el. Program-
jainkban gyakran sok objektum tárol ugyanolyan adatokat, és végez ugyanolyan tevékenységeket.
Az egymáshoz hasonló objektumokat osztályokba soroljuk.

Objektumosztály: az egymáshoz hasonló objektumok általánosítása, gyûjtôfogalma. Az ob-


jektumosztály határozza meg a hozzá tartozó objektumok típusát.

Az objektum által tárolt adatokat szokás az objektum mezôinek, adattagjainak vagy tagválto-
zóinak hívni. Programjainkban az osztályszintû változók jelentik az objektumok mezôit. Az objek-
tumokat függvények vagy eljárások hívásával „kérjük meg” a tevékenységek végzésére. Ezek az
alprogramok az objektum metódusai. A metódusokat gyakran tagfüggvényeknek, illetve eljárásta-
goknak nevezzük. Az objektum tehát a hozzá tartozó mezôk és metódusok összessége. A mezôk és
metódusok együttesen alkotják az objektum tagjait. A metódusok hívása helyett azt is mondhatjuk,
hogy üzenetet küldünk az objektumnak, amely a metódus végrehajtásával válaszol az üzenetre.

9
I. Objektumorientált programozás

A szakirodalomban néha csak azokat a változókat nevezik mezôknek, illetve azokat az alprogra-
mokat hívják metódusoknak, melyek az osztályszintûnél nagyobb hatókörrel rendelkeznek (kí-
vülrôl is elérhetôk). Könyvünkben követjük a Visual Studio szóhasználatát, mely szerint mezônek
tekintjük az osztályszinten (tehát az eljárásokon/függvényeken kívül) deklarált változókat, illetve
metódusnak minden, az osztályban definiált alprogramot.
Minden egyes objektum egy-egy jól meghatá-
rozott osztályhoz tartozik. Az osztály forráskódjá-
ban definiáljuk a hozzá tartozó objektumok
mezôit és metódusait.
Az egyes objektumok a megfelelô objektum-
osztály példányai. A diák objektumosztály egy
példánya (objektuma) Kovács István vagy Nagy
Irén. A programablakban a parancsgomb (But-
ton) objektumosztály példányait helyezzük el
(Button1, Button2 stb.).
Az objektumok és objektumosztályok haszná-
lata megkönnyíti az összetett, bonyolult progra-
mok elkészítését, mert összefogja, egységbe zárja
Az objektumok az összetartozó elemeket.
az objektumosztály konkrét egyedei

Egységbezárás (encapsulation): az összetartozó adatokat és a hozzájuk kapcsolódó tevé-


kenységeket egyetlen objektumban fogjuk össze.

1. gyakorlat. Keressünk az interneten objektumorientált programozási nyelveket! Telepít-


sük egy ilyen nyelv fejlesztôrendszerét! A továbbiakban szükségünk lesz rá.

Futóverseny
A következô leckékben egy futóverseny szimulációjával mutatjuk be az objektumorientált progra-
mozás alapjait. A program kirajzolja a képernyôre a pályát, amelyen különbözô színû, sorszámok-
kal jelképezett versenyzôk futnak végig, balról jobbra. A sötét háttér miatt csak világos színeket
választunk. Futás közben a versenyzôk helyzetét egy ciklussal változtatjuk. A ciklusban minden ver-
senyzô véletlenszerû mértékben lép elôre. A verseny addig tart, amíg egy léptetés során egy vagy
több versenyzô be nem ér a célba. Ôket mind gyôztesnek tekintjük, tehát megengedjük a holtver-
senyt is. A verseny végén kiírjuk a gyôztes versenyzô(k) sorszámát. A mûködô programot a forrás-
fájlok között található Futóverseny mutatja be.

A futóverseny képernyôképe

10
1. Az objektumorientált programozás alapjai

A futóverseny objektumai és feladataik


A programban szereplô mezôket és metódusokat nagy kezdôbetûvel írjuk

Az OOP szemléletmódjának megfelelôen osszuk fel a végrehajtáshoz szükséges feladatokat kis


egységekre, azaz alakítsuk ki a megvalósításhoz szükséges objektumokat! Közben arra törekszünk,
hogy minden objektum lehetôleg önállóan végezze el a feladatát, a lehetô legkisebb mértékben
támaszkodjon más objektumokra. Nyilván szükségünk lesz versenyzôobjektumokra, amik a ver-
senyzôket jelképezik. Kialakítunk továbbá egy versenyobjektumot, amely a verseny indítását, ad-
minisztrálását végzi. Végül célszerû létrehozni egy pályaobjektumot is, amely a pálya kirajzolásáról,
adatainak (hosszának) tárolásáról gondoskodik.

A futóverseny objektumai, a mezôk és metódusok megadásával:


• Pályaobjektum: a versenypályát jelképezi.
Hossz mezô: a pálya hossza. A versenyzôk használják fel a cél elérésének ellenôrzéséhez.
Létrehoz metódus: a versenyzôk számának megfelelôen méretezi az ablakot, és kirajzolja
a képernyôre a célvonalat. Az ablak szélessége alapján meghatározza a Hossz érté-
két. A versenyzôk számát argumentumként adjuk meg.
• Versenyzôobjektum: egy versenyzô adatait és metódusait tartalmazza.
Mezôk:
Mez: a versenyzô mezének sorszáma.
Szín: a versenyzô mezének színe.
Helyzet: a versenyzô pozíciója a pályán.
Színek(): a lehetséges színeket tartalmazó tömb.
Vélszám: véletlenszám-objektum a szín választásához, illetve a helyzet változtatásához.
Metódusok:
Létrehoz: inicializálja a mezôket. A metódus argumentuma a versenyzô mezének sor-
száma. A színt véletlenszerûen választja ki.

11
I. Objektumorientált programozás

Fut: lépteti a versenyzôt a verseny során. Véletlenszerûen választott mértékben megnö-


veli a Helyzet mezô értékét. Ha a versenyzô beér a célba, akkor hozzáadja a mez sor-
számát a versenyobjektum gyôzteseket tartalmazó halmazához.
Kiír: megjeleníti a képernyôn a versenyzô helyzetét. A Fut metódus hívja.
• Versenyobjektum: elindítja és vezérli a versenyt.
Mezôk:
Pálya: pályaobjektum.
Gyôztesek: a gyôztesek mezének sorszámát tartalmazó halmaz.
VersenyzôkSzáma: a versenyzôk száma.
Versenyzôk(): a versenyzôobjektumokat tartalmazó tömb.
Metódusok:
Start: megkérdezi a felhasználótól a versenyzôk számát, majd létrehozza a versenyzôob-
jektumokat, és meghívja Létrehoz metódusukat. Létrehozza a pályaobjektumot,
amelynek meghívja a Létrehoz metódusát. A Futás metódus hívásával elindítja a ver-
senyt, a végén pedig az Eredmény metódussal kiíratja az eredményt.
Futás: magát a versenyt jelképezi. Ciklussal lépteti a versenyzôket mindaddig, amíg va-
lamelyikük be nem ér a célba (egy cikluson belül esetleg egyszerre több is).
Eredmény: a verseny végén kilistázza a gyôztes versenyzôket. Ehhez a Gyôztesek halmazt
használja fel, melybe a célba érô versenyzôk beírták mezük sorszámát.
Vár: a megadott idôtartamra leállítja a végrehajtást, egyébként a versenyt nem tudnánk
követni a képernyôn. A Futás metódus hívja.

A szerepek kiosztása természetesen másként is elvégezhetô. Például kialakíthattunk volna külön


objektumot a gyôztes versenyzôk nyilvántartására és kiírására, a versenyzôk helyett a versenyob-
jektum adhatná a célba beérôk sorszámát a gyôztesek halmazához, a versenyzôk léptetését végez-
hetnék idôzítôobjektumokkal stb.
A programot konzolalkalmazásként készítjük el, így a grafikus felhasználói felület elemei nem
zavarják az objektumok áttekintését. A konzolalkalmazás indítja el a futóversenyt úgy, hogy a Main
eljárás létrehozza a versenyobjektumot, majd meghívja a Start metódust.
A futóverseny programját fokozatosan építjük fel. A közben felmerülô problémák megoldásá-
hoz egyre újabb OOP-eszközöket ismerünk meg.
2. gyakorlat. Írjuk meg a futóverseny programját OOP-eszközök nélkül!

Ábrázolás osztálydiagramon
Programunkban osztályokat definiálunk a tervben szereplô objektumok alapján. Az osztályok szer-
kezetét úgynevezett osztálydiagrammal tesszük áttekinthetôvé. Az osztálydiagram fontos eleme az
objektumorientált programok tervezését segítô UML-nek (Unified Modeling Language: egységes
modellezô nyelv).
Az osztálydiagram téglalapban tünteti fel az osztály nevét, mezôit és metódusait. A mezôket és
metódusokat vízszintes vonallal választjuk el egymástól.

12
1. Az objektumorientált programozás alapjai

3. gyakorlat. A futóverseny leírása alapján jelöljük be az alábbi osztálydiagramra, hogy egy-


egy osztály objektumai mely másik osztály mezôit kérdezik le vagy módosítják, illetve mely
metódusokat hívják! Melyik osztály objektuma hoz létre egy másik osztályhoz tartozó ob-
jektumot vagy objektumokat?
A mellékelt osztálydiagramon
csak az általunk definiált osztályo-
kat tüntettük fel. Nem ábrázoltuk
külön a fejlesztôrendszerben ren-
delkezésünkre álló osztályokat (vé-
letlenszám, halmaz, tömb).
Az osztálydiagramok mellett
gyakran használják az objektum-
diagramot is. Az objektumdiag-
ram az objektumokat téglalapok-
ban ábrázolja, feltüntetve az
objektum nevét, osztályát, to- A futóverseny osztálydiagramja
vábbá mezôinek értékét. Az ob- Az osztályok nevének kezdôbetûje (T) jelzi,
jektum nevét, osztályát aláhúzzuk, hogy új típust definiálunk.
és kettôsponttal választjuk el egy-
mástól. Ha nem lényeges az ob-
jektum neve, akkor el is hagyhat-
juk.
Az UML-re a késôbbiekben
még visszatérünk, kibôvítjük az A pályaobjektum kétféle ábrázolási módja
osztály- és objektumdiagram fo-
galmát.

Objektumosztály definiálása, objektumok létrehozása


Objektumosztályt az OSZTÁLY … OSZTÁLY VÉGE kulcsszavak között definiálunk a forráskód-
ban. A definícióban a mezôk (változók) deklarációi és metódusok (alprogramok) definíciói szere-
pelnek a szokásos módon:
OSZTÁLY Osztálynév
változók (mezôk) deklarálása
eljárások, függvények (metódusok) definiálása
OSZTÁLY VÉGE
Mivel az osztály a hozzá tartozó objektumok típusa, ezért könyvünkben az osztályok nevét T
betûvel kezdjük. A TPálya osztály definíciója például (vázlatosan):
OSZTÁLY TPálya
VÁLTOZÓ Hossz MINT Egész
ELJÁRÁS Létrehoz(VersenyzôkSzáma MINT Egész)
az ablak méretének módosítása
a célvonal kirajzolása
ELJÁRÁS VÉGE
OSZTÁLY VÉGE

13
I. Objektumorientált programozás

Az objektumosztályokat definiálhatjuk a Module1.vb, illetve Form1.vb kódfájlban (a Mo-


dule1 modul, illetve a Form1 osztály definícióján kívül), de célszerû inkább külön kódfájlt
hozzáadni a projekthez (Project/Add New Item, Class). Egy kódfájlban több osztálydefiníció
is szerepelhet, azonban áttekinthetôbb programot kapunk, ha minden egyes kódfájl csak
egyetlen osztály definícióját tartalmazza. A View/Other Windows/Class View paranccsal meg-
nyitott Class View munkaablakban könnyen áttekinthetjük az
osztályokat (az ôsosztályokkal együtt – lásd késôbb). A Class View
munkaablakot csak a Professional változatban találjuk meg.

4. gyakorlat. Hozzunk létre új konzolalkalmazást! Adjuk


hozzá a TPálya kódfájlt, amelyben definiáljuk a TPálya osz-
tályt! A futóverseny leírásának megfelelôen deklaráljuk a
Hossz mezôt, majd készítsük el a Létrehoz metódus kódját!
Ha a fejlesztôrendszer esetleg Public megjelöléssel látja el az
egyes mezôket vagy metódusokat, akkor ezzel most ne tö-
rôdjünk!
Az objektumokat – egyelôre – a konzolalkalmazás moduljá-
nak (Module1) Main metódusában hozzuk létre, a már jól ismert
módon. Elôször deklaráljuk az objektumra hivatkozó, az osztály-
nak megfelelô típusú változót, majd az Új operátorral elkészítjük
az objektumot, és hozzárendeljük a változóhoz:
Objektumnév MINT Objektumosztály
Objektumnév = Új Objektumosztály
A pályaobjektum létrehozása például:
VÁLTOZÓ Pálya MINT TPálya
Pálya = Új TPálya
Class View a Visual Basic-ben
Vegyük figyelembe, hogy az Objektumnév itt egy hivatkozás tí-
pusú változó, amely az objektumnak a memóriában elfoglalt he-
lyét mutatja (lásd például a Programozási ismeretek tankönyvet).
Az ilyen változót a továbbiakban objektumváltozónak nevezzük. Az objektumváltozó deklarálása-
kor még nem jön létre maga az objektum, majd csak az Új operátor készíti el.
Egy objektum létrehozását az objektumosztály példányosításának szokás nevezni.
A példányosítás után ne felejtsük el meghívni a Létrehoz metódust, amely elvégzi az ilyenkor
szükséges tevékenységeket. A metódust – szabály szerint – az objektum nevével minôsítjük:
Pálya.Létrehoz(VersenyzôkSzáma)
Az objektumok létrehozásának és inicializálásának ez a szétválasztása sok hibalehetôséget rejt
magában, például könnyen megfeledkezhetünk róla. Hamarosan megismerkedünk az inicializálást
automatikusan elvégzô metódus készítésének módjával.
5. gyakorlat. Írjuk meg a pályaobjektumot létrehozó és a Létrehoz metódust meghívó kódot!
Futtassuk az alkalmazást!

Programozási összefoglaló: Objektumok és objektumosztályok

14

You might also like