You are on page 1of 150

1 Alkalmazsfejleszts s a C# .................................................................................

4
1.1 A forrskd feldolgozsa ............................................................................... 4
1.2 Fordtk .......................................................................................................... 4
1.2.1 rtelmezk (interpreter):............................................................................. 4
1.2.2 Kztes nyelvek (intermediate languages) .................................................. 5
1.2.3 Kztes rendszerek a gyakorlatban: Java s .NET ...................................... 5
1.3 Az Objektumorientlt programozs (OOP) elve............................................ 7
2 A Visual Studio 2005. fejlsztkrnyezet................................................................ 9
2.1 A Visual Studio 2005. letltse s teleptse ................................................. 9
2.1.1 Letlts ....................................................................................................... 9
2.1.2 Telepts ..................................................................................................... 9
2.2 A Visual Studio 2005. fejlesztkrnyezet hasznlata .................................. 10
2.2.1 j projekt ltrehozsa............................................................................... 10
2.2.2 Az rlapszerkeszt s a toolbox ............................................................... 11
2.2.3 A Properites ablak .................................................................................... 11
2.2.4 Kdszerkeszt .......................................................................................... 13
2.2.5 Trspontok s nyomkvets ................................................................... 14
2.3 Alapvet komponensek hasznlata s specilis vezrlk ............................ 15
2.3.1 A gomb (Button) ...................................................................................... 18
2.3.2 Szvegdoboz (TextBox)........................................................................... 18
2.3.3 Jellngyzet (CheckBox) ....................................................................... 18
2.3.4 Rdigomb (RadioButton) ....................................................................... 19
2.3.5 Legrdl doboz (ComboBox) ................................................................ 19
2.3.6 Jellngyzet lista .................................................................................... 20
2.3.7 Listadoboz (ListBox)................................................................................ 20
2.3.8 Men pts a ToolStrip komponenssel ................................................... 21
2.3.9 Trolk (Containers) ................................................................................ 22
2.3.10 Fjlkezel prbeszdablakok (FileOpenDialog, FileSaveDialog) ......... 23
2.3.11 Idzt (Timer) ....................................................................................... 24
3 Nyelvi elemek (kulcsszavak, vltozk, literlok, konstansok, nvterek)............. 26
3.1 Kulcsszavak.................................................................................................. 26
3.2 Vltozk, azonostk.................................................................................... 26
3.3 Literlok, konstansok ................................................................................... 28
3.3.1 Szm literlok........................................................................................... 28
3.3.2 Logikai literlok ....................................................................................... 29
3.3.3 Karakter, karakterlnc literlok................................................................ 29
3.3.4 Konstansok ............................................................................................... 29
3.4 Nvterek ....................................................................................................... 29
3.5 A kifejezsek ................................................................................................ 31
3.6 Mveletek (operandusok, opertorok) ......................................................... 32
3.6.1 rtkad mveletek.................................................................................. 32
3.6.2 Matematikai mveletek ............................................................................ 33
3.6.3 sszetett matematikai mveletek............................................................. 33
3.6.4 Egyoperandus mvelet ........................................................................... 34
3.6.5 Ktoperandus mveletek ........................................................................ 34
3.6.6 Hromoperandus mvelet ...................................................................... 34
4 Feltteles utastsok - szelekci ........................................................................... 35
4.1 Relcis opertorok...................................................................................... 35
4.2 Feltteles mveletek..................................................................................... 35
4.3 Feltteles utastsok...................................................................................... 37

-1-
4.3.1 Egyg szelekci...................................................................................... 37
4.3.2 Ktg szelekci ...................................................................................... 37
4.3.3 Tbbg szelekci.................................................................................... 38
4.4 Plda: Feltteles elgazsokat tartalmaz alkalmazs ksztse .................. 39
5 Stringek kezelse.................................................................................................. 42
5.1 Deklarls..................................................................................................... 42
5.2 A string-ek fontosabb metdusai .............................................................. 42
5.2.1 A string-ek mint vektorok..................................................................... 44
5.3 Plda: String mveletek gyakorlsa ............................................................. 45
6 Iterci.................................................................................................................. 49
6.1 Elrt lpsszm ciklusok........................................................................... 49
6.2 Feltteles ciklusok ........................................................................................ 50
6.3 Plda: Prmszm vizsglat............................................................................ 54
7 Sajt metdusok ltrehozsa ................................................................................ 56
7.1 Plda: Kt szm legnagyobb kzs osztjnak a meghatrozsa ................ 56
8 Objektumosztlyok s objektumok ltrehozsa ................................................... 59
8.1 A programok szerkezete (osztly, adattag, metdus)................................... 59
8.1.1 A program sszetevi............................................................................... 59
8.1.2 Az osztly deklarlsa.............................................................................. 59
8.1.3 Adattagok deklarlsa .............................................................................. 59
8.1.4 Metdusok deklarlsa............................................................................. 60
8.1.5 Metdusok paramterezse ...................................................................... 61
8.1.6 Adatok s metdusok lthatsga ............................................................ 62
8.1.7 A property-k ............................................................................................. 63
9 Grafika.................................................................................................................. 65
9.1 A Graphics osztly ....................................................................................... 65
9.2 A sznek (Color) ........................................................................................... 66
9.3 A toll (Pen) ................................................................................................... 66
9.4 Az ecset (Brush) ........................................................................................... 67
9.4.1 Mints ecset s toll (TexturedPen) ........................................................... 67
9.5 Szveg rajzolsa........................................................................................... 68
9.6 lland grafikk ltrehozsa az rlapon...................................................... 68
10 Tbbablakos alkalmazsok ksztse ................................................................... 70
10.1 zenetablakok.............................................................................................. 70
10.2 Plda: Ktablakos alkalmazs ...................................................................... 72
11 Kivtelkezels ...................................................................................................... 76
11.1 Hibakezels .................................................................................................. 76
11.2 A try s catch................................................................................................ 76
11.3 A finally blokk ............................................................................................. 78
11.4 Kivtelek feldobsa ...................................................................................... 78
11.5 Checked s unkchecked ............................................................................... 79
11.6 Plda: Hibakezels a msodfok egyismeretlenes egyenlet kapcsn........... 80
12 llomnykezels .................................................................................................. 83
12.1 Szveges llomnyok kezelse .................................................................... 83
12.1.1 Szveges s binris fjlok rsa, bvtse, olvassa ............................... 83
12.1.2 Binris fjlok rsa, olvassa .................................................................. 84
12.2 Plda: Vletlen szmok generlsa lottszmokhoz, szvegfjlba.............. 86
12.3 Knyvtrkezelsi utastsok......................................................................... 88
12.3.1 Knyvtr mveletek ............................................................................... 88
12.3.2 Plda: Knyvtr mveletek hasznlata................................................... 89

