You are on page 1of 164

A projekt az Eurpai Uni

trsfinanszrozsval, az Eurpa terv


keretben valsul meg.
















SZOFTVERFEJLESZTS














DE AMTC AVK 2007




HEFOP 3.3.1P.-2004-06-0071/1.0

Ez a kiadvny a
Gyakorlatorientlt kpzsi rendszerek kialaktsa
s minsgi fejlesztse az agrr-felsoktatsban
cm program keretben kszlt








SZOFTVERFEJLESZTS


















DE AMTC AVK 2007

Szerkeszt:
Dr. Harnos Zsolt
Budapesti Corvinus Egyetem

Dr. Herdon Mikls
Debreceni Egyetem
Szerz:
dr. Csetnyi Arthur, BCE
Budapesti Corvinus Egyetem

Mohcsi Lszl, BCE
Budapesti Corvinus Egyetem

Dr. Vrallyai Lszl, DE
Debreceni Egyetem

Lektor:
Pntya Rbert
Kroly Rbert Fiskola

Hegeds Gza
Pannon Egyetem

DE AMTC AVK 2007

ISBN 978-963-9732-56-8
E tanknyv teljes mrtkben megegyezik a Debreceni Egyetem honlapjn,
a http://odin.agr.unideb.hu/hefop/ elrsi ton megtallhat, azonos cm tanknyvvel.

Els kiads

A kiadvny szerzi jogvdelem alatt ll. A kiadvnyt, illetve annak rszeit msolni,
reproduklni, adatrgzt rendszerben trolni brmilyen formban s brmilyen eszkzzel
elektronikus ton vagy ms mdon a kiad s a szerzk elzetes rsbeli engedlye nlkl
tilos.

Kiad:
Debreceni Egyetem Agrr- s Mszaki Tudomnyok Centruma
Agrrgazdasgi s Vidkfejlesztsi Kar

Debrecen, 2007.
- 1 -

Tartalomjegyzk

Bevezets........................................................................................................................ 4
1 Alkalmazsfejleszts s a C# ................................................................................. 6
1.1 A forrskd feldolgozsa ............................................................................... 6
1.1.1 Fordtk...................................................................................................... 6
1.1.2 rtelmezk (interpreter): ............................................................................ 6
1.1.3 Kztes nyelvek (intermediate languages) .................................................. 7
1.2 Az Objektumorientlt programozs (OOP) elve............................................ 9
2 A Visual Studio 2005. fejlsztkrnyezet.............................................................. 12
2.1 A Visual Studio 2005. fejlesztkrnyezet hasznlata .................................. 12
2.1.1 j projekt ltrehozsa............................................................................... 12
2.1.2 Az rlapszerkeszt s a toolbox............................................................... 13
2.1.3 A Properites ablak.................................................................................... 13
2.1.4 Kdszerkeszt .......................................................................................... 15
2.1.5 Trspontok s nyomkvets................................................................... 16
2.2 Alapvet komponensek hasznlata s specilis vezrlk ............................ 17
2.2.1 A gomb (Button) ...................................................................................... 19
2.2.2 Szvegdoboz (TextBox)........................................................................... 20
2.2.3 Jellngyzet (CheckBox) ....................................................................... 20
2.2.4 Rdigomb (RadioButton) ....................................................................... 21
2.2.5 Legrdl doboz (ComboBox) ................................................................ 21
2.2.6 Jellngyzet lista .................................................................................... 22
2.2.7 Listadoboz (ListBox)................................................................................ 22
2.2.8 Men pts a ToolStrip komponenssel ................................................... 23
2.2.9 Trolk (Containers) ................................................................................ 24
2.2.10 Fjlkezel prbeszdablakok (FileOpenDialog, FileSaveDialog) ......... 25
2.2.11 Idzt (Timer) ....................................................................................... 26
3 Nyelvi elemek (kulcsszavak, vltozk, literlok, konstansok, nvterek)............. 28
3.1 Kulcsszavak.................................................................................................. 28
3.2 Azonostk ................................................................................................... 28
3.3 Vltozk, vltoztpusok.............................................................................. 28
3.3.1 Tmbk .................................................................................................... 30
3.4 Literlok, konstansok ................................................................................... 31
3.4.1 Szm literlok........................................................................................... 31
3.4.2 Logikai literlok....................................................................................... 32
3.4.3 Karakter, karakterlnc literlok................................................................ 32
3.4.4 Konstansok............................................................................................... 32
3.5 Mveletek (operandusok, opertorok) ......................................................... 32
3.5.1 rtkad mveletek.................................................................................. 32
3.5.2 Matematikai mveletek............................................................................ 33
3.5.3 sszetett matematikai mveletek............................................................. 33
3.5.4 Egyoperandus mvelet ........................................................................... 34
3.5.5 Ktoperandus mveletek........................................................................ 34
3.5.6 Hromoperandus mvelet ...................................................................... 34
3.6 A kifejezsek................................................................................................ 35
3.7 Nvterek ....................................................................................................... 36
4 Feltteles utastsok - szelekci ........................................................................... 38
4.1 Relcis opertorok...................................................................................... 38
4.2 Logikai mveletek........................................................................................ 38
- 2 -

4.3 Feltteles utastsok...................................................................................... 40
4.3.1 Egyg szelekci...................................................................................... 40
4.3.2 Ktg szelekci ...................................................................................... 40
4.3.3 Tbbg szelekci.................................................................................... 41
4.4 Plda: Feltteles elgazsokat tartalmaz alkalmazs ksztse.................. 42
5 Stringek kezelse.................................................................................................. 45
5.1 Deklarls..................................................................................................... 45
5.2 A string-ek fontosabb metdusai .............................................................. 45
5.2.1 A string-ek mint vektorok..................................................................... 47
5.3 Plda: String mveletek gyakorlsa ............................................................. 48
6 Iterci.................................................................................................................. 52
6.1 Elrt lpsszm ciklusok........................................................................... 52
6.2 Feltteles ciklusok........................................................................................ 53
6.3 Plda: Prmszm vizsglat............................................................................ 57
7 Sajt metdusok ltrehozsa ................................................................................ 59
7.1 Plda: Kt szm legnagyobb kzs osztjnak a meghatrozsa ................ 60
8 Objektumosztlyok s objektumok ltrehozsa ................................................... 63
8.1 A program sszetevi................................................................................... 63
8.2 Az osztly deklarlsa.................................................................................. 63
8.3 Adattagok deklarlsa .................................................................................. 63
8.4 Metdusok deklarlsa................................................................................. 64
8.5 Metdusok paramterezse .......................................................................... 65
8.6 Adatok s metdusok lthatsga ................................................................ 66
8.7 A property-k................................................................................................. 67
9 Grafika.................................................................................................................. 69
9.1 A Graphics osztly ....................................................................................... 69
9.2 A sznek (Color) ........................................................................................... 70
9.3 A toll (Pen) ................................................................................................... 70
9.4 Az ecset (Brush) ........................................................................................... 71
9.4.1 Mints ecset s toll (TexturedPen) ........................................................... 71
9.5 Szveg rajzolsa........................................................................................... 72
9.6 lland grafikk ltrehozsa az rlapon...................................................... 72
10 Tbbablakos alkalmazsok ksztse................................................................... 74
10.1 zenetablakok.............................................................................................. 74
10.2 Plda: Ktablakos alkalmazs ...................................................................... 76
11 Kivtelkezels ...................................................................................................... 80
11.1 Hibakezels .................................................................................................. 80
11.2 A try s catch................................................................................................ 80
11.3 A finally blokk ............................................................................................. 82
11.4 Kivtelek feldobsa...................................................................................... 82
11.5 Checked s unkchecked ............................................................................... 83
11.6 Plda: Hibakezels a msodfok egyismeretlenes egyenlet kapcsn........... 84
12 llomnykezels .................................................................................................. 86
12.1 Szveges llomnyok kezelse .................................................................... 86
12.1.1 Szveges s binris fjlok rsa, bvtse, olvassa............................... 86
12.1.2 Binris fjlok rsa, olvassa .................................................................. 87
12.2 Plda: Vletlen szmok generlsa lottszmokhoz, szvegfjlba.............. 89
12.3 Knyvtrkezelsi utastsok......................................................................... 91
12.3.1 Knyvtr mveletek ............................................................................... 91
12.3.2 Plda: Knyvtr mveletek hasznlata................................................... 92
- 3 -

12.3.3 llomnymveletek ............................................................................... 95
13 XML alapok s XML fjlok kezelse .................................................................. 97
13.1 Az XML nyelv ............................................................................................. 97
13.1.1 Az XML dokumentum szintaktikja ...................................................... 98
13.1.2 Az XML dokumentum rvnyessge ..................................................... 99
13.1.3 Az XML dokumentumok transzformcija............................................ 99
13.1.4 Az XML elnyei................................................................................... 100
13.2 XML fjlok feldolgozsa C# krnyezetben ............................................... 100
13.2.1 XML fjl betltse................................................................................ 101
13.2.2 A fa gai, mveletek node-okkal.......................................................... 101
13.2.3 j node beszrsa s a fjl mentse. .................................................... 102
13.2.4 Node trlse a fbl.............................................................................. 102
13.3 Plda XML fjl feldolgozsra .................................................................. 103
14 Az UML nyelv s fontosabb diagramtpusai...................................................... 108
14.1 Hasznlati esetek........................................................................................ 112
14.2 Tevkenysgdiagram.................................................................................. 116
14.3 Objektumok s osztlyok ........................................................................... 117
14.3.1 Kapcsolatok.......................................................................................... 119
14.4 Szekvenciadiagram..................................................................................... 126
14.5 Kommunikcidiagram.............................................................................. 128
14.6 llapotgp-diagramok................................................................................ 131
15 Az alkalmazsfejleszts folyamata, szoftver-letciklus modellek ..................... 133
15.1 A szoftverrendszerek fejlesztsnek folyamata ......................................... 133
15.2 A rendszerfejleszts folyamatmodelljei ..................................................... 138
15.2.1 Klasszikus vzess modell s varinsai ................................................ 140
15.2.2 Prototpusok ksztse, evolcis fejleszts......................................... 143
15.2.3 Fejleszts jrafelhasznlssal ............................................................... 148
15.2.4 Ksz alkalmazsi programcsomagok hasznlata.................................. 151
15.2.5 Vgfelhasznli fejleszts .................................................................... 153
16 Fggelk............................................................................................................. 154
16.1 A Visual Studio 2005. letltse s teleptse ............................................. 154
16.1.1 Letlts ................................................................................................. 154
16.1.2 Telepts ............................................................................................... 154
16.2 A C# kulcsszavai ........................................................................................ 155
16.3 C# nyelvben hasznlatos, egyszer tpusok............................................... 157

- 4 -

Bevezets

Biztosan llthat, hogy manapsg nincs olyan gazdasgi szakember, termszetesen idertve
az agrriumban dolgozkat is, aki munkja sorn valamilyen mdon ne kerlne kzvetlen
kapcsolatba informatikai rendszerekkel. Ez a kapcsolat lehet rendszeres vgfelhasznli
tevkenysg (end-user computing), de az esetek mind nagyobb szmban ennl lnyegesen
tbbrl van sz, nevezetesen aktv, szemlyes rszvtelrl az informatikai rendszerek
elemzsben, tervezsben, megvalstsban, kiptsben, tesztelsben, integrcijban,
zemeltetsben, karbantartsban vagy tkletestsben.

Emiatt az egyre fontosabb szerep miatt az informatikai alkalmazsok fejlesztse vagy rviden
az alkalmazsfejleszts vlt a gazdasgi informatika egyik meghatroz terletv. A jelen
tanknyvben egy szles krben elterjedt programozsi nyelv, a C# hasznlatn keresztl
adunk bevezetst a szoftverfejleszts alapfogalmaiba, technikiba s mdszereibe. Amikor a
tanknyv cmben szerepl alkalmazsfejleszts megnevezst hasznljuk, nem 50 vagy 100
soros programokra gondolunk, amit egyetlen ember r meg egykt nap alatt, egy ltala
vlasztott programozsi nyelven. Hanem kzepes- vagy nagymret szoftverrendszerekre
gondolunk, amelyeket egy gondosan sszevlogatott csapat, gyakran 40-60 rsztvevvel,
gondol ki s valst meg, professzionlis mdszerek, eljrsok s projektmenedzsment-
technikk segtsgvel tbb hnap, esetleg v jl szervezett kemny munkjval, heterogn
szoftver- s hardverkrnyezetben, alkalmazkodva az zleti let diktlta rendkvl kemny
versenyhelyzethez, adott kltsgkeretbl, adott hatridre, adott temezs szerint, a
rendelkezsre ll technolgival s szigor minsgbiztostsi szabvnyok betartsval.
Brki, aki mr rt szmtgpes programot letben, az tudja, hogy ami mkdik kicsiben
(100 programsor alatt), az nem biztos, hogy mkdni fog nagyban (10000 programsor felett).
Ezrt szksges, hogy a programozs oktats els perctl szem eltt tartsuk a folyamatokban
s rendszerekben gondolkods, valamint a problmk holisztikus megkzeltsnek elvt.
Ennek rszeknt trgyalja a tanknyv az UML ltalnos cl vizulis modellez nyelv
legfontosabb diagramtpusait is. A knyv utols fejezetben az alkalmazsfejleszts teljes
letciklust, folyamatnak klnbz fzisait, azok lpseit, a szksges tevkenysgeket s a
fejleszts mdszertannak elemeit trgyaljuk egy folyamatokban gondolkod informatikus
nzpontjbl. Mivel a rendszerfejleszts rendkvl szertegaz terlet, ehelytt csak az
alapok vzlatos ismertetsre van md. A hangslyt az ttekintsre helyezzk, s nem a
technikai rszletekben val elmlyedsre.

Az informatika vilgnyelve az angol, s az informatikai fogalmak elszr ltalban angolul
jelennek meg a szakirodalomban s a npszerst cikkekben. A tudomnyterlet fejldse
rendkvl gyors, s szinte havonta tbb tucat j elnevezst, rvidtst vezetnek be. Szmos
esetben ltezik tall magyar megjells, ms esetekben viszont csak knyszeredett, az
eredetivel nem egyenrtk fordtst lehetne megadni. Gyakran elfordul, hogy klnbz
tanknyvek klnfle mdon fordtottk le, az elszr angolul megjelent elnevezseket. Ez
- 5 -

klnsen igaz pldul az UML szkincsre. ppen ezrt gy gondoljuk, a fogalmak
eredeti nevkn val megnevezse minden bizonnyal segteni fogja az Olvast, ha ksbbi
tanulmnyai sorn idegen nyelv szakknyveket illetve folyiratcikkeket kvn olvasni.
- 6 -

1 Alkalmazsfejleszts s a C#
1.1 A forrskd feldolgozsa
A forrskd feldolgozsnak szempontjbl a szoftverfejleszt rendszereket hrom csoportba
sorolhatjuk:
fordtk
rtelmezk
kztes nyelvek
1.1.1 Fordtk
Az adott nyelven (forrsnyelv) megrt programot egy fordtprogram (compiler) lefordtja egy
msik nyelvre, a clnyelvre. A clnyelvi program futtatshoz ezutn sem a forrsnyelv
programra, sem a fordtprogramra nincs szksg. A clnyelv ltalban a processzor gpi
nyelve.

Elny:
gyorsan fut programot ad
A fordts egyirny utca, azaz a lefordtott programbl nem llthat vissza a
forrskd. Hiba tesszk kzz a lefordtott programot, az a forrskd nlkl
gyakorlatilag nem mdosthat.

Htrnyok:
A lefordtott program nem hordozhat nem futtathat ms processzoron illetve ms
opercis rendszer alatt.
1.1.2 rtelmezk (interpreter):
A forrsnyelven megrt programot ebben az esetben nem fordtjuk le. A program futtatshoz
egy interpreter (rtelmezprogram) szksges, mely utastsonknt olvassa, majd rtelmezi a
forrsnyelven megrt programot. Az rtelmezett utastst azonnal vgre is hajtja, majd
megkeresi a vgrehajtsban kvetkez utastst.

Elnyk:
Ha ms opercis rendszerre, illetve ms processzorra is ltezik rtelmez,
programunkat ott is futtathatjuk. (Megvalsul a platformfggetlensg elve.)
Ha a program, futs kzben hibval lell, a futtats a hiba kijavtsa utn folytathat.

Htrnyok:
- 7 -

rtelmezvel a programsoraink futtatsa lnyegesen lassabb, mint ha fordtt
hasznlnnk, hiszen minden utastst futtats kzben rtelmeznk. Minden utastst
minden egyes vgrehajtsnl rtelmezni kell.
Ha programunkat kzz tesszk, a forrskdot tesszk kzz, gy azt msok is fel
tudjk hasznlni.
1.1.3 Kztes nyelvek (intermediate languages)

A kztes nyelveket hasznl rendszerek a fordts s a lpsenknti rtelmezs elnyeit
prbljk egyesteni. A program futtatsa kt lpsbl ll:

1. Egy fordtprogram a forrskdot egy kztes nyelvre fordtja le. A kztes nyelvre
lefordtott programot tesszk kzz.
2. A kztes nyelvre lefordtott programot egy rtelmez program hajtja vgre
lpsenknt.

A kztes nyelvre lefordtott program futtatshoz szksg van a futtat krnyezetre, vagyis az
rtelmez programra.

Elnyk:
Megvalsthat a platformfggetlensg. Amelyik rendszerhez ltezik futtat
krnyezet, kpes futtatni a kztes nyelvre lefordtott programot.
Ha programunknak a kztes nyelvre fordtott kdjt tesszk kzz, megrizhetjk a
forrskdot.

Htrnyok:
Sajnos a platformfggetlensgrt nagy rat kell fizetnnk. A kztes nyelvre lefordtott
program futtatsa jelentsen lassbb, mint a gpi kdra fordtott program futtatsa.
Az opercis rendszerek ltalban nem tartalmazzk a szksges futtatkrnyezetet,
ezrt azt kln kell telepteni.
1.1.3.1 Kztes rendszerek a gyakorlatban: Java s .NET
Java

A Java technolgit a Sun Microsystems fejlsztette ki. A cl egy olyan rendszer megalkotsa
volt, melyre rvnyes az, hogy az al kszlt programok brmely krnyezetben platform-
fggetlenl futtathatk.

A megolds kztes kd hasznlatn alapul.

- 8 -

A Java fordt a forrskdot egy kztes nyelvre, az gynevezett byte-kd-ra fordtja, melyet
egy kpzeletbeli szmtgp, a Java Virtual Machine tud futtatni. A kpzeletbeli Java gpet
emull programnak, a Java Runtime Enviroment-nek jelen kell lennie gpnkn a Java
alkalmazsok futtatshoz.

1.1.3.2 A .NET framework

A .NET keretrendszer (framework) szintn kztes nyelv hasznlatn alapul. A .NET rendszer
kztes nyelvt CIL-nek hvjk (Common Intermediate Language), melyet a CLR (Common
Language Runtime) nvre keresztelt virtulis gp kpes futtatni.

A .NET programok futtatshoz szksges krnyezet 2-es verzija 2005 oktberben jelent
meg, gy nem rsze a Windows teleptkszleteknek. A 22.5 MB-os teleptkszlet
ingyenesen letlthet a Microsoft honlapjrl. A .NET framework-nek ltezik egy compact
vltozata is, mely mobil eszkzkn teszi lehetv alkalmazsaink futtatst.

CIL-t rtelmez futtat krnyezetek megjelentek Linux al is. Kt fejleszts is fut
prhuzamosan: a Portable.NET s a Mono.

A .NET technolgia a Microsoft Java verzijbl alakult ki. A kt technolgia kzti egyik
alapvet klnbsg, hogy Java krnyezethez csak Java nyelven rhatunk programokat, .NET
krnyezet al tbbfle nyelvbl ltezik fordt.

A .NET krnyezethez tartozik egy vltozatos objektumknyvtr is, melynek elemeire
szabadon hivatkozhatunk alkalmazsainkban (pl: gomb, szvegdoboz, stb.). Ez sok
fradtsgos programozi munktl kmli meg a programozt. A szoftverfejlesztsi
gyakorlatban egyre nagyobb szerepet kapnak ezek az knyvtrak. Egy tlagos program
kdjnak csak nhny szzalka az ltalunk ksztett kd, a tbbi elre gyrtott knyvtrakbl
kerl becsatolsra. Az rtelmez programok lasssga csak az ltalunk ksztett kd
futtatsnl rezhet. rtelmez hasznlata a nagy matematikai szmtsigny feladatoknl
jelent drasztikus sebessgcskkenst.




- 9 -


1.2 Az Objektumorientlt programozs (OOP) elve
A programozsi paradigma (vagy elv) a szmtgpes programok tervezsnek s
programozsnak mdszert jelenti. Ezen elvek clja az, hogy a programozk a programokat
minl hatkonyabban tudjk elkszteni, azokkal az adott problmt minl egyszerbben
tudjk megoldani. Ebben a fejezetben az objektumorientci nhny alapfogalmval
ismerkednk meg. A C# programok az OOP paradigma szerint plnek fel.

Osztly (Class) Az osztly az objektum-orientlt program alapegysge. Egy dolog
tulajdonsgait s viselkedst ltalnossgban rja le.

Az osztlynak lehetnek:
Adattagjai (data members-s), melyek lerjk az adott osztly
tulajdonsgait.
Metdusai (methods), melyek meghatrozzk az osztly viselkesst.

Objektum (Object) Az objektumosztly egy konkrt pldnya. Pldul a kutykat
ltalban ler objektumosztly egy konkrt pldnya Lassie, a kutya. Egy
objektumosztly tetszleges szm pldnyt ltrehozhatjuk.

rklds (Inheritance) - Egy osztly rklheti egy mr meglv osztly tulajdonsgait
s metdusait.

sosztly (superclass) - Azt az osztlyt, amelytl rklnk, sosztlynak
nevezzk.
C++ .NET Visual
Basic .NET
J# C#
Common
Intermediate
Language
Delphi
.NET
.NET
framework
- 10 -

Szrmaztatott osztly (subclass) - Az az osztly, amely rkl.
A szrmaztatott osztly tovbbi tulajdonsgokkal s metdusokkal egsztheti
ki az sosztlytl rklt adattagokat s metdusokat. Lehetsg van az
rklt adattagok, illetve metdusok fellrsra is. (lsd: polimorfizmus
ksbb.)

A szrmaztats mindig egyfajta specializci. A Labrador osztly a nla
ltalnosabb Kutya osztly leszrmazottja.

Az rkldst meg kell klnbztetni a tartalmazs viszonylattl: a kutynk -
adattagjai kztt - lehet egy anyja (egy msik kutya) s egy apja.

Betokozottsg (Encapsulation) Az objektum tulajdonsgai s mkdse el van zrva a
klvilg ell. A tulajdonsgokat s metdusokat csak meghatrozott
csatornkon keresztl lehet elrni, a hozzfrst korltozhatjuk. Az objektum
tulajonsgait s metdusait az albbi csoportok valamelyikben adhatjuk meg:
private : Az osztly pldnyai s az osztlybl szrmaztatott osztlyok
nem frhetnek hozz az itt felsorolt tulajdonsgokhoz, illetve
metdusokhoz.
protected : Az ide soroltakhoz a szrmaztatott osztlyok hozzfrnek, de a
konkrt objektumok nem.
public: Ezekhez a tulajdonsgokhoz s metdusokhoz mindenki
hozzfrhet.

Hozzfrs Az adott osztly
metdusai
Az osztlybl
szrmaztatott
osztly metdusai
Az osztly
pldnya
private Igen Nem Nem
protected Igen Igen Nem
public Igen Igen Igen


Polimorfizmus (tbbrtsg, vagy sokalaksg, sokoldalsg) Egy krt megadhatunk
kzppontjnak koordintival s sugarval vagy a krt befoglal ngyzet
koordintival. Az els esetben a kr megadshoz hrom, a msodik esetben
ngy paramter szksges. A kr osztly a kr ltrehozshoz tartalmazhat
kt azonos nev metdust, az egyiket hrom, a msikat ngy paramterrel. Azt
az esetet, amikor egy osztly tbb azonos nev, de a paramterek szmban
eltr metdust tartalmaz, tlterhelsnek (overloading) nevezzk.

Az osztlyok tbb-kevsb nll egysgeket alkotnak a programon bell, ezrt gyakorlati
megvalstsuk is elklnl feladatokknt trtnik. sszetettebb program tervezse a
- 11 -

szksges osztlyok meghatrozsval kezddik. Az egyes osztlyok megvalstst
prhuzamosan tbb programoz is vgezheti.
- 12 -

2 A Visual Studio 2005. fejlsztkrnyezet
2.1 A Visual Studio 2005. fejlesztkrnyezet hasznlata
Az IDE (integrated development environment integrlt fejlesztkrnyezet) egyfajta
szoftver, mely segti a programozt a programrsban s tesztelsben. A kvetkez rszekbl
ll:

Forrskd szerkeszt
Grafikus felhasznli fellet tervez
Fordt vagy rtelmez program
Debugger (Hibakeres)
2.1.1 j projekt ltrehozsa
A fejlesztkrnyezet hasznlatt egy klasszikus pldn keresztl mutatjuk be: ksztnk egy
programot, mely gombnyomsra megjelenti a Hello feliratot egy szvegdobozban.

1. Indtsuk el a fejlesztkrnyezetet!
2. A Recent projects ablakban vlasszuk a Create Project lehetsget. Ksbb innen
tudjuk megnyitni a mr ltez projekteket.
3. A Visual Studio ltal tmogatott programozsi nyelvek kzl vlasszuk a C#-ot, a
felknlt sablonok (templates) kzl a Windows Application-t! Nevezzk el a
projektet s lltsuk be a ments helyt. A Windows Application sablon
vlasztsval olyan projektet hozunk ltre, mely mr tartalmaz egy ablakot.




- 13 -


2.1.2 Az rlapszerkeszt s a toolbox
A toolbox-ot az ablak bal oldaln tallhat flre kattintva nyithatjuk fel. Ha szeretnnk az
ablakba dokkolni, kattintsunk az ablakfejlc gombost ikonjra ( )!

Az toolbox-on lthat komponenseket helyezhetjk el az rlapon. Itt talljuk a gombot, a
szvegdobozt, a ment, stb.

Folytassuk az elbbi pldt:

4. Helyezznk el egy gombot (Button) s egy szvegdobozt (TextBox) az rlapon
(Form)


2.1.3 A Properites ablak
A Properties ablakot a View / Properties Window menponttal jelenthetjk meg.

- 14 -



Tulajdonsgok (properties) belltsa

Az rlapokon hasznlt komponensek tulajsgait ktflekppen llthatjuk be:
Design time: az rlap tervezsekkor, a szerkesztfelleten
Runtime: a program futsa kzben, programkdbl

A properties ablakban tervez nzetben llthatjuk be a kivlasztott komponens
tulajdonsgait. A komponensre jellemz tulajdonsgokat megtekinthetjk nv szerinti
sorrendben, vagy funkcijuk szerint csoportostva.

Nhny gyakran elfordul tulajdonsg:

Tulajdonsg Rvid lers Komponens
Name A komponens neve ezen a nven tudunk majd
programkdbl hivatkozni a komponensre.
Szigorbb rtelemben nem tulajdonsg, mgis itt
tudjuk belltani.
Minden
komponens
Text Szveg Form, Button,
TextBox
Enabled Engedlyezettsg. Ha rtke hamis (false) a
komponens a program futtatsakor le lesz tiltva.
Button, TextBox
Anchor (horgony) tmretezhet ablakoknl hasznos.
Bellthatjuk, hogy a komponens mely oldalainak
tvolsga legyen az ablak oldalaihoz rgztve.
Button, TextBox

- 15 -

Folytassuk az elz pldt:

5. Vlasszuk ki a gombot s nevezzk el Gomb-nak. Feliratt (Text) rjuk t Hello-
ra!
6. Vlasszuk ki a szvegdobozt s nevezzk el Szoveg-nek!

Esemnyek (events)

Grafikus felletek programozsnl az esemnyvezreltsg elvt kvetjk. Ez azt jelenti,
hogy mindig egy adott esemnyhez rendelnk programkdot. Pldnkban meghatrozzuk, mi
trtnjen akkor, ha a felhasznl a gombra kattintott.

A kivlasztott komponenshez kapcsold esemnyeket az Events gombra ( ) kattintva
tekinthetjk meg. Ha az esemny neve mell dupln kattintunk, a kdszerkesztbe jutunk,
ahol megrhatjuk az esemnyt kiszolgl fggvnyt. (Azt a fggvnyt, ami az esemny
bekvetkeztekor kerl futtatsra.)

A leggyakrabban hasznlt esemny az egrkattints, a Click.

Feladat:

7. Rendeljnk fggvnyt a gombra kattints esemnyhez.
8. Vlasszuk ki a gombot!
9. A Properties ablakban jelentsk meg az esemnyeket!
10. A Click esemny mellett kattintsunk duplt. Ha mindent jl csinltunk, a
kdszerkesztben talljuk magunkat. (A kattintskor vgrehajtand kdot a kvetkez
lpsben rjuk meg.)
11. Futtassuk projektnket az F5 billentyvel!
2.1.4 Kdszerkeszt
A modern IDE-k forrskd-szerkeszti tbb funkciban eltrnek az egyszer
szvegszerkesztktl:

Syntax higlighting (szintaxis kiemels): a szerkeszt a nyelv foglalt szavait ms
sznnel jelli, gy azok elklnlnek az ltalunk adott elnevezsektl.
Auto Code Completion (automatikus kdkiegszts): a forrskd szerkesztse kzben
a Ctrl + Space billentyk lenyomsra lista jelenik meg a kpernyn, mely tartalmazza
a szintaktikailag odaill nyelvi elemeket. gy elg egy nyelvi elem els nhny
karaktert begpelni, a befejezst vlaszthatjuk a listbl. Ezzel a mdszerrel nem
csak a gpelsi id rvidl le, hanem cskken az eltsekbl valamint a kis s
nagybetk helytelen hasznlatbl add hibk szma. Ahhoz, hogy a felknlt lista
- 16 -

mindig aktulis legyen a szerkesztnek folyamatosan elemeznie kell a teljes
forrskdot, ami nagyobb projekteknl jelents gpkapacitst ignyel.
Code collapse (Kd sszeomlaszts): Bizonyos nyelvi struktrk esetn, a sor elejn
kis ngyzetben + vagy - jel jelenik meg. Ezzel elrejthet a kdnak az a rsze, amin pp
nem dolgozunk. Az sszetartoz kdrszleteket vonal kti ssze, mely segt az
eligazodsban.
Auto Code Formating (Automatikus kdformzs): Az egymsba gyazott
programstruktrkat automatikusan egyms al igaztja. (Edit / Advanced / Format
document )

Gyakorlat:

12. A kdszerkesztben az esemnyhez rendelt gomb_click fggvnyben lltsuk be a
szvegdoboz szvegt! Fontos megjegyezni, hogy a C# klnbsget tesz a kis s nagy
betk kztt!

Szoveg.Text = "Hello";




2.1.5 Trspontok s nyomkvets
sszetettebb algoritmusoknl gyakran elfordul, hogy a program szintaktikailag helyes,
futtatskor mgsem a kvnt eredmnyt adja. Ilyen hibk feldertsre hasznlhatjuk a
- 17 -

nyomkvetst. A programsorok eltti szrke svra kattintva trspontokat helyezhetnk el a
forrskdban. Ezeket piros krrel jelli a szerkeszt. Ha a program futs kzben trsponthoz
r, a futtats megszakad, s a rendszer debug mdba kerl. Innen programunkat soronknt
hajthatjuk vgre, kzben pedig nyomon kvethetjk vltozink rtknek alakulst.

Vltozk rtknek kvetse:

Ha az egeret a forrskdban egy vltoz fl helyezzk, a kpernyn megjelenik a
vltoz rtke.
Debug mdban a kperny aljn megjelenik egy Locals ablak, melyben a modulban
rvnyes vltozk listjt talljuk. Ha vletlenl kikapcsoltuk a Locals ablakot, a
Debug / Windows menpontban llthatjuk vissza.
A Debug / Windows menpont alatt ngy Watch ablakot is tallunk. Ezekben a jobb
egr gombbal tudjuk sszelltani a vizsglni kvnt vltozk listjt. Ugyanitt az
Edit value lehetsget ad vltozink rtknek mdostsra is.

Program futtatsa debug mdban:

Debug mdban a fejlesztkrnyezet jabb eszkztrral bvl:




F5 Folytatja a program futtatst a kvetkez trspontig.
Sznetelteti a program futst.
Megszaktja a program futtatst.
jraindtja a programot.
A kurzor helyig futtatja a programot, majd lell.
F11 Step into a kvetkez programsorra ugrik. Ha fggvnyhvs trtnik, a
fggvnybe is beleugrunk, s azt is soronknt hajtjuk vgre.
F10 Step over a kvetkez programsorra ugrik. Fggvnyhvsoknl nem ugrik
bele a fggvnyekbe.
Step Out befejezi a fggvny futtatst, s a hvsi pontnl ll meg.

A fenti funkcikat a Debug menn keresztl is elrhetjk.
2.2 Alapvet komponensek hasznlata s specilis vezrlk
A Visual Studio fejlesztkrnyezet tartalmaz egy komponensknyvtrat. Ezeket a
komponenseket szabadon felhasznlhatjuk sajt programunkban. A komponensknyvtrat
bvthetjk ms szoftvercgektl vsrolt komponensekkel is - a komponensgyrts j
- 18 -

zletg a szoftverpiacon. (Pl: vonalkd rajzol, diagram megjelent, vagy ppen FTP
kezel.)

Egy gyakorlott programoz tudsnak egyre kisebb rszt teszi ki a programozsi nyelv
ismerete. Egyre nagyobb slyt kap a fejleszteszkz ltal knlt, elre elksztett
komponensek ismerete. Jegyzetnk nem referenciaknyv, nem tartalmazhatja az sszes
komponens lerst. Egy ilyen kiadvny terjedelme tbb-ezer oldal lenne, ami egyrszt
megfizethetetlen, msrszt kezelhetetlen. A mostani fejlesztkrnyezetek referenciaknyvei
mr csak elektronikus formban rhetk el.

Mint a fggelkbl kiderl, a Visual Studio kt CD-nyi dokumentcit is tartalmaz, melyet
nem ktelez telepteni a fejlesztkrnyezet mell. A dokumentci Interneten keresztl is
elrhet, de termszetesen sokkal lassabban, mintha sajt gpnkrl olvassuk. A
dokumentciban a Help / Search menpont alatt kereshetnk.

Ebben a fejezetben egy nagyon rvid sszefoglalt adunk a leggyakrabban elfordul
komponensekrl.

Azokat a komponenseket, melyeken keresztl a felhasznl kezelni tudja az alkalmazst,
vezrlknek (controls) nevezzk. Ilyenek a gomb, a men, a szvegdoboz, kp, stb. Lteznek
olyan komponensek is, mint pldul az idzt (Timer), melyek futtats kzben nem jelennek
meg a kpernyn. Ezek nem tartoznak a vezrlk kz.

Azokat a tulajdonsgokat, esemnyeket amelyekkel a legtbb vezrl (control) rendelkezik,
az albbi tblzatban foglaljuk ssze, s nem emltjk kln-kln az egyes vezrlk
bemutatsnl.

1. tblzat: Vezrlk fontosabb tulajdonsgai

Tulajdonsg Rvid lers
Name A komponens neve ezen a nven tudunk majd
programkdbl hivatkozni a komponensre. Szigorbb
rtelemben nem tulajdonsg, mgis itt tudjuk belltani.
Text Szveg
Enabled Engedlyezettsg. Ha rtke hamis (false) a komponens a
program futtatsakor le lesz tiltva.
Anchor (horgony) tmretezhet ablakoknl hasznos. Bellthatjuk,
hogy a komponens mely oldalainak tvolsga legyen az ablak
oldalaihoz rgztve.
TabIndex Windows-os alkalmazsokat ltalban egr nlkl,
billentyzetrl is kezelhetnk: a Tab illetve Shift + Tab
billentykkel lphedhetnk elre s htra az ablak elemei
kztt. A TabIndex tulajdonsg vezrlnk helyt adja meg
ebben a sorban.
TabStop Jelzi, hogy a Tab billentyvel adhatunk-e fkuszt az
- 19 -

elemnek.
Location / x,y A vezrl koordintit adja meg az t tartalmaz elem (pl.
rlap) bal-fels sarktl mrten.
Size / Width, Height A vezrl szlessge s magassga pixelekben megadva.
Text A vezrlhz rendelt szveg
TextAllign A szveg helyzett lltja a vezrln bell.
Font A vezrl szvegnek bettpusa.
ForeColor A vezrl eltrsznt lltja.
BackColor A vezrl httrsznt lltja.
Cursor Az egrkurzor alakja a vezrl felett.
AutoSize A vezrl mrett automatikusan gy lltja be, hogy a
vezrl szvege elfrjen.
UseMnemonic Mnemonic-ok (emlkeztetk) hasznlatnak engedlyezse.
Menmonic:
Ha gombok vagy menpontok feliratban & karaktert
helyeznk el, az & karakter utni bet alhzva jelenik
meg. Az alhzott bet Alt billentyvel egytt letve
kattints esemnyt vlt ki.
Pl: &Ok -> Ok

2. tblzat: Vezrlk fontosabb esemnyei

Esemny Rvid lers
Click Kattintskor kvetkezik be. A kattints trtnhet egrrel,
vagy bizonyos vezrlknl az Enter billentyvel.
TextChanged Akkor kvetkezik be, ha a vezrl Text tulajdonsga
(szvege) megvltozik.
Enter Akkor kvetkezik be, amikor a vezrl megkapja a fkuszt.
(Kivlasztjuk egrrel vagy a Tab billentyvel)
Leave Akkor kvetkezik be, ha a vezrl elveszti a fkuszt.
MouseClick Egrkattintskor kvetkezik be.
MouseDown Akkor kvetkezik be, ha a komponens fltt lenyomjuk az
egrgombot.
MouseUp Akkor kvetkezik be, ha a komponens fltt felengedjk az
egrgombot.
MouseEnter Akkor kvetkezik be, amikor az egr a komponens lthat
rsze fl r.
MouseLeave Akkor kvetkezik be, amikor az egr elhagyja a komponens
lthat rszt.
MouseMove A komponens fltt megmozdul egr vltja ki.
MouseHover Akkor kvetkezik be, amikor az egr mr eltlttt egy
bizonyos idt a komponens fltt.
2.2.1 A gomb (Button)



- 20 -

Tulajdonsgok (Properties)
Text A gomb felirata.
Image A gombon lev kp.
ImageAlign A kp elhelyezkedse a gombon bell.