-2-
12.3.3 llomnymveletek ............................................................................... 91
13 XML alapok s XML fjlok kezelse .................................................................. 94
13.1 Az XML nyelv ............................................................................................. 94
13.1.1 Az XML dokumentum szintaktikja ...................................................... 95
13.1.2 Az XML dokumentum rvnyessge ..................................................... 96
13.1.3 Az XML elnyei..................................................................................... 96
13.2 XML fjlok feldolgozsa C# krnyezetben ................................................. 97
13.2.1 XML fjl betltse.................................................................................. 97
13.2.2 A fa gai, mveletek node-okkal............................................................ 97
13.2.3 j node beszrsa s a fjl mentse. ...................................................... 98
13.2.4 Node trlse a fbl................................................................................ 98
13.3 Plda XML fjl feldolgozsra .................................................................... 99
14 Az UML nyelv s fontosabb diagramtpusai...................................................... 104
14.1 Hasznlati esetek ........................................................................................ 108
14.2 Tevkenysgdiagram.................................................................................. 112
14.3 Objektumok s osztlyok ........................................................................... 113
14.3.1 Kapcsolatok .......................................................................................... 115
14.3.2 Szekvenciadiagram............................................................................... 122
14.3.3 Kommunikcidiagram ........................................................................ 124
15 Az alkalmazsfejleszts folyamata, szoftver-letciklus modellek ..................... 128
15.1 A rendszerfejleszts folyamatmodelljei ..................................................... 133
15.1.1 A vzess modell .................................................................................. 134
15.1.2 A V modell ........................................................................................... 136
15.1.3 Prototpusok alkalmazsa ..................................................................... 137
15.1.4 A spirl modell ..................................................................................... 140
16 Fggelk ............................................................................................................. 148
16.1 A C# kulcsszavai........................................................................................ 148

-3-
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.2 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.2.1 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:

-4-
rtelmezvel a futtats 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.2.2 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.2.3 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.

-5-
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.

.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 tbb fle nyelbl ltezik fordt.

C++ .NET J# Visual C# Delphi


Basic .NET .NET

Common
Intermediate
Language

.NET
framework

-6-
1.3 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.
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:

-7-
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 Az osztlybl Az osztly


metdusai szrmaztatott pldnya
osztly metdusai
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
szksges osztlyok meghatrozsval kezddik. Az egyes osztlyok megvalstst
prhuzamosan tbb programoz is vgezheti.

-8-
2 A Visual Studio 2005. fejlsztkrnyezet

2.1 A Visual Studio 2005. letltse s teleptse

2.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.

2.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:

1. A letlttt ISO fjlokat gessk CD-re.


2. Kezdjk el a teleptst - futtassuk a setup.exe-t az els CD-rl.
3. 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.
4. 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.
5. Kezdjk jra a teleptst a merevlemezre msolt setup.exe-vel.
6. A termkkulcs mr megvan, folytathatjuk a teleptst az instrukciknak megfelelen.

-9-
2.2 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.2.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.

- 10 -
2.2.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.

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


(Form)

2.2.3 A Properites ablak

A Properties ablakot a View / Properties menponttal jelenthetjk meg.

- 11 -
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:

Name A komponens neve ezen a nven tudunk majd Minden


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

Gyakorlat:

5. Vlasszuk ki a gombot s nevezzk el Gomb-nak. Feliratt (Text) rjuk t Hello-


ra!

- 12 -
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.

Gyakorlat:

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.
11. Futtassuk projektnket az F5 billentyvel!

2.2.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
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

- 13 -
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!

Szoveg.Text = "Hello";

2.2.5 Trspontok s nyomkvets

sszetettebb algoritmusoknl gyakran elfordul, hogy a program szintaktikailag helyes,


futtatskor mgsem a kvnt eredmnyt adja. Ilyen hibk feldertsre hasznlhatjuk a
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.

- 14 -
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.
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.3 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
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

- 15 -
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.

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, melyekkel a legtbb vezrl (control) rendelkezik, az albbi


tblzatban foglaljuk ssze, s nem emltjk kln-kln az egyes vezrlk bemutatsnl.

Name A komponens neve ezen a nven tudunk Minden


majd programkdbl hivatkozni a komponens
komponensre. Szigorbb rtelemben nem
tulajdonsg, mgis itt tudjuk belltani.
Text Szveg Form,
Button,
TextBox
Enabled Engedlyezettsg. Ha rtke hamis (false) Button,
a komponens a program futtatsakor le TextBox
lesz tiltva.
Anchor (horgony) tmretezhet ablakoknl Button,
hasznos. Bellthatjuk, hogy a komponens TextBox
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 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.

- 16 -
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

Esemnyek
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

- 17 -
eltlttt egy bizonyos idt a komponens
fltt.

2.3.1 A gomb (Button)

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.3.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.3.3 Jellngyzet (CheckBox)