Esemnyek (Events)
Click A gomb megnyomsakor kvetkezik be.
2.2.2 Szvegdoboz (TextBox)



Tulajdonsgok (Properties)
Text A szvegdoboz szvege ezen a
tulajdonsgon keresztl llthat be s
olvashat ki.
Multiline Ha rtke igaz, a szvegdobozba tbb
sornyi szveget is rhatunk.
UseSystemPasswordChar Ha rtke igaz (true), a begpelt szveg
helyn egy meghatrozott karakter jelenik
meg, gy a jelszavakat nem lehet leolvasni
a kpernyrl.

Esemnyek (Events)
TextChanged Akkor kvetkezik be, ha a szvegdoboz
szvege megvltozik.
2.2.3 Jellngyzet (CheckBox)



Tulajdonsgok (Properties)
Checked Jelzi, hogy a doboz bejellt llapotban van-
e.
CheckedState A jellngyzet hrom llapotban lehet:
- bejellt (checked)
- jelletlen (unchecked)
- kztes (intermediate)

Esemnyek (Events)
- 21 -

CheckStateChanged Jelzi, ha a jellngyzet llapota
megvltozott
2.2.4 Rdigomb (RadioButton)



Tulajdonsgok (Properties)
Checked Jelzi, hogy a gomb benyomott llapotban
van-e.

Esemnyek (Events)
CheckedChanged Jelzi, hogy a gomb llapota megvltozott.
2.2.5 Legrdl doboz (ComboBox)



Tulajdonsgok (Properties)
Items Az items gyjtemny tartalmazza a
lerdl lista elemeit.
Sorted Jelli, hogy a lista elemei abc sorrendben
jelenjenek-e meg.

Esemnyek (Events)
TextUpdate Akkor kvetkezik be, ha a legrdl lista
szvege megvltozik.
SelectedIndexChanged Akkor kvetkezik be, ha a kivlasztott
elem sorszma megvltozik.

A legrdl doboz elemeinek feltltse trtnhet programbl is:

comboBox1.Items.Add("Els elem");
comboBox1.Items.Add("Msodik elem");
comboBox1.Items.Add("Harmadik elem");

A kivlasztott elem sorszmt a ComboBox.SelectedIndex tulajdonsgn keresztl tudjuk
kiolvasni. Ez a tulajdonsg csak programkdbl rhet el, tervez nzetben nem.
- 22 -


int valasztott = ComboBox1.SelectedIndex;

Az elemeket programkdbl is trlhetjk:
ComboBox1.Items.RemoveAt(valasztott);

2.2.6 Jellngyzet lista


Ez a komponens jellngyzetekbl ll listt jelent meg. Tulajdonsgai hasonltanak a
legrdl dobozhoz (ComboBox). A f klnbsg az, hogy itt egyszerre tbb elemet is ki
tudunk vlasztani.

Tulajdonsgok (Properties)
Items Az items gyjtemny tartalmazza a
lerdl lista elemeit.
CheckedItems Ez a gyjtemny tartalmazza azokat az
elemeket, melyeket a felhasznl
kivlasztott.
Sorted Jelli, hogy a lista elemei abc sorrendben
jelenjenek-e meg.

Esemnyek (Events)
SelectedIndexChanged Akkor kvetkezik be, ha a kivlasztott
elem sorszma megvltozik.
2.2.7 Listadoboz (ListBox)
Egy ft jelent meg, melyben a felhasznl tbb elemet is bejellhet.



Tulajdonsgok (Properties)
Nodes (collection) A nodes gyjtemny tartalmazza a fa
- 23 -

elemeit.
CheckBoxes Ha rkt igaz-ra lltjuk, a fa minden
eleme eltt jellngyzet jelenik meg.
FullPath Terveznzetben nem elrhet tulajdonsg.
A felhasznl ltal kivlasztott elemek
tvonalt adja vissza a fban.

Esemnyek (Events)
AfterCheck Akkor kvetkezik be, ha egy jellngyzet
llapott megvltoztatja a felhasznl
2.2.8 Men pts a ToolStrip komponenssel



A men felptse a ToolSrtip komponens rlapra helyezsvel kezddik. A ToolStrip
DropDownItems tulajdonsga mell kattintva egy prbeszdablak jelenik meg, melyben
ltrehozhatjuk a menpontokat. Itt van lehetsgnk a menpontok sorrendjnek s
tulajdonsgaik belltsra is. Minden menpont rendelkezik DropDownItems tulajdonsggal.
Ez a tulajdonsg egy gyjtemny, mely tartalmazza a menpont almenpontjait. Ha a
ToolBox-on a DropDownItems tulajdonsg mell katttintunk, megjelenik egy prbeszdablak,
ahol ltrehozhatjuk a szksges almenket.

Minden menponthoz tartozik Click esemny, mely az adott menpont kivlasztsakor
kvetkezik be.


- 24 -

2.2.9 Trolk (Containers)
A trolk olyan vezrlk, melyek ms vezrlk elrendezsre szolglnak. A trolkba tovbbi
vezrlket helyezhetnk.

A trolkon keresztl adatbevitel nem trtnik, esemnyeiket is csak ritkn kezeljk.

2.2.9.1 Lapozhat kartotk (TabPage)



A kartotkhoz j fleket legegyszerbben a jobb egr / Add tabs menponttal adhatunk
legegyszerbben. A lapok sorrendjnek, illetve az egyes lapok tulajdonsgainak belltshoz
kattintsunk a TabPages tulajdonsg mell. A TabPages tulajdonsg gyjtemny, mely a
kartotk lapjait tartalmazza. Itt tudjuk kln lltani az egyes lapok tulajdonsgait is.
2.2.9.2 Panel



A panel vezrlre is helyezhetnk tovbbi vezrlket. Ha ezek tlnylnak a panel terletn
grgetsvok jelennek meg a panel szlein. Nagymret kpek megjelentshez is
hasznlhatunk panelt: Helyezzk a kpet (PictureBox) a panelbe. Ha a kp nem fr be a panel
terletre, a megjelen grgetsvok segtsgvel mozgathatjuk.
- 25 -

2.2.9.3 Osztott trol (SplitContainer)


Kt panelbl s a kzk lev elvlaszt vonalbl ll. Ha a BorderStyle tulajdonsgt
Single-re vagy 3D-re lltjuk, a felhasznl egrrel llthatja a kt oldal arnyt.

Tulajdonsgok (Properties)
BorderStyle A kt panel keretnek stlusa.
Orientation rtke lehet horizontal vagy vertical. A
paneleket elvlaszt sv irnyt lltja be.
Panel1Collapsed Ha rtke igaz, az 1-es panel eltnik, a
vezrl teljes terlett a 2-es panel tlti ki.
Panel1MinSize Az 1-es panel minimlis mrete.
Panel2Collapsed Ha rtke igaz, a 2-es panel tnik el.
Panel2MinSize A 2-es panel minimlis mrete.
SplitterWidth A kzps elvlaszt sv szlessge.
2.2.10 Fjlkezel prbeszdablakok (FileOpenDialog, FileSaveDialog)
A Windows-os alkalmazsokbl jl ismert fjlmegnyits s ments prbeszdablakok
megjelentsre szolgl komponensek.

Mkdsket egyszer pldval mutatjuk be. Helyezznk el az rlapon egy gombot (Button)
s egy OpenFileDialog komponenst. A gomb kattintshoz rendeljnk esemnyt:
private void button1_Click(object sender, EventArgs e)
{
openFileDialog1.InitialDirectory = "c:\\";

openFileDialog1.Filter =
"Szvegfjlok (*.txt)|*.txt|Mindenki (*.*)|*.*";

openFileDialog1.FileName = "";

if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
MessageBox.Show(openFileDialog1.FileName);
//A Messagebox.Show metdus zenetablakot jelent
//meg, benne a paramterben szerepl szveggel.

}
else
{
MessageBox.Show("Nem vlasztott fjlt");
}
- 26 -

}
}


Az InitialDirectory tulajdonsggal llthatjuk be a kiindul knyvtrat. Ne felejtsk el,
hogy a C# bizonyos nem lthat karakterek knny kezelsre gynevezett karakter
konstansokat vezettek be, ezeknek sajtossga, hogy mind a "\" nyit karakterrel
kezddnek s egy bet, vagy egy szmjegy kveti a nyit karaktert. A karakter
konstansok a kvetkezk.
Az openFileDialog1.ShowDialog() metdus visszatrsi rtkbl tudjuk meg, hogy a
felhasznl vlasztott-e fjlt.
A Multiselect tulajdonsggal engedlyezhetjk tbb fjl egyidej kivlasztst.
Ilyenkor a FileNames tmbbl olvashatjuk ki a kivlasztott fjlok neveit.
A FileSaveDialog hasonl elven mkdik.
2.2.11 Idzt (Timer)
Meghatrozott idkznknt esemnyt generl.

Tulajdonsgok (Properties)
Enabled Ezzel a tulajdonsggal tudjuk engedlyezni
illetve letiltani az idztt.
Interval A kt esemny kztt eltelt id
ezredmsodpercben megadva.

Esemnyek (Events)
Tick Az esemny akkor kvetkezik be, ha a
szmll lejrt.

Plda:
Helyezznk el egy szvegdobozt (TextBox) az rlapon, Text tulajdonsghoz rjunk egy 1-
est, nevt hagyjuk vltozatlanul. Helyezznk el egy idztt (Timer) is az rlapon. A
szmllt engedlyezzk, az esemnyek kztt eltelt idt (Interval) lltsuk 1000 ms-ra.
Kezeljk le a Tick esemnyt:

private void timer1_Tick(object sender, EventArgs e)
{
int x;
x = int.Parse(textBox1.Text);
x++;
textBox1.Text = x.ToString();
}

Idztnk minden msodpercben kiolvassa a szvegdoboz rtkt, szmm alaktja, eggyel
nveli, majd visszarja a szvegdobozba.
- 27 -

A Timer pontos idmrsre nem alkalmas. Ha kt esemny kztt eltelt idre vagyunk
kvncsiak, hasznljuk a rendszerrt.
- 28 -