Tulajdonsgok (Properties)

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

Esemnyek (Events)
CheckStateChanged Jelzi, ha a jellngyzet llapota
megvltozott

2.3.4 Rdigomb (RadioButton)

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

Esemnyek (Events)
CheckedChanged Jelzi, hogy a gomb llapota megvltozott.

2.3.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.

- 19 -
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.

int valasztott = ComboBox1.SelectedIndex;

Az elemeket programkdbl is trlhetjk:


ComboBox1.Items.RemoveAt(valasztott);

2.3.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.3.7 Listadoboz (ListBox)

Egy ft jelent meg, melyben a felhasznl tbb elemet is bejellhet.

- 20 -
Tulajdonsgok (Properties)
Nodes (collection) A nodes gyjtemny tartalmazza a fa
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.3.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.

- 21 -
2.3.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.3.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.3.9.2 Panel

- 22 -
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.

2.3.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.3.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:

- 23 -
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);
}
else
{
MessageBox.Show("Nem vlasztott fjlt");
}

}
}

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.3.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:

- 24 -
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.

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

- 25 -
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).
Az albbi tblzatban a C# nyelv kulcsszavait mutatjuk be jelentsvel egytt.

3.2 Vltozk, azonostk

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. 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.

Az azonostk csak betvel vagy alhzs jellel kezddhetnek s nem tartalmazhatnak


szkzt, specilis karaktereket (pl. #) valamint kulcsszavakat. Az els karakter utn tovbbi

- 26 -
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 @ perfix 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.
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.

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.

- 27 -
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 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.3.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

- 28 -
3.3.2 Logikai literlok

A logikai literlok esetben a true s false kulcsszavakkal adhat meg az rtk.

3.3.3 Karakter, karakterlnc literlok

Karakter vagy karaktersorozat literlt a jelek kztt adunk meg.

3.3.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.4 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.

- 29 -
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
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;

- 30 -
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

3.5 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.

2. 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 &

- 31 -
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.

3.6 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.6.1 rtkad mveletek

Programjaink rsa sorn az rtkad mveletek segtsgvel rtkeket tudunk adni a


vltozinkhoz.

a=kifejezs;

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;

- 32 -
Elszr kiszmtsra kerl a kifejezs rtke, majd az bekerl a b vltozba s ezt felveszi
az a vltoz is.

3.6.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 EREDMNY TPUSA


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.6.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
/= x /= kifejezs x = x/kifejezs
%= x %= kifejezs x = x%kifejezs

- 33 -
3.6.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.6.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.6.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.

- 34 -
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:

4. tblzat Relcis mveletek opertorai

Mveleti jel Jelents


> nagyobb, mint
< kisebb, mint
== egyenl
!= nem egyenl
>= nagyobb vagy egyenl, mint
<= kisebb vagy egyenl, mint

4.2 Feltteles 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.

5. 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

- 35 -
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.
6. 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

7. 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

8. 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

9. tblzat A NOT opertor igazsgtblja

1. logikai kifejezs mvelet Vgeredmny


TRUE NOT FALSE
FALSE NOT TRUE

- 36 -
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 if else 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

- 37 -
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.

- 38 -
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 Properties


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

- 39 -
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;

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

private void btnKilepes_Click(object sender,


EventArgs e)
{
Close();
}

}
}

- 41 -
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.

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

string szoveg=bbbbbele;
szoveg.TrinEnd(b) bele

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


karakter sszes elfordulst.

string szoveg=vegggggg;
szoveg.TrinEnd(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,

- 43 -
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,

- 44 -
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!

1. Hozzunk ltre j projektet String nven!


2. Tervezzk meg az rlapot az albbiak szerint:

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

Komponens Text Name Properties


Form String frmString
Label Gpelje be a lblSzoveg1
szveget!
Label Gpelje be a lblSzoveg2
msik
szveget!
Label Hanyadik lblHanyadik
karaktertl?
Label Hny lblMennyi
karakter?
Label Hanyadik lblMelyiktol
karaktertl?
Label Mit szrjon lblMit
be?
TextBox txtSzoveg1
TextBox txtSzoveg2
TextBox 2 txtHanyadik
TextBox 1 txtMennyi
TextBox 2 txtMelyiktol

- 46 -
TextBox beszr txtMit
Button Szmol btnSzamol
Button sszehasonlt btnHasonlit
Button Nagybetsre btnNagybetus
alakt
Button Kisbetsre btnKisbetus
alakt
Button Szvegrsz btnResz
Button Karakter btnKeres
keress
Button Szveghossz btnHossz
Button Szvegbe btnBeszur
beszrs
Button Kilps btnKilepes

4. 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 != "")

- 47 -
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));
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);
}
}
}

- 48 -
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 szvegdobozokban
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());

- 49 -
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++;
}

- 50 -
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!

- 51 -
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 (s2) meghatrozsa. Ennek ngyzetgyke a szrs (s):

( x1 x ) 2 + ( x 2 x ) 2 + ... + ( x n x ) 2
s2 =
n

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

A szrs meghatrozsnak lpsei:

Adatok kiolvassa a szvegdobozbl


tlag kiszmtsa.
n

x i
x= i =1

n
Az tlagtl val eltrsek ngyzetnek kiszmtsa, valamint ngyzetsszeg kpzse.
n
eno = ( x n x ) 2
i =1

Az tlaguk kiszmolsa, majd ezen tlag ngyzetgyknek kiszmolsa.


n

(x n x)2
eno
s= i =1
=
n n
A kiszmolt szrs megjelentse a msik szvegdobozban.

1. Hozzuk ltre az rlapot a megfelel vezrlkkel!

Komponens Name Text Properties


Form Form1 Szrs szmts

- 52 -
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);
}

- 53 -
//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 Property


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

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

- 54 -
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");
}
}
}
}

- 55 -
7 Sajt metdusok ltrehozsa

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!

3. Hozzunk ltre j projektet Lnko nven!


4. Tervezzk meg az rlapot az albbiak szerint:

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

Komponens Text Name Properties


Form Legnagyobb frmLnko
kzs oszt
Label Krem az lblEgyik
egyik szmot!
Label Krem a lblMasik
msik szmot!
TextBox 32 txtEgyik

- 56 -
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.

6. 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();

- 57 -
MessageBox.Show("A kt szm legnagyobb kzs
osztja: "+stroszto);
}

private void btnKilepes_Click(object sender, EventArgs


e)
{
Close();
}
}
}

- 58 -
8 Objektumosztlyok s objektumok ltrehozsa

8.1 A programok szerkezete (osztly, adattag, metdus)

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.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.1.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.1.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;

- 59 -
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.1.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

- 60 -
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.1.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 cmszerinti 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);
}
}

- 61 -
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.1.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;

- 62 -
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.1.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
{

- 63 -
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.

- 64 -
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 objektumot. 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();

- 65 -
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.

- 66 -
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:

- 67 -
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.

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

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

public Form1()
{
InitializeComponent();

//Ltrehozzuk a bittrkpet a konstruktorban


//tadott mretben
rajzFelulet = new Bitmap(200,200);

//Ltrehozzun a Graphics osztly egy pldnyt,

- 68 -
//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();

}
}
}

- 69 -
10 Tbbablakos alkalmazsok ksztse

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:

MessageBox.Show("zenet.");

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
OK Ok
OKCancel Ok s Mgse
RetryCancel Ismt s Mgse

- 70 -
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...");
}

- 71 -
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
Label Szakok:
ComboBox cbSzakok
Button j szak btUjSzak

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

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:

- 72 -
Komponens Text Name Properties
Label j szak neve
TextBox Modifiers: public
Button Ok btnOk DialogResult: OK
Button Mgsem btnMegsem 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 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();
}

- 73 -
}
}

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)
{
cboSzakok.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
felhasznl melyik gombbal csukta be az ablakot. A felugr ablakban megadott rtket csak
akkor adjuk hozz a cboSzakok legrdl doboz elemeihez, ha a felhasznl Ok-val zrta be
az ablakot.

- 74 -
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.

- 75 -
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.

- 76 -
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

- 77 -
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;

- 78 -
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,

- 79 -
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 Properties


Form Msodfok frmMasodfoku
egyenlet
Label Krem a lblMasodfoku
msodfok tag
egytthatjt!
Label Krem az lblElsofoku
elsfok tag

- 80 -
egytthatjt!
Label Krem a lblKonstans
konstanstag
egytthatjt!
TextBox 3 txtMasodfoku
TextBox 6 txtElsofoku
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 + "

- 81 -
Gyk2=" + gyok2);
}
catch (DivideByZeroException divex)
{
MessageBox.Show("A msodfok tag
egytthatja=0");
}
}
}
}

- 82 -
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

12.1.1 Szveges s binris fjlok rsa, bvtse, olvassa

A kvetkez pldban a c:\temp 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,
csak akkor r bele
{
using (StreamWriter sw = File.CreateText(utvonal)) //Ltrehoz egy
szvegfjlt rsra
{

- 83 -
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.

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.

using (StreamReader sr = File.OpenText(utvonal))


{
string utvonal = @"c:\teszt.txt";
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.

A kvetkez kis pldaprogramunkban 10 darab egsz szmot trolunk:

FileStream File = new FileStream(args[0], FileMode.CreateNew);

- 84 -
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();

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

- 85 -
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!

5. Hozzunk ltre j projektet Veletlenfajlba nven!


6. Tervezzk meg az rlapot az albbiak szerint:

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

Komponens Text Name Properties


Form Lottszmok frmLotto
GroupBox Lott gbLotto
RadioButton ts lott rgOtos
RadioButton Hatos lott rgHatos

- 86 -
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).

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;

8. 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)
{
cmbSzamok.SelectedIndex = i;
tw.WriteLine(cmbSzamok.SelectedItem);
i++;
}
tw.Close();

- 87 -
}
}

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)

Visszaadja az adott knyvtrban lv alknyvtrak neveit:


System.IO.Directory.GetDirectories (string)

A paramterben megadott knyvtr ltezst vizsglja


- 88 -
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!

9. Hozzunk ltre j projektet Konyvtarak nven!


10. Tervezzk meg az rlapot az albbiak szerint:

- 89 -
11. Az rlapon szerepl komponensek tulajdonsgait lltsuk be az albbiak szerint:

Komponens Text Name Properties


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

Fel kell hvni a figyelmet mg arra is, hogy llomnykezels sorn az llomny elejre be kell
szrnunk a kvetkez sort, mert csak ezutn lesz kpes programunk a fjlok kezelsre.
using System.IO;

12. 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
{
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.

- 90 -
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 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)


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

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 btnKilepes_Click(object sender, EventArgs e)


{
Close();
}

}
}

12.3.3 llomnymveletek

A kvetkez metdus a fjl attribtumt olvassa be:


File.GetAttributes(path1)

- 91 -
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\testt.txt";


string utvonal2 = @"c:\proba\teszt.txt";
string utvonal3 = @"c:\proba\teszt.txt";
string teljesutvonal, eredmeny, kiterjesztes;
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);

- 92 -
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);

- 93 -
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:

- 94 -
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 -->

- 95 -
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 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.

- 96 -
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>
<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;

- 97 -
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>

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]);

- 98 -
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>