3 Nyelvi elemek (kulcsszavak, vltozk, literlok, konstansok,
nvterek)
3.1 Kulcsszavak
Valamennyi programozsi nyelvben a kulcsszavak klnleges kifejezseknek szmtanak,
amelyeknek egyedi jelentse van, hiszen ezek alkotjk a defincik s mveletek alapszavait.
Az adott nyelv szempontjbl minden kulcssznak specilis jelentse van, ezrt nem
hasznlhatjuk ket sajt cljainkra (fenntartott szavak).
A Fggelk 16.1. fejezetben tallhat tblzatban a C# nyelv kulcsszavait mutatjuk be
jelentsvel egytt.
3.2 Azonostk
A programunkban hasznlt vltozkat, literlokat, metdusokat, osztlyokat bizonyos
szablyok szerint el kell nevezni. Az ezeknek adott nevek az azonostk, melyekre
vonatkozan lteznek szablyok valamennyi programozsi nyelvben, gy a C#-ban is. Az
azonostk csak betvel vagy alhzs jellel kezddhetnek s nem tartalmazhatnak szkzt,
specilis karaktereket (pl. #) valamint kulcsszavakat. Az els karakter utn tovbbi betk,
szmok vagy alhzs jelek kvetkezhetnek. Itt kell megjegyeznnk, hogy ms nyelvektl
eltren a C# nyelvben elmletileg az kezetes betket is hasznlhatjuk nvadsra. Br ez a
lehetsg adott mgsem javasoljuk, hogy a programozk ljenek ezzel a lehetsggel!
A programban hasznlt kulcsszavakat nem hasznlhatjuk azonostknt. rdekessgknt
megemlthetjk viszont, hogy a kulcsszavak a @ bevezet jellel mr hasznlhatk akr
azonostknt is (pldul: @int). Ezt a lehetsget a programok hordozhatsga illetve
tjrhatsga miatt vezettk be. A @ prefix szimblumok neve valjban @ nlkl kerlnek
fordtsra. gy attl fggetlenl, hogy egy msik nyelv nem tartalmazza pldul a sealed
kulcsszt, s egy programban azonostknt hasznljk, a C# nyelvben lehetsg van az
azonost kzvetlen hasznlatra.
A kulcsszavakbl, vltozkbl, literlokbl s azonostkbl kifejezseket, utastsokat
lltunk ssze, amelyek sszessgbl ll ssze a forrsprogram. A C# nyelvben az
utastsokat pontosvesszvel zrjuk.
3.3 Vltozk, vltoztpusok
Brmilyen programot rjunk is minden esetben szksg van arra, hogy a felhasznltl a
program futsa sorn n. input rtke(ke)t krjnk be, illetve a szmtsaink sorn keletkez
eredmnyeket (output) meg tudjuk jelenteni a kpernyn. Az alapvet input- output,
mveletek trgyalshoz mindenkppen meg kell ismerkednnk a C# nyelvben hasznlatos
vltoz tpusokkal (A C# nyelvben hasznlatos egyszer tpusokat a Fggelk 16.2.
- 29 -

fejezetben talljuk meg). Az olyan trhelyet, amelynek tartalma vltozhat a program futsa
kzben, vltoznak nevezzk.

A vltozk s a vltoz tpusok ismerete nagyon fontos krds legyen az brmely
programozsi nyelv, hiszen a programunkban hasznlt adatokat vltozkban esetleg
konstansokban szoktuk trolni. A program futsa kzben ezekkel szmol a memriban, s
segtsgkkel kommunikl a felhasznlval. A kommunikci a programozsi nyelvek esetn
azt jelenti, hogy adatokat olvasunk be a billentyzetrl, s a munka vgeztvel a kapott
eredmnyt kiratjuk a kpernyre.

Minden vltoznak rendelkeznie kell nvvel vagy ms nven azonostval, ezen kvl
tpussal, s tartalommal, vagyis aktulis rtkkel. Az elzekben emltetteken kvl
rendelkeznie kell lettartammal s hatskrrel. Az lettartam azt jelenti, hogy az adott vltoz
a program futsa sorn mikor s meddig, a hatkr pedig azt adja meg, hogy a program mely
rszeiben hasznlhat. A vltozk nevnek, azonostinak kivlasztsa sorn gyelnnk kell a
nyelv szintaktikai szablyainak betartsra.

A vltozk neveit a fordt azonostknak tekinti, amelyeket a Unicode 3.0 szabvny
ajnlsnak megfelelen kell rni. Az azonostk kpzsnl hasznlhat mg az alhzs
karakter (_) is. gyelni kell arra is, hogy tbb ms nyelvvel ellenttben a C# nyelv
megklnbzteti a kis- s nagybetket.

A vltozkat a programban be kell vezetni, azaz kzlni kell a fordtprogrammal, hogy
milyen nvvel s milyen tpus vltozt kvnunk hasznlni a programban. Ezt nevezzk
deklarcinak.

tpus vltoznv;

A tpus meghatrozza a vltoz lehetsges rtkeit, rtktartomnyait, valamint hogy, milyen
mveleteket lehet vgezni velk, s milyen ms tpusokkal kompatibilis. A nvvel a vltozra
tudunk hivatkozni a program brmely rszbl. A kompatibilits akkor fontos, amikor az
egyik vltozt rtkl szeretnnk adni egy msik vltoznak. Abban az esetben ha a kt
vltoz inkompatibilis, akkor a .NET fordt hibt jelez.

A vltozk a program futsa kzben a memriban troldnak, vagyis minden azonosthoz
hozzrendeljk a memria egy darabjt (cmt), amelyet a rendszer deklarlskor lefoglal s a
vltoz teljes letciklusa alatt ltezik. Nhny vltoztpus esetn (pl. pointerek - mutatk)
valamivel bonyolultabb a helyzet, de a .NET keretrendszerben nem kell trdnnk a memria
kezelsvel, mert a .NET felgyeli, lefoglalja s felszabadtja a memrit, amikor szksges.
A vltozinkat akr mr a deklarci sorn ellthatjuk kezdrtkkel is. A kezdrtk ads
azrt is fontos, mert az rtk nlkl hasznlt vltozk kifejezsekben val szerepeltetse
esetn a fordt hibt fog jelezni.
- 30 -


tpus vltoznv=kezdrtk;

Gyakran elfordul hiba, hogy a deklarci sorn nem adunk nevet vagy tpust a vltoznak,
vagy egyltaln nem deklarljuk, de a programban mgis megprblunk hivatkozni r. Ekkor
a .NET fordt a futtatskor hibt jelez. Az is elfordulhat, hogy nem megfelel tpus
kezdrtkkel ltjuk el a vltoznkat. Ebben az esetben klnbz hibazenetek jelenhetnek
meg a kpernyn.

Azonos vltoznevek hasznlata esetn is hibazenetet kapunk. Gyakori hiba az is, hogy az
osztly, vagyis a class neve egyezik meg az egyik vltoz nevvel.

Bizonyos esetekben, amikor nem hiba (Error), hanem figyelmeztet (Warning) tpus
hibazenetet kapunk, a fordt olyan hibt tall, amitl a programunk mg mkdkpes, de
hatkonysgt cskkenti. Ilyen hiba lehet pldul, ha egy vltozt deklarlunk, de nem
hasznljuk fel programunkban.

A vltozk rtkadsnak termszetesen jl meghatrozott szintaktikja van. Az rtkad
utasts bal oldaln a vltoz azonostja, kzpen az egyenlsgjel, a jobb oldalon pedig az
rtk, vagy kifejezs ll, amelynek az aktulis rtkt a vltozban trolni kvnjuk.

int adat1=10;
int adat2=(adat1+5)*4;
3.3.1 Tmbk

A tmb egy sszetett homogn adatstruktra, melynek tetszleges, de elre meghatrozott
szm eleme van. Az elemek tpusa azonos. A tmb lehet egy vagy tbbdimenzis, a
dimenzi szma nem korltozott.
Deklarlsa hasonlan trtnik mint a hagyomnyos vltozk. A [] jel jelzi, hogy nem
egyszer, hanem sszetett adatstruktrt deklarltunk.

int[] tomb;

Ilyenkor a tmbnk mg nem hasznlhat, hiszen a memriban mg nem trtnt meg a
helyfoglals. Ezt a new opertor hasznlatval tehetjk meg.

tomb = new int[10];
vagy
int[] tomb = new int[10];

Ezzel ltrehoztunk egy 10 elem, int-tpus tmbt. Hasznlhatjuk, feltlthetjk s
mveleteket vgezhetnk vele.
- 31 -


A tmb elemeire indexeik segtsgvel hivatkozhatunk. Ez mindig 0-tl indul s egyesvel
nvekszik. A kvetkez tmbben pldul lottszmokat trolunk:

tomb[0] = 18;
tomb[1] = 29;
tomb[2] = 13;
tomb[3] = 90;
tomb[4] = 15;

Abban az esetben, ha rgtn megadjuk a tmb kezdrtkeket is, akkor a new opertor
elhagyhat a deklarcibl:

int[] tomb = {1,2,3};

3.4 Literlok, konstansok

A vltozk egy rdekes tpusa a literl, akkor hasznljuk ket, amikor programunkban egy
konkrt rtket szeretnnk hasznlni. A literlok teht egyszer, rgztett rtkek,
tulajdonkppen konstansok. Jelentsk mindenesetben az aktulis tartalmukkal egyezik meg.
3.4.1 Szm literlok

A literlok alaprtelmezs szerint int tpusak, ha egszek, s double tpusak, ha
valsak. Abban az esetben, ha programunkban pldul float tpust szeretnnk hasznlni, az
rtk utn kell rni az f karaktert, vagy pldul long tpus esetn az l karaktert, illetve
ulong tpus esetn az ul karakterprt.
Ha magunk szeretnnk megadni a literl tpust, tegynk hozz egy uttagot. Ha pldul a 25
rtket long tpusknt szeretnnk hasznlni, rjuk gy: 25L. Ha ki szeretnnk ktni az eljel-
nlklisget is, akkor: 25ul.

Ha az L uttagot nmagban hasznljuk, nagybett kell alkalmaznunk; ms esetben mindegy.
Ennek oka az, hogy a l s 1 (egy) knnyen sszetveszthet, s a fordt ezt meg kvnja
elzni.

Lebegpontos szmok esetn a float tpus jele a f s F, a decimal tpus a m s M.

Float_literal=16 235 000f
- 32 -

3.4.2 Logikai literlok

A logikai literlok esetben a true s false kulcsszavakkal adhat meg az rtk.
3.4.3 Karakter, karakterlnc literlok

Karakter vagy karaktersorozat literlt a jelek kztt adunk meg.
3.4.4 Konstansok

A C# programokban llandkat, vagy ms nven konstansokat is definilhatunk. A
konstansok a program futsa alatt nem vltoztatjk rtkket, s nem lehet felldefinilni ket,
vagy rtkad utastssal megvltoztatni rtkket (ilyenkor ugyanis a fordt hibt jelez).
Tbb ms nyelvtl eltren, a C# nyelvben a konstansnak is van tpusa.

const byte szazalek=100;
const string=Ez egy konstans string;
3.5 Mveletek (operandusok, opertorok)
A vltozkkal kapcsolatosan tbbfle tpus mveletet tudunk vgezni, amelyeket az albbi
kategrikba sorolhatjuk:
rtkad mveletek
matematikai mveletek
relcis mveletek
feltteles mveletek
egyb mveletek

Ha a mveleti jelek oldalrl nzzk, akkor az albbi kategrikat llthatjuk fel:
Egyvltozs mveletek
Ktvltozs mveletek
Hromvltozs mveletek
3.5.1 rtkad mveletek
Programjaink rsa sorn az rtkad mveletek segtsgvel rtkeket tudunk adni a
vltozinkhoz.

a=kifejezs;

- 33 -

A mvelet jobb oldaln csak olyan kifejezs szerepelhet, melynek eredmnye kzvetlenl
megfelel az a vltoz tpusnak vagy kzvetlenl konvertlhat az a vltoz tpusra.
A C# nyelv lehetsgei adottak arra, hogy egyszerre tbb azonos tpus vltoznak adhassunk
rtket.

a=b=kifejezs;

Elszr kiszmtsra kerl a kifejezs rtke, majd az bekerl a b vltozba s ezt felveszi
az a vltoz is.
3.5.2 Matematikai mveletek
A matematikai mveletek sorn az adatokkal szmtsokat vgznk, amelyek operandusai
szmok vagy szmokat eredmnyez kifejezsek, fggvnyek. A matematikai kifejezsekben
hasznlhat opertorokat az albbi tblzatban foglaljuk ssze.

3. tblzat Matematikai kifejezsekben hasznlhat opertorok

OPERTOR MVELET OPERANDUSOK
TPUSA
EREDMNY TPUSA
+ sszeads egsz, vals egsz, vals
- kivons egsz, vals egsz, vals
* szorzs egsz, vals egsz, vals
/ oszts egsz, vals vals
% maradkkpzs egsz, egsz egsz
+ eljelezs egsz, vals egsz, vals
- eljelezs egsz, vals egsz, vals
3.5.3 sszetett matematikai mveletek
Az sszetett mveletek lehetv teszik szmunkra, hogy egyszerre vgezzk el a szmtst s
az rtkadst. A C# nyelvben lehetsg van arra, hogy az elz pontban ismertetett
matematikai mveleteket tmrebb formban fejezzk ki. Ezeket a kvetkez tblzatban
tntettk fel.

4. tblzat sszetett matematikai mveletek tmrebb alakjai

Mveleti jel Hasznlati alak Kifejtve
+= x += kifejezs x = x+kifejezs
-= x -= kifejezs x = x-kifejezs
*= x *= kifejezs x = x*kifejezs
- 34 -

/= x /= kifejezs x = x/kifejezs
%= x %= kifejezs x = x%kifejezs
3.5.4 Egyoperandus mvelet
A fentebbi fejezetekben megismert mveletek ltalban ktoperandusak voltak. Ltezik
azonban kt olyan mvelet, konkrtan a nvels s a cskkents, amelyek eggyel nvelik
illetve cskkentik a vltoz rtkt.

++x; ugyanaz, mint x=x+1; Prefixes alak
--x; ugyanaz, mint x=x-1; Prefixes alak

Az egyoperandud mveleteknl a mveleti jelek a vltoz mindkt oldaln elhelyezhetk:

x++; ugyanaz, mint x=x+1; Postfixes alak
x--; ugyanaz, mint x=x-1; Postfixes alak

A nvels s cskkents viszont nem ugyangy zajlik le az egyik illetve a msik esetben. A
prefixes alak esetben a nvels vagy cskkents elzetes mveletknt hajtdik vgre s ezt
kveten trtnnek a tovbbi mveletek (pl. rtkads). A postfixes alak esetben a nvels
vagy cskkents utlagos mveletknt hajtdik vgre s ezt megelzen trtnnek a tovbbi
mveletek (pl. rtkads). Az eredmny szempontjbl teht abszolt nem mindegy melyik
alakot hasznljuk.
3.5.5 Ktoperandus mveletek
A matematikai mveletek sorn megismert sszeads, kivons, szorzs, oszts
maradkkpzs tarozik ebbe a kategriba, de mivel ott mr ezek ismertetsre kerltek, gy itt
nem trnk ki kln r.
3.5.6 Hromoperandus mvelet
A C# nyelvben egyetlen olyan mvelet ltezik, amely hromoperandus, ez pedig egy
feltteles mvelet. Szintaxisa:

(felttel) ? utasts1 : utasts2

A kifejezs hrom rszre oszlik, mely rszeket a ? s : opertor vlaszt el egymstl.
Amennyiben a kifejezs elejn ll felttel igaz, gy az utasts1 kerl vgrehajtsra, ha
viszont a felttel hamis, akkor az utasts2. Ez a hromoperandus mvelet, tulajdonkppen
az if utasts tmrebb formja.

- 35 -

3.6 A kifejezsek
A kifejezseket konstans rtkekbl, vltozkban trolt adatokbl, fggvnyekbl s
mveletekbl llthatjuk ssze. A kifejezseket a szmtgp kirtkeli, kiszmtja s ennek
eredmnyt felhasznlhatjuk a ksbbiekben. A kifejezsek eredmnynek tpusa a bennk
szerepl adatok s mveletek tpustl fgg, kiszmtsuk mdjt pedig a precedencia
szablyok rjk el.

A precedencia szablyok hatrozzk meg a kifejezsekben a mveleti sorrendet, vagyis azt,
hogy az egyes mveleteket a szmtgp milyen sorrendben vgezze el. Elsknt mindig a
magasabb precedencij mvelet kerl vgrehajtsra, majd utna az alacsonyabb
precedencijak. Azonos precedencij mveletek esetn ltalban a balrl jobbra szably
rvnyesl. A fontosabb mveleteket a kvetkez tblzatban foglaljuk ssze. A tblzatban a
precedencia fellrl lefel cskken.

5. tblzat Mveletek precedencija fellrl lefel

Precedenciaszint Mvelettpus Opertorok
1. Elsdleges (), [], x++, x--, new, typeof,
sizeof, checked, unchecked
2. Egyoperandus +, -, !, ~, ++x, --x
3. Multiplikatv *, /, %
4. Additv +, -
5. Eltolsi <<, >>
6. Relcis <, >, <=, >=, is
7. Egyenlsgi ==, !=
8. AND &
9. XOR ^
10. OR |
11. Feltteles AND &&
12. Feltteles OR ||
13. Feltteles mvelet ? :
14. rtkads =, *=, /=, %=, +=, -=, <<=,
>>=, &=, ^=, |=

Itt kell megjegyeznnk, hogy a mveletek sorrendje zrjelezssel megvltoztathat, de a
zrjelen bell a tblzatban felsoroltaknak megfelelen vgzi el a mveleteket.

- 36 -

3.7 Nvterek
A nvterekkel az osztlyok valamilyen logika szerinti csoportostst lehet megoldani. A
nvterek egy adott osztly-csoport szmra egy, a klvilg fel zrt vilgot biztostanak,
amelyben a programoz dntheti el, hogy mely osztlyok lthatak s hasznlhatak kvlrl,
s melyek nem. A nvterek segtsgvel nagyobb jrafelhasznlhat kdrszeket
kszthetnk, valamint modularizlhatjuk programjainkat. Az objektumorientlt programozs
legmagasabb szint modulja az osztly. Nagyon fontos megjegyeznnk, hogy a nvterek nem
az objektumorientltsg fogalomkrbe tartoznak, hasznlatukat inkbb a fjlszervezs
krbe sorolhatjuk.
A .NET keretrendszer tbb elre gyrtott nvteret tartalmaz, amelyek osztlyait a
programozs sorn felhasznlhatunk. A .NET rendszer biztostja szmunkra pldul a
System nvteret, amely az ltalnosan hasznlt osztlyokat (pl. Console)
tartalmazza.
A System tbb alnvteret tartalmaz, ezekre a System.Alnvtr-knt
hivatkozhatunk. Az alnvtereken kvl a System nvtr kzvetlenl tartalmazza a
gyakori adattpusok (pl. String) defincijt is.
o A System.Net nvtr adja a hlzati programozshoz szksges osztlyokat.
o A System.Windows.Forms nvtr tartalmazza a Windows programozshoz
szksges elemeket, komponenseket.
o A System.IO nvtr biztostja a fjl- s mappa mveleteket.
o A System.Data nvtr szolgltatja az adatbzis-kezelshez szksges
komponenseket.

Nvteret az albbiakban lthat deklarcival hozhatjuk ltre:
namespace nvtrNeve
{
Osztlyok deklarcija
namespace
{
Osztlyok deklarcija
}
}

A nvterekben lev osztlyokra a kvetkez mdon hivatkozhatunk:
nvtrNeve.[AlnvtrNeve...].OsztlyNeve
pldul: System.Console.WriteLine...

Amint mr korbban emltettk programjainknak fontos rsze a felhasznlval val
kommunikci. A program futsa alatt adatokat kell bekrni, vagy ppen a program futsnak
eredmnyt szeretnnk kzlni vele. A vltozk tartalmnak beolvasshoz vagy
megjelentshez a kpernyn, a .NET rendszerben ignybe vehetjk a C# nyelv alapvet I/O
szolgltatsait, a System nvtrben tallhat Console osztly ide vonatkoz metdusait
(fggvnyeit s eljrsait).
System.Console.Read(); - A felhasznli inputra hasznlhat
- 37 -

System.Console.Write(); - A kperny konzol alkalmazs ablakba r
System.Console.ReadLine(); - A konzol ablak ne tnjn el a program futs vgn
System.Console.WriteLine(); - A kperny konzol alkalmazs ablakba r

A Console.Write() s a Console.WriteLine() a kirsra, mg a Console.Read() s a
Console.ReadLine() a beolvassra hasznlhat. A beolvass azt jelenti, hogy alaprtelmezs
szerint a standard inputeszkzkrl vrjuk az adatokat.
Abban az esetben ha a Read() beolvas utastst hasznljuk, int tpus adatot kapunk, a
ReadLine() metdus esetn viszont string-et.
public static string ReadLine();
public static int Read();

Adat beolvassakor azonban nem csak erre a kt tpusra lehet szksgnk, ezrt az input
adatokat konvertlnunk kell a megfelel konverzis eljrsokkal.
A System hivatkozs elhagyhat a metdusok hvsakor, amennyiben azt a program elejn,
a using bejegyzs utn felvesszk. Ezt a mveletet nvtr importlsnak nevezzk. Abban
az esetben, ha eltekintnk a nvtr importlstl, akkor az adott metdus teljes vagy ms
nven minstett.
using System;

Mivel konzolrl val beolvass sorn az adatainkat string tpus vltozba olvassuk be
(Console.ReadLine()), gy szksg van az adat pldul szmm trtn konvertlsra. Ezeket
a konverzis lehetsgeket a C# nyelvben a Convert osztly metdusai (pl. ToInt32)
knljk.
Nhny fontosabb konverzis metdus, korntsem a teljessg ignyvel. Akit a rszletek is
rdekelnek, tanulmnyozza t a Convert osztly tovbbi metdusait.
Convert.ToInt32
Convert.ToChar
Convert.ToString
Convert.ToBoolean
Convert.ToDateTime


- 38 -

4 Feltteles utastsok - szelekci
A strukturlt utastsok ms egyszer s strukturlt utastsokbl plnek fel. Az utastsok
ltal definilt tevkenysgek sorban (sszetett), feltteltl fggen (if s switch) vagy
ciklikusan ismtldve (for, while, do-while) hajtdnak vgre.
4.1 Relcis opertorok
A programjaink rsa kzben gyakran szksgnk lehet arra, hogy rtkeket
sszehasonltsunk, amelyhez szksgnk lesz a relcis opertorokra. A relcis mveletek
eredmnye minden esetben egy logikai rtk, ami vagy true(igaz) vagy false(hamis). A
relcis mveleteket a leginkbb a feltteles utastsoknl s a feltteles ciklusoknl
hasznljuk.

A relcis mveletek lehetsges opertorait a kvetkez tblzatban mutatjuk be:

6. tblzat Relcis mveletek opertorai

Mveleti jel Jelents
> nagyobb, mint
< kisebb, mint
== egyenl
!= nem egyenl
>= nagyobb vagy egyenl, mint
<= kisebb vagy egyenl, mint
4.2 Logikai mveletek
Logikai mveletek alatt a szoksos NOT, AND, OR s XOR mveleteket rtjk. A NOT
mvelet opertora a ! jel, a XOR mvelet a ^ jel. A tbbi mvelet esetben azonban
megklnbztetnk feltteles s felttel nlkli AND vagy OR mveletet.

7. tblzat Feltteles mveletek

Mvelet Mveleti jel Hasznlat Magyarzat
Feltteles AND && A && B Ha A hamis, B mr nem
rtkeldik ki
Feltteles OR || A || B Ha A igaz, B mr nem
rtkeldik ki
Felttelnlkli AND & A & B B mindig kirtkeldik
Felttelnlkli OR | A | B B mindig kirtkeldik
- 39 -


A feltteles mveletek s kirtkelsk:
AND (csak akkor igaz, ha mindegyik rszfelttel igaz)
OR (csak akkor igaz, ha legalbb egy rszfelttel igaz)
NOT (a megadott logikai kifejezs rtkt az ellenkezjre vltoztatja)
XOR (ha kt rszfelttel ellenttes rtk pl.TRUE s FALSE -, akkor TRUE)
A kvetkezkben a teljessg s a gyakorlati hasznlhatsg kedvrt nzzk meg a logikai
mveletek igazsgtblit.
8. tblzat Az AND opertor igazsgtblja

1. logikai kifejezs mvelet 2. logikai kifejezs Vgeredmny
TRUE AND TRUE TRUE
TRUE AND FALSE FALSE
FALSE AND TRUE FALSE
FALSE AND FALSE FALSE

9. tblzat Az OR opertor igazsgtblja

1. logikai kifejezs mvelet 2. logikai kifejezs Vgeredmny
TRUE OR TRUE TRUE
TRUE OR FALSE TRUE
FALSE OR TRUE TRUE
FALSE OR FALSE FALSE

10. tblzat A XOR opertor igazsgtblja

1. logikai kifejezs mvelet 2. logikai kifejezs Vgeredmny
TRUE XOR TRUE FALSE
TRUE XOR FALSE TRUE
FALSE XOR TRUE TRUE
FALSE XOR FALSE FALSE

11. tblzat A NOT opertor igazsgtblja

1. logikai kifejezs mvelet Vgeredmny
TRUE NOT FALSE
FALSE NOT TRUE
- 40 -

4.3 Feltteles utastsok
A feltteles utastsokat akkor hasznljuk, ha programunkat rzkenny kvnjuk tenni a
program futsa kzben valamely kifejezs vagy vltoz rtknek vltozsra. Attl fggen
milyen rtket vesz fel a vltoz vagy kifejezs a programunk ms-ms programrszt hajt
vgre, azaz elgazik. Az elgazsok lehetnek egygak, ktgak vagy tbbgak.
4.3.1 Egyg szelekci
Az if utasts egyg elgazst valst meg. Szintaxisa a kvetkez:

if (felttel) utasts;

termszetesen az utasts helyn utastsblokk is llhat. A felttelt mindig zrjelbe kell
tenni!

Amennyiben az if utn ll felttel igaz, a program az utastst vagy az utastsblokkot
hajtja vgre, ha hamis, akkor nem tesz semmit.
4.3.2 Ktg szelekci
A ifelse ktg elgazsnl a felttel hamis esetre is adunk meg vgrehajtand kdot,
amit az else kulcssz utn adunk meg. Szintaxisa a kvetkez:
if (felttel)
utasts1;
else
utasts2;
ebben az esetben is az utasts helyn utastsblokk is llhat.

Az if utn ll feltteltl fggen a program igaz esetben az utasts1-et hajtja vgre,
hamis esetben, pedig az utasts2-t. Fontos szintaktikai elem, hogy az else kulcssz
eltt is kell a pontosvessz (;), azt fleg a korbbi Delphi programozk figyelmbe ajnljuk.
Az elgazsok egymsba is gyazhatk, gy gyakorlatilag tetszleges mlysgben pthetjk
fel a feltteles utastsok lncolatt.

Elfordulhat, hogy egy if utasts valamelyik gn bell egy msik felttel alapjn jabb
elgazst pthetnk be.

Az egymsba gyazott feltteles utastsok helyett tbb esetben sszetett logikai kifejezst is
alkalmazhatunk. A kvetkez utasts csak akkor hajtdik vgre ha mindkt felttel
egyidejleg teljesl.

if (felttel1 && felttel2) utasts;
&& = Logikai S

- 41 -

A felttelek egymsba gyazsnl arra rdemes odafigyelnnk, hogy ezzel ne rontsuk
kdunk tlthatsgt illetve hatkonysgt. Ilyen esetben hasznljunk inkbb tbbg
szelekcit.
4.3.3 Tbbg szelekci
A switch utasts segtsgvel tbbg szelekcit tudunk programunkban megvalstani.
Szintaxisa:
switch kifejezs of
{
case rtk1:
utasts1;
break;
case rtk2:
utasts2;
break;
case rtk3:
utasts3;
break;

default:
utastsN;
break;
}

Az egyes case gak az adott esetben vgrehajtand utastst esetleg utastsokat
tartalmazzk. Az egyes gak utols utastsa a break, amely elmaradsa esetn a fordt
hibt jelez. A default g a case-ben felsorolt eseteken kvl es egyb lehetsgek
bekvetkezse esetn hajtdik vgre.
A gyakorlatban elfordulhat olyan eset is, amikor tbb rtk esetn is ugyanazt az utastst
vagy utastsblokkot kell vgrehajtani. Mivel a case kulcssz utn nem lehet tbb rtket
felsorolni, gy tbb case utastshoz rendelhetjk ugyanazt az utastst vagy utasts
blokkot.

switch kifejezs of
{
case rtk1:
case rtk2:
case rtk3:
utasts1;
break;
case rtk2:
utasts2;
break;
default:
utastsN;
break;
}

A switch utastsok case vezrlinl az sbyte, byte, short, ushort, int, uint, long, ulong,
char, string, enum tpus kifejezseket hasznlhatjuk.
- 42 -

4.4 Plda: Feltteles elgazsokat tartalmaz alkalmazs ksztse
Pldnkban szerepeljen egy szvegdoboz (TextBox), amelyben az illet szemly letkort
adhatja meg a felhasznl. Ha a Meghatrozs gombra kattintunk, ugorjon fel egy
zenetablak, melyben a program kirja a kvetkezket:

Ha az illet letkora
1 - 3 v: csecsem
4 - 6 v: vods
7 - 14 v: ltalnos iskols
15 -18 v: kzpiskols
19 - 23 v: egyetemista
egyb esetben: tanulmnyait befejezte
A kilps gombra kattintva az alkalmazsunk fejezze be a program futtatst!

1. Hozzunk ltre j projektet Eletkor nven!
2. Tervezzk meg az rlapot az albbiak szerint:



3. Az rlapon szerepl komponensek tulajdonsgait lltsuk be az albbiak szerint:

Komponens Text Name
Form letkor frmEletkor
Label Krem az letkort! lblKor
TextBox txtKor
Button Meghatrozs btnMeghataroz
Button Kilps btnKilepes


- 43 -

Eletkor.cs:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace Eletkor
{
public partial class frmEletkor : Form
{
public frmEletkor()
{
InitializeComponent();
}

private void btnMeghataroz_Click(object sender, EventArgs e)
{
int kor;
kor = int.Parse(txtKor.Text);
if (kor < 0)
MessageBox.Show("Negatv letkort adott meg!!!");
else
{
switch (kor)
{
case 1:
case 2:
case 3:
MessageBox.Show("Csecsem");
break;
case 4:
case 5:
case 6:
MessageBox.Show("vods");
break;
case 7:
case 8:
case 9:
case 10:
case 11:
case 12:
case 13:
case 14:
MessageBox.Show("ltalnos iskols");
break;
case 15:
case 16:
case 17:
case 18:
MessageBox.Show("Kzpiskols");
break;
case 19:
case 20:
case 21:
case 22:
case 23:
MessageBox.Show("Egyetemista");
break;
- 44 -

default:
MessageBox.Show("Tanulmnyait
befejezte!");
break;
}
}
}

private void btnKilepes_Click(object sender,
EventArgs e)
{
Close();
}


}
}
- 45 -

5 Stringek kezelse
5.1 Deklarls
A C# nyelvben is, mint minden magas szint nyelv esetben ltezik a string tpus.
ltalnossgban azt mondhatjuk, hogy az objektumorientlt nyelvek esetn a stringeket
osztlyknt kezeljk. Tehetjk ezt azrt, mert vannak metdusaik, tulajdonsgaik valamint
paramtereik, ahogy ezt mr az osztlyoknl megszoktuk. Persze a gyakorlatban gy
dolgozunk velk, mint a tbbi programozsi nyelv string tpusval. Mivel a C# is tpusos
nyelv, gy a tbbi vltozhoz hasonlan deklarlni kell ket, st ezzel egyidben kezdrtket
is adhatunk nekik.

string szoveg=Hello;

Amennyiben gy deklarlunk egy stringet hogy nem adunk neki kezdrtket, akkor
kezdetben null rtke van.

string szoveg;

A string vltoz rtkt brmikor lekrdezhetjk programunkban s kirathatjuk.

lblString.Text=szoveg;

A string rtke minden esetben karakterlnc literlknt kerl trolsra.

A string-eket hasznlhatjuk konstansknt is, csakgy mint ms tpusok esetn.

const szoveg_string="konstans";

5.2 A string-ek fontosabb metdusai
A relcik hasznlata tulajdonkppen a stringeknl is megengedett, persze vannak bizonyos
megktsek. A string-ek egyes elemeit relciba tudjuk hozni egymssal
szoveg[1]<szoveg[2], a teljes sring-re azonban csak a != s a == relcikat
alkalmazhatjuk. Ha kt string-et kvnunk sszehasonltani, abban az esetben a kvetkez
megoldst hasznlhatjuk:

string1.CompareTo(string2)

Amennyiben a kt string egyenl, akkor a visszatrsi rtk 0. Ha a kapott rtk kisebb,
mint 0, akkor viszont a string1 ABC sorrendben elbb helyezkedik el mint a string2, ha
viszont nagyobb mint 0, akkor a string2 van elbb.

- 46 -

TrimStart(b) metdus eltvoltja a szveg elejrl a paramter listjban megadott
karakter sszes elfordulst.

string szoveg=bbbbbele;
szoveg.TrimEnd(b) ele

TrimEnd(karakter) metdus eltvoltja a szveg vgrl a paramter listjban megadott
karakter sszes elfordulst.

string szoveg=vegggggg;
szoveg.TrimEnd(g) ve

A TrimStart(), TrimEnd() s a Trim() metdusok paramter nlkli alakban a string
elejrl, vgrl illetve elejrl s vgrl is levgjk a szkzket, azaz tulajdonkppen a
paramter nlkli alakban a -karakter az alaprtelmezett.

Itt rdemes felhvni a figyelmet arra, hogy a string-eket macskakrmk (), mg a
TrimStart() s TrimEnd() metdusok paramtereit aposztrfok () kz tettk, mivel az
els esetben string-eket, a msodik esetben pedig karaktert definiltunk.

A ToUpper() s a ToLower() metdusok segtsgvel a string-ek szksg esetn
nagybetss illetve kisbetss alakthatk. me a klasszikus plda:

string szoveg=Nemecsek Ern;
szoveg.ToUpper() NEMECSEK ERN
szoveg.ToLower() nemecsek ern

A Substring(kezdoindex,karakterszam) metdussal, a string egy darabjt tudjuk
kinyerni. A paramterlistban meg kell adni a kezd indexet, ahonnan a msolst kezdjk,
majd pedig a msoland karakterek szmt. Az albbi programrszlet a Substring()
metdus hasznlatt mutatja be.

string szoveg=Nemecsek Ern;
szoveg.Substring(9,4) ERN

Ha a Substring() metdusnak csak egy paramtert adunk s a paramter rtke a string
indextartomnyn bell van, akkor az adott indextl a string vgig valamennyi karaktert
visszaadja.
A paramterezskor gyelni kell arra is, hogy mindig csak akkora indexet adjunk meg,
amennyi eleme van a string-nek. A string els eleme a 0. index, mg az utols pedig a
karakterszm-1.

A metdusok kztt fontos szerepet tlt be a keress. Ennek a metdusnak IndexOf() a neve.
A. fggvny -1-et ad vissza, abban az esetben ha a paramter listjban megadott karakter,
- 47 -

vagy karaktersorozat nem szerepel a string-ben, ha szerepel 0-t vagy pozitv rtket. Azt
mr korbban lttuk, hogy a string-ek 0- tl kezdve vannak indexelve, gy tallat eseten 0-
tl a string hosszig kaphatunk visszatrsi rtket, ami a tallat helyt, azaz a kezd
indext jelenti a keresett karakternek, vagy karakterlncnak.

string mondat=Az nnepeken mindig nagy a kavalkd.;
string szo=kd;
if (mondat.IndexOf(szo)>-1)
lblNev.Text=A +szo+ szerepel a + mondat+ ban.;

Igaz hogy a + jel nem metdus, de mint mvelet rtelmezett a string-ekre, sszefzst
jelent. Az albbi pldban egy vezetknevet s egy keresztnevet fznk ssze, gyelve arra,
hogy a kt rsz kz elvlaszt SPACE karaktert is tegynk, majd kiratjuk egy cmke
felirataknt.

string vezeteknev=Nemecsek;
string keresztnev=Ern;
nev=vezeteknev+ +keresztnev;
lblNev.Text=nev;

5.2.1 A string-ek mint vektorok
A string-ek kezelhetk vektorknt is, ami azzal az elnnyel jr, hogy hivatkozhatunk r
elemenknt, mint a karaktereket tartalmaz tmbkre.

string szoveg1=txtSzoveg1.Text;
int darab=0;
for (int i = 0; i < szoveg1.Length; i++)
{
darab++;
}
MessageBox.Show(txtSzoveg1.Text+" sz "+ Convert.ToString(darab)+"
karakterbl ll");

A string Length tulajdonsgval a hosszra hivatkoztunk, majd az elrt lpsszm ciklus
magjban mindig az aktulis karaktert rattuk ki. cmkre. A fenti programrszletben azt
hasznltuk ki, hogy a string tulajdonkppen egy karaktertmb.

A string-ekbe lehetsgnk van rsz string-eket beszrni, melyet az Insert() metdus
segtsgvel valsthatunk meg. A metdus paramterlistjnak tartalmaznia kell azt az
indexet, ahov be szeretnnk szrni, s a karaktert vagy a karakterlncot. A kvetkez kis
programrszletben az Insert() metdus hasznlatt mutatjuk be.

string nev=Nem Ern;
nev=nev.Insert(3,ecsek);

A string tpusrl nyugodtan kijelenthetjk, hogy nlkle nem ltezik komolyabb program.
A leggyakrabb elfordulsa taln a fjlkezel programokhoz kthet. A string-eket
felhasznlhatjuk mg pldul szmrendszerek kztti tvltsok eredmnyeinek trolsakor,
- 48 -

vagy olyan nagy szmok sszeadsra, szorzsra, amelyekhez nem tallunk megfelel
mret vltozkat.
Sajnos nem minden programozsi nyelv tartalmazza a string tpust, s viszonylag kevs olyan
nyelv van, amelyben osztlyknt hasznlhatjuk ket, de ahol igen s szerencsre a C# nyelv
ilyen, ljnk a lehetsggel, mert sok esetben nagyban megknnyti illetve meggyorstja a
programozsi munknkat.

A string-ek hasznlatnak a felsoroltakon kvl mg nagyon sok metdusa ltezik, nem
beszlve a tulajdonsgokrl. Ezt a rszt tekintsk zeltknt a string-ek kezelshez. Akit
rszletesebben is rdekel a string-kezels s a metdusok, tulajdonsgok, az nyugodtan
lapozzon fel egy referenciaknyvet, amely tekintsen bele az MSDN-Help-be (rdemes).
Ezekben a string-kezels tovbbi finomsgairl is tovbbiakat olvashat.
5.3 Plda: String mveletek gyakorlsa
Pldnkban szerepeljen kt szvegdoboz (TextBox), amelybe a szvegeket a felhasznl
gpelheti be. A felhasznlnak lehetsge van sszehasonltani a kt TextBoxba rt szveget
vagy nagybetss illetve kisbetss konvertlni az els TextBoxba rt szveget. A szvegrsz
gomb hatsra kinyerhetnk az els TextBoxba rt szvegbl a megadott karaktertl szmtott
valahny karaktert. A karakter keress gomb hatsra az els TextBoxba rt szvegben
megkeresi a msodik TextBoxba rt szveg elfordulst s az eredmnyrl zenetablakban
tjkoztat a program. A szveghossz gomb hatsra az els TextBoxba rt szveg
karaktereinek a szmt rja ki a program szintn zenetablakban. Az utols lehetsg a
szvegbe beszrs gomb, amellyel valahanyadik karaktertl szrhatunk be egy a felhasznl
ltal TextBoxba megadott szvegrszt.
A kilps gombra kattintva az alkalmazsunk fejezze be a program futtatst!

4. Hozzunk ltre j projektet String nven!
5. Tervezzk meg az rlapot az albbiak szerint:

- 49 -



6. Az rlapon szerepl komponensek tulajdonsgait lltsuk be az albbiak szerint:

Komponens Text Name
Form Stringek frmString
Label Gpelje be a szveget! lblSzoveg1
Label Gpelje be a msik szveget! lblSzoveg2
Label Hanyadik karaktertl? lblHanyadik
Label Hny karakter? lblMennyi
Label Hanyadik karaktertl? lblMelyiktol
Label Mit szrjon be? lblMit
TextBox txtSzoveg1
TextBox txtSzoveg2
TextBox 2 txtHanyadik
TextBox 1 txtMennyi
TextBox 2 txtMelyiktol
TextBox beszr txtMit
Button sszehasonlt btnHasonlit
Button Nagybetsre alakt btnNagybetus
Button Kisbetsre alakt btnKisbetus
Button Szvegrsz btnResz
Button Karakter keress btnKeres
Button Szveghossz btnHossz
Button Szvegbe beszrs btnBeszur
Button Kilps btnKilepes
- 50 -


7. String.cs:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace String
{
public partial class frmString : Form
{
public frmString()
{
InitializeComponent();
}

private void btnKilepes_Click(object sender, EventArgs e)
{
Close();
}

private void btnHasonlit_Click(object sender, EventArgs e)
{
int azonose;
string szoveg1 = txtSzoveg1.Text;
string szoveg2 = txtSzoveg2.Text;
azonose = szoveg1.CompareTo(szoveg2);
if (azonose == 0)
MessageBox.Show("A kt bert szveg azonos!");
else
MessageBox.Show("A kt bert szveg nem azonos!");
}

private void btnNagybetus_Click(object sender, EventArgs e)
{
if (txtSzoveg1.Text != "")
MessageBox.Show("Els szveg nagybets alakja=" +
txtSzoveg1.Text.ToUpper());
else
MessageBox.Show("res a szveg mez!!!");
}

private void btnKisbetus_Click(object sender, EventArgs e)
{
if (txtSzoveg1.Text != "")
MessageBox.Show("Els szveg kisbets alakja=" +
txtSzoveg1.Text.ToLower());
else
MessageBox.Show("res a szveg mez!!!");
}

private void btnResz_Click(object sender, EventArgs e)
{
string szoveg1=txtSzoveg1.Text;
string
resz=szoveg1.Substring(Convert.ToInt32(txtHanyadik.Text)-1,
Convert.ToInt32(txtMennyi.Text));
- 51 -

MessageBox.Show(resz);
}

private void btnKeres_Click(object sender, EventArgs e)
{
string mondat=txtSzoveg1.Text;
string szo = txtSzoveg2.Text;
if (mondat.IndexOf(szo)>-1)
MessageBox.Show("A "+szo+" sz szerepel a "+ mondat+"
mondatban.");
else
MessageBox.Show("A "+szo+" sz nem szerepel a "+
mondat+" mondatban.");
}

private void btnHossz_Click(object sender, EventArgs e)
{
string szoveg1=txtSzoveg1.Text;
int darab=0;
for (int i = 0; i < szoveg1.Length; i++)
{
darab++;
}
MessageBox.Show(txtSzoveg1.Text+" sz "+
Convert.ToString(darab)+" karakterbl ll");
}

private void btnBeszur_Click(object sender, EventArgs e)
{
string szoveg1=txtSzoveg1.Text;
szoveg1=szoveg1.Insert(Convert.ToInt32(txtMelyiktol.Text),
txtMit.Text);
MessageBox.Show("Az j szveg a beszrs utn="+szoveg1);
}
}
}
- 52 -

6 Iterci
A programunk rsa kzben gyakran tallkozunk olyan dologgal, hogy ugyanazt a
tevkenysgsort tbbszr kell vgrehajtanunk, ilyenkor hasznlunk ciklusokat. ltalban
minden programozsi nyelv, gy a C# is az utastsok vgrehajtsra tbb lehetsget knl.
Ezek az elrt lpsszm s feltteles ciklusok. A feltteles ciklusok ktflk lehetnek
elltesztel vagy htultesztel - a felttel helytl fggen.
6.1 Elrt lpsszm ciklusok
A for ciklust, akkor hasznljuk, ha pontosan meg tudjuk mondani, hogy egy adott
tevkenysget hnyszor kell ismtelni. Szintaxisa:

for (ciklusvltoz=kezdrtk; vgrtk vizsglat; lptets)
utasts;

A for utasts a ciklus feje, ahol megadjuk a ciklusvltozt, annak kezdrtkt, a vgrtk
vizsglatt illetve a lptets mrtkt.
A ciklusvltoz, a kezdrtk s a vgrtk csak sorszmozott tpus lehet. Itt kell
megjegyeznnk, hogy az utasts helyn sszetett utasts is llhat, ebben az esetben
hasznljuk a korbban megismert {} utasts prt.
Az albbi pldban 1 s 3 kztti egsz szmokat jelentnk meg zenetablakban
egymsutn.

for (int i = 1; i < 4; i++)
MessageBox.Show(Convert.ToString(i));

A ciklus fejben ltrehozott vltozk csak a ciklus blokkjban rvnyesek, azaz azon kvl
nem rhetk el. Abban az esetben, ha ezeket a vltozkat illetve azok rtkeit a cikluson kvl
is fel akarjuk hasznlni, akkor a cikluson kvli vltozban kell eltrolni az rtkeiket vagy
pedig msik tpus ciklust kell hasznlni.

A foreach ciklus a for ciklus egy specilis esetre mdostott vltozata. A gyakorlatban
akkor hasznljuk, ha valamilyen sszetett adattpus (pl. tmb) elemeit egytl egyig fel akarjuk
dolgozni.

string[] nevek;
nevek = new string[3];
nevek[0] = "els";
nevek[1] = "msodik";
nevek[2] = "harmadik";
foreach (string nev in nevek)
MessageBox.Show(nev.ToUpper());

- 53 -


A fenti pldban egy neveket tartalmaz tmb (nevek) elemeit nagybets formban kvnjuk
megjelenteni, kln-kln zenetablakokban.
6.2 Feltteles ciklusok
A feltteles ciklust akkor hasznljuk programunkban, ha nem ismerjk az ismtlsek szmt,
ebben az esetben egy feltteltl tehetjk fggv az ismtlsek szmt. Attl fggen, hogy a
felttel a ciklusba val belpskor vagy kilpskor vizsgljuk, beszlhetnk elltesztel
illetve htultesztel ciklusrl.

Az elltesztel ciklus szintaxisa a kvetkez:

while (felttel)
{
utasts(ok);
}

A felttelt itt is csakgy, mint a szelekciml zrjelbe kell tenni.

3. bra
Az elltesztel ciklus mkdse

A while utastsban szerepl belpsi felttel vezrli a ciklus vgrehajtst. A ciklusmag
(utasts vagy utastsblokk) csak akkor hajtdik vgre, ha a felttel igaz. Nagyon fontos
megjegyezni, hogy a ciklusmagban kell gondoskodnunk arrl, hogy a felttelt elbb-utbb
hamisra lltsuk, mert egybknt vgtelen ciklusba jut programunk (soha nem tud kilpni a
felttel igaz volta miatt a ciklusbl).

Ha a felttel a ciklusba val belps eltt hamiss vlik, akkor a ciklus magja egyszer sem
hajtdik vgre.

Nzzk meg a for ciklusnl bemutatott pldt elltesztel ciklussal.
int i = 1;
while (i < 4)
{
MessageBox.Show(Convert.ToString(i));
i++;
}
- 54 -


A htultesztel ciklus szintaxisa a kvetkez:

do
{
utasts(ok);
}while (felttel)


4. bra
A htultesztel ciklus mkdse

A htultesztel ciklus esetn a ciklusmag egyszer mindenkppen lefut, hiszen a felttel
vizsglata s kirtkelse csak a ciklus vgn trtnik meg. A ciklusmag mindaddig
vgrehajtdik, amg a felttel igaz. A ciklusmagban itt is gondoskodnunk kell arrl, hogy a
felttelt elbb-utbb hamisra lltsuk, mert egybknt vgtelen ciklusba jut programunk
Nzzk meg az elbbi pldt htultesztel ciklussal:

int i = 1;
do
{
MessageBox.Show(Convert.ToString(i));
i++;
} while (i < 4);

A gyakorlatban elfordulhat az az eset is, amikor egy itercibl hamarabb kell kilpni,
minthogy az vgigfutott volna vagy a vgrehajtst valamilyen ok miatt a ciklus belsejbl a
ciklusfejre kell lptetni azonnal. Ezekre a break s a continue utasts szolgl a C#
programozsi nyelvben. A break hatsra a program az itercit kvet utastson
folytatdik, mg a continue hatsra nem lpnk ki a ciklusbl, a vgrehajts a ciklusfejre
kerl vissza.
Plda: Szrs szmtsa
Ksztsnk programot, mely meghatrozza egy szmsorozat szrst!

- 55 -



Az adatok szrdsrl a legpontosabb kpet gy kaphatjuk, ha az sszes adatot s azoknak
az tlagtl val eltrst figyelembe vesszk. Ennek leggyakrabban hasznlt mdszere
szrsngyzet (s
2
) meghatrozsa. Ennek ngyzetgyke a szrs (s):

n
x x x x x x
s
n
2 2
2
2
1 2
) ( ... ) ( ) ( + + +
=

n
x x x x x x
s
n
2 2
2
2
1
) ( ... ) ( ) ( + + +
=

A szrs meghatrozsnak lpsei:

Adatok kiolvassa a szvegdobozbl
tlag kiszmtsa.
n
x
x
n
i
i
=
=
1

Az tlagtl val eltrsek ngyzetnek kiszmtsa, valamint ngyzetsszeg kpzse.

=
=
n
i
n
x x eno
1
2
) (
Az tlaguk kiszmolsa, majd ezen tlag ngyzetgyknek kiszmolsa.
n
eno
n
x x
s
n
i
n
=

=

=1
2
) (

A kiszmolt szrs megjelentse a msik szvegdobozban.

1. Hozzuk ltre az rlapot a megfelel vezrlkkel!

Komponens Name Text Properties
Form Form1 Szrs szmts
- 56 -

Button btSzamitas Szrs
TextBox tbSzamsor Multiline=True
TextBox tbSzoras
Label label1 Szmsorozat:
Label label2 Szrs:

2. A gomb kattints esemnyhez rjuk meg a szmtst elvgz kdot!

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace szoras
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void btSzamitas_Click(object sender, EventArgs e)
{
//Hatrozzuk meg a szvegdoboz sorainak szmt!
int n = tbSzamsor.Lines.GetLength(0);

//Hozzunk ltre egy n darab double elembl ll tmbt!
double[] szamsor;
szamsor = new double[n];

//A szvegdoboz sorait szmm alaktva olvassuk a tmbbe!
for (int i = 0; i < n; i++)
{
szamsor[i] = int.Parse(tbSzamsor.Lines[i]);
}

//Szmtsuk ki az sszeget s az tlagot!
double osszeg=0;
for (int i = 0; i < n; i++)
{
osszeg += szamsor[i];
}
double atlag = osszeg / n;

//Szmtsuk ki az tlagtl val ngyzetes
//eltrsek sszegt!
//A System.Math.Pow(alap,kitev) fggvnnyel tudunk
//hatvnyozni.
double eno=0;
for (int i = 0; i < n; i++)
{
eno += System.Math.Pow((szamsor[i] - atlag),2);
}
- 57 -


//Az az tlagtl val ngyzetes eltrsek
//tlagbl gykt vonva megkapjuk a szrst.
//System.Math.Sqrt() fggvny segtsgvel vonunk gykt.
double szoras = System.Math.Sqrt(eno / n);

tbSzoras.Text = szoras.ToString();

}
}
}
6.3 Plda: Prmszm vizsglat
Ksztsnk programot, mely egy szmrl eldnti, hogy prmszm-e. A vizsglat eredmnyt
felugr ablakban jelentsk meg.

Annak eldntsre, hogy egy szm prmszm-e, tbb algoritmus is ltezik. Vlasszuk az
egyik legegyszerbb mdszert:
Felttelezzk a szmrl, hogy prm
[2 ; szm/2[ tartomnyba es sszes egsz szmmal megksreljk az osztst. Ha
tallunk olyan szmot, melynl az osztsi maradk 0, a szm nem prm. (A
vizsgland szm felnl nagyobb szmokkal felesleges prblkozni, biztos, hogy
kzttnk nem tallunk egsz osztt.)
Ha a fenti tartomnybl egyetlen szm sem ad 0-t osztsi maradkknt, a szm prm.
A C# nyelvben osztsi maradk kpzsre a % opertor szolgl.

1. Ksztsk el az rlapot



Komponens Name Text
Form Form1 Prm
TextBox tbSzam
Button btPrime Prm-e?
Label Label1 Vizsgland szm:

2. Rendeljnk esemnyt a gomb kattintshoz, s vgezzk el a vizsglatot
- 58 -


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace primszam
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void btPrime_Click(object sender, EventArgs e)
{

//Hozzunk ltre int tpus vltozt, melybe beolvassuk
//a szvegdobozbl a vizsgland rtket.
//A szvegdoboz string tpus tartalmt a int.Parse(szveg)
//fggvnnyel alakthatjuk szmm.
int szam = int.Parse(tbSzam.Text);

//prim-e logikai vltozban kezdetben felttelezzk,
//hogy a vizsglt szm prm.
bool prim_e = true;

//Ciklussal vgigjrjuk a lehetsges osztkat.
for (int i = 2; i < szam / 2; i++)
{
//Ha az osztsi maradk 0, a szm nem prim.
if (szam % i == 0)
{
prim_e = false;

//Ha talltunk osztt, felesleges tovbb
//folytatnunk a keresst, a break; paranccsal
//kiugrunk a ciklusbl.
break;
}

}
//Az eredmnytl fggen megjelentjk az zenetet.
if (prim_e == true)
{
MessageBox.Show("Prim");
}
else
{
MessageBox.Show("Nem prim");
}
}
}
}
- 59 -

7 Sajt metdusok ltrehozsa
Hosszabb programok rsa esetn mindenkppen javasolt a kd rszekre trdelse. Ennek
sorn olyan rszeket klntnk el, amelyek nmagban rtelmes rszfeladatokat ltnak el. A
rszfeladatoknak a feladatot lefed nevet clszer kitallnunk. Az ilyen, nll feladattal s
nvvel elltott, elklntett programrszletet eljrsnak nevezzk.
Az eljrsnak
a visszatrsi rtk tpusa ktelezen void (azaz nincs),
van neve (azonost),
lehetnek paramterei,
van trzse.

A fggvny rokon fogalom az eljrssal. A fggvny egy olyan eljrs, amely olyan
rszfeladatot old meg, melynek pontosan egy vgeredmnye is van - egy rtk.
Amennyiben fggvnyt akarunk rni, kt fontos dolgot kell szem eltt tartanunk:
A fggvnyeknl rgzteni kell, hogy milyen tpus rtket adnak majd vissza. Ezt a
fggvny neve eltt kell feltntetni (a void helyett).
A fggvnyek ezek utn ktelesek minden esetben egy ilyen tpus rtket vissza is
adni! A fggvny visszatrsi rtkt a return kulcssz utn rt kifejezsben kell
feltntetni.

A C#-ban az eljrsok s fggvnyek neve azonost, ezrt rvnyes az azonost nvkpzsi
szablya:

Amikor eljrst vagy fggvnyt runk, az alprogram trzsben sokszor hivatkozunk
vltozkra (paramterekre). E vltozkban az eljrs vagy fggvny a program elz rszei
ltal ellltott adatokat kap, vagyis bemen adatokat fogad. Az alprogramok ezen adatok
segtsgvel jabb rtkeket llthatnak el, melyeket a ksbbiekben jra felhasznlhatunk.

A paramtereket az eljrs fejrszben kell feltntetni. Fel kell sorolni vesszvel elvlasztva a
bemen adatok tpust, s egy azonostt kell adni ezen adatoknak. Ezt a listt formlis
paramterlistnak hvjuk.

int Lnko(int a, int b)

Amikor ezen eljrst meg akarjuk hvni, akkor a fenti bemen adatokat t kell adni neki. A
hvs helyn feltntetett paramterlistt (mely az aktulis bemen adatok rtkt tartalmazza)
aktulis paramterlistnak hvjuk. Aktulis paramterlistban mr sosem runk tpusokat,
hanem csak konkrt rtkeket!.

int oszto = Lnko(egyik, masik);
- 60 -


Rviden sszefoglalva a fentieket, sajt metdusok rsnak az elsdleges szerepe, hogy
olyan kdrszleteket (eljrsokat, fggvnyeket) ksztsnk, amelyeket a programunk sorn
tbbszr is vgre szeretnnk hajtani vagy ugyanolyan formban, vagy pedig paramterezetten
lehetsg van a ms adatokkal val meghvsra is. A fggvnyszint metdusok radsul
kpesek a kdrszlet lefuttatsa utn valamilyen rtk visszaadsra is.
7.1 Plda: Kt szm legnagyobb kzs osztjnak a meghatrozsa

Pldnkban szerepeljen kt szvegdoboz (TextBox), amelyben az egyik illetve msik szmot
adhatja meg a felhasznl, amelyeknek a legnagyobb kzs osztjra kvncsi. Ha a
Szmol gombra kattintunk, ugorjon fel egy zenetablak, melyben a program kirja a
felhasznl ltal megadott kt szm legnagyobb kzs osztjt.

A kilps gombra kattintva az alkalmazsunk fejezze be a program futtatst!

1. Hozzunk ltre j projektet Lnko nven!
2. Tervezzk meg az rlapot az albbiak szerint:



3. Az rlapon szerepl komponensek tulajdonsgait lltsuk be az albbiak szerint:

Komponens Text Name
Form Legnagyobb kzs oszt frmLnko
Label Krem az egyik szmot! lblEgyik
Label Krem a msik szmot! lblMasik
TextBox 32 txtEgyik
- 61 -

TextBox 12 txtMasik
Button Szmol btnSzamol
Button Kilps btnKilepes

A programunkban ltrehozunk Lnko nven (int Lnko(int a, int b)) egy fggvny tpus
metdust, amely kt egsz szmot vr paramterknt s a legnagyobb kzs osztjukat adja
vissza eredmnyknt. A metduson bell ellenrzst vgznk, ha a felhasznl negatv rtket
ad meg, akkor veszi annak abszolt rtkt s azzal szmol. A kt megadott szmot
sszehasonltja s amennyiben az els kisebb, gy felcserli ket, a knnyebb szmolhatsg
kedvrt. A % opertor az oszts maradkt adja vissza.

4. Lnko.cs:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace Lnko
{
public partial class frmLnko : Form
{
public frmLnko()
{
InitializeComponent();
}

int Lnko(int a, int b)
{
int s;
if (a < 0)
a = -a;
if (b < 0)
b = -b;
if (a < b)
{
s = b; b = a; a = s;
}
s = a % b;
while (s != 0)
{
a = b; b = s; s = a % b;
}
return b;
}

private void btnSzamol_Click(object sender, EventArgs e)
{
int egyik = int.Parse(txtEgyik.Text);
int masik = int.Parse(txtMasik.Text);
int oszto = Lnko(egyik, masik);
string stroszto = oszto.ToString();
MessageBox.Show("A kt szm legnagyobb kzs osztja: "+stroszto);
- 62 -

}

private void btnKilepes_Click(object sender, EventArgs e)
{
Close();
}
}
}
- 63 -

8 Objektumosztlyok s objektumok ltrehozsa
A C# programozsi nyelv segtsgvel objektumorientlt alkalmazsokat kszthetnk, st: a
nyelv szigoran objektumorientlt - ami azt jelenti, hogy a programok ksztse kzben
objektumokban kell gondolkodnunk, ebbl pedig az kvetkezik, hogy sem adatok, sem
metdusok (mveletek) nem ltezhetnek objektumokon kvl.
8.1 A program sszetevi
Egy objektumorientlt programot egyttmkd objektumok halmaza alkot. Az objektumok
adattagokbl s metdusokbl llnak. A gyakorlatban ahhoz, hogy egy mkd program
objektumokkal rendelkezzen, azokat a forrsprogramban az adott nyelv ltal elrt mdon
definilnunk kell. Az objektumok defincija (tpusnak lersa) az osztly. Az objektumokat
az osztlydefincik alapjn futsi idben hozzuk ltre. Az objektumokat az osztlyok
pldnyainak nevezzk.

Az osztlydefinci minden esetben az adattagok s a metdusok lerst tartalmazza. Az
adatok s a fggvnyjelleg metdusok azonostjuk eltt tpus-megjellst is kapnak.
8.2 Az osztly deklarlsa
Az osztlyokat a kvetkez ltalnos deklarcis formban szoks megadni:

class Osztly
{
adatok deklarlsa;
metdusok deklarlsa;
}

Az elbbi pldbl jl lthat, hogy az osztlydefinci egy blokkot alkot, a blokk kezdett s
vgt a {} zrjelpr jelzi. Az osztly minden adattagjt s metdust a blokkon, azaz a
zrjel-pron bell kell megadni.
8.3 Adattagok deklarlsa
Az objektum mveletei az objektumban deklarlt adattagokon dolgoznak. Az adatok
vltozkban helyezhetk el. A vltozk deklarlsakor el kell dntennk, hogy milyen
rtkeket vesznek majd fel s ezt a tpusmegjellssel definilni kell. A vltozk
deklarlsnak ltalnos mdja, amint ezt mr a korbbiakban lttuk:

tpus adattag_azonost = kezdrtk;

- 64 -

Az adattagok deklarlsakor ktfle mdostt lehet hasznlni, a static s a const
kulcsszavakat. A static mdostval az osztlyszint adattagot hozhatjuk ltre. Az gy
deklarlt statikus adattag rtke nem az osztly alapjn ltrehozott objektumban, hanem az
osztlyban kerl trolsra, gy bellthat illetve lekrdezhet az objektum ltrehozsa nlkl
is.

Nzznk meg egy pldt az osztlyszint adattag deklarlsra:

static double oVltoz = 211.12;

A const mdostval olyan adattagokat deklarlhatunk, amelyeknek rtke ksbb mr nem
mdosthat.
Nzznk meg egy pldt az lland adattag deklarlsra:

const nv = Visual C#;

Az adattagokra ltalban a programjainkban az osztlynv.adattagnv, illetve az
objektumvltoz.adattagnv formban tudunk hivatkozni.
8.4 Metdusok deklarlsa
Az objektumok adatain dolgoz eljrsokat s fggvnyeket (metdusokat) is az osztlyokon
bell deklarljuk, ennek ltalnos formja:
Eljrsjelleg metdus esetn:

void Eljrsjelleg_metdusnv (paramterlista)
{
eljrs bels vltozinak deklarlsa;
utastsok;
}

Fggvny-metdus esetn

tpus Fggvnyjelleg_metdusnv (paramterlista)
{
fggvny bels vltozinak deklarlsa;
utastsok;
}
return rtk;
}

A fggvnyjelleg metdus azonostja eltti tpus megadsakor kell meghatrozni, a
fggvny ltal eredmnyknt visszaadott adat tpust. Az eredmny visszaadst a return
utasts biztostja, amelyet a fggvny utastsrszben kell elhelyezni. Ezen utasts hatsra
a fggvny vgrehajtsa vget r s az rtk visszaaddik a fggvny hvsnak helyre, mint
eredmny. Fontos felhvni arra a programoz figyelmt, hogy a fggvnyjelleg metdusok
rsa sorn, ha szelekcit alkalmazunk, akkor valamennyi gon el kell helyezni a return
- 65 -

utastst, azaz egyetlen felttel esetn sem lphetnk ki gy a metdusbl, hogy ne adna
vissza rtket.

A paramterlista, amelyet mindig zrjelek kztt adunk meg adatokat kldhetnk a
metdusunkba, st akr vissza is kaphatunk onnan eredmnyeket (de csak fggvnyjelleg
metdusok esetn).

A metdusok deklarlsakor alkalmazhatjuk az adattagoknl mr megismert static
mdostt. Hasznlatval osztlyszint metdust hozhatunk ltre. Az ilyen metdus az
osztlybl ltrehozott objektumokban nem hasznlhat, csak osztlyszinten ltezik.

A metdusokra az osztlynv.metdusnv vagy az objektumvltoz.metdusnv
formban hivatkozhatunk.
8.5 Metdusok paramterezse
A metdusok nem csak osztlyaik vagy sajt bels adattagjaikkal dolgoznak, hanem kvlrl
is kaphatnak adatokat. Minden metdus rendelkezhet paramterekkel, amelyeket a fejlcben
definilunk, mint formlis paramterlista.
A paramterek az adatok tadsa szempontjbl lehetnek rtk vagy cm szerinti paramterek.
rtk szerinti paramtertadsnl a bejv adat csak felhasznlhat. Az albbi pldban egy
metdus a kapott adatokkal szmol.

class Param1
{
public static void Main()
{
Account haszon = new Account();
haszon.Count("Alma",152,3.5,15);
}
}

Ha a metdustl eredmnyt szeretnnk visszakapni, akkor fggvnyjelleg metdust
alkalmazunk. A fggvny return parancsa azonban csak egy rtket kpes visszaadni. A
gyakorlatban az az eset is elfordulhat, hogy tbb rtket is szeretnnk visszakapni. Ekkor
hasznljuk a cm szerinti paramtertadst.

class Param2
{
public static void Main()
{
double netto = 0;
double brutto = 0;
Account haszon = new Account();
haszon.Count(152,3.5,15,ref netto, ref brutto);
}
}

- 66 -

A fenti pldbl jl lthat, hogy a cmszerinti paramtertadsnl a ref direktvt
alkalmaztuk mind az aktulis, mind pedig a formlis paramtereknl. szre kell venni, hogy
br a netto s brutto vltozkat adatvisszaadsra hasznljuk, a metdushvs eltt
valamilyen rtket kell kapniuk, ami jelen esetben 0.

A most bemutatand msik pldban a netto s brutto rtkek esetben deklarljuk, hogy
ezek a vltozk kifejezetten csak visszatr adatok (out).

class Param3
{
public static void Main()
{
double netto;
double brutto;
Account haszon = new Account();
haszon.Count(152,3.5,15,out netto,out brutto);
}
}

Az out jells azt is szksgtelenn teszi, hogy a formlis paramternek a metdushvs
eltt valamilyen korbban kapott rtke legyen. A metdusok paramterezsnl
alkalmazhatunk elre nem definilt szm paramtert is.
8.6 Adatok s metdusok lthatsga
Az objektumorientlt programozs egyik alapelve az, hogy az objektumok zrt rendszerben
mkdnek. Ez azt jelenti, hogy egy objektumot csak az n. interfszn keresztl lehet
megszltani; az interfsz pedig gondosan megvlogatott metdusokat tartalmaz. Az
objektumok adatait s metdusait ezrt klnbz lthatsgi megszortsokkal ltjuk el.
Az osztlydefincikban az albbi lthatsgi szinteket hasznlhatjuk:
private, csak az osztlyban, vagy a belle kzvetlenl ltrehozott objektumokban
elrhet illetve hasznlhat adattag vagy metdus. (alaprtelmezett)
protected, csak az osztlyban, vagy a belle szrmaztatott osztlyokban, s az ezekbl
ltrehozott objektumokban elrhet illetve hasznlhat adattag vagy metdus.
public, brhonnan elrhet illetve hasznlhat adattag vagy metdus.
A lthatsgi szintek alkalmazsval az objektumok adattagjait s az objektumon bell
hasznlt metdusait elrejthetjk a klvilg ell. Az adattagok msik objektum ltali
lekrdezst vagy belltst olyan metdusokkal biztostjuk, melyek kdja ellenrztt
hozzfrst biztost az objektum belsejhez.
Ha az osztly valamely tagjaira nem adunk meg lthatsgi megszortst, akkor azokra az
alaprtelmezett private lthatsg vonatkozik.
Nzznk meg egy pldt az adattagok s metdusok lthatsgnak belltsra:

public class Osztly
{
private int i = 5;
- 67 -

protected c = Karakterlanc
private void Atlag()
.
}

Amint az a fenti pldbl lthat lthatsgi megszorts magra az osztlyra is bellthat,
ennek az objektumok rkldsnl lehet fontos szerepe.
8.7 A property-k
Az elz fejezetekben mr volt sz az objektumok zrtsgrl, a bels adattagok
metdusokon keresztl val elrsrl. Ebben az esetben azonban az adat-hivatkozs helyett
metdusokat kell meghvnunk. A property-k alkalmazsa viszont, gy teszi lehetv az
objektum bels adattagjaira val hivatkozst, hogy kzben megtarthatjuk a hivatkozs adat-
jellegt is.

private int ev; //kvlrl nem elrhet adat
public int Ev //kvlrl elrhet property
{
get
{
return ev;
}
set
{
ev = value;
}
}

A fenti kdrszlet szerint egy osztly bels adattagknt az ev vltozt tartalmazza. Az Ev
property-n keresztl adathivatkozs-jelleggel rhatjuk s olvashatjuk is:

Osztaly.Ev = 2004;

Ebben az esetben, a httrben vgrehajtsra kerl az Ev property set metdusa, s
megtrtnik az rtkads az ev bels vltozba. A metdus termszetesen brmilyen
tovbbi, esetleg ellenrzst szolgl kdot is tartalmazhat mg ezen fell.
Az v vltoz tartalmt pldul a kvetkez utastssal is lekrdezhetjk:

x = Osztaly.Ev;

Ez utbbi esetben a get metdus hajtdik vgre, visszaadva (esetleg talaktva, feldolgozva)
az v rtkt. Ha szveges formban is (kettezerngy) meg szeretnnk kapni az vszmot,
kszthetnk mg egy property-t:

public string SzovegesEv
{
get
{
- 68 -

return Szoveg(ev);
}
}

A SzovegesEv property-n keresztl csak lekrdezhetjk az vet, mivel nincs set metdus.
Az eredmnyt viszont most szvegknt kapjuk meg, abban az esetben, ha ltezik a Szoveg
fggvny, amely az vszmot szvegg konvertlja.
A property-k azrt hasznosak, mert hasznlatukkal
bellthatjuk, hogy a bels adatok rhatk s olvashatk, csak olvashatk vagy csak
rhatk legyenek,
a get s set metdusok ellenrz, talakt, feldolgoz kdok beiktatst is
lehetv teszik,
adatknt lekrdezhetnk olyan adattagokat, amelyek bels adattagknt esetleg nem is
lteznek,
a get metdus vgl is brmilyen szmtsi, feldolgozsi mvelet eredmnyt
visszaadhatja.
- 69 -

9 Grafika
A C# krnyezet hatkony eszkzket knl grafikk ksztsre. A rajzols els rnzsre
nem tnik egyszernek, de nhny plda utn knnyen ttekinthetv vlik.

Windows rendszerben mindenrt, amit a kpernyre rajzolunk a GDI (Graphics Device
Interface) felels. A windows-os programok, s maga a Windows is ezen a kdon keresztl
rajzolja a szvegeket, vonalakat, grafikkat, stb. a kpernyre. A GDI kzvetlen kapcsolatban
ll a grafikus krtya meghajt programjval, s eldnti, hogy a kvnt rajz hogyan jelenthet
meg legjobban a rendelkezsre ll grafikus eszkzn. Pldul, ha a grafikus krtyn
belltott sznmlysg kisebb a megjelentend grafika sznmlysgnl, a GDI gondoskodik
az optimlis helyettest sznek megvlasztsrl. A programoznak ezrt nem kell azzal
trdnie, hogy milyen a rendelkezsre ll grafikus megjelent eszkz.

A C# kd a Graphics osztlyon keresztl kommunikl a GDI-vel.
9.1 A Graphics osztly
Mieltt elkezdennk rajzolni, ltre kell hoznunk egy Graphics osztly egy pldnyt. A
kvetkez pldkban a jobb ttekinthetsgrt az osztlyok pldnyit magyar nvvel lttuk el.
a Szerencsre minden grafikus windows vezrl automatikusan rkli a CreateGraphics()
metdust, melyen keresztl hozz tudunk frni a vezrl grafikus rszhez.

Pldnak hozzunk ltre az rlapon egy gombot, s kezeljk le a kattints esemnyt! Az
esemnyhez rendeljk a kvetkez kdot:

private void button1_Click(object sender, EventArgs e)
{
Bitmap kep;
kep = new Bitmap(@"c:\kp.jpg");

Graphics grafika;
grafika = this.CreateGraphics();
grafika.DrawImage(kep,0,0);
}

1. Az els kt sor ltrehozz a Bitmap osztly egy pldnyt kep nven, majd a
konstruktornak paramterknt tadjuk a betltend kp elrsi tvonalt.
2. Ezutn hozzuk lte a Graphics osztly egy pldnyt grafika nven. Grafika nev
objektumunkhoz most rendeljk hozz az aktulis rlap (this) fellett. Itt az rlap
helyett vlaszthatnnk brmely vezrlt az rlapon pl:

grafika = this.TextBox1.CreateGraphics();

- 70 -

3. Ezutn mr csak a kp felrajzolsa marad htra a DrawImage() metduson keresztl a
(0,0) koordintj ponttl. A koordintarendszer origja a bal fels sarokban van, a
tengelyek jobbra, illetve lefel mutatnak.

A plda szemlletes, de nem mkdik tkletesen. Ha a Windows-nak jra kell rajzoltatnia
ablakunkat, az ltalunk elhelyezett grafikt nem fogja jrarajzolni. Ha letesszk az ablakot a
tlcra, majd vissza, a grafika eltnik. Ugyanez trtnik, ha egy msik ablak egy idre fedi a
minket. Ha a fenti programsorokat az rlap Paint esemnyhez rendeljk, a rajzols
megtrtnik minden alkalommal, amikor az ablak tbbi elemt jra kell rajzolni.
9.2 A sznek (Color)
Sznvlasztsra hrom lehetsgnk knlkozik:

1. Vlasztunk a System.Drawing.Color felsorols elre definilt sznei kzl. Ezek a
sznek angol nevei: pl, Red, Green, DarkBlue. A teljes felsorols rtelmetlen lenne, a
komplett lista megjelentshez hasznljuk az automatikus kdkiegsztt! (A color.
legpelse utn ctrl+betkz billentyk lenyomsval megjelen lista.)

Pl: Color.Orange

2. A rendszersznek kzl vlasztunk. Az asztal belltsai kztt a felhasznl t tudja
lltani a Windows szneit. Ha azt szeretnnk, hogy grafiknk kvesse a felhasznl
belltsait, a System.Drawing.SystemColors felsorols szneire hivatkozzunk! (Pl:
Window alak szne ; Higlight szvegkijells httrszne ; HiglightText
szvegkijells szvegszne ; Desktop asztal szne , stb.)

Pl: SystemColors.WindowText

3. Sajt sznt definilunk, melynek megadjuk a piros, kk s zld sszetevit. A Color
osztly FromArgb() metdusa hrom byte tpus paramterrel rendelkezik, melyeken
keresztl bellthatjuk a hrom sszetevt. A piros sznt a kvetkezkppen adhatjuk
meg:

Pl: Color.FromArgb(255, 0, 0);
9.3 A toll (Pen)
Mg graphics osztly biztostja szmunkra a felletet, amire rajzolhatunk, szksgnk van egy
eszkzre, amivel rajzolunk. Hozzuk ltre a Pen osztly egy pldnyt, s lltsuk be tollunk
jellemzit: adjuk meg a vonal sznt, vastagsgt s stlust! A Pen konstruktornak els
paramtere a vonal szne, ezutn kvetkezik a vonal vastagsga.
- 71 -


Pen toll;
toll = new Pen(Color.DarkBlue, 3);
toll.DashStyle =
System.Drawing.Drawing2D.DashStyle.Dot;

A System.Drawing.Drawing2D.DashStyle felsorols tartalmazza a rendelkezsnkre ll
vonalstlusokat, ezek kzl vlaszthatunk. Ha nem adunk meg kln vonalstlust, a vonal
folytonos lesz.

rtk Lers
Dash
------
DashDot
----
DashDotDot
---
Dot

Solid
Folytonos
Custom
Egyedi. A Pen osztly rendelkezik olyan
tulajdonsgokkal, melyeken keresztl
egyedi vonalstlus is kialakthat. A
rszletekre itt nem trnk ki.

A rajzoljunk egy vonalat, ellipszist s egy tglalapot! A DrawEllipse() metdus utols ngy
paramtere az ellipszist befoglal tglalap bal-fels sarknak x s y koordintja, valamint a
tglalap szlessge s magassga:

Pen toll;
toll = new Pen(Color.DarkBlue, 3);
toll.DashStyle = System.Drawing.Drawing2D.DashStyle.Dot;


grafika.DrawLine(toll, 10, 10,100,100);

grafika.DrawEllipse(toll, 10, 10, 100, 100);

grafika.DrawRectangle(toll, 10, 10, 100, 100);
9.4 Az ecset (Brush)
Mg a toll a vonalak jellemzit tartalmazza, az ecset a kitltend alakzatok kitltsi
tulajdonsgait rja le. Hozzunk ltre egy sajt ecsetet s rajzoljunk vele:

Brush ecset;
ecset = new System.Drawing.SolidBrush(Color.DarkBlue);

grafika.FillEllipse(ecset,10,10,100,100);
9.4.1 Mints ecset s toll (TexturedPen)
Ltrehozhatunk olyan ecsetet, illetve tollat is, mely egy kpbl nyert mintval rajzol:
- 72 -


Bitmap kep;
kep = new Bitmap(@"c:\kp.jpg");

Brush mintasEcset;
mintasEcset = new System.Drawing.TextureBrush(kep);

Pen mintasToll = new Pen(MintasEcset, 30);
grafika.DrawRectangle(mintasToll, 10, 10, 100, 100);
9.5 Szveg rajzolsa
Szveg rajzolshoz kt objektumot is ltre kell hozni: egy bettpust s egy ecsetet.

Font betu;
betu = new System.Drawing.Font("Arial", 30);

Brush ecset;
ecset = new System.Drawing.SolidBrush(Color.Black);

grafika.DrawString("Hello", betu, ecset, 10, 10);
9.6 lland grafikk ltrehozsa az rlapon
Egyszerbb alakzatok rajzolsnl jrhat t, hogy a rajzolst az rlap objektum Paint
esemnyhez ktve minden alkalommal elvgezzk, amikor az rlap jrarajzolja magt.

Szmtsignyes grafikk esetn a fenti megolds nagyon lelasstja a programot. Ilyenkor
ltrehozhatunk egy Bitmap objektumot a memriban, amire egyszer elg megrajzolni a
grafikt. A Paint metdusban ezt az objektumot msoljuk az rlapra. (A fejlesztkrnyezet
ltal generlt kdvzban srgval emeljk ki sajt sorainkat.)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace Grafika6
{
public partial class Form1 : Form
{
Bitmap rajzFelulet;

public Form1()
{
InitializeComponent();

//Ltrehozzuk a bittrkpet a konstruktorban
//tadott mretben
rajzFelulet = new Bitmap(200,200);
- 73 -


//Ltrehozzun a Graphics osztly egy pldnyt,
//melyen keresztl rajzolhatunk a rajzfelletre
Graphics grafika;
grafika = Graphics.FromImage(rajzFelulet);

Brush ecset;
ecset = new System.Drawing.SolidBrush(Color.DarkBlue);

grafika.FillEllipse(ecset, 10, 10, 100, 100);
}

private void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics grafika;
//A grafika objektum rlapunk-ra (this) mutat
grafika = this.CreateGraphics();

//A DrawImage metdussal felrajzoljuk a rajzFelulet
//az rlapra
grafika.DrawImage(rajzFelulet, 0, 0);

//Megszntetjk a grafika objektumot
grafika.Dispose();


}
}
}
- 74 -