- 99 -
<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 WindowsApplication2
{
public partial class Form1 : Form
{

//Bvitsk az objektumosztlyt szakokXML


tulajdonsggal
XmlDocument szakokXML;

public Form1()
{
InitializeComponent();

- 100 -
}

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++)


{
cboSzakok.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


Label j szak neve
TextBox Modifiers: public
Button Ok btnOk DialogResult: OK
Button Mgsem btnMegsem DialogResult: Cancel
Form j szak UjSzak AcceptButton: btnOk

- 101 -
CancelButton: btnMegsem
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!

- 102 -
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!
cboSzakok.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 = cboSzakok.SelectedIndex;

//A kivlasztott elemet trljk a legrdl doboz


//elemei kzl
cboSzakok.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");
}

- 103 -
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

- 104 -
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)
illetve
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

- 105 -
implementci nzpontjbl rjk le a rendszert. Klnsen abbl a szempontbl hasznosak,
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,

- 106 -
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-,
- 107 -
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:

Szereplk

- 108 -
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.

1.1. bra: rklsi (generalizcis / specializcis) kapcsolat

A generalizcis kapcsolat fordtott olvasatban egy specializcis kapcsolatknt foghat fel, s


taln ez a nzpont jobban is segti a fogalom megrtst.

- 109 -
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.

1.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:

1. A knyvtros beti a klcsnz szemly azonostjt


2. A rendszer kilistzza a klcsnz ltal klcsnvett knyvek (s a lejrati hatridk)
listjt.
3. A knyvtros megkeresi a behozott knyvet a listban
4. 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>:

5. A knyvtros megkeresi a behozott knyvet a listban


6. <ksKnyv>

- 110 -
7. 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.

1.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
<<include>> kapcsolatban a kliens hasznlati eset nem teljes a szolgltat hasznlati eset
nlkl, addig az <<extend>> kapcsolatban az.

- 111 -
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!

1.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
Partcik vagy mskpp plyk (swimlanes)

- 112 -
1.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.

- 113 -
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.

A kzps rekeszben szerepl attribtumok ltalnos alakja:

lthatsg nv szmossg : tpus = kezdetirtk

- 114 -
A harmadik rekeszben szerepl metdusok ltalnos alakja

lthatsg metdusnv (paramternv : paramtertpus, ) : returnType

A lthatsg lehet publikus (+), privt (-) vagy vdett (#). (Ezekrl rszletesebben a C# nyelv
bemutatsakor lesz sz.)

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)

1.6. bra: Kapcsolatok ttekintse

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

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

- 115 -
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.

1.7. bra: Asszocicis kapcsolat, szemly - gpkocsi

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.

- 116 -
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.

1.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.)

- 117 -
1.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.

1.10. bra: Hrom osztly asszocicija

Tovbbi pldt szolgltat hrmas trsulsra a vonat utas lhely modell

- 118 -
1.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:

1.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.

Kompozcira (ers aggreglsra) plda:

1.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

- 119 -
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.

1.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.

1.15. bra: ltalnosts / generalizci

- 120 -
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.

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.

- 121 -
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.3.2 Szekvenciadiagram

A szekvenciadiagramok a vizsglt rendszer entitsai kztti kommunikcit, azaz az


zenetvltsokat brzoljk, jl lthat idbeli sorrendben. A szekvenciadiagramok a rendszer
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.

- 122 -
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:

1. A rendszer objektumai kztti kommunikci (zenetvltsok) forgatknyvnek


lersa
2. Az objektumok (osztlyszerepek) megadsa
3. Az letvonal meghzsa valamennyi objektumra
4. Az aktv idszakok megrajzolsa
5. Az zeneteket (s a vlaszokat) jell nyilak megrajzolsa
6. 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.

Pldaknt tekintsk egy knyvrendels szekvenciadiagramjt!

- 123 -
1.16 bra: Szekvenciadiagram egy knyvrendelsre

Az 1.16 bra a bolti knyvrendels leegyszerstett folyamatt mutatja. Hrom objektum


szerepel az brn:

1. Vev
2. Bolt
3. Keresett knyv.

Az brn megjelentett zenetek:

1. A vev (telefonon) megrendeli a knyvet a knyvesbolttl.


2. A bolti alkalmazott ellenrzi az adatbzisban a knyv megltt, illetve az rt.
3. Ha megvan a knyv, az elad feljegyzi a knyv rt.
4. Ezt az rat kzli a vevvel.
5. A vev kifizeti a knyv rt.
6. S megkapja az hajtott knyvet.

14.3.3 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,
hogy az idrendisget a szekvenciadiagrambl knnyebben tudjuk leolvasni. Tny, hogy egy
szekvenciadiagram elksztse utn mr knny feladat egy kommunikcidiagram

- 124 -
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 1.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.

1.17 bra: Kommunikcidiagram egy bankjegykiad automatra

- 125 -
Az 1.17. brn szmokkal elltott zenetek a kvetkezk:

1. Krtya behelyezse az automatba


2. Jelsz krs
3. Jelsz megadsa
4. Szmlaszm rvnyests krse
5. Krtya rvnyests krse
6. Bank elfogadja a krtyt
7. Folyszmla rendben van
8. Feladatvlaszts krse
9. Feladat megadsa
10. sszeg megadsnak krse
11. sszeg begpelse
12. Tranzakci feldolgozsnak krse a Trsasgtl
13. Tranzakci feldolgozsnak krse a Banktl
14. Banki tranzakci sikeres
15. Tranzakci sikeres
16. Bankjegyek kiadsa
17. Kszpnz felvtele
18. 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.

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

- 126 -
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.
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 Sznet gomb Stop gomb


megnyomsa megnyomsa 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.

- 127 -
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 semmi ms, 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.

A szoftverrendszerek fejlesztsnek folyamatt 7 alapvet fzisra bonthatjuk, tekintet nlkl


arra, hogy maga a fejleszts tnylegesen milyen mdszerrel trtnik:

1. clok meghatrozsa, projektindts,


2. elemzs, a rendszerrel szemben tmasztott kvetelmnyek meghatrozsa,
3. tervezs,
4. kivitelezs, implementls, integrci,
5. validci,
6. telepts, tads
7. 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
egsz informatikai projekt megtervezsre, kltsgterv ksztsre, dokumentlsra,
validlsra, a felhasznlk kikpezsre s betantsra, teleptsre stb.

Lssuk, hogy az letciklus egyes fzisai milyen tevkenysgeket tartalmaznak!

- 128 -
A projektindts fzisa a gyakorlatban j pr 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 versenyelnyre kpes szert tenni. Erre taln a legjobb
plda az e-business terlete.

Brmi legyen is a motivci, mindenkpp 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.

(Ha tegyk fel egy feladat elvgzsnek emberi erforrs ignye 2000 ember - nap, akkor ez
azt jelenti, hogy pldul 20 fnek 5 hnapig, 100 fnek 4 htig, 400 fnek pedig egy htig
kellene dolgoznia a megoldson. Termszetesen a valsgban a feladat termszete, a
rszfeladatok egymsra plse kizrhat bizonyos kombincikat.)

- 129 -
Ezek 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 a taktikt 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 tovbbi fontos rsze a fejleszts temtervnek elksztse. Ez technikjban


megegyezik brmilyen ms projekt temezsvel 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:
1. 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.
2. A szoftver egyedlllan rugalmas termk. Ha egy pletet eredetileg krhznak
terveztek, menetkzben nehz azt mondjuk sportstadionn tpteni.
Szoftverprojektekben ilyen mret irnyvlts gyakran elfordul.
3. 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.

- 130 -
4. 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.

Az elemzs fzisban a projekt rsztvevi az zleti problmt s annak krnyezett


tanulmnyozzk, elemzik abbl a clbl, hogy egzakt mdon meg tudjk fogalmazni a leend
informatikai rendszerrel szemben tmasztott elvrsokat s kvetelmnyeket, fggetlenl
attl, hogy ltezik-e mr valamilyen informatikai rendszer, vagy a semmibl kell azt
megkonstrulni. Az elemzs fzisnak fontossgt nem lehet elgg hangslyozni, br a
gyakorlatban errl igen gyakran megfeledkeznek. A tapasztalatok szerint az elindtott
rendszerfejlesztsi projekteknek csak 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 az elemzs elssorban nem
informatikai feladat, hanem szakterleti (gazdasgi, mezgazdasgi, orvosi stb.). A hangsly
a szakterleti problmn van, s nem a szmtgpes programokon. A rendszerelemzkkel
kapcsolatban tmasztott egyik legfontosabb elvrs a j 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
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

- 131 -
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 tbb mdja is lehetsges. A nagy rendszerek


semmibl val ltrehozsa mellett 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
2.1. fejezetben rszletesen megvizsgljuk s sszehasonltjuk a rendszerfejleszts klnfle
formit.

Informatikai rendszerek rtelmes fejlesztse, mint azt a fentiekben mr elemeztk,


elkpzelhetetlen az zleti folyamatok megrtse nlkl, amelyek tmogatsra tervezik s
fejlesztik e rendszereket. Ez a tevkenysg a rendszerelemzs, vagy mskppen a k-
vetelmnyek 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 megkzelts, amely az
zleti folyamatok sorn elvgzett zleti tevkenysgekre figyel, ezek alapjn r le, illetve
elemez rendszereket. Ez a mdszer az elmlt vekben igen elterjedt.

- 132 -
15.1 A rendszerfejleszts folyamatmodelljei

A rendszerfejleszts folyamata 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,
prototpus ksztse, evolcis fejleszts,
jrafelhasznlson alapul fejleszts,
ksz alkalmazsi programcsomagok hasznlata,
vgfelhasznli fejleszts.

Ebben a fejezetben ezeket a technikkat ismertetjk s hasonltjuk ssze, megemltve


elnyeiket s htrnyaikat. Fontos hangslyozni, hogy a rendszerfejleszts brmelyik
vltozatt vlasztjuk is, valamennyi technika a mr emltett tevkenysgekbl ll:
projektindts,
kvetelmnyelemzs,
tervezs,
megvalsts, kivitelezs, integrci
validls,
telepts, zemeltets, 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.

A projektindts szakaszban elsknt magt a problmt kell definilni. Ez ltalban az


albbi kt krds feltevst s megvlaszolst jelenti:
Mirt van szksgnk egy j informatikai fejlesztsre, egy j projektre?
Mit szeretnnk megvalstani, elkszteni, megoldani az j informatikai rendszerrel?
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 rendszer tanulmnyozst s modellezst jelenti. Az esetek tekintlyes


szzalkban egy 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 pontos s vilgos lersa.

- 133 -
A tervezs fzisban az elzekben megfogalmazott kvetelmnyeket, problmkat kell
hardver/szoftver megoldss talaktani. Az informatikban a terv a megolds
specifiklst, egzakt lerst jelenti, az implementls pedig a rendszer fizikai meg-
valstst, kivitelezst, tesztelst s tadst. A megvalsts trtnhet a szksges
szoftver
megrsval vagy
megvsrlsval, esetleg
lzingelsvel.

Ebben a fzisban kell a hardvert beszerezni s installlni, amennyiben az mg nem ll


rendelkezsre. Szintn az implementls rsze a felhasznlk betantsa s a dokumentci
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.

A fentiek egyttesen alkotjk az informatikai rendszer letciklust. Az elnevezs 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 jabb rendszerekre.

A fejleszts mdszereit nem lehet rangsorolni, az eltr helyzetek klnbz megkzeltse-


ket tesznek 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.1.1 A vzess modell

A hagyomnyos letciklus modell a legrgibb rendszerfejlesztsi technika. Az els modell