10 Tbbablakos alkalmazsok ksztse
A gyakorlatban majdnem minden grafikus alkalmazs tbb ablakot kezel. Ebben a fejezetben
megmutatjuk, hogyan kezelhetnk tbb ablakot egy projekten bell.
10.1 zenetablakok
A MessageBox osztly segtsgvel zenetablakot jelenthetnk meg, mely szveget,
gombokat s egy ikont tartalmazhat. A MessageBox Osztly j pldnyt nem hozhatjuk
ltre, az zenetet a statikus MessageBox.Show() metdus segtsgvel jelenthetjk meg. A
metdust tbb paramterezssel is hvhatjuk.

Ha csak egyetlen szveges paramtert adunk t, a megadott szveg s egy Ok gomb jelenik
meg:




Paramterezssel megadhatjuk az ablak nevt, a szksges gombokat s az zenet tpust
jelkpez ikont is:

MessageBox.Show("zenet.", "Ablak felirata",
MessageBoxButtons.OK, MessageBoxIcon.Information);



A MessageBoxButtons felsorols tagjaival adhatjuk meg, milyen gombok jelenjenek meg a
felugr ablakon. A gombok felirata a Windows nyelvi belltsaitl fgg. A lehetsges
kombincikat az albbi tblzatban foglaljuk ssze:

Tag neve Megjelen gombok
AbortRetryIgnore
MessageBox.Show("zenet.");
- 75 -

OK Ok
OKCancel Ok s Mgse
RetryCancel Ismt s Mgse
YesNo Igen s Nem
YesNoCancel Igen, Nem, Mgse

A MessageBoxIcon felsorols tagjaival az ablakon megjelen ikont llthatjuk be:

Tag neve Ikon
Asterisk

Error

Exclamation

Hand

Information

Question

Stop

Warning


A MessageBox.Show() metdus visszatrsi rtkbl megtudjuk, hogy a felhasznl melyik
gombbal zrta be az ablakot. A DialogResult felsorols tagjai azonostjk a lehetsges
gombokat (Abort, Cancel, Ingore, No, OK, Retry, Yes).

DialogResult valasz;
valasz = MessageBox.Show("Folytassuk?", "A folytats",
MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (valasz == DialogResult.Yes)
{
MessageBox.Show("J, folytatjuk");
}
else
{
MessageBox.Show("Akkor abbahagyjuk...");
}

- 76 -


10.2 Plda: Ktablakos alkalmazs

Pldnkban szerepeljen egy legrdl doboz (ComboBox), melynek elemeit az j szak
gombra kattintva bvthetjk. Ha a gombra kattintunk, ugorjon fel egy ablak, melyben
megadhatjuk az j szak nevt. A legrdl doboz csak akkor bvljn az j elemmel, ha az
ablakot OK gombbal zrtuk be.

1. Hozzunk ltre j projektet szaklista nven!
2. Tervezzk meg a frlapot az albbiak szerint:



3. Az rlapon szerepl komponensek tulajdonsgait lltsuk be az albbiak szerint:
4.
Komponens Text Name Properties
ComboBox cbSzakok
Button j szak btUjSzak

5. Ksztsk el a felugr rlapot, melyben megadhatjuk az j szak nevt:


- 77 -


6. Vlasszuk a project / Add Windows Form menpontot
7. A megjelen sablonok kzl a Windows Formra lesz szksgnk. Nevezzk az j
rlapot UjSzak-nak, majd kattintsunk az Add gombra!
8. Helyezznk el egy szvegdobozt (TextBox) s kt gombot (Button) az rlapon!
9. Az rlapon szerepl komponensek tulajdonsgait lltsuk be az albbiak szerint:

Komponens Text Name Properties
Label j szak neve
TextBox tbSzak Modifiers: public
Button Ok btOk DialogResult: OK
Button Mgsem btMegse DialogResult: Cancel
Form j szak UjSzak AcceptButton: btnOk
CancelButton: btnMegsem
FormBorderStyle:
FixedDialog
MaximizeBox: False
MinimizeBox: False
ShowInTaskbar: False

o Ha szvegdoboz modifiers tulajdonsgt public-ra lltjuk, kvlrl is lthatv
vlnak a szvegdoboz tulajdonsgai, gy ki tudjuk olvasni annak tartalmt.
o Nem mindegy, hogy a felhasznl Ok vagy Mgse gombbal zrja be az
ablakot. Ezt az informcit a gombok DialogResult, illetve a Form
AcceptButton s CancelButton tulajdonsgainak rtelem szer belltsval
tudjuk visszaadni a frlapnak. Ezeket lsd ksbb.
o Rendeljnk esemnyeket az Ok s a Mgsem felirat gombokhoz!
Mindkt gomb zrja is be az ablakot.

UjSzak.cs:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace KetAblak
{
public partial class UjSzak : Form
{
public UjSzak()
{
InitializeComponent();
}

private void btMegse_Click(object sender, EventArgs e)
- 78 -

{
Close();
}

private void btOk_Click(object sender, EventArgs e)
{
Close();
}


}
}

10. A szaklista rlap gombjhoz rendeljnk esemnyt, mely megnyitja az UjSzak rlapot.
Ha a felhasznl az Ok gombbal zrta be a felugr ablakot, adjuk hozz a legrdl
doboz tartalmhoz az j szakot!

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Xml;

namespace WindowsApplication2
{
public partial class Form1 : Form
{
public Szaklista()
{
InitializeComponent();

private void btUjSzak_Click(object sender, EventArgs e)
{
//frmUjSzak nven ltrehozzuk az UjSzak
//az UjSzak osztly egy pldnyt
UjSzak frmUjSzak = new UjSzak();

//a ShowDialog metdussal mejelentjk az j
// ablakot
if (frmUjSzak.ShowDialog() == DialogResult.OK)
{
cbSzakok.Items.Add(frmUjSzak.tbSzak.Text);
}

}
}
}

A ShowDialog() metdus hvsval az rlapot gynevezett modal ablakknt jelentjk
meg. Ez azt jelenti, hogy amg a felhasznl ezt az ablakot be nem csukja, az alkalmazs tbbi
ablaka inaktv. A ShowDialog() metdus csak akkor tr vissza, amikor a felugr ablakot a
felhasznl bezrta. (A ShowDialog() metdushvs utn szerepl utastsok csak a felugr
ablak bezrsa utn kerlnek feldolgozsra.) Visszatrsi rtkbl tudjuk meg, hogy a
- 79 -

felhasznl melyik gombbal csukta be az ablakot. A felugr ablakban megadott rtket csak
akkor adjuk hozz a cbSzakok legrdl doboz elemeihez, ha a felhasznl Ok-val zrta be
az ablakot.

A Form osztlynak ltezik egy Show() metdusa is, mely nem modal ablakknt jelenti meg
az rlapot, s azonnal visszatr. Ezrt visszatrsi rtkbl nem derl ki, hogy melyik
gombbal zrtuk be az ablakot.
- 80 -

11 Kivtelkezels
A C# programozsi nyelv a futsidej hibk kikszblsre alkalmas eszkzt is tartalmaz.
Ennek az eszkznek a segtsgvel a programjainkba hibakezel (ms nven kivtelkezel)
kdrszleteket is bepthetnk. A kivtelkezel eljrsoknak programjainkban az a lnyege,
hogy elkerljk a futskzben fellp hibk sorn felbukkan hibazeneteket, s megvdjk
programjainkat a vratlan lellstl.
11.1 Hibakezels
A programkszts sorn mg a gyakorlott programozknl is elfordul, hogy valamilyen
utastst, opertort vagy egy mveleti jelet nem a C# programnyelv szablyai szerint rt le. A
leggyakoribb hiba taln az, hogy az utasts vgrl lefelejtik a pontosvesszt. Ilyenkor a
program az elz utasts folytatsaknt kezdi el rtelmezni a kvetkez utastst, amelynek
eredmnye fordtsi hiba lesz. Ezek a hibk mivel a program fordtsa sorn keletkeznek, gy
megakadlyozzk a program futtatst.

A fordtprogram ltal szlelt hibkat szintaktikai hibknak nevezzk. Egy program addig
nem futtathat, amg szintaktikai hibt tartalmaz.

Elfordulhat olyan eset is, amikor a fordt csak valamilyen figyelmeztetst kld a
programr szmra. A figyelmeztetsek olyan hibra hvjk fel a programr figyelmt,
amelyek nem akadlyozzk meg a program futtatst, de esetleg rontjk programunk
hatkonysgt vagy esetleg csak rontjk a forrsprogram ttekinthetsgt (pl. deklarlunk
egy vltozt, de azt sehol nem hasznljuk a programunkban, azaz felesleges trhelyet
foglalunk!).

A szintaktikai hibk mellett a programunk logikai hibkat is tartalmazhat, de ez nincs
befolyssal a program futtatsra (a program fut csak bizonyos input adatokra nem azt az
outputot adja, amit kellene).

A program futsa sorn fellp (nem kls okbl szrmaz) hibkat szemantikai hibnak
nevezzk. Megelzskrl a programkdban kell megfelel ellenrz, hibakezel
utastsokkal gondoskodni.
11.2 A try s catch
A try parancs segtsgvel a programok egyes rszeihez tudunk hibakezel eljrsokat
rendelni, amelyek a futskzbeni hiba esetn a vezrlst az ltalunk megrt hibakezel
utastsokra adjk t, ezzel kikszblve a program lellst.
- 81 -

A catch parancs segtsgvel azokat a kivteleket tudjuk elfogni, amelyek a try blokkban
keletkeznek. Itt lehet meghatrozni, milyen utastsok kerljenek vgrehajtsra, s hogyan
kezeljk a felmerl hibkat A catch segtsgvel klnbz hibk egyidej kezelst is
meg lehet valstani.

Abban az esetben, ha nem hasznljuk a hibakezel eljrsokat, a programunk lell, s a
hibakezelst vagy az opercis rendszer vagy pedig a .NET rendszer veszi t. Ennek ltalban
az a kvetkezmnye, hogy klnbz (esetleg angol nyelv) hibazeneteket r a programunk
a kpernyre, amely les programok esetn elfogadhatatlan (nem vrhat el a
felhasznltl, hogy a programoz hanyagsga miatt megtanuljon legalbb alapszinten
angolul). Fokozottan rvnyes ez azokra a programokra, ahol a felhasznl adatbevitelt
valst meg, amint ez a kvetkez pldban trtnik.

int oszto=0;
double hanyados;
try
{
hanyados=10/oszto;
}
catch (ArithmeticException ar)
{
MessageBox.Show(Convert.ToString(ar));
}

Amennyiben az oszto vltoz rtke 0 a vgrehajts pillanatban, akkor a kivtelkezels
mkdsbe lp, a catch blokkban elkapjuk a hibt s kiratjuk zenetablakban az okt.

A fenti programrszletben a try utn kapcsos zrjelek kzt adjuk meg a hibt okozhat
programrszletet. A hiba abban az esetben lp fel, ha az oszto rtke 0. A catch
hibakezel utastsait is kapcsos zrjelek kz tesszk, ezzel jelezve a fordtnak, hogy hol
kezddik s hol vgzdik a hibakezels.

A catch blokkjban lehetsgnk van a klnbz okok miatt keletkezett hibk
sztvlasztsra, valamint a hiba tpusnak meghatrozsra is. A catch parancs a kivtelt
akr paramterknt is fogadhatja catch(Exception e). A paramterknt megadott vltoz
System.Exception tpus, amelybl ki lehet olvasni a hiba okt s a megfelel hibakezelt
indthatjuk el.
A kpernyn megjelen hibazenet az esetek tbbsgben nem tl beszdes, vagy ha igen
akkor gyakran tlsgosan sok, nehezen rthet informcit tartalmaz. Termszetesen a
hibakezels sorn nem az a clunk, hogy a felhasznlt hossz, szmra rtelmezhetetlen
zenetekkel terheljk, mert gy gyakorlatilag ugyanazt teszzk, mint az eredeti hibaablak
(amelyben megjelenik az eredeti hibazenet). Azt sem szabad elfelejteni, hogy a felhasznl
tulajdonkppen nem is nagyon tudja kezelni a program futsa kzben fellp hibkat, mg
akkor sem, ha kiratjuk a kpernyre a hiba valamennyi paramtert. A gyakorlatban sokkal
- 82 -

jobb megoldsnak szmt, ha megllaptjuk a hiba okt, majd pedig a megfelel hibakezels
aktivizlsval meg is szntetjk azt, anlkl hogy a felhasznlt nehz helyzetbe hoznnk.

A gyakorlatban ltalban a catch blokkok sorrendje sem mindegy. A helyes megkzelts
az, ha azokat a hibkat az ltalnos hibk el helyezzk, melyekre j esllyel szmtani lehet a
programban. Ilyen lehet pldul a felhasznli adatbekrsnl fellp hiba vagy a
matematikai mveleteknl elfordul nullval val oszts esete.

A kivtel tpusokat a System nvtrben (namespace) tallhatjuk meg.
11.3 A finally blokk
A programunk rsa sorn elfordulhat olyan eset is, hogy egy programrszlet hibs s
hibtlan mkds esetn is mindenkppen lefusson. A leggyakrabban a fjlkezelsnl tallunk
erre pldt, mivel a megnyitott fjlt hiba esetn is mindenkppen le kell zrni. Gondoljunk
bele milyen hibt okozhatna, ha a fjl bezrsa nlkl prblnnk jra megnyitni a fjlt. Az
ilyen tpus problmkra nyjthat megoldst a finally parancs.
A finally blokkban elhelyezett kd teht minden esetben lefut kivve, ha a program
vgzetes hibval ll meg - , fggetlenl az eltte keletkezett hibktl. A kvetkez pldban a
matematikai mveleteknl gyakran fellp nullval val oszts esett mutatjuk be a finally
blokk hasznlatval:

int oszto=0;
double hanyados;
try
{
hanyados=10/oszto;
}
catch (ArithmeticException ar)
{
MessageBox.Show(Convert.ToString(ar));
}
finally
{
MessageBox.Show("A program ezen rsze mindenkppen lefut");
}

11.4 Kivtelek feldobsa
A C# programozsi nyelv lehetsget ad a programoz ltal definilt kivtelek hasznlatra
is. A kivtelek dobsa a throw paranccsal trtnik.

throw (exception);
throw exception;

- 83 -

A program brmely szintjn dobhatunk a kivtelt a throw parancs segtsgvel, s egy
tetszleges catch blokkal el is tudjuk kapni. Amennyiben nem kapjuk el sehol a
programunkban, akkor az a Main() fggvny szintjn is megjelenik, majd vgl az opercis
rendszer lekezeli a sajt hibakezel eljrsval, ami persze a legtbbszr a programunk
lellsval jr.
11.5 Checked s unkchecked
A C# programozsi nyelv tartalmaz kt tovbbi parancsot a kivtelek kezelsre s a hibk
javtsra. Az egyik a checked a msik pedig az unchecked parancs. Amennyiben az
rtkadskor a vltozba olyan rtket kvnunk elhelyezni, amely az adott vltoz
rtktartomnyban nem fr el, OverflowException hibval ll meg a programunk.
Szerencss esetben az ilyen jelleg hibkat el tudjuk kapni, a megfelel catch{} blokk
alkalmazsval, de az unchecked parancs hasznlatval megakadlyozhatjuk a kivtel
keletkezst is, mivel ilyen esetben elmarad a hibaellenrzs.

unchecked
{
byte a=300;
}

A fenti pldban a byte tpus vltoz maximum 255-ig tud rtket trolni. Az rtkads
ennek ellenre megtrtnik, s a vltozba bekerl a csonktott rtk, persze csak akkora,
amekkora mg elfr benne.

A checked alkalmazsval pontosan az elbbi folyamat ellenkezjt rhetjk el. Az
ellenrzs mindenkppen megtrtnik, s kivtel keletkezik a hiba miatt.

A checked s unchecked parancsok nem csak blokknt hasznlhatak, hanem egy
kifejezs vagy rtkads vizsglatnl is. Ekkor a kvetkez alakban rhatjuk ket:

checked(kifejezs, mvelet, rtkads);
unchecked(kifejezs, mvelet, rtkads);

A bemutatott formban csak a zrjelek kz rt kifejezsekre, vagy egyb mveletekre
vonatkoznak. Alaprtelmezs szerint a checked llapot rvnyesl a programokban
tallhat minden rtkadsra s mveletre. Csak nagyon indokolt esetekben hasznljuk ki az
unchecked nyjtotta lehetsgeket, mert knnyen okozhatunk vgzetes hibkat a
programjainkban.

A kivtelkezels fejezetben lertak alapjn knnyen belthatjuk, hogy a hibakezels illetve a
kivtelek kezelse nagyon fontos s hasznos lehetsg a C# programozsi nyelvben. Ezek
nlkl nehz lenne elkpzelni hibtlanul mkd programokat. Termszetesen meg kell
vallanunk, hogy a kivtelkezelst alkalmaz programok sem tkletesek, de j esly van arra,
- 84 -

hogy programunk nem ll le vgzetes hibval s nem kesertik sem a programoz, sem pedig
a felhasznlk lett.
11.6 Plda: Hibakezels a msodfok egyismeretlenes egyenlet kapcsn
Pldnkban szerepeljen hrom szvegdoboz (TextBox), amelyben a felhasznl a msodfok,
majd az elsfok vgl pedig a konstans tag egytthatjt adhatja meg. Ha a Megolds
gombra kattintunk, ugorjon fel egy zenetablak, melyben a program kirja a felhasznl ltal
megadott msodfok egyenlet gykeit, amennyiben ez lehetsges. Ha 0-val val oszts
trtnik, gy errl tjkoztatjuk a felhasznlt az zenetablakban.

A kilps gombra kattintva az alkalmazsunk fejezze be a program futtatst!

1. Hozzunk ltre j projektet Masodfoku nven!
2. Tervezzk meg az rlapot az albbiak szerint:



3. Az rlapon szerepl komponensek tulajdonsgait lltsuk be az albbiak szerint:

Komponens Text Name
Form Msodfok egyenlet frmMasodfoku
Label Krem a msodfok tag egytthatjt! lblMasodfoku
Label Krem az elsfok tag egytthatjt! lblElsofoku
Label Krem a konstanstag egytthatjt! lblKonstans
TextBox 3 txtMasodfoku
TextBox 6 txtElsofoku
- 85 -

TextBox 12 txtKonstans
Button Megolds btnMegold
Button Kilps btnKilepes
Amennyiben a gyknk eredmnye vgtelen, ami 0-val val oszts esetn lp fel, akkor
kivtelt dobunk throw new DivideByZeroException(), melyet a catch() rszben
kapunk el s kezelnk le. A felhasznlt zenetablakban tjkoztatjuk a nullval val oszts
kvetkeztben fellp hibrl!

4. Masodfoku.cs:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace Masodfoku
{
public partial class frmMasodfoku : Form
{
public frmMasodfoku()
{
InitializeComponent();
}

private void btnKilepes_Click(object sender, EventArgs e)
{
Close();
}

private void btnMegold_Click(object sender, EventArgs e)
{
int a = int.Parse(txtMasodfoku.Text);
int b = int.Parse(txtElsofoku.Text);
int c = int.Parse(txtKonstans.Text);
double gyok1, gyok2;
try
{
gyok1 = -b + Math.Sqrt(b * b - 4 * a * c) / (2 * a);
gyok2 = -b - Math.Sqrt(b * b - 4 * a * c) / (2 * a);
if (gyok1.ToString() == "vgtelen")
throw new DivideByZeroException();
else
MessageBox.Show("Gyk1=" + gyok1 + "Gyk2=" + gyok2);
}
catch (DivideByZeroException divex)
{
MessageBox.Show("A msodfok tag egytthatja=0");
}
}
}
}
- 86 -

12 llomnykezels
A C# nyelv programozsa sorn elssorban a hagyomnyos C-nyelvbl megismert
fjlkezelsi technikit szoks hasznlni. Abban az esetben, ha a fjl megnyitsakor valamilyen
hiba lp fel, akkor a programunk tbbnyire valamilyen hibazenettel lell. A C# programozsi
nyelv persze lehetv teszi az llomnykezels sorn a be- s kiviteli mveleteknl fellp
mveletek hiba ellenrzst. Ezzel a rsszel itt nem kell foglalkoznunk, hiszen a
kivtelkezelsnl lertak itt is rvnyesek.

A programozsi nyelvekben az llomnyokat tartalmuk alapjn szveges (text), tpusos s
tpusnlkli fjlok csoportjra osztjuk. A szveges fjlokat soros, mg a msik kettt soros s
kzvetlen elrssel egyarnt elrhetjk.

A szmtgpen az opercis rendszer feladati kz tartozik a fjlrendszer tmogatsa s a
fjlok elrsnek biztostsa. Az llomnyok tartalmnak elrshez a programozsi nyelvtl
s az opercis rendszer fajtjtl fggetlenl mindig ugyanazokat a fbb lpseket kell
vgrehajtani. Nzzk meg melyek ezek!
Elkszletek
Az llomny megnyitsa
Az llomny tartalmnak feldolgozsa fjlmveletekkel (rs, olvass, pozicionls)
A szksges mveletek elvgzse utn az llomny lezrsa

Fjlkezels, llomny fajtk
Szveges
Binris
Xml
12.1 Szveges llomnyok kezelse
Fel kell hvni a figyelmet mg arra is, hogy fjlkezels sorn az llomny elejre be kell
szrnunk a kvetkez sort, mert csak ezutn lesz kpes programunk a fjlok kezelsre.
using System.IO;
12.1.1 Szveges s binris fjlok rsa, bvtse, olvassa
A kvetkez pldban a c:\ knyvtrban lv teszt.txt fjlt hozzuk ltre a
File.CreateText metdus segtsgvel, amennyiben mg nincs ilyen nev fjl a
knyvtrban, ha igen, akkor nem trtnik semmi.

string utvonal = @"c:\teszt.txt";
if (!File.Exists(utvonal)) //ha nem ltezik a fjl az adott knyvtrban,
- 87 -

csak akkor r bele
{
using (StreamWriter sw = File.CreateText(utvonal)) //Ltrehoz egy
szvegfjlt rsra
{
sw.WriteLine("Szia!"); //Hello szveg rsa a fjlba
sw.WriteLine("n vagyok az"); //And szveg rsa a fjlba
sw.WriteLine("Megismersz?"); //Welcome szveg rsa a fjlba
}
}

A kvetkez rszben mr ellenrzs nlkl runk a fjlba a File.AppendText metdus
segtsgvel. Amennyiben a fjl nem ltezik akkor ltrehozsra kerl, ezrt nem szksges az
ellenrzs, ha pedig ltezik akkor megmarad a fjl tartalma s a megadott rsszel kibvl az
llomny a vgn.

using (StreamWriter sw = File.AppendText(utvonal))
{
sw.WriteLine("Ezt mr");
sw.WriteLine("ellenrzs nlkl");
sw.WriteLine("rtam a fjlba!!!");
}

Ebben a programrszletben egy fjlt nyitunk meg olvassra a File.OpenText metdus
segtsgvel s addig olvasunk belle, amg null rtket nem olvasunk. A beolvasott
adatokat kiratjuk zenetablakban a kpernyre.

string utvonal = @"c:\teszt.txt";
using (StreamReader sr = File.OpenText(utvonal))
{
string s = "";
while ((s = sr.ReadLine()) != null)
{
MessageBox.Show(s);
}
}
12.1.2 Binris fjlok rsa, olvassa
Az elz rszben mr szltunk a szveges llomnyok kezelsrl. Vannak azonban olyan
esetek, amikor egyszerbb lenne a munknk, ha nem kellene szveges llomnybl illetve
llomnyba konvertlni az adatainkat (pl. szmok kezelse sorn). Elfordulhat olyan eset is,
hogy nem praktikus a trolshoz szveges llomnyokat hasznlnunk, mert egy kls
egyszer kis szvegszerkeszt programmal meg lehet nzni a tartalmt (pl. jelszavak
trolsnl, persze lehet kdolni ket, de ez mr jabb programozsi problmkat vet fel).

Az ilyen jelleg problmk feloldsra talltk ki a binris llomnyokat, amelyek tartalmt
nem lehet szvegszerkeszt programokkal megtekinteni illetve lehet bennk kzvetlenl
szmokat trolni, mindenfle konverzi nlkl. A binris adatok jellemzje, hogy megtartjk
az adattpus eredeti trolsi formjt, azaz nem alaktjk szvegg.
- 88 -


A kvetkez kis pldaprogramunkban 10 darab egsz szmot trolunk:

FileStream File = new FileStream(args[0], FileMode.CreateNew);
BinaryWriter bw = new BinaryWriter(File);
for (int i = 0; i < 10; i++)
{
bw.Write(i);
}
bw.Close();
File.Close();

A 10. tblzatban a FileMode lehetsges rtkeit mutatjuk be:

10. tblzat A FileMode rtkei
rtk Lers
Append Megnyit egy ltez fjlt vagy jat kszt.
Create j fjlt kszt. Ha a fjl mr ltezik, a program trli s j fjlt hoz
ltre helyette.
CreateNew j fjlt hoz ltre. Ha a fjl mr ltezik, kivtelt vlt ki, amit illik
lekezelnie a programoznak.
Open Megnyit egy ltez fjlt.
OpenorCreate Megnyit egy fjlt, vagy ha nem ltezik ltrehozza.
Truncate Megnyit egy ltez fjlt s trli a tartalmt.

A FileStream objektumot ltrehozsa utn azonnal fel kell ksztennk a binris adatok
fogadsra. Ezt gy tudjuk megoldani, hogy a BinaryWriter tpust kapcsoljuk az
objektumhoz.

FileStream File = new FileStream(FileMode.Create);
BinaryWriter bw = new BinaryWriter(File);
//A kvetkez lpsben az objektumba ktzvetlenl tudunk rni
adatokat, a Write tagfggvnnyel
bw.Write(i );
//Ha befejeztk az rst a fjlba, akkor gondoskodnunk kell a
megnyitott folyamok bezrsrl
bw.Close();
File.Close();
//Ha llomnyba kirtunk valamit, akkor a fjlbl olvasskor
elltesztels ciklust hasznlunk
FileStream File = new FileStream(FileMode.Open);
BinaryReader br = new BinaryReader(File);
lstLista.Items.Clear();
while (br.PeekChar() != -1)
{
lstLista.Items.Add(br.ReadInt32());
}
br.Close();
File.Close();

- 89 -

while (br.PeekChar() != -1) sorban olvassuk be a BinaryReader osztly PeekChar()
tagfggvnyvel az adatfolyam kvetkez karaktert. Ez a tagfggvny mindig a kvetkez
karaktert adja vissza, egy kivteltl eltekintve, ha elrtk az adatfolyam vgt, ebben az
esetben -1-et ad vissza. Az egsz rtkek beolvasshoz a ReadInt32() tagfggvnyt
tudjuk felhasznlni. A BinaryReader osztly rendelkezik a ReadInt32-hz hasonl
tagfggvnyekkel a tbbi egyszer adattpushoz is.
12.2 Plda: Vletlen szmok generlsa lottszmokhoz, szvegfjlba
Pldnkban szerepeljen hrom rdigomb (RadioButton) egy kontnerben (GroupBox),
amelyben a felhasznl kivlaszthatja, hogy ts, hatos vagy skandinv lotthoz kvn
vletlen szmokat generlni. Az els esetben 5 szmot generlunk 90-bl, a msodikban 6-ot
45-bl, mg a harmadikban 7-et 35-bl. A generlst a generl gombra kattintssal indtjuk,
melyeket egy ComboBox-ban jelentnk meg. A felhasznlnak lehetsge van szveges
fjlba kirni az adatokat igny szerint.

A kilps gombra kattintva az alkalmazsunk fejezze be a program futtatst!

1. Hozzunk ltre j projektet Veletlenfajlba nven!
2. Tervezzk meg az rlapot az albbiak szerint:



- 90 -

3. Az rlapon szerepl komponensek tulajdonsgait lltsuk be az albbiak szerint:

Komponens Text Name
Form Lottszmok frmLotto
GroupBox Lott gbLotto
RadioButton ts lott rgOtos
RadioButton Hatos lott rgHatos
RadioButton Skandinv lott rgHetes
ComboBox cmbSzamok
Button Generl btnGeneral
Button Fjlba r btnFile
Button Kilps btnKilepes
saveFileDialog1 saveFileDialog1

A feladat kdja tartalmaz egy eljrsszint metdust, amellyel a klnbz tpus
lottszmokbl tudunk vletlenszeren generlni megadott darabszmot. Kt bemen
paramtere van a tartomny felshatra, amelybl hzhatunk, valamint a kihzhat szmok
darabszma (mindkett egsz tpus), void lottoszamok(int szam,int darab).

4. Veletlenfajlba.cs:
using System;
using System.IO;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace Veletlenfajlba
{
public partial class frmLotto : Form
{
public frmLotto()
{
InitializeComponent();
}

private void btnFile_Click(object sender, EventArgs e)
{
saveFileDialog1.InitialDirectory = "c:\\";
saveFileDialog1.Filter =
"Szvegfjlok (*.txt)|*.txt|Mindenki
(*.*)|*.*";
saveFileDialog1.FileName = "";
if (saveFileDialog1.ShowDialog() ==
DialogResult.OK)
{
int i=0;
TextWriter tw =
File.CreateText(saveFileDialog1.FileName);
while (i < cmbSzamok.Items.Count)
{
- 91 -

cmbSzamok.SelectedIndex = i;
tw.WriteLine(cmbSzamok.SelectedItem);
i++;
}
tw.Close();
}
}


void lottoszamok(int szam,int darab)
{
byte veletlen;
System.Random rnd = new System.Random();
for (int i = 1; i <= darab; i++)
{
veletlen = (byte)rnd.Next(1, szam + 1);
cmbSzamok.Items.Add(veletlen);
}
}

private void btnGeneral_Click(object sender, EventArgs
e)
{
cmbSzamok.Items.Clear();
if (rgOtos.Checked == true)
lottoszamok(90,5);
if (rgHatos.Checked == true)
lottoszamok(45,6);
if (rgHetes.Checked == true)
lottoszamok(35,7);
}

private void btnKilepes_Click(object sender, EventArgs
e)
{
Close();
}
}
}
12.3 Knyvtrkezelsi utastsok
12.3.1 Knyvtr mveletek
j knyvtr ltrehozsa:
System.IO.Directory.CreateDirectory (string)

Knyvtr tartalmnak mozgatsa egyik (source) helyrl a msikra (destination):
System.IO.Directory.Move(source, destination);

res knyvtr tartalmnak trlse:
System.IO.Directory.Delete (string)

Alknyvtr ltrehozsa:
System.IO.DirectoryInfo.CreateSubdirectory (string)
- 92 -


Visszaadja az adott knyvtrban lv alknyvtrak neveit:
System.IO.Directory.GetDirectories (string)

A paramterben megadott knyvtr ltezst vizsglja
System.IO.Directory.Exists(string)


Visszaadja az aktulis alknyvtrat
System.IO.Directory.GetCurrentDirectory()

A gykrknyvtrat adja vissza
System.IO.Directory.GetDirectoryRoot(string);

A gpen tallhat logikai meghajtkat listzza ki
System.IO.Directory.GetLogicalDrives();
12.3.2 Plda: Knyvtr mveletek hasznlata
Pldnkban a knyvtrak kezelst mutatjuk be. A ltezik gombra kattintva a felhasznl
ellenrizheti lteik-e mr a proba nev knyvtr a c:\ meghajtn. A knyvtr ltrehozsa
gombbal ltre tudjuk hozni a tervezett knyvtrakat. A kvetkez gomb az aktulis
knyvtrat adja eredmnyl. Az alknyvtrak ltrehozsa gombbal az adott alknyvtrba
tudunk tovbbi knyvtrakat ltrehozni. A kvetkez gombra kattintva a mellete lv
listaablakban az adott knyvtr alknyvtrait tudjuk listztatni. A gykrknyvtr gombra
kattintva az adott tvonal gykrknyvtrt adja vissza. A meghajtk gombra kattintva a
mellette lv listaablakban a logikai meghajtkat listzza ki.
A kilps gombra kattintva az alkalmazsunk fejezze be a program futtatst!

1. Hozzunk ltre j projektet Konyvtarak nven!
- 93 -

2. Tervezzk meg az rlapot az albbiak szerint:


3. Az rlapon szerepl komponensek tulajdonsgait lltsuk be az albbiak szerint:

Komponens Text Name
Form Knyvtrak kezelse frmKonyvtar
ListBox lstKonyvtar
ListBox lstMeghajtok
Button Ltezik btnLetezik
Button Knyvtr ltrehozsa btnKonyvtar
Button Aktulis knyvtr btnAktualis
Button Alknyvtrak ltrehozsa btnAlkonyvtar
Button Knyvtr alknyvtrai btnAllista
Button Gykrknyvtr btnGyoker
Button Meghajtk btnMeghajtok
Button Kilps btnKilepes

4. Konyvtarak.cs:
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Globalization;
using System.IO;

namespace DirectoryTest
- 94 -

{
public class frmKonyvtar : System.Windows.Forms.Form
{

public frmKonyvtar()
{
InitializeComponent();
}

static void Main()
{
Application.Run(new frmKonyvtar());
}

private void btnLetezik_Click(object sender, EventArgs e)
{
//Knyvtr ltezsnek vizsglata.
if (Directory.Exists("c:\\proba"))
MessageBox.Show("c:\\proba knyvtr mr ltezik");
else
MessageBox.Show("c:\\proba knyvtr mg nem ltezik");
}

private void btnKonyvtar_Click(object sender, EventArgs e)
{
//Knyvtr ltrhozsa.
Directory.CreateDirectory("c:\\proba");
}

private void btnAktualis_Click(object sender, EventArgs e)
{
//Aktulis knyvtr lekrdezse.
MessageBox.Show("Az aktulis knyvtr" +Directory.
GetCurrentDirectory());
}

private void btnAlkonyvtar_Click(object sender, EventArgs e)
{
//Alknyvtrak ltrehozsa.
Directory.CreateDirectory("c:\\proba\\a\\1\\2\\3");
Directory.CreateDirectory("c:\\proba\\b");
Directory.CreateDirectory("c:\\proba\\c");
}

private void btnAlLista_Click(object sender, EventArgs e)
{
// Knyvtrban lv alknyvtrak listzsa.
lstKonyvtar.Items.Clear();
foreach (string s in Directory.GetDirectories("c:\\proba"))
lstKonyvtar.Items.Add(s);
}


private void btnGyoker_Click(object sender, EventArgs e)
{
// Gykr knyvtr lekrdezse.
MessageBox.Show(Directory.GetDirectoryRoot("c:\\proba\\aa\\11"));
}

private void btnMeghajto_Click(object sender, EventArgs e)
{
- 95 -

// A gpen tallhat meghajtk lekrdezse.
lstMeghajtok.Items.AddRange(Directory.GetLogicalDrives());
}

private void btnKilepes_Click(object sender, EventArgs e)
{
Close();
}

}
}
12.3.3 llomnymveletek
A kvetkez metdus a fjl attribtumt olvassa be:
File.GetAttributes(path1)

A kvetkez metdus a fjl attribtumt mdostja s a vltozsokat lltja be:
File.SetAttributes(path1, File.GetAttributes(path1) Or
FileAttributes.Hidden)

A kvetkez metdus a fjl teljes (abszolt) elrsi tvonalt adja meg:
fullPath = Path.GetFullPath(path1)

A kvetkez metdus a fjl nevt adja meg kiterjesztssel egytt:
result = Path.GetFileName(path1);

A kvetkez metdus a fjl kiterjesztst adja meg:
extension = Path.GetExtension(path1);

A kvetkez metdus a fjl kiterjesztsnek vltoztatsi lehetsgt nyjtja:
result = Path.ChangeExtension(f1, ".old")

Nzznk meg egy kdrszletet arra, hogyan lehet egy llomnyt egy msik knyvtrba
mozgatni illetve msolni, kzben az llomny trlse is bemutatsra kerl, abban azt esetben
ha abban a knyvtrban ltezik ilyen nev llomny:
Move(f1,f2) az adott knyvtrban lv f1 fjl mozgatsa f2-be
Delete(f1) az adott knyvtrban lv f1 fjl trlse
Copy(f1,f2)- az adott knyvtrban lv f1 fjl msolsa f2-be
CopyTo(f1,f2) az adott knyvtrban lv f1 fjl msolsa f2-be, de nem
engedi meg az ott lv ugyanilyen nev fjl fellrst
Exists(f1) megvizsglja, hogy az adott knyvtrban ltezik-e az f1 fjl


string utvonal1 = @"c:\proba\teszt.txt";
string utvonal2 = @"c:\proba\teszt.txt";
string utvonal3 = @"c:\proba\teszt.txt";
string teljesutvonal, eredmeny, kiterjesztes;
- 96 -

if (!File.Exists(utvonal1))
{
using (FileStream fs = File.Create(utvonal1)) {}
}

//ha ltezik ebben a knyvtrban ilyen nven fjl akkor trli
if (File.Exists(utvonal2))
File.Delete(utvonal2);

//ha ltezik ebben a knyvtrban ilyen nven fjl akkor trli
if (File.Exists(utvonal3))
File.Delete(utvonal3);

// a fjl mozgatsa egyik knyvtrbl a msikba
File.Move(utvonal1, utvonal2);
MessageBox.Show("tvonal1="+utvonal1+" tvonal2="+utvonal2);

// a fjl msolsa egyik knyvtrbl a msikba
File.Copy("tvonal1="+utvonal1+" tvonal3="+utvonal3);
MessageBox.Show(utvonal1,utvonal3);

A kvetkez kdrszletben kiratjuk egy adott knyvtrban tallhat llomnyok neveit s
mreteit:
GetFiles() az adott knyvtrban lv fjlok listjt lltja el
Name az adott knyvtrban lv fjlok nevei
Length - az adott knyvtrban lv fjlok mretei

DirectoryInfo di = new DirectoryInfo("c:\\");
lstFiles.Items.Clear();
FileInfo[] fiArr = di.GetFiles();
lstLista.Items.Add(di.Name);
lstLista.Items.Clear();
foreach (FileInfo f in fiArr)
lstLista.Items.Add(f.Name +" "+ f.Length);




- 97 -

13 XML alapok s XML fjlok kezelse
13.1 Az XML nyelv
Az Extensible Markup Language (XML, kiterjeszthet ler nyelv) ltalnos cl ler nyelv
specilis cl ler nyelvek ltrehozsra. A ler nyelvek adatok strukturlt lersra
szolglnak, nem programozsi nyelvek. Strukturlt adatok alatt olyan dolgokat rtnk, mint
tblzatok, cmjegyzkek, 2D vagy 3D rajzok, stb.

Az XML bemutatsra lssunk egy pldt:


<?xml version="1.0" encoding="UTF-8"?>
<Recept nv="kenyr" elk_id="5 perc" sts_id="3 ra">
<cm>Egyszer kenyr</cm>
<sszetev mennyisg="3" egysg="cssze">Liszt</sszetev>
<sszetev mennyisg="10" egysg="dekagramm">leszt</sszetev>
<sszetev mennyisg="1.5" egysg="cssze">Meleg vz</sszetev>
<sszetev mennyisg="1" egysg="teskanl">S</sszetev>
<Utastsok>
<lps>Keverj ssze minden sszetevt, aztn jl gyrd ssze!</lps>
<lps>Fedd le ruhval s hagyd pihenni egy rig! </lps>
<lps>Gyrd ssze jra, aztn ssd meg a stben!</lps>
</Utastsok>
</Recept>

Az XML nem hatrozza meg a nyelv jellelem kszlett, ez teljes mrtkben kiterjeszthet -
innen ered a neve is. A jellelem kszlet meghatrozsval kialakthatjuk sajt
adatstruktrnk lersra alkalmas XML alap ler nyelvnket.

Lteznek XML-re pl szabvnyostott lernyelvek is, pldul:
XHTML: HTML-hez hasonl, XML alap dokumentum ler nyelv
SVG (Scalable Vector Graphics): 2D vektorgrafikk lersra
<svg>
<g style="fill-opacity:0.7;">
<circle cx="1cm" cy="1cm" r="1cm" style="fill:red" />
<circle cx="2cm" cy="1cm" r="1cm" style="fill:blue" />
<circle cx="1.5cm" cy="2cm" r="1cm" style="fill:green"/>
</g>
</svg>



Ahhoz, hogy egy XML dokumentum helyes legyen, kt kvetelmnynek kell megfelelnie:
- 98 -


1. Helyes szintaktika
2. rvnyessg
13.1.1 Az XML dokumentum szintaktikja
1. Az dokumentum els sora az XML deklarci. Megadsa nem ktelez. Informcit
tartalmazhat a hasznlt XML verzirl (ltalban 1.0) s a karakterkdolsrl.

<?xml version="1.0" encoding="UTF-8"?>

2. A dokumentum tovbbi rsze egymsba gyazott csomkbl (node) ll, melyeknek
lehetnek tulajdonsgai (attribute) s tartalma (content). Egy elem ltalban egy nyit
tag-bl (start tag) s egy zr tag-bl (end tag), valamint a kzttk lv szvegbl s
ms node-okbl ll.

3. A nyit tag egy nv, melyet < > jelek kz ruk. Pl: <Recept>. A tag nv nem
tartalmazhat szkzt, a nyelv klnbsget tesz a kis s a nagy betk kztt. A zr
tag egy / jelbl s a nyit tag-ben is szerepl nvbl ll, pl: </Recept>

4. A node tulajdonsgai - ha vannak - a nyit tag-ben kerlnek felsorolsra. Minden
tulajdonsg szimpla vagy dupla idzjelek kz kerl.

<Recept nv="kenyr" elk_id="5 perc" sts_id="3 ra">

5. A nyit s a zr tag-ek kz kerl az node tartalma (content).

<sszetev mennyisg="3" egysg="cssze">Liszt</sszetev>

6. Ha egy node-nak nincs tartalma, res node-nak nevezzk. res node-oknl
hasznlhatunk nzr tag-eket:
<Szakcs nv=Szakcs Gyula />

Ez az rsmd ekvivalens a kvetkezvel:

<Szakcs nv=Szakcs Gyula></Szakcs>

7. A dokumentum egy gykrelemet kell tartalmazzon. Az XML deklarci s a
feldolgozsra vonatkoz utastsok megelzhetik a gykrelemet. Pldnkban a
gykrelem a Recept.

8. Az XML dokumentum tartalmazhat megjegyzseket is a kvetkez formtumban:

<!- a jelek kz rt szveg nem kerl feldolgozsra -->
- 99 -


9. Ha a dokumentum nem helyesen formzott, az XML rtelmeznek meg kell tagadnia
a feldolgozst.

A fentiekbl kvetkezik, hogy minden nyit tag-et le kell zrni egy zr tag-el. A tag-ek fa-
szeren egymsba gyazhatk, de tfeds nem lehet kzttk.
helytelen:
<Plda1><Plda2></Plda1><Plda2>

helyes:
<Plda1>
<Plda2>
</Plda2>
</Plda1>

13.1.2 Az XML dokumentum rvnyessge
Azon tl hogy az XML dokumentum formailag helyes, meg kell feleljen egy adott smnak.
Ez azt jelenti, hogy csak olyan tag-eket s attribtumokat tartalmazhat, melyeket az XML fjlt
feldolgoz program felismer. Ez lehet szabvnyostott XML alap formtum, mint pldul a
vektorgrafikk lersra alkalmas SVG (Scalable Vector Graphics) nyelv, de lehet ltalunk
meghatrozott formtum is.

Megjegyzs: Az XML dokumentumokhoz kszthetnk DTD (Document Type Definition)
kdot, mely az XML fjl rvnyessgt ellenrzi. A DTD kd kerlhet az XML fjl elejre,
de kls fjlbai is helyet foglalhat. A DTD-ben megadhatjuk, mely milyen node-oknak
milyen gyermekei s tulajdonsgai lehetnek. Elrhatunk ktelez s opcionlis
tulajdonsgokat. Ha DTD-t hasznlunk, sem az XML szerkeszt, sem a ft feldolgoz
program nem enged a megadott smnak ellentmond node-okat s tulajdonsgokat
ltrehozni. A DTD ismertetsre terjedelmi okok miatt itt nem trnk ki.

Bvebb informcirt a kvetkez honlapot rdemes felkeresni:
http://en.wikipedia.org/wiki/Document_Type_Definition
13.1.3 Az XML dokumentumok transzformcija
Az XLST (Extensible Stylesheet Language Transformations) egy nyelv, mely XML
dokumentumok talaktsnak szablyait rja le. Az talakts sorn az eredeti dokumentum
alapjn, az XSLT dokumentumban meghatrozott szablyok szerint, egy j dokumentumot
hozunk ltre. Az eredeti dokumentum vltozatlan marad. Az eredmnyl kapott dokumentum
lehet XML, szveges, vagy akr HTML formtum is. Az talaktst egy XSLT feldolgoz
program vgzi.

- 100 -



Bvebb informcit a kvetkez lapon tallunk:
http://en.wikipedia.org/wiki/XSLT
13.1.4 Az XML elnyei
Ember s gp szmra egyarnt knnyen olvashat, szveges formtum.

A legtbb fejlesztkrnyezethez rendelkezsre llnak objektumosztlyok, melyek
segtsgvel knnyedn tudjuk kezelni az XML formtumban lert adatokat. gy XML
hasznlatval sok unalmas s felesleges programozsi munktl kmlhetjk meg magunkat.
13.2 XML fjlok feldolgozsa C# krnyezetben

XML fjlok feldolgozsra tbbfle lehetsg van, terjedelmi okok miatt ezek kzl egyet
mutatunk be.

Dolgozzuk fel az albbi egyszer XML fjlt:

<?xml version="1.0" encoding="utf-8" ?>
<gykr>
<gyermek1>
<unoka1> n unoka1 vagyok, gyermek1 leszrmazottja. </unoka1>
<unoka2> n unoka2 vagyok, gyermek1 leszrmazottja. </unoka2>
</gyermek1>
<gyermek2>
<unoka1> n unoka1 vagyok, gyermek2 leszrmazottja. </unoka1>
Kimen
Fjl
(nem felttlen
XML)
Bemen
XML
Fjl
XLST
feldolgoz
XLST
szablyok
- 101 -

<unoka2> n unoka2 vagyok, gyermek2 leszrmazottja. </unoka2>
</gyermek2>
</gykr>

A dokumentum tartalmaz egy gykrelemet, melynek neve gykr. (Ahogy azt mr
korbban lttuk, minden XML dokumentum csak egyetlen gykrelemet tartalmazhat.)
A gykrelemnek kt gyermeke (childnode-ja) van: gyermek1 s gyermek2.
gyermek1-nek is van kt gyermeke (childnode-ja): unoka1 s unoka2.
13.2.1 XML fjl betltse

Az XML dokumentumok feldolgozsra az XmlDocument objektumosztly szolgl. Hozzunk
ltre belle egy pldnyt peldaXML nven. A peldaXML.Load() metdusval tlthetnk be
egy XML fjlt.

XmlDocument peldaXML = new XmlDocument();
peldaXML.Load("pelda.xml");

13.2.2 A fa gai, mveletek node-okkal
Az egyes node-ok elrsre nzznk nhny egyszer pldt! (Az els elemre mindig nulls
indexel hivatkozunk.)

textBox1.Text = peldaXML.DocumentElement.InnerXml;

textBox2.Text = peldaXML.DocumentElement.ChildNodes[0].InnerXml;

textBox3.Text=
peldaXML.DocumentElement.ChildNodes[0].ChildNodes[1].InnerXml;

A plda futtatsa utn a szvegdobzokban a kvetkez jelenik meg:

TextBox1 a gykrelemen bell lv XML kdot tartalmazza:
<gyermek1><unoka1> n unoka1 vagyok, gyermek1 leszrmazotta.
</unoka1><unoka2> n unoka2 vagyok, gyermek1 leszrmazotta.
</unoka2><unoka3 neve="Anna">Legkisebb unoka
:)</unoka3></gyermek1><gyermek2><unoka1> n unoka1 vagyok,
gyermek2 leszrmazotta. </unoka1><unoka2> n unoka2 vagyok,
gyermek2 leszrmazotta. </unoka2></gyermek2>

TextBox2 a gykrelem els gyermekt tartalmazza:
<unoka1> n unoka1 vagyok, gyermek1 leszrmazotta.
</unoka1><unoka2> n unoka2 vagyok, gyermek1 leszrmazotta.
</unoka2><unoka3 neve="Anna">Legkisebb unoka :)</unoka3>