mg az tvenes vek kzepn szletett meg, br elnevezst vzess modell csak 1970-
ben kapta. A nv magyarzata, hogy az egyes fejlesztsi szakaszok gy kvetik egymst, mint
egy tbblpcss vzess.

A vzess modell bizonyos vltozataiban az egyes fzisokat tovbb bontjk. A tesztels


pldul ltalban ngy lpsben trtnik:

- 134 -
modulteszt,
integrcis teszt,
rendszerteszt,
elfogadsi teszt;

az tads pedig hrom, idben elklnl tevkenysgbl ll:


3

installci,
dokumentci,
betants s trning.

1. PROJEKTINDTS

2. ELEMZS

3. RENDSZER- S
PROGRAMTERVEZS

4. PROGRAMRS

5. TESZTELS

6. TADS

7. ZEMELTETS

2.1. bra A rendszerfejleszts hagyomnyos vzess modellje

A vzess modell egy szigoran dokumentumvezrelt folyamat. Ez azt jelenti, hogy egyik
fzisbl a soron kvetkez fzisba csak a fzis teljes befejezse s a befejezst igazol
dokumentum elkszlte utn lehet tmenni. E modellben 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) elssorban nagy mret s hossz
lettartam rendszerek fejlesztsre hasznljk. A szigor elrsok garantljk a j
minsg, br lass fejlesztst.

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

- 135 -
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.

15.1.2 A V modell

Az utbbi vekben a nmet nemzetvdelmi minisztrium ltal a kilencvenes vek legelejn


kidolgozott folyamatmodell, az n. V modell bizonyult npszernek a rendszerfejlesztk
krben. 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.
1. projektindts,
2. elemzs, kvetelmnyek meghatrozsa,
3. rendszerterv elksztse,
4. rszletes programterv elksztse,
5. programrs,
6. modul- s integcis tesztels,
7. rendszertesztels,
8. elfogadsi tesztels,
9. tads s zemeltets, karbantarts.

- 136 -
1 9

validci
2 8

verifikci II.
3 7

verifikci I.
4 6

2.2. bra A rendszerfejleszts V modellje


A fejleszts fzisai egy V bett formlnak, amelynek cscsban a programrs tevkenysge
ll.

Mint azt korbban tisztztuk, a validci annyit jelent, hogy meggyzdnk arrl, vajon a
helyes, azaz a megfelel rendszert ptjk-e, a verifikci pedig azt jelenti, hogy
meggyzdnk arrl, helyesen ptjk-e a rendszert. 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.

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.

15.1.3 Prototpusok alkalmazsa

A vzess modellen alapul, tradicionlis rendszerfejleszts gyengesgeit viszonylag hamar


felismertk. Ezek kikszblsre szmos elkpzels szletett, melyek kzl a prototpusok
alkalmazsa az egyik legismertebb s leggyakrabban hasznlt technika. A prototpus sz
mintapldnyt jelent, s a rendszerfejlesztsben tbbflekppen is hasznljk a
prototpusokat:
az evolcis rendszerfejleszts eszkzeknt,
a rendszerrel szemben tmasztott kvetelmnyek megfogalmazsakor, specifikl-
sakor felmerl problmk megoldsra,

- 137 -
valamely nagyobb befektetst ignyl dnts tmogatsra a lehetsges megold-
sokkal val ksrletezssel.

Az informatikai rendszerek megrendeli a projekt indtsakor ltalban nehezen tudjk


valamennyi elvrsukat pontosan megfogalmazni a kifejlesztend rendszerrel kapcsolatban,
ami 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 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. Tovbbi eshetsg az, ha 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 sebessgben, 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,
megvalsts,
tesztels.

Ezek a 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 hasznljk. (Innen az elnevezs: eldoband
prototpus, br ezek gyakran jra felhasznlhatk ms projektekben.)

Ez az eljrs tulajdonkppen annak ellenrzse, hogy valban a j rendszert fejlesztik-e. Az


eldoband prototpusok ksztsnek a clja teht nem tbb, mint a kvetelmnyek
validcija, azaz rvnyessgk igazolsa.
Br a kvetelmnyek meghatrozsa nehzkesebb, mint a tradicionlis rendszerfejleszts
sorn, a tapasztalatok azt mutatjk, hogy a projekt sszkltsge ltalban kisebb.

- 138 -
PROJEKTINDTS

ELEMZS

TERVEZS RENDSZERTERVEZS

MEGVALSTS MEGVALSTS

TESZTELS TESZTELS

ZEMELTETS

2.3. bra A rendszerfejleszts folyamatmodellje


prototpusok alkalmazsval

Ltezik a prototpusok hasznlatnak egy msik mdja is, melyre 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 hasznlatakor 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
gyorsan lehet megvalstani, implementlni, azaz ahol a ciklusid rvid. Ennek a
gyorsasgnak azonban vannak htrnyai is:

- 139 -
A folytonos vltoztatsok miatt a rendszer szerkezete ltalban kevsb tlthat s
kvetkezetes. (Az egyetlen termk a programkd.)
A specifikci hinya a karbantartst igen megneheztheti s megdrgtja. (Ezrt az
gy fejlesztett rendszerek lettartama viszonylag rvid.)
Fontos nemfunkcionlis rendszerjellemzket, mint pldul a teljestmnyt,
biztonsgot, megbzhatsgot felldozzk a gyorsasg miatt, ami nehzkess teszi
ezen nem-funkcionlis kvetelmnyek utlagos teljestst.
Nem kszl komoly rendszerdokumentci, hiszen annak idignyessge lehetetlenn
tenn a vltoztatsok gyors realizlst.

Az evolcis prototpusok hasznlatnak egyik tovbbi problmja, hogy a verifikci lpse