- 102 -

TextBox3 a gykrelem els gyermeknek msodik gyermeke:
n unoka2 vagyok, gyermek1 leszrmazotta.

13.2.3 j node beszrsa s a fjl mentse.
Bvtsk az XML ft egy j elemmel!

XmlElement ujElem;
ujElem = peldaXML.CreateElement("unoka3");
ujElem.InnerText = "Legkisebb unoka :)";
ujElem.SetAttribute("neve", "Anna");
peldaXML.DocumentElement.ChildNodes[0].AppendChild(ujElem);

peldaXML.Save("pelda.xml");

A program futtatsa utn az XML fjl:

<?xml version="1.0" encoding="utf-8"?>
<gykr>
<gyermek1>
<unoka1> n unoka1 vagyok, gyermek1 leszrmazottja. </unoka1>
<unoka2> n unoka2 vagyok, gyermek1 leszrmazottja. </unoka2>
<unoka3 neve="Anna">Legkisebb unoka :)</unoka3>
</gyermek1>
<gyermek2>
<unoka1> n unoka1 vagyok, gyermek2 leszrmazottja. </unoka1>
<unoka2> n unoka2 vagyok, gyermek2 leszrmazottja. </unoka2>
</gyermek2>
</gykr>
13.2.4 Node trlse a fbl
Ez a programsor trli gyemrek1-et, s annak gyermekeit a fbl:
peldaXML.DocumentElement.RemoveChild(peldaXML.DocumentElement.ChildNodes[0]);
- 103 -

13.3 Plda XML fjl feldolgozsra
Pldnk hasonlt a tbbablakos alkalmazsok ksztse fejezet feladathoz. A klnbsg
annyi, hogy itt a legrdl doboz adatait XML fjlbl tltjk be. Az XML fjl s a lista
elemeit tudjuk bvteni s trlni is.

A lista elemeit az j szak gombra kattintva bvthetjk. Ha a gombra kattintunk, ablak
ugrik fel, melyben megadhatjuk az j szak nevt. A legrdl doboz csak akkor bvl az j
elemmel, ha az ablakot OK gombbal zrtuk be.

A szak trlse gomb mindig az ppen kivlasztott szakot trli. A vltozs azonnal mentsre
kerl az XML fjlba.

1. Hozzunk ltre egy j solutiont xml_prg nven!
2. Tervezzk meg a frlapot az albbiak szerint:



o Az rlapon szerepl komponensek tulajdonsgait lltsuk be az albbiak
szerint:

Komponens Text Name Properties
Label Szakok:
ComboBox cbSzakok
Button j szak btUjSzak
Button Szak trlse btSzakTorles

3. Csatoljunk XML fjlt a Solution-hoz

o A File / New / File menpont alatt hozzunk ltre j XML dokumentumot!
o Az XML szerkeszt ellenrzi dokumentumunk szintaktikai helyessgt.
Ksztsnk el a kvetkez dokumentumot:

<?xml version="1.0" encoding="utf-8"?>
<szakok>
<szak>Matek</szak>
<szak>Nmet</szak>
- 104 -

<szak>Spanyol</szak>
</szakok>

o Mentsk el XML dokumentumunkat szakok.xml nven. Ha a programban
kln elrsi tvonal nlkl hivatkozunk az XML fjlra, alaprtelmezsben
abban a knyvtrban fogja keresni, ahonnt magt a programot futtatjuk. Ez
valsznleg a

My Documents\Visual Studio 2005\Projects\xml_prg\ xml_prg \bin\Debug

knyvtr lesz. Ha nem akarunk az elrsi tvonal megadsval kln bajldni,
mentsk ide a szakok.xml-t.
o Ha a szakok.xml aktv a szerkesztben. a File menben a Move szakok.xml
into menponttal hozzadhatjuk solutionunkhoz a fjlt. Ezutn a Solution
explorer-ben is megtalljuk.

4. Az alkalmazs indtsakor automatikusan tltsk fel a legrdl dobozt az XML fjl
adataival!

o Az XML fjlokat feldolgoz objektumosztlyok kln osztlyknyvtrban
szerepelnek. Hasznljuk a system.Xml knyvtrat.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Xml;


o Bvtsk az rlapot ler objektumosztlyt XmlDocument osztly szakokXML
nev pldnyval:


namespace KetAblakXML
{
public partial class Form1 : Form
{

//Bvitsk az objektumosztlyt szakokXML
tulajdonsggal
XmlDocument szakokXML;

public Form1()
{
InitializeComponent();

}
- 105 -

}


o Az rlap konstruktorban nyissuk jrjuk be az XML fjlt, s a szak nev
node-ok tartalmval bvtsk a legrdl dobozok elemeit!


public Form1()
{
InitializeComponent();

//Hozzuk ltre a szakokXML-t,
//s tltsk be a szksges fjlt!
szakokXML = new XmlDocument();
szakokXML.Load("szakok.xml");

XmlNodeList lstSzakok =
szakokXML.DocumentElement.GetElementsByTagName("szak");

for (int i = 0; i < lstSzakok.Count; i++)
{
cbSzakok.Items.Add(lstSzakok[i].InnerText);
}
}


5. Ksztsk el a felugr rlapot, melyben megadhatjuk az j szak nevt:



o Vlasszuk a project / Add Windows Form menpontot
o A megjelen sablonok kzl a Windows Formra lesz szksgnk. Nevezzk
az j rlapot UjSzak-nak, majd kattintsunk az Add gombra!
o Helyezznk el egy szvegdobozt (TextBox) s kt gombot (Button) az
rlapon!
o Az rlapon szerepl komponensek tulajdonsgait lltsuk be az albbiak
szerint:

Komponens Text Name Properties
TextBox tbSzak Modifiers: public
Button Ok btOk DialogResult: OK
Button Mgsem btMegse DialogResult: Cancel
Form j szak UjSzak AcceptButton: btnOk
CancelButton: btnMegsem
- 106 -

FormBorderStyle:
FixedDialog
MaximizeBox: False
MinimizeBox: False
ShowInTaskbar: False

o Ha szvegdoboz modifiers tulajdonsgt public-re lltjuk, kvlrl is lthatv
vlnak a szvegdoboz tulajdonsgai, gy ki tudjuk olvasni annak tartalmt.
o Nem mindegy, hogy a felhasznl Ok vagy Mgsem gombbal zrja be az
ablakot. Ezt az informcit a gombok DialogResult, illetve a Form
AcceptButton s CancelButton tulajdonsgainak rtelem szer belltsval
tudjuk visszaadni a frlapnak. Lsd ksbb.
o Rendeljnk esemnyeket az Ok s a Mgsem felirat gombokhoz!
Mindkt gomb bezrja az ablakot.

6. UjSzak.cs:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication2
{
public partial class UjSzak : Form
{
public UjSzak()
{
InitializeComponent();
}

private void btMegse_Click(object sender, EventArgs e)
{
Close();
}

private void btOk_Click(object sender, EventArgs e)
{
Close();
}


}
}

7. Szaklista rlap gombjhoz rendeljnk esemnyt, mely megnyitja az UjSzak rlapot.
Ha a felhasznl az Ok gombbal zrta be a felugr ablakot, adjuk hozz a legrdl
doboz tartalmhoz az j szakot!

- 107 -

o A ShowDialog() metdus hvsval az rlapot modal ablakknt jelentjk
meg. Ha ShowDialog() metdus OK rtkkel tr vissza, bvtsk a lista elemei
s az XML fjlt.

private void btUjSzak_Click(object sender, EventArgs e)
{
UjSzak frmUjSzak = new UjSzak();

if (frmUjSzak.ShowDialog() == DialogResult.OK)
{
//Bvtsk a legrdl doboz elemeit az j szakkal!
cbSzakok.Items.Add(frmUjSzak.tbSzak.Text);


XmlElement ujElemXML =
szakokXML.CreateElement("szak");

ujElemXML.InnerText = frmUjSzak.tbSzak.Text;

szakokXML.DocumentElement.AppendChild(ujElemXML);

//Mentsk lemere a bvtett XML dokumentumot!
szakokXML.Save("szakok.xml");
}

}

8. A trls gomb trlje ki a lista ppen kivlasztott elemt!

private void btSzakTorles_Click(object sender, EventArgs e)
{
//vltozban troljuk a legrdl dobozban
//kivlasztott elem sorszmt
int torlendo = cbSzakok.SelectedIndex;

//A kivlasztott elemet trljk a legrdl doboz
//elemei kzl
cbSzakok.Items.RemoveAt(torlendo);

//A megfelel Node-ot trljk az XML dokumentumbl
szakokXML.DocumentElement.RemoveChild(
szakokXML.DocumentElement.ChildNodes[torlendo]);

//A mdostott dokumentumot mentsklemezre!
szakokXML.Save("szakok.xml");
}

- 108 -

14 Az UML nyelv s fontosabb diagramtpusai
Az UML (Unified Modeling Language) egy igen elterjedt, szoftverrendszerek fejlesztsre
szolgl ltalnos cl vizulis modellez nyelv. Az UML egy olyan egysgestett grafikus
jellsrendszert hasznl, amely hrom korbbi technika, az OMT-2 (Object Modeling
Technique), az OOAD (Object-Oriented Analysis and Design) s az OOSE (Object-Oriented
Software Engineering) szintziseknt alakult ki 1995-tl kezdden, e hrom mdszer alkoti
(James Rumbaugh, Grady Booch s Ivar Jacobson) egyttmkdse eredmnyeknt. A
tudomny trtnetben ltalban a jelents eredmnyek megszletst komoly vajds elzi
meg, amely az UML esetben sok elmleti s gyakorlati szakember vekig tart
szisztematikus munkjt s felhalmozott alkalmazsfejlesztsi tapasztalatt jelentette. 1989 s
1994 kztt a modellez nyelvek s mdszerek szma kevesebb, mint 10-rl tbb mint 50-re
ntt. Az n. els genercis mdszerek kzl felttlenl meg kell emlteni a Coad/Yourdon, a
Shlaer/Mellor s a Fusion mdszert. A 90-es vek els felben megjelent,
szoftverfejlesztsrl szl tanknyvek ltalban az egyik vagy msik mdszert propagltk.
Ez az idszak az informatika trtnetbe mint a mdszerek hborja vonult be.

1996-ben jelent meg az UML 0.9, majd 1997-ben az 1.1 verzi. Ez utbbi megszletsnl
mr egy szleskr ipari konzorcium bbskodott, amelynek tagjai kztt volt az IBM, a HP,
a Microsoft, az Oracle, a DEC, a Texas Instruments s az Unisys, vagyis az informatikai piac
ht legbefolysosabb szereplje. Az els teljes vltozat, az UML 1.3 tnylegesen ipari
szabvnny vlt. Mr vek ta az UML 2.0 verzit hasznljk, de 2006-ban vrhat a 2.1
vltozat megjelense. A 2.0 verziban a diagramok szma 9-rl 13-ra ntt, s ms tekintetben
is jelents vltozsok jelentek meg.

Az UML teht egy ltalnos cl vizulis modellez nyelv, s nem egy programozsi nyelv.
Nem tudunk programot rni UML-ben, br sok CASE eszkz kpes UML diagramokbl Java,
C++ vagy C# kdot generlni. Br az UML maga nem egy szoftverfejleszt folyamat,
szorosan kapcsoldik az USDPhez (Unified Software Development Process), amely viszont
mr alkalmas rendszerek fejlesztsre. Az USDP is a Booch - Jacobson Rumbaugh tri
munkja, s gyakran RUP knt (Rational Unified Process) emlegetik. Az elnevezsben
szerepl Rational egy informatikai cg neve, ahol veken t egyttdolgozott az emltett
hrmas. A Rational cg termke a CASE eszkzk kztt piacvezet szerepet betlt
Rational Rose is. Magt a cget 2003-ban felvsrolta az IBM, de a mrkanv megmaradt.
Az UML nem ktdik egyetlen meghatrozott mdszertanhoz, hanem brmelyik ltez
mdszertannal (pl. OPEN) egytt hasznlhat. Egyebek mellett ez teszi az UML-t klnsen
npszerv a rendszerfejlesztk krben.

Az UML ltal hasznlt diagramtpusokat kt osztlyba szoks sorolni. Beszlhetnk
struktradiagramokrl, amelyek kz tartoznak az

- 109 -

osztly (class)
objektum (object)
komponens (component)
csomag (package) vagy alrendszer
sszettel (composite structure) diagramok
telepts (deployment)

valamint viselkedsi diagramokrl (szm szerint ht diagramtpusrl)

tevkenysg (activity)
hasznlati eset (use case)
llapotgp (state machine, korbbi verzikban state transition vagy state chart)
klcsnhats (interaction) diagramok.

Ez utbbi kategria az albbi ngy diagramtpus sszefoglal neve

szekvencia
kommunikci
klcsnhats-ttekints (interaction overview)
id (timing).

A struktradiagramok azt mutatjk meg, hogy a modellelemek (objektumok) hogyan
kapcsoldnak egymshoz.

Lssuk, mire alkalmasak s hasznlatosak ezek a diagramtpusok az UML-ben!
Az osztlydiagramok a modellben szerepl osztlyok s klcsnhatsaik (rkls,
aggregci, trsuls) lersra szolglnak. Mivel az osztly az objektum-orientlt technikk
egyik legfontosabb alapfogalma, ezrt az osztlydiagramok igen fontos szerepet jtszanak a
modellezsben. A legfontosabb jellemzje ennek a diagramtpusnak az, hogy a rendszer
statikus struktrjt rja le.

Az objektumdiagramokat a vizsglt rendszer objektumai s a kzttk egy adott
idpillanatban meglv kapcsolatok brzolsra hasznljuk, mint egy pillanatfelvtelt.
Ilykppen teht az osztlydiagramok specilis esetnek tekinthetjk ket, ezrt nem fogjuk az
objektumdiagramokat kln trgyalni. Egy objektumdiagram kevsb absztrakt, mint a
megfelel osztlydiagram.

Az UML-ben a komponensdiagramok az jrahasznlhat (reusable), bizonyos rtelemben
autonm s nagyobb mret tervezsi egysget jelent komponenseket brzoljk a biztostott
s szksges interfszeikkel egytt. Fontos megjegyezni, hogy a komponensdiagramok az
implementci nzpontjbl rjk le a rendszert. Klnsen abbl a szempontbl hasznosak,
- 110 -

hogy lehetv teszik a terveznek annak vgiggondolst, vajon az alkalmazs valban
rendelkezik-e a szksges funkcionalitssal, azaz vgrehajtja-e mindazt, amit a megrendel
elvr tle. A komponensdiagramokat elszeretettel hasznljk a rendszer nagybani
architektrjt egyeztet megbeszlseken, ahol a projekt kulcsfiguri kztti trgyals
legfontosabb segdeszkzv vl(hat)nak. A komponensdiagramok tulajdonkppen lgi
felvtelknt funkcionlnak, s a rendszer egsznek szerkezett mutatjk. A felvtel felbontsa
alapveten attl fgg, pontosan mit is szeretnnk megmutatni.

Az alrendszer-diagramok vagy mskppen csomagdiagramok azt mutatjk meg, hogyan
lehet a modell elemeit nagyobb egysgekbe, alrendszerekbe, csomagokba rendezni, illetve
azt, milyen fggsgi kapcsolat ll fenn az egyes csomagok kztt. Az elsdleges ok, ami
miatt ezt a diagramtpust hasznljuk az az, hogy az UML brk meglehetsen nagyra kpesek
nni, olyan mretre, amit mr nehezen lehet tltni. Ilyenkor szoks a modell bizonyos
elemeit (pl. osztlyokat) valamilyen logikai szempont szerint csoportostani. Eredmnyknt
egy ttekinthetbb bra keletkezik. Leegyszerstve azt mondhatjuk, hogy a csomagok
fjlmappk, amelyek egy csoportban tartalmaznak logikailag sszetartoz dolgokat. Akkor
sikeres a csomagols, ha a klnbz alrendszerek kztti fggsg minl kisebb. A
tervezi cl minden esetben lazn kapcsold csomagok kialaktsa.

Az sszettel-diagram a vizsglt rendszer bels struktrjt, felptst, sszettelt
mutatja. Egszen pontosan azt, hogy a rendszer elemei hogyan kapcsoldnak egymshoz a
kvnt funkcionalits elrse cljbl. A diagramon lehetnek port-ok, amelyek kapuknt
szolglnak a krnyezet fel. Koncepcionlisan az sszettel-diagramok az osztlydiagramokat
s a komponensdiagramokat ktik ssze, de nem mutatjk az osztlydiagramok tervezsi,
illetve a komponensdiagramok implementcis rszleteit.

A teleptsdiagramok ksztsnek az a clja, hogy megmutassa, hogyan lesz a rendszer
fizikailag teleptve a hardver krnyezetbe, hol fognak az egyes komponensek mkdni, s
hogyan kommuniklnak majd egymssal. A teleptsdiagramok mind a
hardverkomponenseket, mind az n. kztes termkeket (middleware) brzoljk. Ez utbbiak
ragasztknt szolglnak hardver s szoftver kztt.

A tevkenysgdiagramok zleti folyamatok modellezsre szolglnak, a vizsglt rendszer
bels logikjnak feltrkpezsre. Azt mutatjk meg, milyen elemi tevkenysgekbl pl
fel egy komplex zleti folyamat, mi hajthat vgre prhuzamosan, s lteznek-e alternatv
tvonalak az zleti folyamat grfjban. A tevkenysgdiagramok sok hasonlsgot mutatnak
a strukturlt rendszerfejleszts taln legismertebb technikjval, az adatfolyambrkkal.

A klcsnhats-ttekints diagramok a tevkenysgdiagramok leegyszerstett vltozataknt
foghatk fel. Ezek is irnytott grfok, de a cscsok nem elemi tevkenysgek, hanem
klnfle klcsnhats-diagramok, leggyakrabban szekvenciadiagramok,
- 111 -

kommunikcidiagramok stb. A folyamatok ttekintseknt foghatk fel, s a rszleteket csak
elnagyoltan tartalmazzk.

A hasznlati eset diagram a kvetelmnyek feltrsnak egyik leghatkonyabb eszkze.
Azonostja az interakciban rszt vev szereplket, s megnevezi magukat a klcsnhatsokat.
Az aktorokat plcikafigurk, az interakci osztlyait pedig nvvel elltott ellipszisek jellik.

Az llapotgp-diagram (state machine, az UML korbbi verziiban state chart vagy state
transition) egy rendszer lehetsges llapotait rja le, s az llapotok kztti tmeneteket. Ezt a
diagramtpust mr vtizedek ta hasznljk az informatikban. Lnyegben egy irnytott
grfot jelentenek, kezd s vgponttal, s megengedjk, hogy folyamatok sztvljanak s jra
egyesljenek. Szoros az llapotgpek s a (Mealy s Moore) automatk kapcsolata.

A szekvenciadiagramok egy folyamat bels logikjt mutatjk be. Az osztlydiagramok
mellett a szekvenciadiagramok jelentik az egyik legfontosabb UML diagramtpust. A
szekvenciadiagramok a dinamikus modellezs eszkzei a tevkenysgdiagramokkal, a
kommunikcidiagramokkal stb. egyetemben. Klnsen alkalmasak forgatknyvek
(interakcisorozatok) lersra.

A kommunikcidiagramok a rendszer klnbz elemei, entitsai kztt lebonyoltott
kommunikcit brzoljk. Hasonl mdon kszlnek, mint a szekvenciadiagramok, de
ezekben az idbeli sorrend nem explicit mdon jelenik meg.

Az UML iddiagramja entitsok idbeli viselkedst rja le. Egszen pontosan azt, hogy a
vizsglt entits milyen hosszan marad egy adott llapotban. Az UML 2.0 verziban jelent
csak meg. Klnsen vals-idej rendszerek s begyazott szoftverek tervezsre hasznljk.

A felsorolt 13 diagramtpusbl nem szksges egyformn jl ismerni valamennyit ahhoz,
hogy j minsg alkalmazst tudjunk fejleszteni. Az UML hrom alkotjnak vlemnye
szerint is a nyelv 20%-nak ismerete elgsges a feladatok 80%-nak megoldshoz.
Gyakorlati tapasztalatok azt mutatjk, hogy zleti alkalmazsok fejlesztse sorn a
legfontosabbak a

tevkenysg-,
szekvencia-,
osztlydiagramok,

msodlagosan pedig a

hasznlati eset,
llapot-,
kommunikci-,
- 112 -

komponens-,
telepts

diagramtpusokat hasznljk. A fennmarad tpusok viszonylag ritkbban kerlnek
alkalmazsra, br szmos esetben nagyon jl hasznlhatk a kvetelmnyelemzs s a
tervezs fzisban. Terjedelmi korltok miatt ebben a fejezetben csak a legfontosabb
tpusokat fogjuk rszletesebben trgyalni.
14.1 Hasznlati esetek
Mint korbban emltettk, a hasznlati esetek azonostjk a klcsnhatsok szereplit s
magukat a klcsnhatsokat. Egy szerepl (aktor) brmi vagy brki lehet, aki valamilyen
kapcsolatban, klcsnhatsban ll a vizsgland rendszerrel, abbl a clbl, hogy azon
tudatos tevkenysget hajtson vgre, illetve valamilyen megfigyelhet eredmnyt rjen el a
tevkenysg eredmnyeknt. A hasznlati esetek szerepli lnyegben azt modellezik,
ahogyan a rendszerek felhasznli mkdtetnek, kezelnek vals rendszereket. A hasznlati
esetekkel trtn modellezs a kvetelmnyek feltrsnak egyik, ha nem a legfontosabb
technikja. Mskppen forgatknyv alap feltrsnak is nevezzk. A hasznlati eset
diagramoknak ngy alkot eleme van:

szereplk aktorok, amelyeket plcikafigurk szemlyestenek meg, illetve tglalapok
jellnek, bennk az <<actor>> szcskval, amennyiben ezek a szereplk a sajt
jogukon tovbbi rendszerek,
hasznlati esetek tevkenysgsorozatok, ellipszisekkel brzoljuk ket,
kapcsolatok szereplk s hasznlati esetek kztt fennll klcsnhatsok, vkony
folytonos vonallal brzolva,
rendszer hatrai a hasznlati esetek kr rajzolt tglalap, amely azt mutatja meg, mi
tartozik a rendszerhez, s mi nem. Mi van a hatrokon bell, illetve mi esik azokon
kvl.

Fontos megjegyezni, hogy a szereplk mindig kvl esnek a rendszer hatrain. Azonban az
elfordulhat, hogy a kls szereplknek ltezik valamilyen reprezentcija a rendszeren bell
is, pldul egy adatbzis, amely az gyfelek adatait tartalmazza. Az gyfl maga egy kls
aktor, de a lista mr egy bels adattrol.

A hasznlati esetek diagram elksztsnek egyik fontos lpse (a rendszer hatrainak
kijellse utn), a szereplk s a hasznlati esetek azonostsa. Egy bonyolult rendszer
esetben ez nem biztos, hogy egy knny feladat. Azzal tudjuk megknnyteni a keresst, ha
feltesznk pr krdst, s megprbljuk megvlaszolni azokat. Ilyen krdsek lehetnek:

- 113 -

Szereplk

Kik a rendszer hasznli?
Ki szolgltat adatot a rendszernek?
Ki kap informcit a rendszertl?
Ki tartja karban a rendszert?
Milyen ms rendszerek llnak kapcsolatban a vizsglt rendszerrel?

Hasznlati esetek

Milyen konkrt szolgltatst vr el egy szerepl a rendszertl?
Lesz-e brmelyik szerepl rtestve, ha vltozik a rendszer llapota?
Mely szereplk tevkenysge eredmnyezi adatok trolst, illetve visszakeressket?
Lteznek-e olyan kls esemnyek, amelyek hatssal vannak a rendszerre?

Sok esetben egy felhasznlt, egy felhasznli viselkedst egynl tbb szereplvel, aktorral
jellemezhetnk.

Hasznlati esetek kztt hromfle kapcsolatot definilhatunk. Az els egy rklsi vagy
mskpp generalizcis / specializcis kapcsolat. A hasznlati esetek egyike az utd, a
msik a szl szerept fogja jtszani, s az ket sszekt (nem szaggatott, hanem
folyamatos) vonal vgn lv nyl a specilistl (utd) az ltalnos (szl) fel mutat. E
kapcsolat jelentse az, hogy az utd hasznlati eset teljes egszben rkli a szl hasznlati
esetet, de azon mdosthat. Az ltalnos hasznlati esetet trhatja, a rsztevkenysgeken
egyszersthet, vagy azokhoz jabb rsztevkenysgeket adhat hozz. Egy szl hasznlati
esetnek lehet tbb utda, s elvben egy utdnak is lehet tbb szlje. ltalban arra ltunk
pldt, hogy felfel a kapcsolat egyrtelm, azaz egy utdhoz csak egy szl tartozik.


14.1. bra: rklsi (generalizcis / specializcis) kapcsolat


- 114 -

A generalizcis kapcsolat fordtott olvasatban egy specializcis kapcsolatknt foghat fel, s
taln ez a nzpont jobban is segti a fogalom megrtst.

A msodik lehetsges kapcsolati forma kt hasznlati eset kztt az <<extend>> (UML-ben
foglalt) szcskval rhat le. Itt is az egyik hasznlati esetet alapnak, a msikat pedig
kiterjesztsnek fogjuk hvni. A kt hasznlati esetet szaggatott nyl kti ssze, amely az alap
hasznlati eset fel mutat, s a nylra rjuk r az <<extend>> szcskt. Az alapeset a
kiterjesztsek nlkl is vgrehajthat, azaz nmagban is teljes. A kiterjeszts nhny olyan
rsztevkenysget tartalmazhat, amely nem tallhat meg az alapesetben. A kiterjesztsek
ltalban nem teljes rtk hasznlati esetek.

Az <<extend>> kapcsolat teht tovbbi tevkenysgeket ad hozz egy mr ltez hasznlati
eset tevkenysgeihez. Szemlletesen szlva az alapeset elre definilt beszrsi
(kiterjesztsi) pontokat tartalmaz(hat), ahov a kiterjesztsek bekelhetk.



14.2. bra: <<Extend>> kapcsolat

Tegyk fel a plda kedvrt, hogy egy knyvtri rendszert modelleznk, ahol az egyik
hasznlati eset a knyvek visszaadsnak folyamatt rja le. Ez lesz az alapeset, amely az
albbi tevkenysgeket tartalmazza:

9. A knyvtros beti a klcsnz szemly azonostjt
10. A rendszer kilistzza a klcsnz ltal klcsnvett knyvek (s a lejrati hatridk)
listjt.
11. A knyvtros megkeresi a behozott knyvet a listban
12. tveszi a behozott knyvet.

Ebben a hasznlati esetben figyelmen kvl hagytuk annak megvizsglst, hogy a knyvet
vajon lejrati id eltt vagy az utn hoztk vissza. Egy lehetsges kiterjeszts hasznlati eset
az lenne, hogy a ksedelmes visszahozs miatt bntetst fizet a beiratkozott olvas. Jellje a
kiterjesztsi pontot <ksKnyv>:
- 115 -


13. A knyvtros megkeresi a behozott knyvet a listban
14. <ksKnyv>
15. tveszi a behozott knyvet.

A <ksKnyv> azt a pontot jelli, ahol a BntetsFizets hasznlati eset tevkenysgei
hajtdnak majd vgre.
Az <<extend>> kapcsolatot elssorban arra hasznlhatjuk, hogy a kivteleket kezeljk.
Kivtel alatt azt rtjk, amikor a folyamat lefolysa valamilyen rtelemben eltr a
normlistl.

Kt hasznlati eset kztt definilhat harmadik kapcsolati forma az <<include>> szcskval
jellemezhet, s a rszeknt tartalmaz kifejezssel rhat le. A szaggatott nyl, rrva az
<<include>> megnevezs, a tartalmaztl (kliens) a tartalmazott (szolgltat) fel mutat. Ez
egy olyan kapcsolatot jell, ahol a tartalmazott hasznlati eset tevkenysgeit egy (vagy tbb)
terjedelmesebb hasznlati eset is tartalmazza, mgpedig teljes egszben. Igazbl akkor van
rtelme az <<include>> kapcsolat hasznlatnak, ha tbb hasznlati eset is ignyli a
szolgltatt.



14.3. bra: <<Include>> kapcsolat

ltalban azt mondhatjuk, hogy amennyiben tbb hasznlati eset viselkedsben ltezik
valami kzs, ezt a kzs rszt jelenthetjk meg egy kln hasznlati esetknt. Az
elmondottakbl kvetkezen csak akkor clszer az <<include>> kapcsolatot hasznlni, ha
rtelmesen megadhat ez az nmagban is megll kzs rsz. Az <<include>> kapcsolat egy
kicsit a fggvnyhvsra s a szubrutinok hasznlatra emlkeztet. A kliens hasznlati eset
futsa egy adott pontnl megll, a vezrls taddik a szolgltat hasznlati esetnek, majd
annak lefutsa utn ismt visszakerl a klienshez. Az <<include>> kapcsolat lehetv teszi,
hogy a szolgltat hasznlati eset tevkenysgeit bekeljk a kliens munkafolyamba.
Alapvet klnbsg az <<extend>> s az <<include>> kapcsolat kztt az, hogy mg az
- 116 -

<<include>> kapcsolatban a kliens hasznlati eset nem teljes a szolgltat hasznlati eset
nlkl, addig az <<extend>> kapcsolatban az.
14.2 Tevkenysgdiagram
A tevkenysgdiagram, az UML diagramtpusai kzl az egyik legfontosabb, egy vizsglt
rendszer folyamatainak bels felptst, szerkezett mutatja be. Egszen pontosan azt,
milyen lpsek, taszkok trtnnek valjban egy munkafolyamatban, milyen tevkenysgek
vgezhetk prhuzamosan, s lteznek-e alternatv tvonalak a folyamat grfjban. Ha
elksztettk a hasznlati eset diagramot, akkor ahhoz kapcsoldan a tevkenysg diagramok
egy-egy hasznlati eset rszletesebb lerst adjk.

Megjelenskben nagyban emlkeztetnek az vtizedekkel korbban hasznlt
blokkdiagramokra. A jellsek is nagyon hasonlak. Hasonltanak tovbb az UML
llapotgp-diagramjaira is. Az UML szerzi szndka szerint a tevkenysgdiagramok
valjban az llapotgp-diagramok egy varinst jelentik.

Tekintsk pldaknt a vendgli italrendels egy lehetsges tevkenysgdiagramjt!



14.4. bra: Az italrendels tevkenysgdiagramja

Az brn kt dntsi helyzet s egy egyestsi pont lthat.

ltalnossgban a tevkenysgdiagramok az albbi jellseket hasznljk:
Tevkenysgi llapotok lekerektett tglalapokba, n. kapszulkba rva
Egy kezdeti s egy vagy tbb vgllapot. A kezdeti llapotbl csak egyetlen vonal
indulhat ki, azaz egyetlen szlon indulhat el a tevkenysgsorozat
Feltteles dntsi helyzetek, valamilyen rfelttellel, IF THEN ELSE
Prhuzamossg kezelse, sztvls s egyests (fork/join) vastag vonallal megjellve
- 117 -

Partcik vagy mskpp plyk (swimlanes)



14.5. bra: Sztvls s egyests a tevkenysgdiagramon

Tevkenysgdiagramokkal nagyon knnyen modellezhetnk prhuzamos
munkafolyamatokat. A fenti brn a sztvlsi s az egyestsi vonal kztti tevkenysgek
prhuzamosan hajthatk vgre. A sztvlsi vonalnak pontosan egy bemenete s kett vagy
tbb kimenete, az egyestsi vonalnak pedig kett vagy tbb bemenete s pontosan egy
kimenete van.

14.3 Objektumok s osztlyok
Mint azt korbban tisztztuk, az UML nyelv osztlydiagramjai az osztlyokat s a kztk
meglv kapcsolatokat brzoljk, azokat szemlltetik, az objektumdiagramok pedig
ugyanezt teszik az objektumokkal s a kztk fennll kapcsolatokkal. Amikor a krlttnk
lev vilgot, annak folyamatait szeretnnk modellezni, azt leggyakrabban objektumok
segtsgvel tesszk. Objektumok lehetnek emberek, pletek, bankszmlk, lnyegben
brmi. Felttelezzk, hogy az objektumoknak ltezik egyrtelm objektumazonostjuk. Ez az
azonost klnbzteti meg ket ms objektumoktl. Minden objektumnak egyetlen
azonostja van, kt klnbz objektumnak pedig nem lehet ugyanaz az azonostja. Az
objektumokhoz hozz tudunk rendelni bizonyos fggvnyeket, mskppen eljrsokat,
mveleteket, metdusokat.

A vizsgland rendszer objektumait a hasonl tulajdonsg objektumokat tmrt
osztlyokba csoportosthatjuk. Az osztly fogalma teht absztrahlja az objektumok
valamilyen rszhalmazt. A vals letben csak objektumokkal tallkozhatunk (pl. Nagy Pter
harmadves hallgat vagy Nagy Pter, Oroszorszg crja), s absztrakci tjn jutunk el a
Hallgat vagy az Uralkod osztlyhoz. Az objektumokat az osztlyok pldnyainak fogjuk
nevezni.
- 118 -


Ha az Olvas valamennyire jrtas az adatbzisok elmletben, akkor az albbi prhuzam segt
megrteni, mi a logikai kapcsolat az osztlyok s az objektumok kztt. Tegyk fel, adott egy
bank adatbzisban kt tbla (mskppen relci), az egyik az gyfelek tbla, s ebben
troljk az gyfelek nevt, cmt s szemlyi szmt, a msik tbla pedig a Szmlk, amely
tbla trolja az egyes szmlk szmlaszmt, egyenlegt s a szmlatulajdonos szemlyi
szmt. Ha objektum-orientlt szemlletben kzeltnk a krdshez, akkor mindkt tblnak
egy-egy osztly felel meg, a tblkban szerepl rekordoknak pedig egy-egy objektum Azaz
gy tekintnk az objektumokra, mint egyedi rekordokra. Az objektumoknak mezi vannak,
amelyekben rtkek szerepelnek. Egy rekordbeli adatelemet tulajdonsgnak vagy
attribtumnak neveznk. Ezek egyttesen jellemzik, karakterizljk az objektumot.
Programozsi nzpontbl az attribtum egy loklis vltoz, amely csak az adott
objektumhoz tartozik.

Az osztlyokat az UML nyelvben rekeszekre osztott tglalapok jellik. Alapesetben hrom
rekeszt tartalmaznak a tglalapok:

Osztlynv
Tulajdonsgok, jellemzk, attribtumok felsorolsa
Mveletek, metdusok felsorolsa

(Az UML megengedi tovbbi rekeszek hasznlatt is, de ezekre most nem trnk ki.)

Szmla

-szmlaSzm : int
-szmll : int = 0
+ltrehoz(szszm : int)
+krSzm : int
-nvel()
+krSzmll() : int

A harmadik rekeszben szerepl mveleteket az egyik els objektum-orientlt programozsi
nyelv, a Smalltalk metdusnak, a Java nyelv opercinak, a C++ s a C# nyelv osztly
tagfggvnynek (class member function) nevezi. Szoks mg az eljrs s a szolgltats
megnevezsek hasznlata is. Ami a terminolgit illeti, az elemzs fzisban inkbb a
mveletek, a tervezs fzisban pedig a metdusok megnevezst hasznljuk. Az elemzs
fzisban nha elhagyjuk az attribtumok s mveletek felsorolst, s csak az osztlynv
szerepel a diagramon.

- 119 -

A kzps rekeszben szerepl attribtumok ltalnos alakja:

lthatsg nv szmossg : tpus = kezdetirtk

A harmadik rekeszben szerepl metdusok ltalnos alakja

lthatsg metdusnv (paramternv : paramtertpus, ) : returnType

A lthatsg lehet publikus (+), privt (-) vagy vdett (#).

Vilgosan kell ltnunk, hogy a mveletek, a metdusok biztostjk a rendszer
funkcionalitst. A metdusoknak lehetnek paramtereik, s vgrehajts utn visszaadhatnak
valamilyen rtket vagy vgrehajthatnak valamit, amire aktulisan szksg van.
14.3.1 Kapcsolatok
UML-ben a modellelemek kztt meglehetsen sokfle kapcsolat ltezhet. Ebben a rszben
az osztlyok kztti kapcsolattpusokat fogjuk ttekinteni.

Ezek kzl az albbi tpusokat hasznljuk elssorban:

Asszocici vagy trstsi kapcsolat, rviden trsts, s ennek specilis esetei az
aggregci, illetve a kompozci
Generalizci vagy ltalnost kapcsolat, rviden ltalnosts
Fggsgi kapcsolat, rviden fggsg, s ennek specilis esete az absztrakci (ezzel
bvebben most nem foglalkozunk)



14.6. bra: Kapcsolatok ttekintse

Az asszocici egy strukturlis kapcsolat kt osztly (vagy hasznlati eset) kztt. brzolsa
vkony folytonos vonallal trtnik. (AS1 s AS2)

- 120 -

Az aggregci az egsz rsz tpus kapcsolatot modellezi. Szemlletes plda erre a
kapcsolattpusra egy szmtgp s a perifrilis egysgei kztti kapcsolat. Az egsz s a
rsz entitsok lettartama fggetlen egymstl. Ha eldobjuk a szmtgpet, a perifrikat
egy j szmtgppel tovbb hasznlhatjuk. Kicserlhetjk a perifrikat, a szmtgp ettl
meg hasznlhat marad. brzolsa vkony folytonos vonallal trtnik, amelynek egyik
vgn egy nyl, a msik vgn pedig egy res rombusz tallhat, a logikailag bvebb
(egsz) entitshoz kapcsoldva. (AG1 s AG2)

A kompozci az aggregci ersebb fajtjnak tekinthet. Kompozci tpus kapcsolatban a
rsz lettartama az egsz lettartamtl fgg. Ha megsznik az egsz, megsznik a rsz
is. Kompozcira plda a virg s a szirmai kztti kapcsolat. A kompozci brzolsa
vkony folytonos vonallal trtnik, amelynek egyik vgn egy nyl, a msik vgn pedig egy
teli rombusz tallhat, a logikailag bvebb entitshoz kapcsoldva. (CO1 s CO2)

A generalizci tpus kapcsolatban az egyik osztly az utd (alosztly), a msik a szl
(szuperosztly) szerept jtssza. Ez a kapcsolattpus nem csak osztlydiagramon, hanem
komponens-, telepts- s hasznlati eset diagramon is megjelenhet. brzolsa vkony
folytonos vonallal trtnik, s a zrt res nylvg az utd modellelemtl mutat a szl
modellelem fel. ltalban egy szl s tbb utd osztly kapcsolatt brzolja, br elvileg
egy utdhoz tbb szl is tartozhat. (GE1 s GE2)

A fggsg tpus kapcsolatban az egyik elemet szolgltatnak, a msikat pedig kliensnek
nevezzk, s felttelezzk azt, hogy brmilyen vltozs a szolgltatban kihat a kliensre.
Fggsgi kapcsolat nem csak osztlydiagramban, hanem komponens-, telepts- s
hasznlati eset diagramban is ltezhet. brzolsa szaggatott vonallal trtnik, s a nylt
nylvg a kliens elemtl a szolgltat elem fel mutat. (DE1 s DE2)

Az absztrakci tpus kapcsolat a fggsg azon esete, amikor a kliens elem sokkal
rszletesebb, mint a szolgltat, vagyis az absztrakci klnbz szintjein tallhatk. (RE1 s
RE2)
14.3.1.1 Asszocici
Az asszocici osztlyok kztti szemantikus kapcsolat, amely ezen osztlyokat bizonyos
rtelemben rokontja egymssal. Asszocici lehetsges kett vagy tbb osztly kztt.



14.7. bra: Asszocicis kapcsolat, szemly - gpkocsi

- 121 -

Formailag a kt osztlyt reprezentl tglalapot egy egyenes vonallal ktjk ssze. A vonal
fl egy ige (birtokol) kerlhet, al pedig egy igei szkapcsolat (birtokban van). Az ige utn
tehetnk egy jobbra mutat nylvget (), az igei szkapcsolat el pedig balra mutat
nylvget (), de ennek hasznlata nem ktelez.
A tglalapokhoz illeszkeden szerepeltet(het)jk a kapcsolat szmossgt. A fenti pldban
egy szemlynek lehet, hogy nincs gpkocsija, lehet, hogy egy van neki, s lehet, hogy tbb.
Megfordtva, egy gpkocsinak lehet egy tulajdonosa, de lehet tbb is. Ezrt szerepel a
Szemly osztly mellett 1..* , s a Gpkocsi osztly mellett 0..* szmossg.
ltalnosan, szmossg lehet

Nulla egy : 0..1
Nulla sok: 0..*
Egy egy: 1..1 vagy 1
Egy sok: 1..*
M N: M..N
Tetszleges termszetes szmokbl ll nvekv sorzat

Az asszocicis kapcsolat lehet reflexv, azaz ugyanazt az osztlyt trstja sajt maghoz. Egy
szmtgp tetszleges szm szmtgppel kthet ssze.



14.8. bra: Reflexv asszocicis kapcsolat

Nzzk meg, hogyan lehet a biztost trsasg s az gyfl kapcsolatt asszocicis
kapcsolatknt modellezni!

Tegyk fel az albbiakat :
A biztost trsasg szerzdseket kt az gyfelekkel.
A szerzdsek a biztost trsasg s egy vagy tbb gyfl kztt jnnek ltre.
A biztost trsasgnak s brmelyik gyflnek tetszleges szm szerzdse lehet.
Egy adott szerzdst tetszleges szm gyfllel kthet meg a biztost.
Minden szerzdshez tartozik egy ktvny, de ez gyakran csak a szerzdskts utn
jelents ksssel kszl el. (Ennek a tnynek akkor van jelentsge, ha a kresemny
kzvetlenl a szerzdskts utn kvetkezik be.)
- 122 -




14.9. bra: Plda asszocicira
14.3.1.2 Hrmas asszocici
Trsulsi kapcsolat nem csak kt, hanem hrom vagy tbb osztly kztt is lehetsges.

Tegyk fel, hogy iparosok dolgoznak egy csaldi hz ptkezsn. Az albbi tblzat mutatja,
hogy melyik iparos melyik helyisgben milyen munkt vgez.

Iparos Helyisg Munka
Andrs konyha fests
Andrs nappali fests
Andrs frdszoba fests
Bla konyha parkettzs
Bla frdszoba parkettzs
Csaba nappali ftsszerels
Csaba konyha ftsszerels

Az UML az ilyen tpus trsulsok modellezshez rombuszt hasznl, s nem hromszg
alakzatban kti ssze az osztlyokat.



14.10. bra: Hrom osztly asszocicija


- 123 -

Tovbbi pldt szolgltat hrmas trsulsra a vonat utas lhely modell



14.11 bra: Hrom osztly asszocicija
14.3.1.3 Aggregci s kompozci
Az aggregci az asszocici specilis formja, ahol bizonyos rtelemben egsz s rsz
objektumokrl beszlhetnk. (Az UML angol nyelv lersban ezt a kapcsolatot
wholepart, consistsof, ispartof, hasa kapcsolatknt rjk le.) Az aggreglsra
plda egy szemlygpkocsi, amelynek egyebek mellett van motorja, futmve, karosszrija
s ngy kereke. Egy tovbbi plda az aggreglsra a

Sportklub Csapatok Jtkosok

kapcsolat, amit az albbi bra mutat:



14.12 bra: Aggregci s kompozci

A diagramon lthat nylvgi kis rombusz lehet res vagy teli. Az elbbi esetben gyenge vagy
osztott aggreglsrl, az utbbiban ers vagy sszetett aggreglsrl beszlhetnk. Gyenge
tpus aggregls esetn az objektum tbb egszhez is tartozhat, mg ers tpus
aggreglskor csak egyhez. Az elbbi esetben ha az egszt trljk, annak
kvetkezmnyeknt a rszek nem trldnek, mg ers tpus aggregls esetn igen. Ha egy
sportklub megsznik (FC Barcelona), akkor megsznnek a klub keretben mkd csapatok
(labdargs, kosrlabda, teke stb.) is, de ha a kosrlabda csapat megsznik, attl egy jtkos
mg jtszhat tovbb a tekecsapatban, hiszen egy jtkos egyszerre tbb csapatnak is tagja
lehet.

- 124 -

Kompozcira (ers aggreglsra) plda:



14.13 bra: Kompozci: virg s szirmai

A virg a szirmok kompozcijaknt foghat fel. Egy virgon lehet, hogy nincs szirom
egyltaln, s lehet, hogy tbb is van. Egy adott szirom azonban csak egyetlen egy virghoz
tartozhat. Ezt msknt gy fogalmazhatjuk meg, hogy az sszetett aggreglsban a rszek az
egszben lnek. Az egsz oldalon a szmossg lehet 0 vagy 1, a rsz oldalon viszont
tetszleges intervallum.

A kompozci egy msik lehetsges brzolsa a faszerkezet. Ezt akkor hasznljuk, ha az
egsznek egynl tbb rsze van.



14.14. bra: Kompozcis faszerkezet


A grafikus felhasznli fellet (GUI) sokfle ment, gombot, ikont s listt tartalmazhat.
14.3.1.4 ltalnosts
Az ltalnosts (vagy mskpp generalizci) kt osztly, egy ltalnos s egy specilis
entits, az n. szl s utd osztly kztti klnleges kapcsolatot modellezi. (Az UML angol
nyelv lersban ezt isakindof kapcsolatknt rjk le.) A specilis osztly
rendelkezik az ltalnosabb osztly tulajdonsgaival.


- 125 -



14.15. bra: ltalnosts / generalizci

A plda azt mutatja, hogy a Gpjrm osztly a Kzlekedsi eszkz osztly alosztlya, s a
Teheraut osztly szuperosztlya. Az ltalnosts lehetv teszi a hierarchikus osztlyozst,
ami az UML modellezs egyik lnyeges eleme.

Gyakran ltezik valamilyen hasonlsg egy modell klnbz osztlyai kztt, kt vagy tbb
osztlynak lehetnek kzs attribtumai s/vagy mveletei, metdusai. Mivel felmerl az a
termszetes igny, hogy ne kelljen tbbszr is ugyanazt a programrszletet megrni, ezrt
kihasznlhatjuk az rkls mechanizmust. Amikor az A osztly rkl a B osztlytl, azt
mondjuk, hogy az A osztly a B osztly egy alosztlya, megfordtva, B az A szuperosztlya.
Az UML nyelvben az rkls jellsre a zrt vg res nylhegyet hasznljuk, s a nyl az
alosztlytl a szuperosztly fel mutat. Tegyk fel pldaknt, hogy a modellnkben van egy
Hallgat osztly s egy Tanr osztly. Az elbbi attribtumai kztt szerepel a

nv
telefonszm
email cm
hallgati azonost
vfolyam
utols flvi tlag

az utbbi attribtumai kztt pedig a

nv
telefonszm
email cm
beoszts
iroda
fogadra.
- 126 -


Vezessk be a Szemly osztlyt, melynek attribtumai az albbiak lesznek

nv
telefonszm
email cm

Ekkor e hrom osztly egy rklsi hierarchiba (hierarchikus lncba) szervezhet. A
gykrosztlya a Szemly lesz a megadott attribtumokkal, a Hallgat s a Tanr pedig
alosztlyok, amelyek rklik a szuperosztly attribtumait, s emellett rendelkeznek sajt
attribtumokkal is. Paradox mdon a gykrosztly az rklsi hierarchia legfels osztlya.
14.3.1.5 Betokozs
Mint azt a korbbi fejezetben trgyaltuk, a betokozs vagy bezrs (encapsulation) egy
nagyon fontos tervezsi elv az objektum-orientlt alkalmazsfejlesztsben. A betokozs
fogalma leegyszerstve azt jelenti: nem szksges tudnunk, hogy valami miknt van
implementlva ahhoz, hogy kpesek legynk azt hasznlni. Ha ezt az elvet kvetjk, akkor a
fejleszts sorn brmikor megvltoztathatjuk egy komponens implementcijt anlkl, hogy
ez a rendszer ms komponenseit zavarlag rinten, feltve, hogy a szksges s a biztostott
interfszek vltozatlanok maradnak. A rszletek elrejtsnek elve s gyakorlata a mindennapi
let szmos terletn megfigyelhet. gy nem minden bankkrtya-tulajdonos tudja pontosan,
hogyan is mkdik egy krtyaautomata, de bzik abban, hogy az kiszolgltatja neki azt a
pnzmennyisget, amire aktulisan szksge van. Feltve persze, hogy rendelkezik azzal az
sszeggel a szmljn. A bank brmikor vltoztathat a krtyaautomata programjn,
tszervezheti az adatbzisait stb., de ez magt a szolgltatst nem fogja, pontosabban nem
szabad befolysolnia.
Egy osztlyt azrt zrunk be, mert biztostani akarjuk, hogy annak objektumai csak az
osztllyal egytt definilt mveleteken keresztl vltozhassanak. Ms szavakkal, a betokozs
megakadlyozza az objektumokhoz val kls hozzfrst, s azt, hogy az objektumokat meg
lehessen vltoztatni az osztly megalkotjnak szndka ellenben. Csak az osztly metdusai
mdosthatjk az osztlybeli objektumokat kzvetlenl.
A betokozs elve az egyik garancija annak, hogy nagymret szoftverrendszereket lehessen
ltrehozni, amelyekben viszonylag kevs hiba van. Ha ugyanis ez az elv nem rvnyeslne, s
a szoftver klnbz rszei kztt nagyfok kapcsolds llna fenn, akkor egy kicsi
vltoztats valamelyik modulban megkveteln a vltoztatsok tvezetst sok msik
modulban is, ami gyakorlatilag lehetetlenn tenn ezek nyomon kvetst.
14.4 Szekvenciadiagram
A szekvenciadiagramok a vizsglt rendszer entitsai kztti kommunikcit, azaz az
zenetvltsokat brzoljk, jl lthat idbeli sorrendben. A szekvenciadiagramok a rendszer
- 127 -

viselkedsi nzethez tartoznak. A hangsly azon van, hogyan kldenek s fogadnak
zeneteket a rendszer objektumai. A szekvenciadiagramok ktdimenzis brzolsok, az
egyik (vzszintes) tengely az objektumokat (s/vagy osztlyokat), a msik (fggleges)
tengely az idt reprezentlja. A vzszintesen felsorolt objektumok nevt kis tglalapokba
rjuk. Az idt jell fggleges szaggatott vonalon, amit letvonalnak neveznk,
helyezkednek el az aktv peridusokat jell vkony kis ll tglalapok.

A diagramon telt vg () nyilak mutatjk az zeneteket. Amikor egy zenet megrkezik, a
fogad objektum aktv llapotba kerl, s vagy maga hajt vgre bizonyos utastsokat, vagy
vlaszzenetre vr egy harmadik objektumtl, amelynek kldtt el egy zenetet. A
vlaszzeneteket telt vg szaggatott vonallal jellik. Az zeneteket szoks megszmozni, br
igazbl erre nincs szksg, mivel a diagram sugallja a sorrendisget.

Tovbbi lehetsgek:

Felttelek trsulhatnak az zenetekhez
Amennyiben az zenet neve eltt egy * szimblum szerepel, gy az zenet ismtelten
elkldsre kerl, azaz iterlt zenetrl beszlhetnk.
Lehetsges, hogy egy objektum sajtmagnak kld zenetet
Lteznek szinkron s aszinkron zenetek

Formlisan egy szekvenciadiagram elksztshez az albbi lpsek megttele szksges:

16. A rendszer objektumai kztti kommunikci (zenetvltsok) forgatknyvnek
lersa
17. Az objektumok (osztlyszerepek) megadsa
18. Az letvonal meghzsa valamennyi objektumra
19. Az aktv idszakok megrajzolsa
20. Az zeneteket (s a vlaszokat) jell nyilak megrajzolsa
21. Iterci, a modell finomtsa

Nzzk, pontosan mit is jelentenek a fenti fogalmak!

Az letvonal (lifeline) egy olyan grafikus jells, amely az objektumok (osztlyszerepek)
ltezst mutatja, ahogy idben haladunk elre. Az letvonalat szaggatott vonallal jelljk.
Az els zenet felett indul, s az idben utols zenet alatt, a szekvenciadiagram aljn r
vget.
Egy objektum tovbbi objektumokat kpes zenetek ltal ltrehozni. Az letvonal elkezddik,
ha az objektum ltrehozsra kerl (ezt egy res hegy (>) szaggatott vonal jelli a
diagramon), s vget r, ha az osztlyszerep megsemmisl. A megsemmisls tnyt egy X
szimblum jelli annl az zenetnl, amely azt (azaz a megsemmislst) eredmnyezte.

- 128 -

Pldaknt tekintsk egy knyvrendels szekvenciadiagramjt!



14.16 bra: Szekvenciadiagram egy knyvrendelsre

Az 14.16 bra a bolti knyvrendels leegyszerstett folyamatt mutatja. Hrom objektum
szerepel az brn:

22. Vev
23. Bolt
24. Keresett knyv.

Az brn megjelentett zenetek:

25. A vev (telefonon) megrendeli a knyvet a knyvesbolttl.
26. A bolti alkalmazott ellenrzi az adatbzisban a knyv megltt, illetve az rt.
27. Ha megvan a knyv, az elad feljegyzi a knyv rt.
28. Ezt az rat kzli a vevvel.
29. A vev kifizeti a knyv rt.
30. S megkapja az hajtott knyvet.
14.5 Kommunikcidiagram
Az UML korbbi szabvnyaiban kollaborcis diagramknt emlegetett bra tbb szempontbl
is hasonlt a szekvenciadiagramra. Az zeneteket ktelez megszmozni, mg a
szekvenciadiagramban az idt expliciten brzoljuk, fellrl lefel haladva. Nyilvnval,
- 129 -

hogy az idrendisget a szekvenciadiagrambl knnyebben tudjuk leolvasni. Tny, hogy egy
szekvenciadiagram elksztse utn mr knny feladat egy kommunikcidiagram
megszerkesztse, s fordtva is igaz ez az llts. Arra a krdsre, mikor rdemes
szekvenciadiagramot, illetve kommunikcidiagramot hasznlni, azt vlaszolhatjuk, hogy az
elbbit akkor, ha csak az zenetek sorrendje az rdekes, mg az utbbit akkor, ha inkbb a
kommunikci mibenltt szeretnnk megrteni.

A kommunikcidiagram hasznlatt egy bevsrlkzpontban mkdtetett bankjegykiad
automata pldjval illusztrljuk. (A bevsrlkzpontnak a trtnetben csak annyi a szerepe,
hogy az automatt nem maga a bank zemelteti.)

Az 14.17. brn lthat kommunikcidiagram entitsai az albbiak:

gyfl Automata Trsasg - Bank

A Bank bocstotta ki a plasztikkrtyt, s a Trsasg zemelteti az automatt. rtelemszeren
minden tranzakci keresztlmegy a trsasgon.

- 130 -





14.17 bra: Kommunikcidiagram egy bankjegykiad automatra

Az 14.17. brn szmokkal elltott zenetek a kvetkezk:

31. Krtya behelyezse az automatba
32. Jelsz krs
33. Jelsz megadsa
34. Szmlaszm rvnyests krse
35. Krtya rvnyests krse
36. Bank elfogadja a krtyt
37. Folyszmla rendben van
38. Feladatvlaszts krse
39. Feladat megadsa
40. sszeg megadsnak krse
41. sszeg begpelse
42. Tranzakci feldolgozsnak krse a Trsasgtl
43. Tranzakci feldolgozsnak krse a Banktl
- 131 -

44. Banki tranzakci sikeres
45. Tranzakci sikeres
46. Bankjegyek kiadsa
47. Kszpnz felvtele
48. Krtya kivtele az automatbl

Az objektumokat az brn nem szksgszeren vzszintesen helyezzk el, hanem abban a
formban, ami legjobban segti az objektumok kztti klcsnhatsok (kommunikci)
megrtst. A kommunikci irnyt nem az objektumokat sszekt nyilakra rjuk r, hanem
mellettk helyezzk el a kisebb nyilakat.

14.6 llapotgp-diagramok

Ha egy rendszer viselkedst kvnjuk lerni, a tevkenysg- s kommunikcidiagramok
mellett gyakran szksg van az n. llapotgp-diagramok hasznlatra is, amelyek az
elnevezsbl kvetkezen egy objektum llapotait s azokat a bels s kls esemnyeket
modellezik, amelyek vltozsokat idz(het)nek el bennk. Ez a diagramtpus klnsen
hasznos vals idej (real-time) s biztonsg-kritikus rendszerek fejlesztsben, ahol a vizsglt
rendszert a krnyezetbl rkez kls hatsok, ingerek vezrlik. Az llapotgp-diagramok
irnytott grfok hasznlatval azokat a rendszerllapotokat s ingereket, esemnyeket
mutatjk be, amelyek az egyik llapotbl egy msikba trtn tmenetet okozzk.
Termszetesen felttelezzk, hogy a lehetsges llapotok szma vges.

Illusztrci gyannt tekintsnk egy igazn egyszer rendszert, egy villanykapcsolt. Ennek
kt llapota ltezik: a leoltott s a felgyjtott llapot, rviden LE s FEL. Azzal a logikus
feltevssel lnk, hogy a rendszer brmely idpillanatban e kt lehetsges llapot egyikben
tallhat. Ktfle ingert, esemnyt (esetnkben cselekvst) klnbztethetnk meg, amelyek
llapotvltozst idznek el a rendszerben, ez a leolts s a felgyjts esemnye. Klnsen
bonyolultabb rendszerek esetn clszer tblzatba rendezni a rendszerllapotokat, az
ingereket (esmnyeket) s az tmeneteket.

llapot Felgyjts Leolts
LE FEL -
FEL - LE

Amennyiben nincs vltozs az llapotban vagy nem rtelmezhet az tmenet, a jel
szerepel a tblzatban.

Az llapotgp-diagramokon a lekerektett tglalapok jellik az llapotokat, kzepkbe rva az
llapot nevt, a folytonos, nyllal elltott vonalak pedig magukat az tmeneteket.
- 132 -

Rendszerllapot nem csak passzv lehet, mint a fenti pldban, hanem aktv is. Ilyenkor az
llapotnv alatt a do szcska s a tevkenysg megnevezse szerepel. Az llapotgp-
diagramokon kt kitntetett llapot szokott szerepelni, a kezdeti s a vgllapot.

A diagramok msik eleme az tmenet, amely kt rendszerllapot kztt ltezik. Ezek egyikt
forrs-, msikt clllapotnak nevezzk. Az tmenetet jell nylra nem csak az esemnyt,
hanem annak logikai felttelt is rrhatjuk. gy az tmenet csak akkor kvetkezik be, ha a
logikai felttel rtke igaz.

Tegyk fel a plda kedvrt, hogy egy DVD-lejtsz a modellezend rendszer. Hrom
llapotot klnbztethetnk meg: lejtszs, sznet s lells. Az llapottblzat az albbi lesz:


llapot Lejtszs gomb
megnyomsa
Sznet gomb
megnyomsa
Stop gomb
megnyomsa
Lejtszs Sznet Lells
Sznet Lejtszs Lells
Lells Lejtszs


Knnyen belthat, hogy Lells Lejtszs tmenet csak abban az esetben valsul meg, ha
van lemez a lejtszban.

Az llapotgp-diagramok kizrlag akkor hasznlatosak, amikor olyan objektumokat
kvnunk modellezni, amelyek eltr mdon viselkednek aszerint, hogy aktulisan melyik
rendszerllapotban vannak. Ha egy objektum nem vltoztatja az llapott letciklusa sorn,
akkor nem indokolt llapotgp-diagram ksztse. Gyakorlati problmkban, amikor
nagymret rendszereket modelleznek, mind a lehetsges llapotok, mind az ingerek szma
meglehetsen nagy, akr tbb szz is lehet.
- 133 -


15 Az alkalmazsfejleszts folyamata, szoftver-letciklus
modellek
A szoftverrendszerek tervezsben s megvalstsban kevsb jratos emberek rendszerek
fejlesztst gyakran azonostjk a szmtgpek programozsval. Ebbl kvetkezen gy
gondoljk, hogy a rendszerfejleszts lnyegben alig tbb mint programrs. Ha kzelrl
megvizsglunk egy pr informatikai projektet, klnsen a nagyobb mreteket, akkor azt
fogjuk tapasztalni, hogy az elvgzett munknak tlagosan 10%-a fordtdott tnylegesen
programrsra, tesztelssel egytt kb. 30%-a, a fennmarad 70% ugyanis egyb
tevkenysgeket takar. Az emltett arnyok termszetesen csak tjkoztat jellegek. E
szmok projektrl projektre vltoznak, mgpedig meglepen nagy szrssal, msrszt a
klnbz szmtsok nem mindig veszik figyelembe az sszes, rendszerfejlesztssel
kapcsolatos tevkenysget. Ez klnsen a mr elkszlt szoftverrendszerek karbantartsra,
az n. szoftverevolcira vonatkozik, amely fzis pedig nagyon fontos rsze a
rendszerfejlesztsnek.

15.1 A szoftverrendszerek fejlesztsnek folyamata

A szoftverrendszerek fejlesztsnek folyamatt 7 alapvet fzisra bonthatjuk, tekintet nlkl
arra, hogy maga a fejleszts tnylegesen milyen mdszerrel trtnik:

49. clok meghatrozsa, projektindts,
50. elemzs, a rendszerrel szemben tmasztott kvetelmnyek meghatrozsa,
51. tervezs,
52. kivitelezs, implementls, integrci,
53. validci,
54. telepts, tads
55. zemeltets, karbantarts, evolci.

Ez a ht fzis alkotja egytt a alkalmazsfejleszts letciklust. (Termszetesen ezek a fzisok
sszefondhatnak, sszefsldhetnek, s nincs arrl sz, hogy egy fzist csak s kizrlag
akkor lehet elkezdeni, ha a megelz fzis mr teljes egszben befejezdtt.) Az letciklus-
modell azokat a lpseket s feladatokat tartalmazza, amelyek minden rendszerfejlesztsi
projektben kzsek. Ugyanis, tekintet nlkl arra, hogy milyen tpus s mekkora mret
informatikai rendszert akarunk fejleszteni, mindig szksg van a jelenlegi rendszer
tanulmnyozsra legyen az manulis (kzi) vagy automatizlt , a megrendeli
kvetelmnyek megfogalmazsra, megvalsthatsgi tanulmny ksztsre, szksg van az
- 134 -

egsz informatikai projekt megtervezsre, kltsgterv ksztsre, dokumentlsra,
validlsra, a felhasznlk kikpezsre s betantsra, teleptsre stb.

Lssuk, hogy az letciklus egyes fzisai tnylegesen milyen tevkenysgeket tartalmaznak!

A projektindts fzisa a gyakorlatban szmos, nagy fontos, gyakran kritikus lpst fog
ssze. Ide tartozik minden olyan tevkenysg, amely elkszti a tnyleges informatikai
fejlesztst, ami a rendszerelemzssel indul. A projektek elindtsnak tlete tbbflekppen
merlhet fel. Taln leggyakrabban az a motivcija egy informatikai fejleszts
kezdemnyezsnek, hogy a felhasznlk elgedetlenek a mkd rendszerrel ami lehet
teljesen vagy csak rszben automatizlt esetleg teljesen manulis , s javasoljk akr a rgi
rendszer lnyeges mdostst, akr egy j rendszer kiptst. A projektek elkezdsnek
msik gyakori oka j zleti lehetsgek felmerlse, amelynek rvn a vllalat verseny-
elnyre kpes szert tenni. Erre taln a legjobb plda az e-business terlete.

Legyen brmi is a motivci, felttlenl szksges egy alapos s krltekint vizsglat a
megvalsts lehetsgeit s eslyeit illeten. Ennek a vizsglatnak fontosabb megllaptsait
tartalmazza az n. megvalsthatsgi tanulmny (feasibility study).

A szoftverprojekt menedzsernek dolga az, hogy biztostsa (megtervezze, temezze, rtkelje,
felgyelje stb.), a szoftverprojekt megfelel a kltsgvetsi s temtervi megszortsoknak, s
olyan rendszer kerl leszlltsra s tadsra, amely jelentsen hozzjrul a szervezet, cg,
kzintzmny zleti cljai elrshez. Szoftverprojektek menedzselse felttlenl szksges,
mert a szoftverfejleszts mindig kemny pnzgyi (kltsgvetsi) s temezsi (idbeli)
korltok kztt folyik. A projektmenedzser feladatai kzl az albbiak a legfontosabbak:

Projektjavaslatok rsa
Projektek tervezse s temezse
Projektkockzatok azonostsa, elemzse s figyelse
Projektkltsgek figyelemmel ksrse
Projektek fellvizsglsa
Rsztvevk kivlasztsa s teljestmnyk rtkelse
Beszmoljelentsek rsa s prezentcik ksztse

A projektindts egyik legfontosabb tevkenysge

a szksges emberi erforrsok (ember nap, man month),
az idtartam (naptri hnapok),
a kltsgek
lehetsg szerinti minl pontosabb megbecslse.

- 135 -

(Ha tegyk fel egy feladat elvgzsnek emberi erforrs ignye 6000 ember - nap, akkor ez
azt jelenti, hogy pldul 30 fnek 10 hnapig, 200 fnek msfl hnapig, 1200 fnek pedig
egy htig kellene dolgoznia a megoldson. Termszetesen a valsgban a feladat termszete,
a rszfeladatok egymsra plse kizrhat bizonyos kombincikat.)

Maguk a becslsek leggyakrabban a korbbi projektek tapasztalataira ptenek. Viszonylag
egyszer a helyzet, ha az j projekt a rendeltetst s mrett illeten hasonlt korbbi
fejlesztsekre. Br kt egyforma projekt nincs, mgis valszn, hogy az j vllalkozs
nagysgrendileg ugyanannyi erforrst fog a ignyelni, mint a korbbiak. A helyzet
lnyegesen bonyolultabb, ha olyan projekt beindtst tervezik, amelyhez hasonlt (legalbbis
a projekt rsztvevi) nem ismernek. Ilyenkor azt az eljrst szoktk alkalmazni, hogy
megksrlik a fejleszts vrhat folyamatt egszen apr rszekre bontani, s e rszekre kln-
kln ksztenek becslst mltbeli tapasztalatok felhasznlsval s klnfle
szoftvermrtkek alkalmazsval.

A projektindts fzisnak, amellyel kapcsolatban nem lehet elgg hangslyozni, hogy
mennyire kritikus a rendszerfejleszts egsznek sikert illeten, tovbbi fontos rsze a
fejleszts temtervnek elksztse. Elsknt a rszfolyamatokat kell azonostani, hozzjuk
rendelve a vgrehajts idtartamignyt. Majd a rszfolyamatok fggsgi viszonyait kell
feltrkpezni, ami azt jelenti, hogy minden rszfolyamatra meg kell mondani, mely
tevkenysgeknek kell azt megelznik; illetve mely tevkenysgek elkezdsnek felttele,
hogy a szbanforg tevkenysg rszben vagy teljesen befejezdjn. Fontos megjegyezni,
hogy az temezsnek nem csak az idtartamra, hanem az emberi erforrsokra is vonatkoznia
kell. A rendszerfejleszts els fzisnak termszetesen rsze a fejleszti csapat sszelltsa.

Prbljuk megfogalmazni miben is klnbzik az alkalmazsfejleszts, a szoftverrendszerek
fejlesztse (software engineering) ms (mrnki) tevkenysgektl. (Az eltrsek, a
klnbsgek szem eltt tartsa azrt is kvnatos, mert nagyon sok, hagyomnyosan
menedzselt szoftverprojekt bizonyult sikertelennek az informatika rvid, alig 60 ves
trtnetben. A kudarc arnya lnyegesen fellmlja az ipari tlagot.)

Legalbb ngy okot tudunk megnevezni, ami miatt a szoftvertervezk munkja nem olyan
jelleg, mint a hagyomnyos mrnkk:
56. A szoftver nem egy kzzelfoghat termk. Ha egy toronyhz ptse csszik, mind a
kivitelezk, mind a megrendelk ltjk az elmaradst. A szoftverprojekt csszst
sokkal nehezebb felismerni. Ezrt szoktak a projektek megrendeli ragaszkodni
ahhoz, hogy idrl-idre valamilyen kzbens termk (deliverable) tadsra kerljn,
br ez nem oldja meg teljesen a problmt.
57. A szoftver egyedlllan rugalmas termk. Ha egy pletet eredetileg krhznak
terveztek, menetkzben nehz azt mondjuk sportstadionn tpteni.
Szoftverprojektekben ilyen mret irnyvlts gyakran elfordul.
- 136 -

58. A szoftverprojektek jelentsen klnbzhetnek a korbbiaktl. Br a mrnki
tudomnyok fejldse is gyors, az mg sem kzelti meg az informatika fejldsi
temt. A gyakori technolgiai vltsok a korbbi projekttapasztalatokat rendkvl
hamar elavultt teszik.
59. Nehz megjsolni mikor fog egy szoftverprojekt fejlesztsi problmkba botlani. Az
informatikban mg nem rtk el azt a szintet, hogy a termktpusok s az ket
elllt szoftverfolyamatok kapcsolatt tkletesen megrtsk.

A rendszerelemzs fzisban a projekt rsztvevi az zleti problmt s annak krnyezett
tanulmnyozzk, elemzik abbl a clbl, hogy pontosan, egzakt mdon meg tudjk
fogalmazni a leend informatikai rendszerrel szemben tmasztott ignyeket, elvrsokat s
kvetelmnyeket, fggetlenl attl, hogy ltezik-e mr valamilyen informatikai rendszer,
vagy a semmibl kell azt megkonstrulni. (A tovbbiakban a kvetelmny elnevezst abban
az rtelemben fogjuk hasznlni, mint az informatikai rendszer ltal nyjtand szolgltatsok
magas szint, absztrakt megfogalmazst.) A rendszerelemzs fzisnak fontossgt nem
lehet elgg hangslyozni, br a gyakorlatban errl sajnlatos mdon igen gyakran
megfeledkeznek. A tapasztalatok szerint az elindtott rendszerfejlesztsi projekteknek csak kis
tredke fejezdik be a kitztt hatridre s az eltervezett kltsgvetsen bell. Ennek az
egyltaln nem megnyugtat tnynek az az elsdleges magyarzata, hogy az elemzk az
esetek jelents rszben nem a kell krltekintssel vgeztk munkjukat. Fontos
megjegyezni, hogy a rendszerelemzs elssorban nem informatikai feladat, hanem
szakterleti (gazdasgi, mezgazdasgi, orvosi stb.). A hangsly a szakterleti problmn
van, s nem a szmtgpes programrson. A rendszerelemzkkel kapcsolatban tmasztott
egyik legfontosabb elvrs a kivl kommunikcis kszsg, hiszen a kvetelmnyek
megfogalmazsa fknt a felhasznlkkal folytatott megbeszlsek s a velk ksztett
interjk rvn lehetsges.

A tervezs fzisa az alternatv megoldsi javaslatok rtkelst s a vglegestett megolds
rszletekbe men megadst, az n. specifikcik rgztst tartalmazza. A tervezs sorn a
hangsly az zleti clokrl, problmkrl s krnyezetrl fokozatosan ttoldik a szigoran
vett informatikai krdsekre, mint pldul kpernytervek, riportformtumok elksztse,
adatbzisok, illesztsek, programok tervezse stb. Megklnbztetnk logikai s fizikai
tervezst. A tervezs fzisnak vgtermke, a specifikcikat rgzt dokumentum lesz a
kiindul pontja a programozk munkjnak.

A kivitelezs vagy implementls fzisa a megolds fizikai megkonstrulst jelenti, s annak
zembe lltst a megrendel telephelyn. Ehhez a fzishoz tartozik a programozs vagy
kdols.

A validls fzisa mindazokat az ellenrz folyamatokat tartalmazza, amelyek biztostjk,
hogy a szoftverrendszer megfelel specifikcijnak s kielgti a felhasznlk ignyeit. A
validls legfontosabb tevkenysge a tesztels, ami az egyes programrszek, azaz modulok
- 137 -

ellenrzstl az egyttmkdst biztost n. integrcis teszteken keresztl a teljes rendszer
(azaz szoftver, hardver, hlzatok s adatbzisok) megfelel viselkedsnek ellenrzsig
terjed. Fontos megjegyezni, hogy a br a validcit egytt szoks emlegetni a verifikcival,
ez a kt fogalom nmileg mst jelent. Verifikci alatt azt rtjk, hogy vajon megfelel-e a
szoftverrendszer a specifikcijnak, illetve azt, hogy eleget tesz-e a funkcionlis s nem-
funkcionlis kvetelmnyeknek, mg a validci annak ellenrzse, hogy megfelel-e a
szoftverrendszer a megrendel, az gyfl, a vev valdi elvrsainak. A klnbsg tisztn
kivehet.

A 20. szzadi menedzsmenttudomny legnagyobb hats gondolkodja, Peter Drucker szerint
az eltrs a kvetkezkppen fejezhet ki kzrthet formban:

Verification "Are we building the product right?"
Validation "Are we building the right product?"

A telepts fzisban kerl sor egyebek mellett a rendszer tadsra amely lps meglepen
sokflekppen trtnhet , a vgleges dokumentci elksztsre s a felhasznlk
betantsra.

Az zemeltets fzisa egyrszt felleli a folyamatos napi mkdtetst, annak tmogatst,
msrszt az esetleges hibk kijavtst, a rendszer tkletestst, a megvltozott
krlmnyekhez trtn adaptlst. Ez a fzis, amit mskpp rendszerevolcinak is
neveznek, ltalban hossz ideig tart s kltsges, s azzal r vget, hogy a rendszer elavultt
vlik, kpletesen szlva meghal. Ekkor zemen kvl helyezik, s ez jelenti az letciklus
vgt.

Informatikai rendszerek fejlesztsnek az elmlt 50 vben szmos mdja vlt ismertt. A
nagy rendszerek semmibl val ltrehozsa mellett, amire egyre kevesebb megrendel
vllalkozik, az utbbi vekben egyre npszerbb lett az jrafelhasznlhat komponens alap
fejleszts, a ksz alkalmazsi programcsomagok adaptlsa s hasznlata, valamint kisebb
projektekben az nll vgfelhasznli fejleszts. A kvetkez fejezetekben rszletesen
megvizsgljuk s sszehasonltjuk a rendszerfejleszts klnfle formit, folyamatmodelljeit
s folyamatiterciit.

Informatikai rendszerek sikeres fejlesztse, mint azt a fentiekben mr rszletesen elemeztk,
teljessggel elkpzelhetetlen az zleti folyamatok megrtse nlkl, amelyek tmogatsra
tervezik s fejlesztik e rendszereket. Ez a tevkenysg a rendszerelemzs, vagy mskppen a
kvetelmnyek meghatrozsa (requirement engineering) fzisban trtnik meg. Minden
ltez vagy tervezett zleti folyamat s ezzel egytt a rendszerek sokflekppen elemezhetk.
Ezen megkzeltsek nmelyike az alkalmazott technolgira, msok a szervezetre
koncentrlnak, amelyben az zleti folyamatok lejtszdnak. Ltezik egy tovbbi
- 138 -

megkzelts, amely az zleti folyamatok sorn elvgzett zleti tevkenysgekre figyel, ezek
alapjn r le, illetve elemez rendszereket. Ez a mdszer az elmlt vekben igen elterjedtt vlt.

15.2 A rendszerfejleszts folyamatmodelljei
A rendszerfejleszts folyamata, tekintet nlkl arra, hogy az tnylegesen hogyan is trtnik,
bizonyos tevkenysgeket, erforrsokat, termkeket, technikkat s eszkzket foglal
magban. Az elmlt vtizedekben tbbflekppen kzeltettek e folyamathoz. Ezen
megkzeltsek kzl az albbi t hasznlatos ma is:

hagyomnyos vzessmodell, s annak varinsai,
szoftverprototpus ksztse, evolcis fejleszts,
jrafelhasznlson alapul fejleszts,
ksz alkalmazsi programcsomagok hasznlata,
vgfelhasznli fejleszts.

Ebben a fejezetben ezeket a rendszerfejlesztsi technikkat ismertetjk s hasonltjuk ssze,
trgyalva elnyeiket s htrnyaikat. Fontos hangslyozni, hogy a rendszerfejleszts
brmelyik vltozatt vlasztjuk is, valamennyi technika a mr emltett tevkenysgekbl ll:

projektindts,
kvetelmnyelemzs,
tervezs,
megvalsts, kivitelezs, implementci, integrci
validls, tesztels
telepts, zemeltets, karbantarts, rendszerevolci.

Meg kell itt jegyeznnk, hogy a fzisok szmt, illetve azok elnevezst illeten sokfle
konvenci van forgalomban. Az letciklus tagolst, az alkot fzisok szmt illeten az
informatikusok vlemnye eltr. Valjban nincs nagy jelentsge annak, hogy 5, 6 vagy 7
tevkenysget klnbztetnk-e meg. Ezt a krdst teht rugalmasan kell kezelni. Idnknt
tbb fzist ssze fogunk vonni, illetve egy-egy fzist tovbbi rszfzisokra fogunk bontani.

rtelemszeren a projektindts szakaszban elsknt magt a problmt kell definilni. Ez
ltalban az albbi krdsek feltevst s megvlaszolst jelenti:

Mirt van szksgnk egy j informatikai fejlesztsre, egy j projektre?
Mit szeretnnk megvalstani, elkszteni, megoldani az j informatikai rendszerrel?
Tmogatja-e a tervezett rendszer a vllalat, az intzmny ltalnos (zleti)
clkitzseit?
Mit kell tmogatnia a tervezett rendszernek s mit nem?
Milyen problmk merltek fel a jelenlegi folyamatokkal kapcsolatban?
Hogyan segtene ezeken a tervezett j rendszer?
- 139 -

Hogyan jrul hozz a tervezett rendszer az zleti clok megvalstshoz?
Mi trtnne, ha a rendszert nem valstank meg?
Megvalsthat-e a tervezett rendszer a jelenlegi (elrhet) technolgival az adott
kltsgkereten bell s adott temezs szerint?
Ignyel a rendszer j technolgit?
Milyen integrcis problmk lehetnek?
Integrlhat-e a tervezett rendszer ms, mr a vllalatnl hasznlatban lv mkd
rendszerekkel

Ebben a fzisban kell a projekt elindtsrl dnteni egy krltekint megvalsthatsgi
tanulmny alapjn, kltsgbecslst s projekttervet kszteni, sszelltani a fejleszti csapatot
stb.

Az elemzs fzisa a (ltez s/vagy az j) rendszer tanulmnyozst s modellezst jelenti.
Az esetek tekintlyes szzalkban a mr ltez (rszben vagy teljesen automatizlt, vagy
akr teljesen manulis) rendszer problmit elemzik a lehet legnagyobb rszletessggel. Ms
esetekben j kihvsoknak igyekeznek innovatv mdon megfelelni. Valamennyi esetben
pontosan meg kell hatrozni a rendszerrel szemben tmasztott kvetelmnyeket. Az elemzs
clja teht a problma nagyon pontos, kimert, lehetsg szerint teljes s vilgos lersa.

A tervezs fzisban az elzekben megfogalmazott kvetelmnyeket, specifikcit kell
hardver/szoftver megoldss talaktani. Az informatikban a terv a megolds
specifiklst, egzakt lerst jelenti, az implementls pedig a rendszer fizikai meg-
valstst, kivitelezst, validlst, tesztelst s tadst a megrendelnek, mgpedig
abban a krnyezetben, ahol tnylegesen hasznlni fogjk. A megvalsts trtnhet a
szksges szoftver

megrsval vagy
megvsrlsval, esetleg
lzingelsvel.

Az implementls fzisban kell a hardvert beszerezni s installlni, amennyiben az mg nem
ll rendelkezsre. Szintn az implementls rsze a felhasznlk betantsa, kikpzse s a
felhasznli, illetve a rendszerdokumentci vglegestse.

A validls fzisa az ellenrzst jelenti. Ez ltalban nem az implementls befejezsekor
kezddik el, hanem lnyegben vgig kisri a megelz fzisokat. Is.

Az zemeltets fzisa akkor kezddik, amikor a fejleszti csapat tadja a rendszert a
megrendelnek, s azt folyamatos napi hasznlatra zembe lltjk. Egyrszt a mkds sorn
felmerl hibkat kell viszonylag gyorsan kijavtani, msrszt adaptlni a rendszert a
megvltozott zleti krlmnyekhez, tovbb tkletesteni, pldul a funkcik bvtsvel.

- 140 -

A fentiek egyttesen alkotjk az informatikai rendszer letciklust. Az elnevezs rendkvl
tall, hiszen egy rendszer lete valban sok hasonlsgot mutat az emberi lettel.
Mindkett esetben beszlhetnk kezdetrl s vgrl. Az informatikai rendszerek halla,
azok zemen kvl helyezse s lecserlse, hasznos lettartamuk utn, jabb rendszerekre.
Elre javallott megtervezni az zemen kvl helyezst, s gondoskodni kell az adatok
konverzijrl, nehogy azok elvesszenek a tovbbi felhasznls szmra.

A szoftverrendszer-fejleszts mdszereit nem lehet s nem rdemes rangsorolni, az eltr
helyzetek klnbz megkzeltseket tesznek, tehetnek indokoltt. Ha ltezne egy olyan
mdszer, amelyik minden tekintetben jobb a versenytrsainl, szksgtelenn tenn a
tbbiekkel val foglalkozst. Mivel ilyen nem ltezik, ezrt tisztban kell lennnk azzal, hogy
milyen kritriumok alapjn vlasszunk az alternatvk kzl.
15.2.1 Klasszikus vzess modell s varinsai
15.2.1.1 A vzess modell
A hagyomnyos vzess modell tnylegesen a legrgibb rendszerfejlesztsi technika. Az els
modell mg az tvenes vek elejn, kzepn szletett meg, br elnevezst vzess modell
csak 1969-ben kapta. A nv magyarzata, hogy az egyes fejlesztsi szakaszok gy kvetik
egymst, mint egy tbblpcss (kaszkd-) vzess.

A vzess modell bizonyos vltozataiban az egyes fzisokat tovbb bontjk. A tesztels
pldul ltalban t lpsben trtnik:

egysgteszt,
modulteszt,
integrcis teszt,
rendszerteszt,
elfogadsi teszt;

az tads pedig hrom, idben elklnl tevkenysgbl ll:
3
installci,
dokumentci vgleges vltozatnak tadsa,
betants s trning.

- 141 -

2. ELEMZS
3. RENDSZER- S
PROGRAMTERVEZS
4. PROGRAMRS
5. TESZTELS
6. TADS
7. ZEMELTETS
1. PROJEKTINDTS

15.1. bra A rendszerfejleszts hagyomnyos vzess modellje

Fontos kiemelni, hogy a vzess modell egy szigoran dokumentumvezrelt folyamat. Ez azt
jelenti, hogy egyik fzisbl az utna kvetkez fzisba csak a fzis teljes befejezse s a
befejezst igazol dokumentum, rszeredmny (deliverable) elkszlte utn lehet tmenni. (A
rszeredmnyek olyan eredmnyek, amelyek a szoftverfejleszts egyes mrfldkveinl
tadhatk a megrendelnek.) E folyamatmodellben a lpsek sorrendje elre rgztett. Az
egsz folyamat a legaprbb rszletekig bezrlag szablyozott. Ez a tny, br lnyegesen
megnyjtja a fejleszts idtartamt, egyttal ltalban garancia is a minsgi munkra. A
tradcionlis vzess modellt (tovbbfejlesztseivel egytt) szinte kizrlag nagy mret s
hossz lettartam rendszerek fejlesztsre hasznljk. A szigor elrsok garantljk a j
minsg, br lass fejlesztst. ltalnos szablyknt elmondhatjuk, hogy a vzess modellt
csak akkor rdemes alkalmazni, ha a kvetelmnyek mr elre jl ismertek.

A klasszikus vzess modellt gyakran hasonltjk egy olyan bevsrlshoz, ahol a vevnek
mr az zletbe lpve pontosan meg kell mondania, mit hajt vsrolni, anlkl, hogy idt
hagynnak neki az alapos krbenzsre, az rak sszehasonltsra. Ebben a helyzetben nincs
md, pontosabban nagyon csekly lehetsg van csak arra, hogy menet kzben mdostsunk
eredeti elkpzelseinken. A vzess modell egyetlen igazi problmja a flexibilits hinya. Ez
a megfogalmazs azt jelenti, hogy meglehetsen korn, mr a fejlesztsi folyamat elejn kell
elkteleznnk magunkat bizonyos dntsek mellett, s ezeken a ksbbiekben nem ll mdunk
vltoztatni.
- 142 -

15.2.1.2 A V modell
A kilencvenes vek legeleje ta nagyon npszer a rendszerfejlesztk krben a nmet
nemzetvdelmi minisztrium ltal kidolgozott folyamatmodell, az n. V modell. A fejleszts
egyes fzisai egy V bett formlnak, amelynek cscsban a programrs tevkenysge ll, tle
balra az elemzs s a tervezs, tle jobbra pedig a tesztels s a karbantarts lpse tallhat.
A V alakzat magyarzata az, hogy ebben a folyamatmodellben a tesztels kerl kzponti
helyre. A modulteszt s az integrcis teszt verifiklja a rszletes programtervet, azaz igazolja
a terv helyessgt, a rendszerteszt pedig verifiklja magt a rendszertervet. A megrendel
ltal elvgzett elfogadsi teszt validlja, azaz rvnyesti, igazolja a rendszerelemzs
helyessgt. Ez utbbi azt jelenti, hogy a megrendel ellenrzi, vajon minden, a rendszerrel
szemben megfogalmazott kvetelmny megvalsult-e a rendszerfejleszts sorn.

A V modellben 9 fejlesztsi fzist klnbztetnk meg, amelyek kzl hrom a tesztelsre
vonatkozik.

60. projektindts,
61. elemzs, kvetelmnyek meghatrozsa,
62. rendszerterv elksztse,
63. rszletes programterv elksztse,
64. programrs,
65. modul- s integcis tesztels,
66. rendszertesztels,
67. elfogadsi tesztels,
68. tads s zemeltets, karbantarts.

1
2
3
5
verifikci I.
verifikci II.
validci
6 4
7
8
9

15.2. bra A rendszerfejleszts V modellje
- 143 -


Mint azt korbban tisztztuk, a validci annyit jelent, hogy meggyzdnk arrl, vajon a
helyes, azaz a megrendeli ignyeknek, kvetelmnyeknek eleget tev, megfelel rendszert
ptjk-e, a verifikci pedig azt jelenti, hogy meggyzdnk arrl, helyesen ptjk-e a
rendszert, azaz a tervezsi dokumentumban rgztett specifikcik alapjn. Az elfogadsi
tesztels sorn gyzdik meg a megrendel, hogy a szmra elksztett informatikai rendszer
rendelkezik-e mindazon funkcionlis s nem-funkcionlis tulajdonsgokkal s jellemzkkel,
amelyeket tle elvrnak. Ha nem rendelkezik ezekkel, akkor vissza kell trni az elemzs
fzishoz, s azt jra el kell vgezni. S ezt a visszacsatolst annyiszor kell (s lehet)
megismtelni, ahnyszor arra szksg mutatkozik.

A rendszer verifikcija ktflekppen is megtehet. Az integrcis tesztels sorn tapasztalt
diszkrepancia (eltrsek) esetn a rszletes programtervhez, a rendszertesztelsnl tapasztalt
problmk esetn pedig a rendszertervhez kell visszanylni. Termszetesen az iterci itt is
lehetsges.
15.2.2 Prototpusok ksztse, evolcis fejleszts
15.2.2.1 Szoftverprototpusok alkalmazsa
A tradicionlis vzess modellen alapul rendszerfejleszts gyengesgeit viszonylag hamar
felismertk. Ezek kikszblsre szmos elkpzels szletett, melyek kzl a
szoftverprototpusok alkalmazsa az egyik legismertebb s leggyakrabban hasznlt technika.
A prototpus sz mintapldnyt jelent, s a rendszerfejlesztsben tbbfle rtelemben is
hasznljk ezt a kifejezst:

az evolcis rendszerfejleszts eszkzeknt,
a rendszerrel szemben tmasztott felhasznli kvetelmnyek megfogalmazsakor,
specifiklsakor felmerl problmk megoldsra,
valamely nagyobb befektetst ignyl dnts tmogatsra a lehetsges megold-
sokkal val ksrletezssel.

A szoftverprototpusok hasznlatnak alaptlete az, hogy minl hamarabb ki kell fejleszteni
egy kezdetleges implementcit, s azt sok-sok itercis lpsen keresztl finomtani
mindaddig, amg a megfelel rendszert nem rtk el, s mindezt a felhasznlkkal val
folyamatos konzultcik sorn.
Rgi tapasztalat, hogy az informatikai rendszerek megrendeli a projekt indtsakor ltalban
alig, vagy nagyon nehezen tudjk valamennyi elvrsukat pontosan megfogalmazni a
kifejlesztend rendszerrel kapcsolatban, ami termszetesen egyltaln nem meglep. Egy j
rendszer irnti igny motivcija az esetek nagy rszben az, hogy a megrendel elgedetlen
a jelenlegi helyzettel. Ennek egyik oka lehet az, hogy a jelenlegi rendszer egyltaln nem
- 144 -

kpes kezelni azokat a problmkat, amelyek felmerlnek, vagy nem megfelelen, nem
hatkonyan kezeli azokat.
A meglev rendszer ismerete azonban nem biztos, hogy elgsges az jjal szembeni elvrsok
teljes krnek meghatrozshoz. Gyakori eshetsg az, hogy a megrendel nincs teljesen
tisztban azzal, hogy az j rendszer rvn egyltaln milyen elnykhz juthat hozz. Ilyen
esetekben is hasznos egy mkd, funkcionalitsban hasonl, m teljestmnyben,
kapacitsban, sebessgben, zembiztonsgban, vdettsgben, robosztussgban,
sszetettsgben, komplexitsban a kvnt rendszertl esetleg lnyegesen elmarad
mintapldny megalkotsa, amely bizonyos krdsek tisztzsra alkalmas a rendszerfejleszt
csoporton bell, ltalban a megrendel s a rendszerelemz kztt. Ms terletekkel
(autgyrts, rhajzs stb.) sszehasonltva a szoftverprototpusok elksztse ltalban nem
tl kltsges s idignyes. Bizonyos esetekben akr tbb tucat prototpus is viszonylag
knnyen kifejleszthet. Ezen prototpusok fejlesztsnek nagyjbl ugyanazok a folyamatai,
mint a teljes rendszernek, azaz

elemzs,
tervezs,
kivitelezs, megvalsts,
validls, tesztels,
interci,

Ezek a fejlesztsi lpsek ismtldnek, iterldnak mindaddig, amg a rendszerfejleszt
csapaton bell meg nem szletik a konszenzus a kvetelmnyeket illeten. Ezutn kerlhet
sor a nagy rendszer fejlesztsnek kvetkez fzisra, a rendszertervezsre. Az elksztett
prototpusokat a rendszerfejleszts tovbbi fzisaiban nem felttlenl hasznljk. (Innen az
elnevezs: eldobhat (throw away) prototpus, br ezek gyakran jrafelhasznlhatk ms
projektekben.)

Ez az eljrs tulajdonkppen annak ellenrzse, hogy valban a j rendszert fejlesztik-e. Az
eldobhat prototpusok ksztsnek a clja teht a kvetelmnyek vilgosabb ttele s a
fejlesztsi folyamat kockzatnak cskkentse.
- 145 -

PROJEKTINDTS
ELEMZS
TERVEZS
MEGVALSTS
TESZTELS
RENDSZERTERVEZS
MEGVALSTS
TESZTELS
ZEMELTETS

15.3. bra A rendszerfejleszts folyamatmodellje prototpusok alkalmazsval

Ltezik a prototpusok hasznlatnak egy msik mdja is, s igazbl ez az elterjedtebb,
amelyre kt dolog jellemz:

lnyegben nincs elemz fzis,
a kezdeti prototpus alakul t, fejldik az itercik, az evolci sorn a vgtermkk.

Kiss leegyszerstve az llthat, hogy az evolcis prototpusok alkalmazsakor a
megrendel elszr egy olyan, tvolrl sem teljes mintarendszert kap, amely a kvetelmnyek
halmaznak egyfajta korltozott megrtsn alapul. Ez a kezdeti rendszer azutn fokozatosan
mdosul, mind tbb kvetelmnynek tve eleget. Ez a technika klnsen akkor hasznos, ha a
rendszer egy nem, vagy rosszul strukturlt problma megoldsra szolgl. Ilyenkor ltalban
a fejlesztk nem rtik teljes mlysgben az automatizlni kvnt folyamatot, mert pldul az
rendkvl bonyolult. (A mestersges intelligencia terletrl sok ilyen rendszert lehetne
emlteni.)

A kvetelmnyek hinya miatt a rendszeres elemzs fzisa kiesik. A kvetelmnyek
meghatrozsa, amely az egsz rendszerelemzs lnyege, fokozatosan, lpsrl lpsre
trtnik.

Termszetesen az evolcis prototpusok technikjt olyan rendszerek esetn clszer csak
alkalmazni, ahol egy-egy iterci gyorsan vgrehajthat, azaz a javasolt mdostsokat
- 146 -

gyorsan lehet megvalstani, implementlni, azaz ahol a ciklusid rvid. Ennek a
gyorsasgnak azonban vannak htrnyai is:

A folytonos vltoztatsok miatt a rendszer szerkezete, struktrja ltalban kevsb
tlthat, transzparens s kvetkezetes. (Az egyetlen termk a programkd.) A
javtgatsok s vltoztatgatsok kvetkeztben a kiindulsi struktra sokat romolhat.
A specifikci hinya a (javt, tkletest, bvt, adaptv s preventv) karbantartst
igen megneheztheti s megdrgthatja. Ezrt az gy fejlesztett rendszerek lettartama
ltalban viszonylag rvid. Fontos megjegyezni, hogy ltalban a karbantartst nem
felttlenl ugyanazok vgzik, akik magt a rendszert fejlesztettk.
Fontos nemfunkcionlis rendszerjellemzket, mint pldul a teljestmnyt,
biztonsgot, megbzhatsgot felldozzk a gyorsasg miatt, ami nehzkess teszi
ezen nem-funkcionlis kvetelmnyek utlagos teljestst.
A nem-funkcionlis kvetelmnyeket nem lehetsges a prototpusimplementcikon
mdszeresen tesztelni.
Nem kszl komoly rendszerdokumentci, hiszen annak idignyessge lehetetlenn
tenn a vltoztatsok gyors realizlst. Igazbl az egyetlen specifikcit maga a
prototpus kdja kpezi.

Az evolcis szoftverprototpusok hasznlatnak egyik tovbbi problmja, hogy a
verifikci lpse rtelmezhetetlen. A verifikci, mint az korbban trgyaltuk, annyit jelent,
hogy meggyzdnk arrl, helyesen ptjk-e a rendszert. Ez a gyakorlatban annyit tesz, hogy
ellenrizzk, a rendszer megfelel-e a megadott kvetelmnyspecifikciknak. Itt azonban
nincsenek specifikcik, teht formlisan nem lehetsges verifikci sem. Ehelyett egy
meglehetsen szubjektv rtkelst szoks elvgezni, amely nem knnyen mrhet.

A fenti problmk s htrnyok azonban nem jelentik azt, hogy az evolcis prototpusok
hasznlata bizonyos krlmnyek kztt ne lenne ajnlhat. ppen ellenkezleg. Pldul
interaktv rendszereket, szakrti rendszereket, felsvezeti informatikai rendszereket vagy
grafikus felhasznli felleteket ltalban ezzel a technikval fejlesztenek. Lthat azonban,
hogy igazn nagy mret s hossz lettartam rendszerek fejlesztsre ez a technika nem
alkalmas.

sszefoglalva azt mondhatjuk, hogy az eldobhat prototpusok hasznlatnak clja az
ismeretlen, kevss megrtett, nem vilgos rendszerkvetelmnyek tisztzsa. Azon
kvetelmnyekre, amelyek egyrtelmek, amelyeket nem kell tisztzni, nem kszl
prototpus. Az evolcis prototpusok viszont elszr a legjobban megrtett kvetelmnyeket
ptik be a modellbe, s azutn lpsrl lpsre, a megrendel s a fejleszt team szoros
egyttmkdsben dolgozzk fel a hinyz, vagy kevsb vilgos, fuzzy ignyeket.
- 147 -

15.2.2.2 A spirl modell
Az elz kt szoftverfolyamat-modell trgyalsakor lttuk, hogy hasznlatukkor komoly
problmk merlnek fel. Az 1988-ban bevezetett Boehm-fle spirlis folyamatmodell tvzi a
klasszikus vzess modell s a szoftverprototpusok alkalmazsnak technikjt, s ezenkvl
bepti a kockzatelemzst is a modellezsbe.

Ngy f tevkenysget klnbztet meg:

69. tervezs (clok kijellse, meghatrozsa, knyszerek s kockzatok azonostsa,
alternatv stratgik tervezse),
70. kockzatelemzs, becsls s cskkents,
71. termkfejleszts (szoftverprototpusok ksztse) s V&V (validci s verifikci),
72. rtkels, ttekints, tervezs s dntshozatal a folytatst illeten.

A spirlmodellben minden egyes iterci sorn az albbiakat kell megadni:

73. clok,
74. korltok (pnz, id stb.),
75. alternatvk,
76. kockzatok, veszlyek,
77. kockzatcskkent stratgik,
78. eredmnyek,
79. tervek,
80. dnts a folytatsrl.

Cl lehet pldul a szoftverminsg radiklis javtsa, korltozs pedig, hogy e clt nagyobb
tkebefektets s komolyabb szervezeti vltoztatsok nlkl szeretnk elrni. A folytatsrl
meghozott dnts lehet az, hogy tovbbi 10 hnapig folytatjk a finanszrozst.

Az els krben meghatrozzk a kvetelmnyeket (pontosabban azok egy minl bvebb
rszhalmazt), s elzetes tervet ksztenek a fejlesztsre, ide rtve a kltsgek, kls
knyszerek (a rendelkezsre ll pnz s id), valamint a tervezsi, krnyezeti alternatvk
meghatrozst. rtkelik a kockzatot s a prototpus alternatvkat. A kvetelmnyek
rendszere fokozatosan vlik teljess s konzisztenss. Az els iterci termke a
megvalsthatsgi tanulmny, a msodik kvetelmnyek teljes krnek meghatrozsa, a
harmadik a terv s a negyedik a tesztels.

Minden itercis lps sorn kockzatelemzssel mrlegelik a lehetsges alternatvkat a
kvetelmnyek s a knyszerek fggvnyben. A prototpusok verifikljk a
megvalsthatsgot, mieltt egy alternatva kivlasztsra kerlne. Amikor a veszlyeket,
kockzatokat azonostottk, akkor a projektvezetnek el kell dntenie, hogyan minimalizlja a
kockzatot. Ez pedig gy trtnik, hogy prototpusok kszlnek, s ezeken teszteket
vgeznek.

- 148 -

1. Kltsg-
vets
2. Kltsg-
vets
3. Kltsg-
vets
4. Kltsg-
vets
1. AT
2. AT
3. AT
4. AT
1. KE
2. KE
3. KE
4. KE
Kezds
Mkdsi
terv
1. Proto-
tpus
2. Proto-
tpus
3. Proto-
tpus
4. Proto-
tpus
Rszletes
terv
Elemzs
Tervezs
Tesztels
Program-
rs
Elfogads
V&V
V&V
Alternatvk
tervezse (AT)
Kockzat-
elemzs (KE)
rtkels
Kvetkez
fzisok
megterve-
zse
Fejleszts
V&V

15.4. bra A rendszerfejleszts spirlmodellje


15.2.3 Fejleszts jrafelhasznlssal

A harmadik rendszerfejlesztsi folyamatmodell a szoftverek jrafelhasznlsn alapul. A
tapasztalatok szerint a klnbz informatikai rendszerek fejlesztsekor lnyegben nagyon
hasonl szakmai krdsek, problmk merlnek fel. Ennek az a nyilvnval oka, hogy az
zleti letben szinte minden hasonl profil cg, vllalat, szervezet lnyegben ugyanazokkal
a kihvsokkal szembesl, ugyanazok vagy nagyon hasonlak az zleti clok s stratgik, a
krnyezeti felttelek, kls krlmnyek, jogi s szmviteli szablyok stb. vtizedeken
keresztl tbb ezer prhuzamos fejleszts trtnt, tbb ezer vagy tbb tzezer informatikus
dolgozott lnyegben azonos problmk megoldsn. Az ltaluk megtallt megoldsok
valsznleg nagyon hasonltottak egymsra, br errl viszonylag keveset tudunk, mivel az
egyes rendszerfejleszt projektek meglehets titkolzs kzepette zajlottak s zajlanak, a
- 149 -

rszletmegoldsok ritkn vltak publikuss, s a rsztvevk nemigen kommunikltak
egymssal. Ezt a helyzetet teht a szellemi erforrsok erteljes pazarlsa jellemezte.

Viszonylag ksn. a nyolcvanas vek kzepn, de igazbl csak az objektum-orientlt
technolgia trnyersvel, merlt csak fel annak a szisztematikus ignye, hogy az egyszer mr
jl megrt, alaposan tesztelt s sikeresen felhasznlt szoftverrszeket, komponenseket ksbbi
hasonl projektekben jra hasznostsk, s ebbl a clbl egy jl katalogizlt specilis
komponensknyvtrat hozzanak ltre. A tudomnyos szmtsokban mr a hatvanas vek
eleje ta hasznlnak n. szoftverknyvtrakat (NAG, IMSL), amelyek a leggyakrabban
alkalmazott numerikus matematikai eljrsok (algebrai egyenletrendszerek megoldsa,
sajtrtkek szmtsa, parcilis differencilegyenlet(rendszerek) megoldsnak kzelt
meghatrozsa), valamilyen programnyelvben (FORTRAN, Pascal, C++, Java) megrt s
jrafelhasznlsra alkalmass tett forrskdjait tartalmazzk. A kilencvenes vekre azonban
ez ltalnos gyakorlatt kezdett vlni az zleti letben is, a szoftver jrahasznlat (software
reusability) pedig az egyik leginkbb kutatott informatikai terlett lett.

A szoftver jrafelhasznlsa nem felttlenl jelenti azt, hogy az egyes rszeket vltoztats
nlkl alkalmazzk az elkvetkez projektekben, hanem inkbb arrl van sz, hogy megsznt
a semmibl jat teremts gyakorlata. Ehelyett korbbi rendszerek komponenseit vizsgljk
meg, vajon azok adaptlhatk-e, vagy ami mg szerencssebb, vltoztats nlkl
jrafelhasznlhatk-e a fejleszts sorn. Fontos megjegyezni, hogy ezt akkor is rdemes s
clszer megnzni, ha az j informatikai projekt egsze lnyegesen klnbznek is tnik a
korbbiakhoz kpest. (Az angol nyelv informatikai irodalomban a mdosts nlkli
jrafelhasznlsra szoks a black-boksz reuse, az adaptcit magban foglal vltozatra pedig
a white-box reuse kifejezsek hasznlata.)

Az adaptcis jrafelhasznls esetben mindig rdemes mrlegelni, hogy a mr ltez
komponens szerkezetnek s mkdsnek megrtse, valamint a szksges vltoztatsok
tvezetse nem ignyel-e tbb erfesztst s hosszabb idt, mint egy vadonatj
programmodul megalkotsa. Felismerve ezt a problmt, a knyvtrakban ltalban olyan
komponenseket helyeznek el, amelyek a paramterek megvlasztsnak fggvnyben
sokoldalan alkalmazhatk. A felttlenl szksgesnl tbb paramter hasznlata nagy
mrtkben javthatja az jrafelhasznls eslyeit.

A szoftver-jrafelhasznls s ezt a gyakorlat igazolta jelentsen cskkenti a fejleszts
kltsgt, s szignifiknsan nveli a termelkenysget. (Ez pldul KLOC/PM egysgben
mrhet). A termelkenysg nvekedse nemcsak annak a kvetkezmnye, hogy kevesebb
idt kell programrssal tlteni, hanem annak is, hogy a tesztelsre s a dokumentcik
ksztsre fordtand id is jelentsen cskkenthet. Az jrafelhasznls, s ezt lnyeges
hangslyozni, nemcsak a forrskd programsorokra vonatkozik, hanem a kvetelmnyek
meghatrozsra, a folyamatokra, a tervezsre, a tesztesetekre s tesztadatokra, valamint a
dokumentcira is.
- 150 -


A szoftver-jrafelhasznls a rendszerfejleszts folyamatban a leggyakrabban gy trtnik,
hogy a mr emltett komponensknyvtrakban fellelt ksz programrszeket szemlletesen
szlva ptkockaknt kezelik, s azok kr, azokra pl r a teljes szoftver. Ez a megkzelts
teht alulrl felfel haladva ptkezik, alapul vve azt, ami mr rendelkezsre ll. Az
jrafelhasznls legnehezebb problmjnak az tnik, hogyan lehet a szoftverknyvtrakban
az adott szitucira legalkalmasabb komponenst megtallni a nagy szm lehetsg kzl.

A gyakorlati tapasztalatok azt bizonytjk, hogy az j informatikai projektekben az
jrafelhasznlt komponensek alkalmazsnak mrtke elrheti, st meghaladhatja a 70-80%-
ot, ami jelents kltsgcskkenst s minsgjavulst eredmnyez. Szmos fejlesztcg kln
sztnzrendszert dolgozott ki a szoftver-jrafelhasznls tmogatsra.

Az eddig lertak a szoftverkomponensek jrafelhasznlsra vonatkoztak. Az rem msik
oldala az ilyen komponensek megrsa, ltrehozsa. Egy, az elmlt vekben vgzett
sszehasonlt vizsglat megllaptsa szerint ennek relatv kltsge tlagosan a ktszerese-
tszrse egy ugyanolyan mret, de nem jrafelhasznlsra sznt programrszlet
elksztsnek. Ugyanezen vizsglat az jrafelhasznls relatv kltsgt tlagosan 10-20%-ra
teszi. Ezek az adatok, mg ha nagy szrst is mutatnak, jl jelzik, hogy milyen elnykkel s
milyen extrakltsgekkel jr a szoftverkomponensek jrafelhasznlsa.

Az albbi felsorols sszefoglalan tartalmazza az jrafelhasznls potencilis elnyeit s
problmit:

Elnyk
Kisebb kockzat kisebb a bizonytalansgi tnyez a fejlesztsi kltsgekben
Fokozott megbzhatsg mkd rendszerekben mr kiprblt s alaposan tesztelt
komponensek
Gyorsabb fejleszts s cskken kltsgek szignifikns javuls rhet el
Szabvnyoknak val megfelels szabvnyok implementlsa szabvnyos
jrafelhasznlhat komponensekben
Szakemberek hatkonyabb alkalmazsa komponensek s nem a szakemberek
jrafelhasznlsa kvnatos

Problmk
Nvekv karbantartsi kltsgek a rendszer vltoztatatsval az jrafelhasznlt
elemek inkompatibiliss vlhatnak
Az eszkztmogats hinya a CASE-eszkzkszletek nem tmogatjk az
jrafelhasznlson alapul szoftverfejlesztst
Komponensknyvtrak karbantartsa magas kltsggel jr a katalogizlsra s a
visszakeressre szolgl technikk hasznlata
- 151 -

Komponensek megtallsa s adaptlsa komoly jrtassg kell hozz

15.2.4 Ksz alkalmazsi programcsomagok hasznlata

A negyedik rendszerfejlesztsi technika a ksz alkalmazsi programcsomagok hasznlata. E
mdszer alapgondolata, hogy br minden vllalat klnbzik a tbbiektl, valjban az ket
kiszolgl informatikai rendszerek nagyon hasonltanak egymsra. Mivel vllalatok ezreirl,
esetleg (ha nem csak egyetlen orszgban tekintjk ket) szzezreirl van sz, gy
meglehetsen termszetesen addik a felvets, hogy mirt ne lehetne olyan
programcsomagokat kszteni, amelyek minimlis mdostsokkal alkalmasak nagy szm
vllalat azonos tpus problminak megoldsra. ltalban ezek a vllalatok hasonl
mretek, s a piac azonos szegmensben tallhatk, br lteznek olyan programcsomagok is,
amelyek sokkal szles krben hasznlhatak. A bevezetben emltett fzisok, a

projektindts, projektmeghatrozs,
elemzs,
tervezs,
tesztels, validci,
implementls, integrci,
zemeltets, karbantarts, tmogats

ugyangy felismerhetk a ksz alkalmazsi programcsomagokkal trtn fejleszts esetn is.
Tves az a vlekeds, hogy egy ksz alkalmazsi programcsomag megvsrlsa feleslegess
teszi az letciklus modellt, br ktsgtelenl jelentsen lervidtheti a fejleszts idtartamt.

Az els kt fzis (projektmeghatrozs s elemzs pontosan gy trtnik, mint a tradcionlis
rendszerfejleszts esetn. Az elemzs fzisa s a funkcionlis specifikcik elksztse
nlklzhetetlen, hiszen vilgosan s egyrtelmen meg kell fogalmazni, hogy mit vrunk el a
rendszertl.

A tovbbi fzisok jelentsen leegyszersdnek, br pldul ekkor is szksg van annak
eldntsre, hogy a megvsrolt szoftver pontosan milyen funkciira tartunk ignyt, ekkor is
t kell adni s tesztelni kell a szoftvert (legfeljebb a modulteszt lpse maradhat el), s a
dokumentcit is testre kell szabni.

Az installls lpse lnyegben abbl ll, hogy el kell dnteni, a programcsomag ltal knlt
opcikbl melyekre tartunk ignyt. Ez trtnhet pldul gy, hogy megadjuk, milyen
paramterekkel kvnjuk a rendszert hasznlni.

- 152 -

Ksz alkalmazsi programcsomag megvsrlsa esetn is gondoskodni kell a felhasznlk
betantsrl, br ez ltalban egyszerbb feladat, mert a szoftvergyrt cg, pontosan a
szoftvereladsok nagy szma miatt, jelents tapasztalattal rendelkezik a trning tern.

Az utols fzis, az zemeltets s karbantarts vonatkozsban szintn nincs klnbsg a
hagyomnyos s az alkalmazsi programcsomaggal trtn rendszerfejleszts kztt, br a
tancsadst illeten ugyanaz a helyzet, mint a betantssal.
Mint a prototpusok esetben is, a ksz alkalmazsi programcsomaggal trtn rend-
szerfejlesztst is a tradicionlis mdszerrel szoks elnyk s htrnyok vonatkozsban
sszehasonltani.

A ksz alkalmazsi programcsomaggal trtn fejleszts egyebek mellett az albbi
elnykkel jr:

A fejleszts idtartama lnyegesen lervidlhet, s ennek kvetkeztben a projekt
haszna hamarabb jelentkezik.
A fejlesztprojekt kockzata jelentsen lecskken, valszntlen a hatrid tllpse,
hiszen a szoftver azonnal hozzfrhet.
Mind a dokumentci, mind a tancsads sznvonala ltalban magasabb, mint a sajt
fejleszts.
A szoftvergyrt cg szakmai felkszltsge ltalban jobb, mint az ad hoc fejleszti
csapat.

Ugyanakkor a ksz alkalmazsi programcsomaggal trtn fejlesztsnek htrnyai is vannak:

A szoftver nem teljesen illeszkedik a vllalat ltez zleti folyamataihoz, ezrt
gyakran kompromisszumokat kell ktni, s mdostani kell a folyamatokon.
Krlmnyes a programcsomagok adaptlsa j helyzetekhez, mivel pldul a
forrskd alig hozzfrhet.
Gyakran kell j hardvert, szoftvert vsrolni, mivel a meglvk nem illeszkednek a
vsrolt rendszerhez, vagy nem kompatibilisek azzal.
Br a ksz alkalmazsi szoftverek tbbfunkcisak, gyakran az egyes modulok ki-
dolgozottsga igen eltr sznvonal, s nhny esetben jelentsen gyengbb, mint a
sajt fejlesztsek.
Br a szoftverek eladsi ra viszonylag nem tl magas, legalbb is a sajt fejleszts
kltsgvel sszehasonltva, szmos rejtett kltsg jelentkezik az installlsnl. Egy
viszonylag friss felmrs szerint az installci teljes kltsge akr a tzszerese is lehet
a vtelrnak, klnsen akkor, ha a rendszernek nagyon sok kls illesztse van.

- 153 -

15.2.5 Vgfelhasznli fejleszts

A rendszerfejleszts tdik technikja a vgfelhasznli fejleszts. Az informatikusok szerint
ennek a mdszernek az a lnyege, hogy nem halat adunk a rszorulnak, hanem megtantjuk
halszni, termszetesen gy, hogy elltjuk korszer felszerelssel.

A nyolcvanas vek elejtl a legklnflbb eszkzk:
tblzatkezelk,
adatbziskezel programok,
negyedik genercis programozsi nyelvek,
adatelemz/statisztikai szoftverek

segtsgvel sok vllalatnl indultak vgfelhasznli fejleszti (EUD, end-user development)
projektek. Ha az ilyen tpus fejlesztsek letciklust megvizsgljuk, akkor megllapthat,
hogy az elemzs fzisa jelentsen leegyszersdik, mivel nincs szksg formlis specifikci-
ra, hiszen nem lehet kommunikcis problma a fejleszt s a felhasznl kztt. Hasonlan
az implementls is egyszerbb, hiszen nem kell a felhasznlt megtantani a rendszer
hasznlatra. A karbantarts s tancsads fzisa viszont nehzkesebb lehet, hiszen ha
professzionlis programozra van szksg, akkor annak elbb meg kell rtenie a nem
felttlenl hatkonyan rt programot.

Termszetesen a vgfelhasznli rendszerfejleszts elssorban, s szinte kizrlag kis mret
(<10KLOC) feladatokra szortkozik, s gy nem alternatvja a msik ngy fejlesztsi
techniknak. Ez a megllapts azonban semmikpp nem cskkenti a vgfelhasznli
rendszerfejleszts elnyeit. Egy kisvllalkozs teljes knyvelst automatizlni lehet pldul
Excel vagy Access makrk megrsval. Ehhez a felhasznlnak mindssze a Visual Basic for
Application (VBA) programnyelvet kell elsajttania, s az Excel/Access knlta programozsi
krnyezetben a feladatok knyelmesen elvgezhetk.
- 154 -

16 Fggelk
16.1 A Visual Studio 2005. letltse s teleptse
16.1.1 Letlts
A Visual Studio 2005 telept csomag a Campus Agreement keretben a felsoktatsban
rsztvev hallgatk s oktatk szmra ingyenesen hozzfrhet a

http://www.tisztaszoftver.hu/

honlapon. A honlap csak az egyetemek regisztrlt cmtartomnybl rhet el, otthon
felesleges prblkozni a letlssel. Aki nem tudja megoldani a letltst s az image fjlok
CD-re getst, 5000 Ft. kltsgtrts ellenben postai ton juthat a teleptlemezekhez. A
rendels rszleteirl szintn a fenti honlapon olvashatunk tjkoztatst.

A teleptkszlet t CD-bl ll. Az els kett tartalmazza magt a fejlesztkrnyezetet, mg az
utols hrom az elektronikus dokumentcit. A dokumentci Interneten keresztl is elrhet.
16.1.2 Telepts
Sajnos a Visual Studio 2005 teleptprogramjba hiba kerlt. Az els CD teleptse kzben a
gp egy rejtlyes ENU 1 nev CD-t kr - ilyen lemez nincs a teleptkszletben. A hibt az
okozza, hogy az _15780_RTL_x86_enu_NETCF_v2.0.cab fjlt a telept az els CD-n
keresi, pedig a msodik CD-n van. A sikeres teleptshez egy apr trkkt kell alkalmaznunk:

81. A letlttt ISO fjlokat gessk CD-re.
82. Kezdjk el a teleptst - futtassuk a setup.exe-t az els CD-rl.
83. Folytassuk a teleptst addig, amg a kpernyn meg nem jelenik az elre kitlttt
termkkulcs. A termkkulcsot jegyezzk fel egy darab paprra, majd lpjnk ki a
teleptbl.
84. Hozzunk ltre egy knyvtrat a merevlemezen, majd msoljuk ide az els kt CD
tartalmt. Fontos: ne msoljuk az egyes CD-ket kln alknyvtrakba. A Windows hat
fjlnl krdezi meg, hogy fellrhatja e a mr meglvt. Nyugodtan vlaszolhatunk
igen-t.
85. Kezdjk jra a teleptst a merevlemezre msolt setup.exe-vel.
86. A termkkulcs mr megvan, folytathatjuk a teleptst az instrukciknak megfelelen.


- 155 -

16.2 A C# kulcsszavai

Kulcssz Jelents
abstract Mdost, amely arra utal, hogy egy osztlyt csak egy msik
osztly seknt hasznlhatjuk.
as Tpusknyszerts.
base Az sosztly rtkeit s tpusait teszi elrhetv.
bool A logikai adattpus kulcsszava.
break Ciklus, feltteles utasts vagy esetsztvlaszts elhagysa.
byte A byte adattpus kulcsszava.
case Esetsztvlasztson bell egy eset (felttel).
catch A try-catch kivtelkezels rsze. A catch blokk segtsgvel
elkaphatjuk a kivteleket, s meghatrozott hibakezel
mveleteket futtathatunk le.
char A karakter adattpus kulcsszava.
checked Ellenrztt kdrszt azonost kulcssz.
class Osztlydefinci kulcsszava.
const Adattaghoz vagy vltozhoz kapcsold mdost, amely azt jelzi,
hogy a krdses adat tartalma nem vltoztathat.
continue Ugrs a kvetkez ciklusfordulra.
decimal A decimal adattpus kulcsszava.
default Cmke a switch esetsztvlaszt utastsban. Itt folytatdik a
vgrehajts, ha egyik case felttel sem teljesl.
delegate Referencia tpus, amely meghatrozott formj tagfggvnyeket
tartalmazhat.
do Ciklusszervez utasts.
double A double adattpus kulcsszava.
else Az if feltteles utasts msklnben gt jelzi.
enum Adattpus, amely elre meghatrozott lland rtkeket tartalmaz.
event Esemnyek, esemnykezelk definilsra szolgl kulcssz.
explicit A felhasznl ltal ltrehozott adattpusok talaktst jelz
kulcssz.
extern Programunkon kvl lev fggvny jelzse.
false Logikai hamis rtk.
finally A try-catch utasts rsze, a try blokk utn hajtdik vgre
fggetlenl attl, hogy a vgrehajts sorn fellpett-e hiba vagy
sem.
fixed Kezeletlen kdban ezzel a kulcsszval zrolhatjuk a
memriahivatkozsokat, hogy az automatikus szemtgyjt ne
szabadtsa fel azokat.
float A float lebegpontos adattpus kulcsszava.
for Ciklusszervez utasts.
foreach Ciklusszervez utasts.
- 156 -

goto A program egy adott cmkvel elltott utastsra lehet ugrani vele.
if A feltteles utasts kulcsszava.
implicit Kulcssz, amely automatikusan vgrehajthat tpustalaktst r le.
in A foreach kulcsszval egytt hasznland; Az in kulcssz
azonostja a gyjtemnyt vagy tmbt, amit a ciklus vgigjr.
int Az int adattpus kulcsszava.
interface Olyan hivatkozst definilunk vele, amely jelzi tagmetdusait, de
nem rja le azokat.
internal Hozzfrs mdost. Lehetv teszi, hogy az adott adattpust csak
az azonos gyjtemnyben lv fjlokbl rhessk el.
is Objektum tpusvizsglathoz hasznlt kulcssz.
lock Kritikus kdrszek jellse. Az ilyen kdrsz egyszerre csak egy
szl szmra lesz elrhet.
long A long adattpus kulcsszava.
namespace Kulcssz, amellyel tpusainkat csoportosthatjuk. Segt a
nvtkzs elkerlsben.
new Objektum ltrehozsa.
null rtk, amely azt jelzi, hogy a hivatkozs nem mutat semmire.
object A .NET keretrendszer System.Object osztlyn alapul tpus. A
C#-ban minden ms adattpus ebbl szrmazik.
operator Az osztlyok s struktrk mveleteinek ltrehozsra vagy
tlterhelsre szolgl kulcssz.
out Csak kimen metdus-paramter jelzse.
override Virtulis metdus felvltst elidz felldefinilsa a
leszrmazott osztlyban.
params Vltoz tagltszm paramterlista(rsz) jelzse.
private Lthatsg mdost.
protected Lthatsg mdost.
public Lthatsg mdost.
readonly Adattag mdost. Azt jelzi, hogy a kezdeti rtkads utn a tag
tartalma mr nem vltoztathat.
ref Cm szerinti paramtertads jelzje a formlis paramternl.
return Kilps a fggvnybl s a visszatrsi rtk megadsa.
sbyte Az sbyte adattpus kulcsszava.
sealed Osztlymdost, amely meggtolja, hogy az osztlybl tovbbi
osztlyokat szrmaztassanak.
short A short adattpus kulcsszava.
sizeof Adattpus mretnek meghatrozsa.
stackalloc Kulcssz, amellyel memrit foglalhatunk a veremben. A
visszakapott mutat nem tartozik az automatikus szemtgyjts
hatkrbe.
static Lthatsg mdost.
string A string adattpus kulcsszava.
struct Adattpus, amely adatokat s tagfggvnyeket egyarnt
tartalmazhat.
- 157 -

switch Az esetsztvlaszt utasts kulcsszava.
this Az aktulis struktrt vagy objektum-pldnyt jelli.
throw Kivtelt generl utasts.
true Logikai igaz.
try A kivtelkezel blokk vdett utastsait tartalmaz blokkjt jelz
kulcssz.
typeof Objektum tpust adja vissza, .NET formtumban.
uint Az uint adattpus kulcsszava.
ulong Az ulong adattpus kulcsszava.
unchecked Azt jelzi, hogy a hatskrbe utalt egsz tpus mveleteknl
mellzni kell a tlcsorduls-vizsglatot.
unsafe Olyan kdrszletet jell, amelyez a kezelt (managed) krnyezetben
nem biztonsgos vgrehajtani (pl. mutatk hasznlatnl).
ushort Az ushort adattpus kulcsszava.
using lnevek ltrehozsa nvterekhez.
virtual Virtulis metdus jellse.
void Metdusoknl jelzi, hogy nincs visszatrsi rtkk.
while Ciklusszervez utasts.

16.3 C# nyelvben hasznlatos, egyszer tpusok
Tpus Mret rtktartomny A tpusban trolhat adatok
byte 1 0 tl 255 ig eljel nlkli egsz szmok
int 4 -2,147 483 648 tl 2 147 483 647 ig eljeles egsz szmok
float 4 1.5 10
45
tl 3.4 10
38
ig vals(lebegpontos) szmok
double 8 5.0 10
324
-tl 1.7 10
308
-ig vals(lebegpontos) szmok
decimal 16 1.0 10
28
tl 7.9 10
28
-ig vals(lebegpontos) szmok
bool 1 true / false true, false rtkek
char 2 U+0000-tl U+FFFF-ig unicode karakterek
string - - karakterlncok
(karaktertmbk)

- 158 -

Ellenrz krdsek
A krdsre kattintva megkapja a vlaszt

1. fejezet
1.1. Sorolja fel a szoftverfejleszt rendszerek hrom csoportjt s jellemezze ket
(elnyk, htrnyok alapjn)! (4-5. old.)
1.2. Milyen kztes nyelveket ismer? Milyen elnyei illetve htrnyai vannak? (5-6. old.)
1.3. Ismertesse s jellemezze az objektumorientlt programozs alapfogalmait! (7-8. old.)
2. fejezet
2.1. Ismertesse dihjban a Visual Studio 2005 fejlesztkrnyezet elemeit! (10-14. old)
2.2. Hogyan trtnik a szemantikai hibk feldertse (trspontok, nyomkvets)! (14-15.
old.)
2.3. Ismertesse az alapvet komponenseket s fontosabb tulajdonsgait a Visual Studio
2005 fejlesztkrnyezetben! (15-21. old.)
2.4. Ismertesse a fontosabb specilis komponenseket s fontosabb tulajdonsgait a Visual
Studio 2005 fejlesztkrnyezetben! (22-24. old.)
3. fejezet
3.1. Mi jelentenek a kulcsszavak egy adott fejlesztkrnyezetben? (25. old.)
3.2. Mire hasznljuk az azonostkat s milyen szablyok vonatkoznak rjuk? (25. old.)
3.3. Mire hasznljuk a vltozkat programjainkban s milyen tpusai vannak? (25-27. old.
s 150. old)
3.4. Ismertesse a tmb, mint sszetett adattpus hasznlatnak lehetsgeit? (27-28. old.)
3.5. Mire hasznlhatk a literlok s milyen tpusai vannak? (28-29. old.)
3.6. Mi a konstansok, llandk szerepe a programozs sorn? (29. old.)
3.7. Milyen mveleteket vgezhetnk vltozkkal, konstansokkal, stb.? (29-31. old.)
3.8. Ismertesse a kifejezsek felptst s a precedencia szablyokat! (32. old.)
3.9. Ismertesse a nvterek szerept a C# programozs sorn! (33-34. old.)
4. fejezet
4.1. Ismertesse a relcis opertorokat s hasznlatukat a logikai mveletekben! (35-36.
old.)
4.2. Hogyan pl fel az egyg szelekci a C#-nyelvben? Mikor hasznljuk? (37. old.)
4.3. Hogyan pl fel a ktg szelekci a C#-nyelvben? Mikor hasznljuk? (37-38. old.)
4.4. Hogyan pl fel a tbbg szelekci a C#-nyelvben? Mikor hasznljuk? (38-41. old.)
5. fejezet
5.1. Mikor hasznlunk s hogyan deklarlunk stringeket programjainkban? (42. old.)
5.2. Ismertesse a stringek fontosabb metdusait! (42-44. old.)
5.3. Hogyan hasznlhatjuk a stringeket vektorknt? (44-45. old.)
6. fejezet
6.1. Ismertesse az elrt lpsszm ciklus felptst a C# nyelvben! (49. old.)
6.2. Ismertesse a feltteles ciklusok (elltesztel, htultesztel) felptst a C# nyelvben!
(50-51. old.)
6.3. Ismertesse a kilpsi feltteleket, valamint a vgtelen ciklus lehetsgt a feltteles
ciklusoknl! (50-51. old.)
7. fejezet
7.1. Ismertesse a sajt metdusok ksztsnek lehetsgeit a C# nyelvben! (56. old.)
7.2. Hogyan pl fel az eljrsszint metdus? Ismertesse fbb jellemzit! (56. old.)
7.3. Hogyan pl fel a fggvnyszint metdus? Ismertesse fbb jellemzit! (56. old.)
8. fejezet
8.1. Ismertesse az objektumorientlt alkalmazsok sszetevit! (60. old.)
8.2. Hogyan trtnik az osztlyok deklarlsa a C# nyelv keretein bell? (60. old.)
- 159 -

8.3. Hogyan trtnik az adattagok deklarlsa a C# nyelvben? (60-61. old.)
8.4. Hogyan trtnik a metdusok deklarlsa a C# nyelvben? (61-62. old.)
8.5. Hogyan trtnhet a metdusok paramterezse a C# nyelvben? (62-63. old.)
8.6. Milyen lthatsgi szintek vannak a C# nyelvben? (63. old.)
8.7. Mire hasznlhatk a property-k s mi a hasznlatuk elnye? (64-65. old.)
9. fejezet
9.1. Ismertesse a Graphics osztly fontosabb elmeit (szn, toll, ecset, szvegrajzols)!
(66-69. old.)
10. fejezet
10.1. Ismertesse a MessageBox zenetablak felptst, rszeit! (71-72. old.)
10.2. Ismertesse a tbbablakos alkalmazsok ksztsnek elvt! (73-76. old.)
11. fejezet
11.1. Ismertesse a szintaktikai s a szemantikai hibk kztti klnbsget! (77. old.)
11.2. Ismertesse az utlagos hibakezels lehetsgt a C# nyelvben (try-catch-finally)!
(77-79. old.)
11.3. Ismertesse a programoz ltal definilt kivtelek kezelsnek lehetsgeit a C#
nyelvben! (79-80. old.)
11.4. Ismertesse a kivtelkezels lehetsgt a checked s az unchecked hasznlatval!
(80. old.)
12. fejezet
12.1. Ismertesse az llomnykezels fontosabb mozzanatait az llomnytpusok kezelsn
keresztl a C# nyelvben! (83. old.)
12.2. Ismertesse a szveges llomnyok kezelsnek lehetsgt a C# nyelvben! (83-84.
old.)
12.3. Ismertesse a binris llomnyok kezelsnek lehetsgt a C# nyelvben! (84-85.
old.)
12.4. Ismertesse a C# nyelv fontosabb knyvtrkezelsi utastsait! (88-89. old.)
12.5. Ismertesse a C# nyelv fontosabb llomnykezelsi utastsait! (92-93. old.)
13. fejezet
13.1. Ismertesse rviden az XML nyelv alapjait, szintaxist! (94-96. old.)
13.2. Ismertesse az XML nyelv elnyeit! (96. old.)
13.3. Hogyan trtnik az XML llomnyok feldolgozsa C# krnyezetben? (97-98. old.)
14. fejezet
14.1. Ismertesse az UML nyelv fontosabb diagramtpusait! (104-108. old.)
14.2. Mik azok a hasznlati esetek s mire hasznlhatk? (108-111. old.)
14.3. Mire hasznljuk a tevkenysgdiagramot? (112-113. old.)
14.4. Ismertesse az objektumok s osztlyok hasznlatt az UML-n bell! (113-115. old.)
14.5. Ismertesse a modellelemek kztti kapcsolatok lehetsgeit az UML-ben? (115-116.
old.)
14.6. Milyen asszocicis, aggregcis s generalizcis lehetsgek vannak a
modellelemek kapcsolataiban? (116-121. old.)
14.7. Ismertesse a szekvenciadiagram felhasznlsi lehetsgeit az UML keretein bell!
(122-124 old.)
14.8. Ismertesse a kommunikcidiagram felhasznlsi lehetsgeit az UML keretein
bell! (124-126 old.)
14.9. Ismertesse az llapotgp-diagram felhasznlsi lehetsgeit az UML keretein bell!
(126-127 old.)
15. fejezet
15.1. Ismertesse az alkalmazsfejleszts lpseit! (128-132. old.)
15.2. Ismertesse a rendszerfejleszts folyamatmodelljeit! (133-134. old.)
- 160 -

15.3. Ismertesse konkrtan a vzess modellt! (134-136. old.)
15.4. Ismertesse konkrtan a V modellt! (136-137. old.)
15.5. Ismertesse a prototpusok alkalmazsnak lehetsgt! Mirt volt szksg ennek az
elmletnek a bevezetsre? (137-140. old.)
15.6. Ismertesse a spirl modellt! (140-147. old.)
- 161 -

Internetes linkek, hasznos weboldalak

1. Wikipedia, Internet-lexikon:
a. http://en.wikipedia.org/wiki kezdlap (angol)
b. http://hu.wikipedia.org/wiki kezdlap (magyar)
2. ttekints, gyjtemnyek:
a. http://dotnet.lap.hu (magyar, angol)
b. http://csharp.lap.hu (magyar, angol)

You might also like