rtelmezhetetlen. A verifikci annyit jelent, hogy meggyzdnk arrl, helyesen ptjk-e a
rendszert. Ez a gyakorlatban annyit tesz, hogy ellenrizzk, a rendszer megfelel-e a megadott
specifikciknak. Itt azonban nincsenek specificik, teht formlisan nincs 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. Pldul szakrti rendszereket
vagy felsvezeti informatikai rendszereket 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 eldoband prototpusok hasznlatnak clja az


ismeretlen, nem vilgos kvetelmnyek megrtse. Azon kvetelmnyekre, amelyek
egyrtelmek, amelyeket nem kell tisztzni, nem kszl prototpus. Az evolcis prototpusok
viszont elszr a jl 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.

15.1.4 A spirl modell

Az 1988-ban bevezetett Boehm-fle spirlis folyamatmodell tvzi a klasszikus vzess


modell s a prototpusok alkalmazsnak technikjt, s ezenkvl bepti a kockzatelemzst
is a modellezsbe.

Ngy f tevkenysget klnbztet meg:


1. tervezs (clok meghatrozsa, knyszerek s kockzatok azonostsa, alternatv
stratgik tervezse),
2. kockzatelemzs s cskkents,
3. termkfejleszts (prototpusok ksztse) s V&V (validci s verifikci),

- 140 -
4. rtkels.

A spirlmodellben minden egyes iterci sorn az albbiakat kell megadni:


1. clok,
2. korltok (pnz, id stb.),
3. alternatvk,
4. kockzatok, veszlyek,
5. kockzatcskkent stratgik,
6. eredmnyek,
7. tervek,
8. 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.

- 141 -
Alternatvk Kockzat-
tervezse (AT) elemzs (KE)
4. AT 4. KE

3. AT 3. KE

2. AT 2. KE

1. AT 1. KE

4. Kltsg- 3. Kltsg- 2. Kltsg- 2. Proto- 3. Proto- 4. Proto-


vets vets vets 1. Kltsg- 1. Proto- tpus tpus tpus
vets tpus

Kezds
Mkdsi Rszletes
terv terv
Elemzs

Tervezs

Program-
rs
V&V
Kvetkez
fzisok
megterve-
zse
V&V Tesztels

Elfogads
Fejleszts
rtkels V&V

2.4. bra A rendszerfejleszts spirlmodellje

A harmadik rendszerfejlesztsi technika az jrafelhasznlson 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
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-alap


technolgia trnyersvel) merlt csak fel annak az ignye, hogy az egyszer mr jl megrt,

- 142 -
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 valamilyen programnyelvben (FORTRAN,
Pascal, C++) 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.

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

- 143 -
az adott szitucira legalkalmasabb komponenst megtallni a nagy szm lehetsg kzl.
Tekintettel arra, hogy a knyvtrba egyre tbb ttel kerl, a kikeress gyorsasga elsrenden
fontos. Az egyik lehetsges megolds ahhoz hasonlt, amit a hagyomnyos knyvtrakban
alkalmaznak az ETO-szm (Egyetemes Tizedes Osztlyozs) bevezetsvel.

Ha rendelkezsre ll egy megfelel hierarchikusan szervezett katalgus, valamint egy


alkalmas trgyszindex s egy keresztreferencia-tblzat, akkor nem szksges minden
knyvet vgigolvasni ahhoz, hogy rbukkanjunk a keresett ttelre.

Egy tovbbi lehetsg az, hogy a komponensknyvtrban minden egyes ttelrl kszl egy
kttt lers, amelybl kiderl, hogy az adott programrszlet
milyen alkalmazsi terleten,
melyik programozsi nyelvben,
melyik opercis rendszerhez,
milyen objektumrl,
milyen funkcihoz

kszlt. Ehhez trsulhat egy rvid szveges lers a komponensrl szerzett tapasztalatokrl, a
megbzhatsgrl, a fejlesztkrl stb.

Egy hatkony visszakeres, lekrdez rendszerrel automatizlni lehet a keresst a felhasznl


ignyeinek megfelelen. A keresst pldul az nehezti, hogy egy funkcit tbbflekppen is
le lehet rni klnbz szinonimk (ugyanarra a fogalomra vonatkoz eltr elnevezsek)
hasznlatval. A rendszernek kpesnek kell teht lennie a szinonimk s a tartalmilag
hasonl, de nem teljesen ugyanazt ler megnevezsek kezelsre is.

Egy tovbbi elvrs a visszakeres rendszerrel szemben az, hogy amennyiben tl sokan
keresnek eredmnytelenl egy szoftverkomponenst, akkor jelezze az ignyt a komponens
kifejlesztsre.

A gyakorlati tapasztalatok azt bizonytjk, hogy az j informatikai projektekben az


jrafelhasznlt komponensek alkalmazsnak mrtke meghaladhatja a 60-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

- 144 -
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
Komponensek megtallsa s adaptlsa komoly jrtassg kell hozz

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,
implementls, integrci,
zemeltets, karbantarts, tmogats

- 145 -
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.

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:

- 146 -
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.

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 szinte kivtel nlkl kisebb mret


feladatokra szortkozik, s gy nem alternatvja a msik hrom fejlesztsi techniknak. Ez a
megllapts azonban semmikpp nem cskkenti a vgfelhasznli rendszerfejleszts
elnyeit. Egy kisvllalkozs teljes knyvelst automatizlni lehet pldul Excel makrk
megrsval. Ehhez a felhasznlnak mindssze a Visual Basic for Application (VBA)
programnyelvet kell elsajttania, s az Excel knlta programozsi krnyezetben a feladatok
knyelmesen elvgezhetk.

- 147 -
16 Fggelk

16.1 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.

- 148 -
float A float lebegpontos adattpus kulcsszava.
for Ciklusszervez utasts.
foreach Ciklusszervez utasts.
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.

- 149 -
string A string adattpus kulcsszava.
struct Adattpus, amely adatokat s tagfggvnyeket egyarnt
tartalmazhat.
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.

- 150 -

You might also like