Professional Documents
Culture Documents
15 Szoftverfejlesztes
15 Szoftverfejlesztes
=
=
n
i
n
x x eno
1
2
) (
Az tlaguk kiszmolsa, majd ezen tlag ngyzetgyknek kiszmolsa.
n
eno
n
x x
s
n
i
n
=
=
=1
2
) (
A kiszmolt szrs megjelentse a msik szvegdobozban.
1. Hozzuk ltre az rlapot a megfelel vezrlkkel!
Komponens Name Text Properties
Form Form1 Szrs szmts
- 56 -
Button btSzamitas Szrs
TextBox tbSzamsor Multiline=True
TextBox tbSzoras
Label label1 Szmsorozat:
Label label2 Szrs:
2. A gomb kattints esemnyhez rjuk meg a szmtst elvgz kdot!
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace szoras
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btSzamitas_Click(object sender, EventArgs e)
{
//Hatrozzuk meg a szvegdoboz sorainak szmt!
int n = tbSzamsor.Lines.GetLength(0);
//Hozzunk ltre egy n darab double elembl ll tmbt!
double[] szamsor;
szamsor = new double[n];
//A szvegdoboz sorait szmm alaktva olvassuk a tmbbe!
for (int i = 0; i < n; i++)
{
szamsor[i] = int.Parse(tbSzamsor.Lines[i]);
}
//Szmtsuk ki az sszeget s az tlagot!
double osszeg=0;
for (int i = 0; i < n; i++)
{
osszeg += szamsor[i];
}
double atlag = osszeg / n;
//Szmtsuk ki az tlagtl val ngyzetes
//eltrsek sszegt!
//A System.Math.Pow(alap,kitev) fggvnnyel tudunk
//hatvnyozni.
double eno=0;
for (int i = 0; i < n; i++)
{
eno += System.Math.Pow((szamsor[i] - atlag),2);
}
- 57 -
//Az az tlagtl val ngyzetes eltrsek
//tlagbl gykt vonva megkapjuk a szrst.
//System.Math.Sqrt() fggvny segtsgvel vonunk gykt.
double szoras = System.Math.Sqrt(eno / n);
tbSzoras.Text = szoras.ToString();
}
}
}
6.3 Plda: Prmszm vizsglat
Ksztsnk programot, mely egy szmrl eldnti, hogy prmszm-e. A vizsglat eredmnyt
felugr ablakban jelentsk meg.
Annak eldntsre, hogy egy szm prmszm-e, tbb algoritmus is ltezik. Vlasszuk az
egyik legegyszerbb mdszert:
Felttelezzk a szmrl, hogy prm
[2 ; szm/2[ tartomnyba es sszes egsz szmmal megksreljk az osztst. Ha
tallunk olyan szmot, melynl az osztsi maradk 0, a szm nem prm. (A
vizsgland szm felnl nagyobb szmokkal felesleges prblkozni, biztos, hogy
kzttnk nem tallunk egsz osztt.)
Ha a fenti tartomnybl egyetlen szm sem ad 0-t osztsi maradkknt, a szm prm.
A C# nyelvben osztsi maradk kpzsre a % opertor szolgl.
1. Ksztsk el az rlapot
Komponens Name Text
Form Form1 Prm
TextBox tbSzam
Button btPrime Prm-e?
Label Label1 Vizsgland szm:
2. Rendeljnk esemnyt a gomb kattintshoz, s vgezzk el a vizsglatot
- 58 -
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace primszam
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btPrime_Click(object sender, EventArgs e)
{
//Hozzunk ltre int tpus vltozt, melybe beolvassuk
//a szvegdobozbl a vizsgland rtket.
//A szvegdoboz string tpus tartalmt a int.Parse(szveg)
//fggvnnyel alakthatjuk szmm.
int szam = int.Parse(tbSzam.Text);
//prim-e logikai vltozban kezdetben felttelezzk,
//hogy a vizsglt szm prm.
bool prim_e = true;
//Ciklussal vgigjrjuk a lehetsges osztkat.
for (int i = 2; i < szam / 2; i++)
{
//Ha az osztsi maradk 0, a szm nem prim.
if (szam % i == 0)
{
prim_e = false;
//Ha talltunk osztt, felesleges tovbb
//folytatnunk a keresst, a break; paranccsal
//kiugrunk a ciklusbl.
break;
}
}
//Az eredmnytl fggen megjelentjk az zenetet.
if (prim_e == true)
{
MessageBox.Show("Prim");
}
else
{
MessageBox.Show("Nem prim");
}
}
}
}
- 59 -
7 Sajt metdusok ltrehozsa
Hosszabb programok rsa esetn mindenkppen javasolt a kd rszekre trdelse. Ennek
sorn olyan rszeket klntnk el, amelyek nmagban rtelmes rszfeladatokat ltnak el. A
rszfeladatoknak a feladatot lefed nevet clszer kitallnunk. Az ilyen, nll feladattal s
nvvel elltott, elklntett programrszletet eljrsnak nevezzk.
Az eljrsnak
a visszatrsi rtk tpusa ktelezen void (azaz nincs),
van neve (azonost),
lehetnek paramterei,
van trzse.
A fggvny rokon fogalom az eljrssal. A fggvny egy olyan eljrs, amely olyan
rszfeladatot old meg, melynek pontosan egy vgeredmnye is van - egy rtk.
Amennyiben fggvnyt akarunk rni, kt fontos dolgot kell szem eltt tartanunk:
A fggvnyeknl rgzteni kell, hogy milyen tpus rtket adnak majd vissza. Ezt a
fggvny neve eltt kell feltntetni (a void helyett).
A fggvnyek ezek utn ktelesek minden esetben egy ilyen tpus rtket vissza is
adni! A fggvny visszatrsi rtkt a return kulcssz utn rt kifejezsben kell
feltntetni.
A C#-ban az eljrsok s fggvnyek neve azonost, ezrt rvnyes az azonost nvkpzsi
szablya:
Amikor eljrst vagy fggvnyt runk, az alprogram trzsben sokszor hivatkozunk
vltozkra (paramterekre). E vltozkban az eljrs vagy fggvny a program elz rszei
ltal ellltott adatokat kap, vagyis bemen adatokat fogad. Az alprogramok ezen adatok
segtsgvel jabb rtkeket llthatnak el, melyeket a ksbbiekben jra felhasznlhatunk.
A paramtereket az eljrs fejrszben kell feltntetni. Fel kell sorolni vesszvel elvlasztva a
bemen adatok tpust, s egy azonostt kell adni ezen adatoknak. Ezt a listt formlis
paramterlistnak hvjuk.
int Lnko(int a, int b)
Amikor ezen eljrst meg akarjuk hvni, akkor a fenti bemen adatokat t kell adni neki. A
hvs helyn feltntetett paramterlistt (mely az aktulis bemen adatok rtkt tartalmazza)
aktulis paramterlistnak hvjuk. Aktulis paramterlistban mr sosem runk tpusokat,
hanem csak konkrt rtkeket!.
int oszto = Lnko(egyik, masik);
- 60 -
Rviden sszefoglalva a fentieket, sajt metdusok rsnak az elsdleges szerepe, hogy
olyan kdrszleteket (eljrsokat, fggvnyeket) ksztsnk, amelyeket a programunk sorn
tbbszr is vgre szeretnnk hajtani vagy ugyanolyan formban, vagy pedig paramterezetten
lehetsg van a ms adatokkal val meghvsra is. A fggvnyszint metdusok radsul
kpesek a kdrszlet lefuttatsa utn valamilyen rtk visszaadsra is.
7.1 Plda: Kt szm legnagyobb kzs osztjnak a meghatrozsa
Pldnkban szerepeljen kt szvegdoboz (TextBox), amelyben az egyik illetve msik szmot
adhatja meg a felhasznl, amelyeknek a legnagyobb kzs osztjra kvncsi. Ha a
Szmol gombra kattintunk, ugorjon fel egy zenetablak, melyben a program kirja a
felhasznl ltal megadott kt szm legnagyobb kzs osztjt.
A kilps gombra kattintva az alkalmazsunk fejezze be a program futtatst!
1. Hozzunk ltre j projektet Lnko nven!
2. Tervezzk meg az rlapot az albbiak szerint:
3. Az rlapon szerepl komponensek tulajdonsgait lltsuk be az albbiak szerint:
Komponens Text Name
Form Legnagyobb kzs oszt frmLnko
Label Krem az egyik szmot! lblEgyik
Label Krem a msik szmot! lblMasik
TextBox 32 txtEgyik
- 61 -
TextBox 12 txtMasik
Button Szmol btnSzamol
Button Kilps btnKilepes
A programunkban ltrehozunk Lnko nven (int Lnko(int a, int b)) egy fggvny tpus
metdust, amely kt egsz szmot vr paramterknt s a legnagyobb kzs osztjukat adja
vissza eredmnyknt. A metduson bell ellenrzst vgznk, ha a felhasznl negatv rtket
ad meg, akkor veszi annak abszolt rtkt s azzal szmol. A kt megadott szmot
sszehasonltja s amennyiben az els kisebb, gy felcserli ket, a knnyebb szmolhatsg
kedvrt. A % opertor az oszts maradkt adja vissza.
4. Lnko.cs:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace Lnko
{
public partial class frmLnko : Form
{
public frmLnko()
{
InitializeComponent();
}
int Lnko(int a, int b)
{
int s;
if (a < 0)
a = -a;
if (b < 0)
b = -b;
if (a < b)
{
s = b; b = a; a = s;
}
s = a % b;
while (s != 0)
{
a = b; b = s; s = a % b;
}
return b;
}
private void btnSzamol_Click(object sender, EventArgs e)
{
int egyik = int.Parse(txtEgyik.Text);
int masik = int.Parse(txtMasik.Text);
int oszto = Lnko(egyik, masik);
string stroszto = oszto.ToString();
MessageBox.Show("A kt szm legnagyobb kzs osztja: "+stroszto);
- 62 -
}
private void btnKilepes_Click(object sender, EventArgs e)
{
Close();
}
}
}
- 63 -
8 Objektumosztlyok s objektumok ltrehozsa
A C# programozsi nyelv segtsgvel objektumorientlt alkalmazsokat kszthetnk, st: a
nyelv szigoran objektumorientlt - ami azt jelenti, hogy a programok ksztse kzben
objektumokban kell gondolkodnunk, ebbl pedig az kvetkezik, hogy sem adatok, sem
metdusok (mveletek) nem ltezhetnek objektumokon kvl.
8.1 A program sszetevi
Egy objektumorientlt programot egyttmkd objektumok halmaza alkot. Az objektumok
adattagokbl s metdusokbl llnak. A gyakorlatban ahhoz, hogy egy mkd program
objektumokkal rendelkezzen, azokat a forrsprogramban az adott nyelv ltal elrt mdon
definilnunk kell. Az objektumok defincija (tpusnak lersa) az osztly. Az objektumokat
az osztlydefincik alapjn futsi idben hozzuk ltre. Az objektumokat az osztlyok
pldnyainak nevezzk.
Az osztlydefinci minden esetben az adattagok s a metdusok lerst tartalmazza. Az
adatok s a fggvnyjelleg metdusok azonostjuk eltt tpus-megjellst is kapnak.
8.2 Az osztly deklarlsa
Az osztlyokat a kvetkez ltalnos deklarcis formban szoks megadni:
class Osztly
{
adatok deklarlsa;
metdusok deklarlsa;
}
Az elbbi pldbl jl lthat, hogy az osztlydefinci egy blokkot alkot, a blokk kezdett s
vgt a {} zrjelpr jelzi. Az osztly minden adattagjt s metdust a blokkon, azaz a
zrjel-pron bell kell megadni.
8.3 Adattagok deklarlsa
Az objektum mveletei az objektumban deklarlt adattagokon dolgoznak. Az adatok
vltozkban helyezhetk el. A vltozk deklarlsakor el kell dntennk, hogy milyen
rtkeket vesznek majd fel s ezt a tpusmegjellssel definilni kell. A vltozk
deklarlsnak ltalnos mdja, amint ezt mr a korbbiakban lttuk:
tpus adattag_azonost = kezdrtk;
- 64 -
Az adattagok deklarlsakor ktfle mdostt lehet hasznlni, a static s a const
kulcsszavakat. A static mdostval az osztlyszint adattagot hozhatjuk ltre. Az gy
deklarlt statikus adattag rtke nem az osztly alapjn ltrehozott objektumban, hanem az
osztlyban kerl trolsra, gy bellthat illetve lekrdezhet az objektum ltrehozsa nlkl
is.
Nzznk meg egy pldt az osztlyszint adattag deklarlsra:
static double oVltoz = 211.12;
A const mdostval olyan adattagokat deklarlhatunk, amelyeknek rtke ksbb mr nem
mdosthat.
Nzznk meg egy pldt az lland adattag deklarlsra:
const nv = Visual C#;
Az adattagokra ltalban a programjainkban az osztlynv.adattagnv, illetve az
objektumvltoz.adattagnv formban tudunk hivatkozni.
8.4 Metdusok deklarlsa
Az objektumok adatain dolgoz eljrsokat s fggvnyeket (metdusokat) is az osztlyokon
bell deklarljuk, ennek ltalnos formja:
Eljrsjelleg metdus esetn:
void Eljrsjelleg_metdusnv (paramterlista)
{
eljrs bels vltozinak deklarlsa;
utastsok;
}
Fggvny-metdus esetn
tpus Fggvnyjelleg_metdusnv (paramterlista)
{
fggvny bels vltozinak deklarlsa;
utastsok;
}
return rtk;
}
A fggvnyjelleg metdus azonostja eltti tpus megadsakor kell meghatrozni, a
fggvny ltal eredmnyknt visszaadott adat tpust. Az eredmny visszaadst a return
utasts biztostja, amelyet a fggvny utastsrszben kell elhelyezni. Ezen utasts hatsra
a fggvny vgrehajtsa vget r s az rtk visszaaddik a fggvny hvsnak helyre, mint
eredmny. Fontos felhvni arra a programoz figyelmt, hogy a fggvnyjelleg metdusok
rsa sorn, ha szelekcit alkalmazunk, akkor valamennyi gon el kell helyezni a return
- 65 -
utastst, azaz egyetlen felttel esetn sem lphetnk ki gy a metdusbl, hogy ne adna
vissza rtket.
A paramterlista, amelyet mindig zrjelek kztt adunk meg adatokat kldhetnk a
metdusunkba, st akr vissza is kaphatunk onnan eredmnyeket (de csak fggvnyjelleg
metdusok esetn).
A metdusok deklarlsakor alkalmazhatjuk az adattagoknl mr megismert static
mdostt. Hasznlatval osztlyszint metdust hozhatunk ltre. Az ilyen metdus az
osztlybl ltrehozott objektumokban nem hasznlhat, csak osztlyszinten ltezik.
A metdusokra az osztlynv.metdusnv vagy az objektumvltoz.metdusnv
formban hivatkozhatunk.
8.5 Metdusok paramterezse
A metdusok nem csak osztlyaik vagy sajt bels adattagjaikkal dolgoznak, hanem kvlrl
is kaphatnak adatokat. Minden metdus rendelkezhet paramterekkel, amelyeket a fejlcben
definilunk, mint formlis paramterlista.
A paramterek az adatok tadsa szempontjbl lehetnek rtk vagy cm szerinti paramterek.
rtk szerinti paramtertadsnl a bejv adat csak felhasznlhat. Az albbi pldban egy
metdus a kapott adatokkal szmol.
class Param1
{
public static void Main()
{
Account haszon = new Account();
haszon.Count("Alma",152,3.5,15);
}
}
Ha a metdustl eredmnyt szeretnnk visszakapni, akkor fggvnyjelleg metdust
alkalmazunk. A fggvny return parancsa azonban csak egy rtket kpes visszaadni. A
gyakorlatban az az eset is elfordulhat, hogy tbb rtket is szeretnnk visszakapni. Ekkor
hasznljuk a cm szerinti paramtertadst.
class Param2
{
public static void Main()
{
double netto = 0;
double brutto = 0;
Account haszon = new Account();
haszon.Count(152,3.5,15,ref netto, ref brutto);
}
}
- 66 -
A fenti pldbl jl lthat, hogy a cmszerinti paramtertadsnl a ref direktvt
alkalmaztuk mind az aktulis, mind pedig a formlis paramtereknl. szre kell venni, hogy
br a netto s brutto vltozkat adatvisszaadsra hasznljuk, a metdushvs eltt
valamilyen rtket kell kapniuk, ami jelen esetben 0.
A most bemutatand msik pldban a netto s brutto rtkek esetben deklarljuk, hogy
ezek a vltozk kifejezetten csak visszatr adatok (out).
class Param3
{
public static void Main()
{
double netto;
double brutto;
Account haszon = new Account();
haszon.Count(152,3.5,15,out netto,out brutto);
}
}
Az out jells azt is szksgtelenn teszi, hogy a formlis paramternek a metdushvs
eltt valamilyen korbban kapott rtke legyen. A metdusok paramterezsnl
alkalmazhatunk elre nem definilt szm paramtert is.
8.6 Adatok s metdusok lthatsga
Az objektumorientlt programozs egyik alapelve az, hogy az objektumok zrt rendszerben
mkdnek. Ez azt jelenti, hogy egy objektumot csak az n. interfszn keresztl lehet
megszltani; az interfsz pedig gondosan megvlogatott metdusokat tartalmaz. Az
objektumok adatait s metdusait ezrt klnbz lthatsgi megszortsokkal ltjuk el.
Az osztlydefincikban az albbi lthatsgi szinteket hasznlhatjuk:
private, csak az osztlyban, vagy a belle kzvetlenl ltrehozott objektumokban
elrhet illetve hasznlhat adattag vagy metdus. (alaprtelmezett)
protected, csak az osztlyban, vagy a belle szrmaztatott osztlyokban, s az ezekbl
ltrehozott objektumokban elrhet illetve hasznlhat adattag vagy metdus.
public, brhonnan elrhet illetve hasznlhat adattag vagy metdus.
A lthatsgi szintek alkalmazsval az objektumok adattagjait s az objektumon bell
hasznlt metdusait elrejthetjk a klvilg ell. Az adattagok msik objektum ltali
lekrdezst vagy belltst olyan metdusokkal biztostjuk, melyek kdja ellenrztt
hozzfrst biztost az objektum belsejhez.
Ha az osztly valamely tagjaira nem adunk meg lthatsgi megszortst, akkor azokra az
alaprtelmezett private lthatsg vonatkozik.
Nzznk meg egy pldt az adattagok s metdusok lthatsgnak belltsra:
public class Osztly
{
private int i = 5;
- 67 -
protected c = Karakterlanc
private void Atlag()
.
}
Amint az a fenti pldbl lthat lthatsgi megszorts magra az osztlyra is bellthat,
ennek az objektumok rkldsnl lehet fontos szerepe.
8.7 A property-k
Az elz fejezetekben mr volt sz az objektumok zrtsgrl, a bels adattagok
metdusokon keresztl val elrsrl. Ebben az esetben azonban az adat-hivatkozs helyett
metdusokat kell meghvnunk. A property-k alkalmazsa viszont, gy teszi lehetv az
objektum bels adattagjaira val hivatkozst, hogy kzben megtarthatjuk a hivatkozs adat-
jellegt is.
private int ev; //kvlrl nem elrhet adat
public int Ev //kvlrl elrhet property
{
get
{
return ev;
}
set
{
ev = value;
}
}
A fenti kdrszlet szerint egy osztly bels adattagknt az ev vltozt tartalmazza. Az Ev
property-n keresztl adathivatkozs-jelleggel rhatjuk s olvashatjuk is:
Osztaly.Ev = 2004;
Ebben az esetben, a httrben vgrehajtsra kerl az Ev property set metdusa, s
megtrtnik az rtkads az ev bels vltozba. A metdus termszetesen brmilyen
tovbbi, esetleg ellenrzst szolgl kdot is tartalmazhat mg ezen fell.
Az v vltoz tartalmt pldul a kvetkez utastssal is lekrdezhetjk:
x = Osztaly.Ev;
Ez utbbi esetben a get metdus hajtdik vgre, visszaadva (esetleg talaktva, feldolgozva)
az v rtkt. Ha szveges formban is (kettezerngy) meg szeretnnk kapni az vszmot,
kszthetnk mg egy property-t:
public string SzovegesEv
{
get
{
- 68 -
return Szoveg(ev);
}
}
A SzovegesEv property-n keresztl csak lekrdezhetjk az vet, mivel nincs set metdus.
Az eredmnyt viszont most szvegknt kapjuk meg, abban az esetben, ha ltezik a Szoveg
fggvny, amely az vszmot szvegg konvertlja.
A property-k azrt hasznosak, mert hasznlatukkal
bellthatjuk, hogy a bels adatok rhatk s olvashatk, csak olvashatk vagy csak
rhatk legyenek,
a get s set metdusok ellenrz, talakt, feldolgoz kdok beiktatst is
lehetv teszik,
adatknt lekrdezhetnk olyan adattagokat, amelyek bels adattagknt esetleg nem is
lteznek,
a get metdus vgl is brmilyen szmtsi, feldolgozsi mvelet eredmnyt
visszaadhatja.
- 69 -
9 Grafika
A C# krnyezet hatkony eszkzket knl grafikk ksztsre. A rajzols els rnzsre
nem tnik egyszernek, de nhny plda utn knnyen ttekinthetv vlik.
Windows rendszerben mindenrt, amit a kpernyre rajzolunk a GDI (Graphics Device
Interface) felels. A windows-os programok, s maga a Windows is ezen a kdon keresztl
rajzolja a szvegeket, vonalakat, grafikkat, stb. a kpernyre. A GDI kzvetlen kapcsolatban
ll a grafikus krtya meghajt programjval, s eldnti, hogy a kvnt rajz hogyan jelenthet
meg legjobban a rendelkezsre ll grafikus eszkzn. Pldul, ha a grafikus krtyn
belltott sznmlysg kisebb a megjelentend grafika sznmlysgnl, a GDI gondoskodik
az optimlis helyettest sznek megvlasztsrl. A programoznak ezrt nem kell azzal
trdnie, hogy milyen a rendelkezsre ll grafikus megjelent eszkz.
A C# kd a Graphics osztlyon keresztl kommunikl a GDI-vel.
9.1 A Graphics osztly
Mieltt elkezdennk rajzolni, ltre kell hoznunk egy Graphics osztly egy pldnyt. A
kvetkez pldkban a jobb ttekinthetsgrt az osztlyok pldnyit magyar nvvel lttuk el.
a Szerencsre minden grafikus windows vezrl automatikusan rkli a CreateGraphics()
metdust, melyen keresztl hozz tudunk frni a vezrl grafikus rszhez.
Pldnak hozzunk ltre az rlapon egy gombot, s kezeljk le a kattints esemnyt! Az
esemnyhez rendeljk a kvetkez kdot:
private void button1_Click(object sender, EventArgs e)
{
Bitmap kep;
kep = new Bitmap(@"c:\kp.jpg");
Graphics grafika;
grafika = this.CreateGraphics();
grafika.DrawImage(kep,0,0);
}
1. Az els kt sor ltrehozz a Bitmap osztly egy pldnyt kep nven, majd a
konstruktornak paramterknt tadjuk a betltend kp elrsi tvonalt.
2. Ezutn hozzuk lte a Graphics osztly egy pldnyt grafika nven. Grafika nev
objektumunkhoz most rendeljk hozz az aktulis rlap (this) fellett. Itt az rlap
helyett vlaszthatnnk brmely vezrlt az rlapon pl:
grafika = this.TextBox1.CreateGraphics();
- 70 -
3. Ezutn mr csak a kp felrajzolsa marad htra a DrawImage() metduson keresztl a
(0,0) koordintj ponttl. A koordintarendszer origja a bal fels sarokban van, a
tengelyek jobbra, illetve lefel mutatnak.
A plda szemlletes, de nem mkdik tkletesen. Ha a Windows-nak jra kell rajzoltatnia
ablakunkat, az ltalunk elhelyezett grafikt nem fogja jrarajzolni. Ha letesszk az ablakot a
tlcra, majd vissza, a grafika eltnik. Ugyanez trtnik, ha egy msik ablak egy idre fedi a
minket. Ha a fenti programsorokat az rlap Paint esemnyhez rendeljk, a rajzols
megtrtnik minden alkalommal, amikor az ablak tbbi elemt jra kell rajzolni.
9.2 A sznek (Color)
Sznvlasztsra hrom lehetsgnk knlkozik:
1. Vlasztunk a System.Drawing.Color felsorols elre definilt sznei kzl. Ezek a
sznek angol nevei: pl, Red, Green, DarkBlue. A teljes felsorols rtelmetlen lenne, a
komplett lista megjelentshez hasznljuk az automatikus kdkiegsztt! (A color.
legpelse utn ctrl+betkz billentyk lenyomsval megjelen lista.)
Pl: Color.Orange
2. A rendszersznek kzl vlasztunk. Az asztal belltsai kztt a felhasznl t tudja
lltani a Windows szneit. Ha azt szeretnnk, hogy grafiknk kvesse a felhasznl
belltsait, a System.Drawing.SystemColors felsorols szneire hivatkozzunk! (Pl:
Window alak szne ; Higlight szvegkijells httrszne ; HiglightText
szvegkijells szvegszne ; Desktop asztal szne , stb.)
Pl: SystemColors.WindowText
3. Sajt sznt definilunk, melynek megadjuk a piros, kk s zld sszetevit. A Color
osztly FromArgb() metdusa hrom byte tpus paramterrel rendelkezik, melyeken
keresztl bellthatjuk a hrom sszetevt. A piros sznt a kvetkezkppen adhatjuk
meg:
Pl: Color.FromArgb(255, 0, 0);
9.3 A toll (Pen)
Mg graphics osztly biztostja szmunkra a felletet, amire rajzolhatunk, szksgnk van egy
eszkzre, amivel rajzolunk. Hozzuk ltre a Pen osztly egy pldnyt, s lltsuk be tollunk
jellemzit: adjuk meg a vonal sznt, vastagsgt s stlust! A Pen konstruktornak els
paramtere a vonal szne, ezutn kvetkezik a vonal vastagsga.
- 71 -
Pen toll;
toll = new Pen(Color.DarkBlue, 3);
toll.DashStyle =
System.Drawing.Drawing2D.DashStyle.Dot;
A System.Drawing.Drawing2D.DashStyle felsorols tartalmazza a rendelkezsnkre ll
vonalstlusokat, ezek kzl vlaszthatunk. Ha nem adunk meg kln vonalstlust, a vonal
folytonos lesz.
rtk Lers
Dash
------
DashDot
----
DashDotDot
---
Dot
Solid
Folytonos
Custom
Egyedi. A Pen osztly rendelkezik olyan
tulajdonsgokkal, melyeken keresztl
egyedi vonalstlus is kialakthat. A
rszletekre itt nem trnk ki.
A rajzoljunk egy vonalat, ellipszist s egy tglalapot! A DrawEllipse() metdus utols ngy
paramtere az ellipszist befoglal tglalap bal-fels sarknak x s y koordintja, valamint a
tglalap szlessge s magassga:
Pen toll;
toll = new Pen(Color.DarkBlue, 3);
toll.DashStyle = System.Drawing.Drawing2D.DashStyle.Dot;
grafika.DrawLine(toll, 10, 10,100,100);
grafika.DrawEllipse(toll, 10, 10, 100, 100);
grafika.DrawRectangle(toll, 10, 10, 100, 100);
9.4 Az ecset (Brush)
Mg a toll a vonalak jellemzit tartalmazza, az ecset a kitltend alakzatok kitltsi
tulajdonsgait rja le. Hozzunk ltre egy sajt ecsetet s rajzoljunk vele:
Brush ecset;
ecset = new System.Drawing.SolidBrush(Color.DarkBlue);
grafika.FillEllipse(ecset,10,10,100,100);
9.4.1 Mints ecset s toll (TexturedPen)
Ltrehozhatunk olyan ecsetet, illetve tollat is, mely egy kpbl nyert mintval rajzol:
- 72 -
Bitmap kep;
kep = new Bitmap(@"c:\kp.jpg");
Brush mintasEcset;
mintasEcset = new System.Drawing.TextureBrush(kep);
Pen mintasToll = new Pen(MintasEcset, 30);
grafika.DrawRectangle(mintasToll, 10, 10, 100, 100);
9.5 Szveg rajzolsa
Szveg rajzolshoz kt objektumot is ltre kell hozni: egy bettpust s egy ecsetet.
Font betu;
betu = new System.Drawing.Font("Arial", 30);
Brush ecset;
ecset = new System.Drawing.SolidBrush(Color.Black);
grafika.DrawString("Hello", betu, ecset, 10, 10);
9.6 lland grafikk ltrehozsa az rlapon
Egyszerbb alakzatok rajzolsnl jrhat t, hogy a rajzolst az rlap objektum Paint
esemnyhez ktve minden alkalommal elvgezzk, amikor az rlap jrarajzolja magt.
Szmtsignyes grafikk esetn a fenti megolds nagyon lelasstja a programot. Ilyenkor
ltrehozhatunk egy Bitmap objektumot a memriban, amire egyszer elg megrajzolni a
grafikt. A Paint metdusban ezt az objektumot msoljuk az rlapra. (A fejlesztkrnyezet
ltal generlt kdvzban srgval emeljk ki sajt sorainkat.)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace Grafika6
{
public partial class Form1 : Form
{
Bitmap rajzFelulet;
public Form1()
{
InitializeComponent();
//Ltrehozzuk a bittrkpet a konstruktorban
//tadott mretben
rajzFelulet = new Bitmap(200,200);
- 73 -
//Ltrehozzun a Graphics osztly egy pldnyt,
//melyen keresztl rajzolhatunk a rajzfelletre
Graphics grafika;
grafika = Graphics.FromImage(rajzFelulet);
Brush ecset;
ecset = new System.Drawing.SolidBrush(Color.DarkBlue);
grafika.FillEllipse(ecset, 10, 10, 100, 100);
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics grafika;
//A grafika objektum rlapunk-ra (this) mutat
grafika = this.CreateGraphics();
//A DrawImage metdussal felrajzoljuk a rajzFelulet
//az rlapra
grafika.DrawImage(rajzFelulet, 0, 0);
//Megszntetjk a grafika objektumot
grafika.Dispose();
}
}
}
- 74 -
10 Tbbablakos alkalmazsok ksztse
A gyakorlatban majdnem minden grafikus alkalmazs tbb ablakot kezel. Ebben a fejezetben
megmutatjuk, hogyan kezelhetnk tbb ablakot egy projekten bell.
10.1 zenetablakok
A MessageBox osztly segtsgvel zenetablakot jelenthetnk meg, mely szveget,
gombokat s egy ikont tartalmazhat. A MessageBox Osztly j pldnyt nem hozhatjuk
ltre, az zenetet a statikus MessageBox.Show() metdus segtsgvel jelenthetjk meg. A
metdust tbb paramterezssel is hvhatjuk.
Ha csak egyetlen szveges paramtert adunk t, a megadott szveg s egy Ok gomb jelenik
meg:
Paramterezssel megadhatjuk az ablak nevt, a szksges gombokat s az zenet tpust
jelkpez ikont is:
MessageBox.Show("zenet.", "Ablak felirata",
MessageBoxButtons.OK, MessageBoxIcon.Information);
A MessageBoxButtons felsorols tagjaival adhatjuk meg, milyen gombok jelenjenek meg a
felugr ablakon. A gombok felirata a Windows nyelvi belltsaitl fgg. A lehetsges
kombincikat az albbi tblzatban foglaljuk ssze:
Tag neve Megjelen gombok
AbortRetryIgnore
MessageBox.Show("zenet.");
- 75 -
OK Ok
OKCancel Ok s Mgse
RetryCancel Ismt s Mgse
YesNo Igen s Nem
YesNoCancel Igen, Nem, Mgse
A MessageBoxIcon felsorols tagjaival az ablakon megjelen ikont llthatjuk be:
Tag neve Ikon
Asterisk
Error
Exclamation
Hand
Information
Question
Stop
Warning
A MessageBox.Show() metdus visszatrsi rtkbl megtudjuk, hogy a felhasznl melyik
gombbal zrta be az ablakot. A DialogResult felsorols tagjai azonostjk a lehetsges
gombokat (Abort, Cancel, Ingore, No, OK, Retry, Yes).
DialogResult valasz;
valasz = MessageBox.Show("Folytassuk?", "A folytats",
MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (valasz == DialogResult.Yes)
{
MessageBox.Show("J, folytatjuk");
}
else
{
MessageBox.Show("Akkor abbahagyjuk...");
}
- 76 -
10.2 Plda: Ktablakos alkalmazs
Pldnkban szerepeljen egy legrdl doboz (ComboBox), melynek elemeit az j szak
gombra kattintva bvthetjk. Ha a gombra kattintunk, ugorjon fel egy ablak, melyben
megadhatjuk az j szak nevt. A legrdl doboz csak akkor bvljn az j elemmel, ha az
ablakot OK gombbal zrtuk be.
1. Hozzunk ltre j projektet szaklista nven!
2. Tervezzk meg a frlapot az albbiak szerint:
3. Az rlapon szerepl komponensek tulajdonsgait lltsuk be az albbiak szerint:
4.
Komponens Text Name Properties
ComboBox cbSzakok
Button j szak btUjSzak
5. Ksztsk el a felugr rlapot, melyben megadhatjuk az j szak nevt:
- 77 -
6. Vlasszuk a project / Add Windows Form menpontot
7. A megjelen sablonok kzl a Windows Formra lesz szksgnk. Nevezzk az j
rlapot UjSzak-nak, majd kattintsunk az Add gombra!
8. Helyezznk el egy szvegdobozt (TextBox) s kt gombot (Button) az rlapon!
9. Az rlapon szerepl komponensek tulajdonsgait lltsuk be az albbiak szerint:
Komponens Text Name Properties
Label j szak neve
TextBox tbSzak Modifiers: public
Button Ok btOk DialogResult: OK
Button Mgsem btMegse DialogResult: Cancel
Form j szak UjSzak AcceptButton: btnOk
CancelButton: btnMegsem
FormBorderStyle:
FixedDialog
MaximizeBox: False
MinimizeBox: False
ShowInTaskbar: False
o Ha szvegdoboz modifiers tulajdonsgt public-ra lltjuk, kvlrl is lthatv
vlnak a szvegdoboz tulajdonsgai, gy ki tudjuk olvasni annak tartalmt.
o Nem mindegy, hogy a felhasznl Ok vagy Mgse gombbal zrja be az
ablakot. Ezt az informcit a gombok DialogResult, illetve a Form
AcceptButton s CancelButton tulajdonsgainak rtelem szer belltsval
tudjuk visszaadni a frlapnak. Ezeket lsd ksbb.
o Rendeljnk esemnyeket az Ok s a Mgsem felirat gombokhoz!
Mindkt gomb zrja is be az ablakot.
UjSzak.cs:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace KetAblak
{
public partial class UjSzak : Form
{
public UjSzak()
{
InitializeComponent();
}
private void btMegse_Click(object sender, EventArgs e)
- 78 -
{
Close();
}
private void btOk_Click(object sender, EventArgs e)
{
Close();
}
}
}
10. A szaklista rlap gombjhoz rendeljnk esemnyt, mely megnyitja az UjSzak rlapot.
Ha a felhasznl az Ok gombbal zrta be a felugr ablakot, adjuk hozz a legrdl
doboz tartalmhoz az j szakot!
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Xml;
namespace WindowsApplication2
{
public partial class Form1 : Form
{
public Szaklista()
{
InitializeComponent();
private void btUjSzak_Click(object sender, EventArgs e)
{
//frmUjSzak nven ltrehozzuk az UjSzak
//az UjSzak osztly egy pldnyt
UjSzak frmUjSzak = new UjSzak();
//a ShowDialog metdussal mejelentjk az j
// ablakot
if (frmUjSzak.ShowDialog() == DialogResult.OK)
{
cbSzakok.Items.Add(frmUjSzak.tbSzak.Text);
}
}
}
}
A ShowDialog() metdus hvsval az rlapot gynevezett modal ablakknt jelentjk
meg. Ez azt jelenti, hogy amg a felhasznl ezt az ablakot be nem csukja, az alkalmazs tbbi
ablaka inaktv. A ShowDialog() metdus csak akkor tr vissza, amikor a felugr ablakot a
felhasznl bezrta. (A ShowDialog() metdushvs utn szerepl utastsok csak a felugr
ablak bezrsa utn kerlnek feldolgozsra.) Visszatrsi rtkbl tudjuk meg, hogy a
- 79 -
felhasznl melyik gombbal csukta be az ablakot. A felugr ablakban megadott rtket csak
akkor adjuk hozz a cbSzakok legrdl doboz elemeihez, ha a felhasznl Ok-val zrta be
az ablakot.
A Form osztlynak ltezik egy Show() metdusa is, mely nem modal ablakknt jelenti meg
az rlapot, s azonnal visszatr. Ezrt visszatrsi rtkbl nem derl ki, hogy melyik
gombbal zrtuk be az ablakot.
- 80 -
11 Kivtelkezels
A C# programozsi nyelv a futsidej hibk kikszblsre alkalmas eszkzt is tartalmaz.
Ennek az eszkznek a segtsgvel a programjainkba hibakezel (ms nven kivtelkezel)
kdrszleteket is bepthetnk. A kivtelkezel eljrsoknak programjainkban az a lnyege,
hogy elkerljk a futskzben fellp hibk sorn felbukkan hibazeneteket, s megvdjk
programjainkat a vratlan lellstl.
11.1 Hibakezels
A programkszts sorn mg a gyakorlott programozknl is elfordul, hogy valamilyen
utastst, opertort vagy egy mveleti jelet nem a C# programnyelv szablyai szerint rt le. A
leggyakoribb hiba taln az, hogy az utasts vgrl lefelejtik a pontosvesszt. Ilyenkor a
program az elz utasts folytatsaknt kezdi el rtelmezni a kvetkez utastst, amelynek
eredmnye fordtsi hiba lesz. Ezek a hibk mivel a program fordtsa sorn keletkeznek, gy
megakadlyozzk a program futtatst.
A fordtprogram ltal szlelt hibkat szintaktikai hibknak nevezzk. Egy program addig
nem futtathat, amg szintaktikai hibt tartalmaz.
Elfordulhat olyan eset is, amikor a fordt csak valamilyen figyelmeztetst kld a
programr szmra. A figyelmeztetsek olyan hibra hvjk fel a programr figyelmt,
amelyek nem akadlyozzk meg a program futtatst, de esetleg rontjk programunk
hatkonysgt vagy esetleg csak rontjk a forrsprogram ttekinthetsgt (pl. deklarlunk
egy vltozt, de azt sehol nem hasznljuk a programunkban, azaz felesleges trhelyet
foglalunk!).
A szintaktikai hibk mellett a programunk logikai hibkat is tartalmazhat, de ez nincs
befolyssal a program futtatsra (a program fut csak bizonyos input adatokra nem azt az
outputot adja, amit kellene).
A program futsa sorn fellp (nem kls okbl szrmaz) hibkat szemantikai hibnak
nevezzk. Megelzskrl a programkdban kell megfelel ellenrz, hibakezel
utastsokkal gondoskodni.
11.2 A try s catch
A try parancs segtsgvel a programok egyes rszeihez tudunk hibakezel eljrsokat
rendelni, amelyek a futskzbeni hiba esetn a vezrlst az ltalunk megrt hibakezel
utastsokra adjk t, ezzel kikszblve a program lellst.
- 81 -
A catch parancs segtsgvel azokat a kivteleket tudjuk elfogni, amelyek a try blokkban
keletkeznek. Itt lehet meghatrozni, milyen utastsok kerljenek vgrehajtsra, s hogyan
kezeljk a felmerl hibkat A catch segtsgvel klnbz hibk egyidej kezelst is
meg lehet valstani.
Abban az esetben, ha nem hasznljuk a hibakezel eljrsokat, a programunk lell, s a
hibakezelst vagy az opercis rendszer vagy pedig a .NET rendszer veszi t. Ennek ltalban
az a kvetkezmnye, hogy klnbz (esetleg angol nyelv) hibazeneteket r a programunk
a kpernyre, amely les programok esetn elfogadhatatlan (nem vrhat el a
felhasznltl, hogy a programoz hanyagsga miatt megtanuljon legalbb alapszinten
angolul). Fokozottan rvnyes ez azokra a programokra, ahol a felhasznl adatbevitelt
valst meg, amint ez a kvetkez pldban trtnik.
int oszto=0;
double hanyados;
try
{
hanyados=10/oszto;
}
catch (ArithmeticException ar)
{
MessageBox.Show(Convert.ToString(ar));
}
Amennyiben az oszto vltoz rtke 0 a vgrehajts pillanatban, akkor a kivtelkezels
mkdsbe lp, a catch blokkban elkapjuk a hibt s kiratjuk zenetablakban az okt.
A fenti programrszletben a try utn kapcsos zrjelek kzt adjuk meg a hibt okozhat
programrszletet. A hiba abban az esetben lp fel, ha az oszto rtke 0. A catch
hibakezel utastsait is kapcsos zrjelek kz tesszk, ezzel jelezve a fordtnak, hogy hol
kezddik s hol vgzdik a hibakezels.
A catch blokkjban lehetsgnk van a klnbz okok miatt keletkezett hibk
sztvlasztsra, valamint a hiba tpusnak meghatrozsra is. A catch parancs a kivtelt
akr paramterknt is fogadhatja catch(Exception e). A paramterknt megadott vltoz
System.Exception tpus, amelybl ki lehet olvasni a hiba okt s a megfelel hibakezelt
indthatjuk el.
A kpernyn megjelen hibazenet az esetek tbbsgben nem tl beszdes, vagy ha igen
akkor gyakran tlsgosan sok, nehezen rthet informcit tartalmaz. Termszetesen a
hibakezels sorn nem az a clunk, hogy a felhasznlt hossz, szmra rtelmezhetetlen
zenetekkel terheljk, mert gy gyakorlatilag ugyanazt teszzk, mint az eredeti hibaablak
(amelyben megjelenik az eredeti hibazenet). Azt sem szabad elfelejteni, hogy a felhasznl
tulajdonkppen nem is nagyon tudja kezelni a program futsa kzben fellp hibkat, mg
akkor sem, ha kiratjuk a kpernyre a hiba valamennyi paramtert. A gyakorlatban sokkal
- 82 -
jobb megoldsnak szmt, ha megllaptjuk a hiba okt, majd pedig a megfelel hibakezels
aktivizlsval meg is szntetjk azt, anlkl hogy a felhasznlt nehz helyzetbe hoznnk.
A gyakorlatban ltalban a catch blokkok sorrendje sem mindegy. A helyes megkzelts
az, ha azokat a hibkat az ltalnos hibk el helyezzk, melyekre j esllyel szmtani lehet a
programban. Ilyen lehet pldul a felhasznli adatbekrsnl fellp hiba vagy a
matematikai mveleteknl elfordul nullval val oszts esete.
A kivtel tpusokat a System nvtrben (namespace) tallhatjuk meg.
11.3 A finally blokk
A programunk rsa sorn elfordulhat olyan eset is, hogy egy programrszlet hibs s
hibtlan mkds esetn is mindenkppen lefusson. A leggyakrabban a fjlkezelsnl tallunk
erre pldt, mivel a megnyitott fjlt hiba esetn is mindenkppen le kell zrni. Gondoljunk
bele milyen hibt okozhatna, ha a fjl bezrsa nlkl prblnnk jra megnyitni a fjlt. Az
ilyen tpus problmkra nyjthat megoldst a finally parancs.
A finally blokkban elhelyezett kd teht minden esetben lefut kivve, ha a program
vgzetes hibval ll meg - , fggetlenl az eltte keletkezett hibktl. A kvetkez pldban a
matematikai mveleteknl gyakran fellp nullval val oszts esett mutatjuk be a finally
blokk hasznlatval:
int oszto=0;
double hanyados;
try
{
hanyados=10/oszto;
}
catch (ArithmeticException ar)
{
MessageBox.Show(Convert.ToString(ar));
}
finally
{
MessageBox.Show("A program ezen rsze mindenkppen lefut");
}
11.4 Kivtelek feldobsa
A C# programozsi nyelv lehetsget ad a programoz ltal definilt kivtelek hasznlatra
is. A kivtelek dobsa a throw paranccsal trtnik.
throw (exception);
throw exception;
- 83 -
A program brmely szintjn dobhatunk a kivtelt a throw parancs segtsgvel, s egy
tetszleges catch blokkal el is tudjuk kapni. Amennyiben nem kapjuk el sehol a
programunkban, akkor az a Main() fggvny szintjn is megjelenik, majd vgl az opercis
rendszer lekezeli a sajt hibakezel eljrsval, ami persze a legtbbszr a programunk
lellsval jr.
11.5 Checked s unkchecked
A C# programozsi nyelv tartalmaz kt tovbbi parancsot a kivtelek kezelsre s a hibk
javtsra. Az egyik a checked a msik pedig az unchecked parancs. Amennyiben az
rtkadskor a vltozba olyan rtket kvnunk elhelyezni, amely az adott vltoz
rtktartomnyban nem fr el, OverflowException hibval ll meg a programunk.
Szerencss esetben az ilyen jelleg hibkat el tudjuk kapni, a megfelel catch{} blokk
alkalmazsval, de az unchecked parancs hasznlatval megakadlyozhatjuk a kivtel
keletkezst is, mivel ilyen esetben elmarad a hibaellenrzs.
unchecked
{
byte a=300;
}
A fenti pldban a byte tpus vltoz maximum 255-ig tud rtket trolni. Az rtkads
ennek ellenre megtrtnik, s a vltozba bekerl a csonktott rtk, persze csak akkora,
amekkora mg elfr benne.
A checked alkalmazsval pontosan az elbbi folyamat ellenkezjt rhetjk el. Az
ellenrzs mindenkppen megtrtnik, s kivtel keletkezik a hiba miatt.
A checked s unchecked parancsok nem csak blokknt hasznlhatak, hanem egy
kifejezs vagy rtkads vizsglatnl is. Ekkor a kvetkez alakban rhatjuk ket:
checked(kifejezs, mvelet, rtkads);
unchecked(kifejezs, mvelet, rtkads);
A bemutatott formban csak a zrjelek kz rt kifejezsekre, vagy egyb mveletekre
vonatkoznak. Alaprtelmezs szerint a checked llapot rvnyesl a programokban
tallhat minden rtkadsra s mveletre. Csak nagyon indokolt esetekben hasznljuk ki az
unchecked nyjtotta lehetsgeket, mert knnyen okozhatunk vgzetes hibkat a
programjainkban.
A kivtelkezels fejezetben lertak alapjn knnyen belthatjuk, hogy a hibakezels illetve a
kivtelek kezelse nagyon fontos s hasznos lehetsg a C# programozsi nyelvben. Ezek
nlkl nehz lenne elkpzelni hibtlanul mkd programokat. Termszetesen meg kell
vallanunk, hogy a kivtelkezelst alkalmaz programok sem tkletesek, de j esly van arra,
- 84 -
hogy programunk nem ll le vgzetes hibval s nem kesertik sem a programoz, sem pedig
a felhasznlk lett.
11.6 Plda: Hibakezels a msodfok egyismeretlenes egyenlet kapcsn
Pldnkban szerepeljen hrom szvegdoboz (TextBox), amelyben a felhasznl a msodfok,
majd az elsfok vgl pedig a konstans tag egytthatjt adhatja meg. Ha a Megolds
gombra kattintunk, ugorjon fel egy zenetablak, melyben a program kirja a felhasznl ltal
megadott msodfok egyenlet gykeit, amennyiben ez lehetsges. Ha 0-val val oszts
trtnik, gy errl tjkoztatjuk a felhasznlt az zenetablakban.
A kilps gombra kattintva az alkalmazsunk fejezze be a program futtatst!
1. Hozzunk ltre j projektet Masodfoku nven!
2. Tervezzk meg az rlapot az albbiak szerint:
3. Az rlapon szerepl komponensek tulajdonsgait lltsuk be az albbiak szerint:
Komponens Text Name
Form Msodfok egyenlet frmMasodfoku
Label Krem a msodfok tag egytthatjt! lblMasodfoku
Label Krem az elsfok tag egytthatjt! lblElsofoku
Label Krem a konstanstag egytthatjt! lblKonstans
TextBox 3 txtMasodfoku
TextBox 6 txtElsofoku
- 85 -
TextBox 12 txtKonstans
Button Megolds btnMegold
Button Kilps btnKilepes
Amennyiben a gyknk eredmnye vgtelen, ami 0-val val oszts esetn lp fel, akkor
kivtelt dobunk throw new DivideByZeroException(), melyet a catch() rszben
kapunk el s kezelnk le. A felhasznlt zenetablakban tjkoztatjuk a nullval val oszts
kvetkeztben fellp hibrl!
4. Masodfoku.cs:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace Masodfoku
{
public partial class frmMasodfoku : Form
{
public frmMasodfoku()
{
InitializeComponent();
}
private void btnKilepes_Click(object sender, EventArgs e)
{
Close();
}
private void btnMegold_Click(object sender, EventArgs e)
{
int a = int.Parse(txtMasodfoku.Text);
int b = int.Parse(txtElsofoku.Text);
int c = int.Parse(txtKonstans.Text);
double gyok1, gyok2;
try
{
gyok1 = -b + Math.Sqrt(b * b - 4 * a * c) / (2 * a);
gyok2 = -b - Math.Sqrt(b * b - 4 * a * c) / (2 * a);
if (gyok1.ToString() == "vgtelen")
throw new DivideByZeroException();
else
MessageBox.Show("Gyk1=" + gyok1 + "Gyk2=" + gyok2);
}
catch (DivideByZeroException divex)
{
MessageBox.Show("A msodfok tag egytthatja=0");
}
}
}
}
- 86 -
12 llomnykezels
A C# nyelv programozsa sorn elssorban a hagyomnyos C-nyelvbl megismert
fjlkezelsi technikit szoks hasznlni. Abban az esetben, ha a fjl megnyitsakor valamilyen
hiba lp fel, akkor a programunk tbbnyire valamilyen hibazenettel lell. A C# programozsi
nyelv persze lehetv teszi az llomnykezels sorn a be- s kiviteli mveleteknl fellp
mveletek hiba ellenrzst. Ezzel a rsszel itt nem kell foglalkoznunk, hiszen a
kivtelkezelsnl lertak itt is rvnyesek.
A programozsi nyelvekben az llomnyokat tartalmuk alapjn szveges (text), tpusos s
tpusnlkli fjlok csoportjra osztjuk. A szveges fjlokat soros, mg a msik kettt soros s
kzvetlen elrssel egyarnt elrhetjk.
A szmtgpen az opercis rendszer feladati kz tartozik a fjlrendszer tmogatsa s a
fjlok elrsnek biztostsa. Az llomnyok tartalmnak elrshez a programozsi nyelvtl
s az opercis rendszer fajtjtl fggetlenl mindig ugyanazokat a fbb lpseket kell
vgrehajtani. Nzzk meg melyek ezek!
Elkszletek
Az llomny megnyitsa
Az llomny tartalmnak feldolgozsa fjlmveletekkel (rs, olvass, pozicionls)
A szksges mveletek elvgzse utn az llomny lezrsa
Fjlkezels, llomny fajtk
Szveges
Binris
Xml
12.1 Szveges llomnyok kezelse
Fel kell hvni a figyelmet mg arra is, hogy fjlkezels sorn az llomny elejre be kell
szrnunk a kvetkez sort, mert csak ezutn lesz kpes programunk a fjlok kezelsre.
using System.IO;
12.1.1 Szveges s binris fjlok rsa, bvtse, olvassa
A kvetkez pldban a c:\ knyvtrban lv teszt.txt fjlt hozzuk ltre a
File.CreateText metdus segtsgvel, amennyiben mg nincs ilyen nev fjl a
knyvtrban, ha igen, akkor nem trtnik semmi.
string utvonal = @"c:\teszt.txt";
if (!File.Exists(utvonal)) //ha nem ltezik a fjl az adott knyvtrban,
- 87 -
csak akkor r bele
{
using (StreamWriter sw = File.CreateText(utvonal)) //Ltrehoz egy
szvegfjlt rsra
{
sw.WriteLine("Szia!"); //Hello szveg rsa a fjlba
sw.WriteLine("n vagyok az"); //And szveg rsa a fjlba
sw.WriteLine("Megismersz?"); //Welcome szveg rsa a fjlba
}
}
A kvetkez rszben mr ellenrzs nlkl runk a fjlba a File.AppendText metdus
segtsgvel. Amennyiben a fjl nem ltezik akkor ltrehozsra kerl, ezrt nem szksges az
ellenrzs, ha pedig ltezik akkor megmarad a fjl tartalma s a megadott rsszel kibvl az
llomny a vgn.
using (StreamWriter sw = File.AppendText(utvonal))
{
sw.WriteLine("Ezt mr");
sw.WriteLine("ellenrzs nlkl");
sw.WriteLine("rtam a fjlba!!!");
}
Ebben a programrszletben egy fjlt nyitunk meg olvassra a File.OpenText metdus
segtsgvel s addig olvasunk belle, amg null rtket nem olvasunk. A beolvasott
adatokat kiratjuk zenetablakban a kpernyre.
string utvonal = @"c:\teszt.txt";
using (StreamReader sr = File.OpenText(utvonal))
{
string s = "";
while ((s = sr.ReadLine()) != null)
{
MessageBox.Show(s);
}
}
12.1.2 Binris fjlok rsa, olvassa
Az elz rszben mr szltunk a szveges llomnyok kezelsrl. Vannak azonban olyan
esetek, amikor egyszerbb lenne a munknk, ha nem kellene szveges llomnybl illetve
llomnyba konvertlni az adatainkat (pl. szmok kezelse sorn). Elfordulhat olyan eset is,
hogy nem praktikus a trolshoz szveges llomnyokat hasznlnunk, mert egy kls
egyszer kis szvegszerkeszt programmal meg lehet nzni a tartalmt (pl. jelszavak
trolsnl, persze lehet kdolni ket, de ez mr jabb programozsi problmkat vet fel).
Az ilyen jelleg problmk feloldsra talltk ki a binris llomnyokat, amelyek tartalmt
nem lehet szvegszerkeszt programokkal megtekinteni illetve lehet bennk kzvetlenl
szmokat trolni, mindenfle konverzi nlkl. A binris adatok jellemzje, hogy megtartjk
az adattpus eredeti trolsi formjt, azaz nem alaktjk szvegg.
- 88 -
A kvetkez kis pldaprogramunkban 10 darab egsz szmot trolunk:
FileStream File = new FileStream(args[0], FileMode.CreateNew);
BinaryWriter bw = new BinaryWriter(File);
for (int i = 0; i < 10; i++)
{
bw.Write(i);
}
bw.Close();
File.Close();
A 10. tblzatban a FileMode lehetsges rtkeit mutatjuk be:
10. tblzat A FileMode rtkei
rtk Lers
Append Megnyit egy ltez fjlt vagy jat kszt.
Create j fjlt kszt. Ha a fjl mr ltezik, a program trli s j fjlt hoz
ltre helyette.
CreateNew j fjlt hoz ltre. Ha a fjl mr ltezik, kivtelt vlt ki, amit illik
lekezelnie a programoznak.
Open Megnyit egy ltez fjlt.
OpenorCreate Megnyit egy fjlt, vagy ha nem ltezik ltrehozza.
Truncate Megnyit egy ltez fjlt s trli a tartalmt.
A FileStream objektumot ltrehozsa utn azonnal fel kell ksztennk a binris adatok
fogadsra. Ezt gy tudjuk megoldani, hogy a BinaryWriter tpust kapcsoljuk az
objektumhoz.
FileStream File = new FileStream(FileMode.Create);
BinaryWriter bw = new BinaryWriter(File);
//A kvetkez lpsben az objektumba ktzvetlenl tudunk rni
adatokat, a Write tagfggvnnyel
bw.Write(i );
//Ha befejeztk az rst a fjlba, akkor gondoskodnunk kell a
megnyitott folyamok bezrsrl
bw.Close();
File.Close();
//Ha llomnyba kirtunk valamit, akkor a fjlbl olvasskor
elltesztels ciklust hasznlunk
FileStream File = new FileStream(FileMode.Open);
BinaryReader br = new BinaryReader(File);
lstLista.Items.Clear();
while (br.PeekChar() != -1)
{
lstLista.Items.Add(br.ReadInt32());
}
br.Close();
File.Close();
- 89 -
while (br.PeekChar() != -1) sorban olvassuk be a BinaryReader osztly PeekChar()
tagfggvnyvel az adatfolyam kvetkez karaktert. Ez a tagfggvny mindig a kvetkez
karaktert adja vissza, egy kivteltl eltekintve, ha elrtk az adatfolyam vgt, ebben az
esetben -1-et ad vissza. Az egsz rtkek beolvasshoz a ReadInt32() tagfggvnyt
tudjuk felhasznlni. A BinaryReader osztly rendelkezik a ReadInt32-hz hasonl
tagfggvnyekkel a tbbi egyszer adattpushoz is.
12.2 Plda: Vletlen szmok generlsa lottszmokhoz, szvegfjlba
Pldnkban szerepeljen hrom rdigomb (RadioButton) egy kontnerben (GroupBox),
amelyben a felhasznl kivlaszthatja, hogy ts, hatos vagy skandinv lotthoz kvn
vletlen szmokat generlni. Az els esetben 5 szmot generlunk 90-bl, a msodikban 6-ot
45-bl, mg a harmadikban 7-et 35-bl. A generlst a generl gombra kattintssal indtjuk,
melyeket egy ComboBox-ban jelentnk meg. A felhasznlnak lehetsge van szveges
fjlba kirni az adatokat igny szerint.
A kilps gombra kattintva az alkalmazsunk fejezze be a program futtatst!
1. Hozzunk ltre j projektet Veletlenfajlba nven!
2. Tervezzk meg az rlapot az albbiak szerint:
- 90 -
3. Az rlapon szerepl komponensek tulajdonsgait lltsuk be az albbiak szerint:
Komponens Text Name
Form Lottszmok frmLotto
GroupBox Lott gbLotto
RadioButton ts lott rgOtos
RadioButton Hatos lott rgHatos
RadioButton Skandinv lott rgHetes
ComboBox cmbSzamok
Button Generl btnGeneral
Button Fjlba r btnFile
Button Kilps btnKilepes
saveFileDialog1 saveFileDialog1
A feladat kdja tartalmaz egy eljrsszint metdust, amellyel a klnbz tpus
lottszmokbl tudunk vletlenszeren generlni megadott darabszmot. Kt bemen
paramtere van a tartomny felshatra, amelybl hzhatunk, valamint a kihzhat szmok
darabszma (mindkett egsz tpus), void lottoszamok(int szam,int darab).
4. Veletlenfajlba.cs:
using System;
using System.IO;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace Veletlenfajlba
{
public partial class frmLotto : Form
{
public frmLotto()
{
InitializeComponent();
}
private void btnFile_Click(object sender, EventArgs e)
{
saveFileDialog1.InitialDirectory = "c:\\";
saveFileDialog1.Filter =
"Szvegfjlok (*.txt)|*.txt|Mindenki
(*.*)|*.*";
saveFileDialog1.FileName = "";
if (saveFileDialog1.ShowDialog() ==
DialogResult.OK)
{
int i=0;
TextWriter tw =
File.CreateText(saveFileDialog1.FileName);
while (i < cmbSzamok.Items.Count)
{
- 91 -
cmbSzamok.SelectedIndex = i;
tw.WriteLine(cmbSzamok.SelectedItem);
i++;
}
tw.Close();
}
}
void lottoszamok(int szam,int darab)
{
byte veletlen;
System.Random rnd = new System.Random();
for (int i = 1; i <= darab; i++)
{
veletlen = (byte)rnd.Next(1, szam + 1);
cmbSzamok.Items.Add(veletlen);
}
}
private void btnGeneral_Click(object sender, EventArgs
e)
{
cmbSzamok.Items.Clear();
if (rgOtos.Checked == true)
lottoszamok(90,5);
if (rgHatos.Checked == true)
lottoszamok(45,6);
if (rgHetes.Checked == true)
lottoszamok(35,7);
}
private void btnKilepes_Click(object sender, EventArgs
e)
{
Close();
}
}
}
12.3 Knyvtrkezelsi utastsok
12.3.1 Knyvtr mveletek
j knyvtr ltrehozsa:
System.IO.Directory.CreateDirectory (string)
Knyvtr tartalmnak mozgatsa egyik (source) helyrl a msikra (destination):
System.IO.Directory.Move(source, destination);
res knyvtr tartalmnak trlse:
System.IO.Directory.Delete (string)
Alknyvtr ltrehozsa:
System.IO.DirectoryInfo.CreateSubdirectory (string)
- 92 -
Visszaadja az adott knyvtrban lv alknyvtrak neveit:
System.IO.Directory.GetDirectories (string)
A paramterben megadott knyvtr ltezst vizsglja
System.IO.Directory.Exists(string)
Visszaadja az aktulis alknyvtrat
System.IO.Directory.GetCurrentDirectory()
A gykrknyvtrat adja vissza
System.IO.Directory.GetDirectoryRoot(string);
A gpen tallhat logikai meghajtkat listzza ki
System.IO.Directory.GetLogicalDrives();
12.3.2 Plda: Knyvtr mveletek hasznlata
Pldnkban a knyvtrak kezelst mutatjuk be. A ltezik gombra kattintva a felhasznl
ellenrizheti lteik-e mr a proba nev knyvtr a c:\ meghajtn. A knyvtr ltrehozsa
gombbal ltre tudjuk hozni a tervezett knyvtrakat. A kvetkez gomb az aktulis
knyvtrat adja eredmnyl. Az alknyvtrak ltrehozsa gombbal az adott alknyvtrba
tudunk tovbbi knyvtrakat ltrehozni. A kvetkez gombra kattintva a mellete lv
listaablakban az adott knyvtr alknyvtrait tudjuk listztatni. A gykrknyvtr gombra
kattintva az adott tvonal gykrknyvtrt adja vissza. A meghajtk gombra kattintva a
mellette lv listaablakban a logikai meghajtkat listzza ki.
A kilps gombra kattintva az alkalmazsunk fejezze be a program futtatst!
1. Hozzunk ltre j projektet Konyvtarak nven!
- 93 -
2. Tervezzk meg az rlapot az albbiak szerint:
3. Az rlapon szerepl komponensek tulajdonsgait lltsuk be az albbiak szerint:
Komponens Text Name
Form Knyvtrak kezelse frmKonyvtar
ListBox lstKonyvtar
ListBox lstMeghajtok
Button Ltezik btnLetezik
Button Knyvtr ltrehozsa btnKonyvtar
Button Aktulis knyvtr btnAktualis
Button Alknyvtrak ltrehozsa btnAlkonyvtar
Button Knyvtr alknyvtrai btnAllista
Button Gykrknyvtr btnGyoker
Button Meghajtk btnMeghajtok
Button Kilps btnKilepes
4. Konyvtarak.cs:
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Globalization;
using System.IO;
namespace DirectoryTest
- 94 -
{
public class frmKonyvtar : System.Windows.Forms.Form
{
public frmKonyvtar()
{
InitializeComponent();
}
static void Main()
{
Application.Run(new frmKonyvtar());
}
private void btnLetezik_Click(object sender, EventArgs e)
{
//Knyvtr ltezsnek vizsglata.
if (Directory.Exists("c:\\proba"))
MessageBox.Show("c:\\proba knyvtr mr ltezik");
else
MessageBox.Show("c:\\proba knyvtr mg nem ltezik");
}
private void btnKonyvtar_Click(object sender, EventArgs e)
{
//Knyvtr ltrhozsa.
Directory.CreateDirectory("c:\\proba");
}
private void btnAktualis_Click(object sender, EventArgs e)
{
//Aktulis knyvtr lekrdezse.
MessageBox.Show("Az aktulis knyvtr" +Directory.
GetCurrentDirectory());
}
private void btnAlkonyvtar_Click(object sender, EventArgs e)
{
//Alknyvtrak ltrehozsa.
Directory.CreateDirectory("c:\\proba\\a\\1\\2\\3");
Directory.CreateDirectory("c:\\proba\\b");
Directory.CreateDirectory("c:\\proba\\c");
}
private void btnAlLista_Click(object sender, EventArgs e)
{
// Knyvtrban lv alknyvtrak listzsa.
lstKonyvtar.Items.Clear();
foreach (string s in Directory.GetDirectories("c:\\proba"))
lstKonyvtar.Items.Add(s);
}
private void btnGyoker_Click(object sender, EventArgs e)
{
// Gykr knyvtr lekrdezse.
MessageBox.Show(Directory.GetDirectoryRoot("c:\\proba\\aa\\11"));
}
private void btnMeghajto_Click(object sender, EventArgs e)
{
- 95 -
// A gpen tallhat meghajtk lekrdezse.
lstMeghajtok.Items.AddRange(Directory.GetLogicalDrives());
}
private void btnKilepes_Click(object sender, EventArgs e)
{
Close();
}
}
}
12.3.3 llomnymveletek
A kvetkez metdus a fjl attribtumt olvassa be:
File.GetAttributes(path1)
A kvetkez metdus a fjl attribtumt mdostja s a vltozsokat lltja be:
File.SetAttributes(path1, File.GetAttributes(path1) Or
FileAttributes.Hidden)
A kvetkez metdus a fjl teljes (abszolt) elrsi tvonalt adja meg:
fullPath = Path.GetFullPath(path1)
A kvetkez metdus a fjl nevt adja meg kiterjesztssel egytt:
result = Path.GetFileName(path1);
A kvetkez metdus a fjl kiterjesztst adja meg:
extension = Path.GetExtension(path1);
A kvetkez metdus a fjl kiterjesztsnek vltoztatsi lehetsgt nyjtja:
result = Path.ChangeExtension(f1, ".old")
Nzznk meg egy kdrszletet arra, hogyan lehet egy llomnyt egy msik knyvtrba
mozgatni illetve msolni, kzben az llomny trlse is bemutatsra kerl, abban azt esetben
ha abban a knyvtrban ltezik ilyen nev llomny:
Move(f1,f2) az adott knyvtrban lv f1 fjl mozgatsa f2-be
Delete(f1) az adott knyvtrban lv f1 fjl trlse
Copy(f1,f2)- az adott knyvtrban lv f1 fjl msolsa f2-be
CopyTo(f1,f2) az adott knyvtrban lv f1 fjl msolsa f2-be, de nem
engedi meg az ott lv ugyanilyen nev fjl fellrst
Exists(f1) megvizsglja, hogy az adott knyvtrban ltezik-e az f1 fjl
string utvonal1 = @"c:\proba\teszt.txt";
string utvonal2 = @"c:\proba\teszt.txt";
string utvonal3 = @"c:\proba\teszt.txt";
string teljesutvonal, eredmeny, kiterjesztes;
- 96 -
if (!File.Exists(utvonal1))
{
using (FileStream fs = File.Create(utvonal1)) {}
}
//ha ltezik ebben a knyvtrban ilyen nven fjl akkor trli
if (File.Exists(utvonal2))
File.Delete(utvonal2);
//ha ltezik ebben a knyvtrban ilyen nven fjl akkor trli
if (File.Exists(utvonal3))
File.Delete(utvonal3);
// a fjl mozgatsa egyik knyvtrbl a msikba
File.Move(utvonal1, utvonal2);
MessageBox.Show("tvonal1="+utvonal1+" tvonal2="+utvonal2);
// a fjl msolsa egyik knyvtrbl a msikba
File.Copy("tvonal1="+utvonal1+" tvonal3="+utvonal3);
MessageBox.Show(utvonal1,utvonal3);
A kvetkez kdrszletben kiratjuk egy adott knyvtrban tallhat llomnyok neveit s
mreteit:
GetFiles() az adott knyvtrban lv fjlok listjt lltja el
Name az adott knyvtrban lv fjlok nevei
Length - az adott knyvtrban lv fjlok mretei
DirectoryInfo di = new DirectoryInfo("c:\\");
lstFiles.Items.Clear();
FileInfo[] fiArr = di.GetFiles();
lstLista.Items.Add(di.Name);
lstLista.Items.Clear();
foreach (FileInfo f in fiArr)
lstLista.Items.Add(f.Name +" "+ f.Length);
- 97 -
13 XML alapok s XML fjlok kezelse
13.1 Az XML nyelv
Az Extensible Markup Language (XML, kiterjeszthet ler nyelv) ltalnos cl ler nyelv
specilis cl ler nyelvek ltrehozsra. A ler nyelvek adatok strukturlt lersra
szolglnak, nem programozsi nyelvek. Strukturlt adatok alatt olyan dolgokat rtnk, mint
tblzatok, cmjegyzkek, 2D vagy 3D rajzok, stb.
Az XML bemutatsra lssunk egy pldt:
<?xml version="1.0" encoding="UTF-8"?>
<Recept nv="kenyr" elk_id="5 perc" sts_id="3 ra">
<cm>Egyszer kenyr</cm>
<sszetev mennyisg="3" egysg="cssze">Liszt</sszetev>
<sszetev mennyisg="10" egysg="dekagramm">leszt</sszetev>
<sszetev mennyisg="1.5" egysg="cssze">Meleg vz</sszetev>
<sszetev mennyisg="1" egysg="teskanl">S</sszetev>
<Utastsok>
<lps>Keverj ssze minden sszetevt, aztn jl gyrd ssze!</lps>
<lps>Fedd le ruhval s hagyd pihenni egy rig! </lps>
<lps>Gyrd ssze jra, aztn ssd meg a stben!</lps>
</Utastsok>
</Recept>
Az XML nem hatrozza meg a nyelv jellelem kszlett, ez teljes mrtkben kiterjeszthet -
innen ered a neve is. A jellelem kszlet meghatrozsval kialakthatjuk sajt
adatstruktrnk lersra alkalmas XML alap ler nyelvnket.
Lteznek XML-re pl szabvnyostott lernyelvek is, pldul:
XHTML: HTML-hez hasonl, XML alap dokumentum ler nyelv
SVG (Scalable Vector Graphics): 2D vektorgrafikk lersra
<svg>
<g style="fill-opacity:0.7;">
<circle cx="1cm" cy="1cm" r="1cm" style="fill:red" />
<circle cx="2cm" cy="1cm" r="1cm" style="fill:blue" />
<circle cx="1.5cm" cy="2cm" r="1cm" style="fill:green"/>
</g>
</svg>
Ahhoz, hogy egy XML dokumentum helyes legyen, kt kvetelmnynek kell megfelelnie:
- 98 -
1. Helyes szintaktika
2. rvnyessg
13.1.1 Az XML dokumentum szintaktikja
1. Az dokumentum els sora az XML deklarci. Megadsa nem ktelez. Informcit
tartalmazhat a hasznlt XML verzirl (ltalban 1.0) s a karakterkdolsrl.
<?xml version="1.0" encoding="UTF-8"?>
2. A dokumentum tovbbi rsze egymsba gyazott csomkbl (node) ll, melyeknek
lehetnek tulajdonsgai (attribute) s tartalma (content). Egy elem ltalban egy nyit
tag-bl (start tag) s egy zr tag-bl (end tag), valamint a kzttk lv szvegbl s
ms node-okbl ll.
3. A nyit tag egy nv, melyet < > jelek kz ruk. Pl: <Recept>. A tag nv nem
tartalmazhat szkzt, a nyelv klnbsget tesz a kis s a nagy betk kztt. A zr
tag egy / jelbl s a nyit tag-ben is szerepl nvbl ll, pl: </Recept>
4. A node tulajdonsgai - ha vannak - a nyit tag-ben kerlnek felsorolsra. Minden
tulajdonsg szimpla vagy dupla idzjelek kz kerl.
<Recept nv="kenyr" elk_id="5 perc" sts_id="3 ra">
5. A nyit s a zr tag-ek kz kerl az node tartalma (content).
<sszetev mennyisg="3" egysg="cssze">Liszt</sszetev>
6. Ha egy node-nak nincs tartalma, res node-nak nevezzk. res node-oknl
hasznlhatunk nzr tag-eket:
<Szakcs nv=Szakcs Gyula />
Ez az rsmd ekvivalens a kvetkezvel:
<Szakcs nv=Szakcs Gyula></Szakcs>
7. A dokumentum egy gykrelemet kell tartalmazzon. Az XML deklarci s a
feldolgozsra vonatkoz utastsok megelzhetik a gykrelemet. Pldnkban a
gykrelem a Recept.
8. Az XML dokumentum tartalmazhat megjegyzseket is a kvetkez formtumban:
<!- a jelek kz rt szveg nem kerl feldolgozsra -->
- 99 -
9. Ha a dokumentum nem helyesen formzott, az XML rtelmeznek meg kell tagadnia
a feldolgozst.
A fentiekbl kvetkezik, hogy minden nyit tag-et le kell zrni egy zr tag-el. A tag-ek fa-
szeren egymsba gyazhatk, de tfeds nem lehet kzttk.
helytelen:
<Plda1><Plda2></Plda1><Plda2>
helyes:
<Plda1>
<Plda2>
</Plda2>
</Plda1>
13.1.2 Az XML dokumentum rvnyessge
Azon tl hogy az XML dokumentum formailag helyes, meg kell feleljen egy adott smnak.
Ez azt jelenti, hogy csak olyan tag-eket s attribtumokat tartalmazhat, melyeket az XML fjlt
feldolgoz program felismer. Ez lehet szabvnyostott XML alap formtum, mint pldul a
vektorgrafikk lersra alkalmas SVG (Scalable Vector Graphics) nyelv, de lehet ltalunk
meghatrozott formtum is.
Megjegyzs: Az XML dokumentumokhoz kszthetnk DTD (Document Type Definition)
kdot, mely az XML fjl rvnyessgt ellenrzi. A DTD kd kerlhet az XML fjl elejre,
de kls fjlbai is helyet foglalhat. A DTD-ben megadhatjuk, mely milyen node-oknak
milyen gyermekei s tulajdonsgai lehetnek. Elrhatunk ktelez s opcionlis
tulajdonsgokat. Ha DTD-t hasznlunk, sem az XML szerkeszt, sem a ft feldolgoz
program nem enged a megadott smnak ellentmond node-okat s tulajdonsgokat
ltrehozni. A DTD ismertetsre terjedelmi okok miatt itt nem trnk ki.
Bvebb informcirt a kvetkez honlapot rdemes felkeresni:
http://en.wikipedia.org/wiki/Document_Type_Definition
13.1.3 Az XML dokumentumok transzformcija
Az XLST (Extensible Stylesheet Language Transformations) egy nyelv, mely XML
dokumentumok talaktsnak szablyait rja le. Az talakts sorn az eredeti dokumentum
alapjn, az XSLT dokumentumban meghatrozott szablyok szerint, egy j dokumentumot
hozunk ltre. Az eredeti dokumentum vltozatlan marad. Az eredmnyl kapott dokumentum
lehet XML, szveges, vagy akr HTML formtum is. Az talaktst egy XSLT feldolgoz
program vgzi.
- 100 -
Bvebb informcit a kvetkez lapon tallunk:
http://en.wikipedia.org/wiki/XSLT
13.1.4 Az XML elnyei
Ember s gp szmra egyarnt knnyen olvashat, szveges formtum.
A legtbb fejlesztkrnyezethez rendelkezsre llnak objektumosztlyok, melyek
segtsgvel knnyedn tudjuk kezelni az XML formtumban lert adatokat. gy XML
hasznlatval sok unalmas s felesleges programozsi munktl kmlhetjk meg magunkat.
13.2 XML fjlok feldolgozsa C# krnyezetben
XML fjlok feldolgozsra tbbfle lehetsg van, terjedelmi okok miatt ezek kzl egyet
mutatunk be.
Dolgozzuk fel az albbi egyszer XML fjlt:
<?xml version="1.0" encoding="utf-8" ?>
<gykr>
<gyermek1>
<unoka1> n unoka1 vagyok, gyermek1 leszrmazottja. </unoka1>
<unoka2> n unoka2 vagyok, gyermek1 leszrmazottja. </unoka2>
</gyermek1>
<gyermek2>
<unoka1> n unoka1 vagyok, gyermek2 leszrmazottja. </unoka1>
Kimen
Fjl
(nem felttlen
XML)
Bemen
XML
Fjl
XLST
feldolgoz
XLST
szablyok
- 101 -
<unoka2> n unoka2 vagyok, gyermek2 leszrmazottja. </unoka2>
</gyermek2>
</gykr>
A dokumentum tartalmaz egy gykrelemet, melynek neve gykr. (Ahogy azt mr
korbban lttuk, minden XML dokumentum csak egyetlen gykrelemet tartalmazhat.)
A gykrelemnek kt gyermeke (childnode-ja) van: gyermek1 s gyermek2.
gyermek1-nek is van kt gyermeke (childnode-ja): unoka1 s unoka2.
13.2.1 XML fjl betltse
Az XML dokumentumok feldolgozsra az XmlDocument objektumosztly szolgl. Hozzunk
ltre belle egy pldnyt peldaXML nven. A peldaXML.Load() metdusval tlthetnk be
egy XML fjlt.
XmlDocument peldaXML = new XmlDocument();
peldaXML.Load("pelda.xml");
13.2.2 A fa gai, mveletek node-okkal
Az egyes node-ok elrsre nzznk nhny egyszer pldt! (Az els elemre mindig nulls
indexel hivatkozunk.)
textBox1.Text = peldaXML.DocumentElement.InnerXml;
textBox2.Text = peldaXML.DocumentElement.ChildNodes[0].InnerXml;
textBox3.Text=
peldaXML.DocumentElement.ChildNodes[0].ChildNodes[1].InnerXml;
A plda futtatsa utn a szvegdobzokban a kvetkez jelenik meg:
TextBox1 a gykrelemen bell lv XML kdot tartalmazza:
<gyermek1><unoka1> n unoka1 vagyok, gyermek1 leszrmazotta.
</unoka1><unoka2> n unoka2 vagyok, gyermek1 leszrmazotta.
</unoka2><unoka3 neve="Anna">Legkisebb unoka
:)</unoka3></gyermek1><gyermek2><unoka1> n unoka1 vagyok,
gyermek2 leszrmazotta. </unoka1><unoka2> n unoka2 vagyok,
gyermek2 leszrmazotta. </unoka2></gyermek2>
TextBox2 a gykrelem els gyermekt tartalmazza:
<unoka1> n unoka1 vagyok, gyermek1 leszrmazotta.
</unoka1><unoka2> n unoka2 vagyok, gyermek1 leszrmazotta.
</unoka2><unoka3 neve="Anna">Legkisebb unoka :)</unoka3>
- 102 -
TextBox3 a gykrelem els gyermeknek msodik gyermeke:
n unoka2 vagyok, gyermek1 leszrmazotta.
13.2.3 j node beszrsa s a fjl mentse.
Bvtsk az XML ft egy j elemmel!
XmlElement ujElem;
ujElem = peldaXML.CreateElement("unoka3");
ujElem.InnerText = "Legkisebb unoka :)";
ujElem.SetAttribute("neve", "Anna");
peldaXML.DocumentElement.ChildNodes[0].AppendChild(ujElem);
peldaXML.Save("pelda.xml");
A program futtatsa utn az XML fjl:
<?xml version="1.0" encoding="utf-8"?>
<gykr>
<gyermek1>
<unoka1> n unoka1 vagyok, gyermek1 leszrmazottja. </unoka1>
<unoka2> n unoka2 vagyok, gyermek1 leszrmazottja. </unoka2>
<unoka3 neve="Anna">Legkisebb unoka :)</unoka3>
</gyermek1>
<gyermek2>
<unoka1> n unoka1 vagyok, gyermek2 leszrmazottja. </unoka1>
<unoka2> n unoka2 vagyok, gyermek2 leszrmazottja. </unoka2>
</gyermek2>
</gykr>
13.2.4 Node trlse a fbl
Ez a programsor trli gyemrek1-et, s annak gyermekeit a fbl:
peldaXML.DocumentElement.RemoveChild(peldaXML.DocumentElement.ChildNodes[0]);
- 103 -
13.3 Plda XML fjl feldolgozsra
Pldnk hasonlt a tbbablakos alkalmazsok ksztse fejezet feladathoz. A klnbsg
annyi, hogy itt a legrdl doboz adatait XML fjlbl tltjk be. Az XML fjl s a lista
elemeit tudjuk bvteni s trlni is.
A lista elemeit az j szak gombra kattintva bvthetjk. Ha a gombra kattintunk, ablak
ugrik fel, melyben megadhatjuk az j szak nevt. A legrdl doboz csak akkor bvl az j
elemmel, ha az ablakot OK gombbal zrtuk be.
A szak trlse gomb mindig az ppen kivlasztott szakot trli. A vltozs azonnal mentsre
kerl az XML fjlba.
1. Hozzunk ltre egy j solutiont xml_prg nven!
2. Tervezzk meg a frlapot az albbiak szerint:
o Az rlapon szerepl komponensek tulajdonsgait lltsuk be az albbiak
szerint:
Komponens Text Name Properties
Label Szakok:
ComboBox cbSzakok
Button j szak btUjSzak
Button Szak trlse btSzakTorles
3. Csatoljunk XML fjlt a Solution-hoz
o A File / New / File menpont alatt hozzunk ltre j XML dokumentumot!
o Az XML szerkeszt ellenrzi dokumentumunk szintaktikai helyessgt.
Ksztsnk el a kvetkez dokumentumot:
<?xml version="1.0" encoding="utf-8"?>
<szakok>
<szak>Matek</szak>
<szak>Nmet</szak>
- 104 -
<szak>Spanyol</szak>
</szakok>
o Mentsk el XML dokumentumunkat szakok.xml nven. Ha a programban
kln elrsi tvonal nlkl hivatkozunk az XML fjlra, alaprtelmezsben
abban a knyvtrban fogja keresni, ahonnt magt a programot futtatjuk. Ez
valsznleg a
My Documents\Visual Studio 2005\Projects\xml_prg\ xml_prg \bin\Debug
knyvtr lesz. Ha nem akarunk az elrsi tvonal megadsval kln bajldni,
mentsk ide a szakok.xml-t.
o Ha a szakok.xml aktv a szerkesztben. a File menben a Move szakok.xml
into menponttal hozzadhatjuk solutionunkhoz a fjlt. Ezutn a Solution
explorer-ben is megtalljuk.
4. Az alkalmazs indtsakor automatikusan tltsk fel a legrdl dobozt az XML fjl
adataival!
o Az XML fjlokat feldolgoz objektumosztlyok kln osztlyknyvtrban
szerepelnek. Hasznljuk a system.Xml knyvtrat.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Xml;
o Bvtsk az rlapot ler objektumosztlyt XmlDocument osztly szakokXML
nev pldnyval:
namespace KetAblakXML
{
public partial class Form1 : Form
{
//Bvitsk az objektumosztlyt szakokXML
tulajdonsggal
XmlDocument szakokXML;
public Form1()
{
InitializeComponent();
}
- 105 -
}
o Az rlap konstruktorban nyissuk jrjuk be az XML fjlt, s a szak nev
node-ok tartalmval bvtsk a legrdl dobozok elemeit!
public Form1()
{
InitializeComponent();
//Hozzuk ltre a szakokXML-t,
//s tltsk be a szksges fjlt!
szakokXML = new XmlDocument();
szakokXML.Load("szakok.xml");
XmlNodeList lstSzakok =
szakokXML.DocumentElement.GetElementsByTagName("szak");
for (int i = 0; i < lstSzakok.Count; i++)
{
cbSzakok.Items.Add(lstSzakok[i].InnerText);
}
}
5. Ksztsk el a felugr rlapot, melyben megadhatjuk az j szak nevt:
o Vlasszuk a project / Add Windows Form menpontot
o A megjelen sablonok kzl a Windows Formra lesz szksgnk. Nevezzk
az j rlapot UjSzak-nak, majd kattintsunk az Add gombra!
o Helyezznk el egy szvegdobozt (TextBox) s kt gombot (Button) az
rlapon!
o Az rlapon szerepl komponensek tulajdonsgait lltsuk be az albbiak
szerint:
Komponens Text Name Properties
TextBox tbSzak Modifiers: public
Button Ok btOk DialogResult: OK
Button Mgsem btMegse DialogResult: Cancel
Form j szak UjSzak AcceptButton: btnOk
CancelButton: btnMegsem
- 106 -
FormBorderStyle:
FixedDialog
MaximizeBox: False
MinimizeBox: False
ShowInTaskbar: False
o Ha szvegdoboz modifiers tulajdonsgt public-re lltjuk, kvlrl is lthatv
vlnak a szvegdoboz tulajdonsgai, gy ki tudjuk olvasni annak tartalmt.
o Nem mindegy, hogy a felhasznl Ok vagy Mgsem gombbal zrja be az
ablakot. Ezt az informcit a gombok DialogResult, illetve a Form
AcceptButton s CancelButton tulajdonsgainak rtelem szer belltsval
tudjuk visszaadni a frlapnak. Lsd ksbb.
o Rendeljnk esemnyeket az Ok s a Mgsem felirat gombokhoz!
Mindkt gomb bezrja az ablakot.
6. UjSzak.cs:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace WindowsApplication2
{
public partial class UjSzak : Form
{
public UjSzak()
{
InitializeComponent();
}
private void btMegse_Click(object sender, EventArgs e)
{
Close();
}
private void btOk_Click(object sender, EventArgs e)
{
Close();
}
}
}
7. Szaklista rlap gombjhoz rendeljnk esemnyt, mely megnyitja az UjSzak rlapot.
Ha a felhasznl az Ok gombbal zrta be a felugr ablakot, adjuk hozz a legrdl
doboz tartalmhoz az j szakot!
- 107 -
o A ShowDialog() metdus hvsval az rlapot modal ablakknt jelentjk
meg. Ha ShowDialog() metdus OK rtkkel tr vissza, bvtsk a lista elemei
s az XML fjlt.
private void btUjSzak_Click(object sender, EventArgs e)
{
UjSzak frmUjSzak = new UjSzak();
if (frmUjSzak.ShowDialog() == DialogResult.OK)
{
//Bvtsk a legrdl doboz elemeit az j szakkal!
cbSzakok.Items.Add(frmUjSzak.tbSzak.Text);
XmlElement ujElemXML =
szakokXML.CreateElement("szak");
ujElemXML.InnerText = frmUjSzak.tbSzak.Text;
szakokXML.DocumentElement.AppendChild(ujElemXML);
//Mentsk lemere a bvtett XML dokumentumot!
szakokXML.Save("szakok.xml");
}
}
8. A trls gomb trlje ki a lista ppen kivlasztott elemt!
private void btSzakTorles_Click(object sender, EventArgs e)
{
//vltozban troljuk a legrdl dobozban
//kivlasztott elem sorszmt
int torlendo = cbSzakok.SelectedIndex;
//A kivlasztott elemet trljk a legrdl doboz
//elemei kzl
cbSzakok.Items.RemoveAt(torlendo);
//A megfelel Node-ot trljk az XML dokumentumbl
szakokXML.DocumentElement.RemoveChild(
szakokXML.DocumentElement.ChildNodes[torlendo]);
//A mdostott dokumentumot mentsklemezre!
szakokXML.Save("szakok.xml");
}
- 108 -
14 Az UML nyelv s fontosabb diagramtpusai
Az UML (Unified Modeling Language) egy igen elterjedt, szoftverrendszerek fejlesztsre
szolgl ltalnos cl vizulis modellez nyelv. Az UML egy olyan egysgestett grafikus
jellsrendszert hasznl, amely hrom korbbi technika, az OMT-2 (Object Modeling
Technique), az OOAD (Object-Oriented Analysis and Design) s az OOSE (Object-Oriented
Software Engineering) szintziseknt alakult ki 1995-tl kezdden, e hrom mdszer alkoti
(James Rumbaugh, Grady Booch s Ivar Jacobson) egyttmkdse eredmnyeknt. A
tudomny trtnetben ltalban a jelents eredmnyek megszletst komoly vajds elzi
meg, amely az UML esetben sok elmleti s gyakorlati szakember vekig tart
szisztematikus munkjt s felhalmozott alkalmazsfejlesztsi tapasztalatt jelentette. 1989 s
1994 kztt a modellez nyelvek s mdszerek szma kevesebb, mint 10-rl tbb mint 50-re
ntt. Az n. els genercis mdszerek kzl felttlenl meg kell emlteni a Coad/Yourdon, a
Shlaer/Mellor s a Fusion mdszert. A 90-es vek els felben megjelent,
szoftverfejlesztsrl szl tanknyvek ltalban az egyik vagy msik mdszert propagltk.
Ez az idszak az informatika trtnetbe mint a mdszerek hborja vonult be.
1996-ben jelent meg az UML 0.9, majd 1997-ben az 1.1 verzi. Ez utbbi megszletsnl
mr egy szleskr ipari konzorcium bbskodott, amelynek tagjai kztt volt az IBM, a HP,
a Microsoft, az Oracle, a DEC, a Texas Instruments s az Unisys, vagyis az informatikai piac
ht legbefolysosabb szereplje. Az els teljes vltozat, az UML 1.3 tnylegesen ipari
szabvnny vlt. Mr vek ta az UML 2.0 verzit hasznljk, de 2006-ban vrhat a 2.1
vltozat megjelense. A 2.0 verziban a diagramok szma 9-rl 13-ra ntt, s ms tekintetben
is jelents vltozsok jelentek meg.
Az UML teht egy ltalnos cl vizulis modellez nyelv, s nem egy programozsi nyelv.
Nem tudunk programot rni UML-ben, br sok CASE eszkz kpes UML diagramokbl Java,
C++ vagy C# kdot generlni. Br az UML maga nem egy szoftverfejleszt folyamat,
szorosan kapcsoldik az USDPhez (Unified Software Development Process), amely viszont
mr alkalmas rendszerek fejlesztsre. Az USDP is a Booch - Jacobson Rumbaugh tri
munkja, s gyakran RUP knt (Rational Unified Process) emlegetik. Az elnevezsben
szerepl Rational egy informatikai cg neve, ahol veken t egyttdolgozott az emltett
hrmas. A Rational cg termke a CASE eszkzk kztt piacvezet szerepet betlt
Rational Rose is. Magt a cget 2003-ban felvsrolta az IBM, de a mrkanv megmaradt.
Az UML nem ktdik egyetlen meghatrozott mdszertanhoz, hanem brmelyik ltez
mdszertannal (pl. OPEN) egytt hasznlhat. Egyebek mellett ez teszi az UML-t klnsen
npszerv a rendszerfejlesztk krben.
Az UML ltal hasznlt diagramtpusokat kt osztlyba szoks sorolni. Beszlhetnk
struktradiagramokrl, amelyek kz tartoznak az
- 109 -
osztly (class)
objektum (object)
komponens (component)
csomag (package) vagy alrendszer
sszettel (composite structure) diagramok
telepts (deployment)
valamint viselkedsi diagramokrl (szm szerint ht diagramtpusrl)
tevkenysg (activity)
hasznlati eset (use case)
llapotgp (state machine, korbbi verzikban state transition vagy state chart)
klcsnhats (interaction) diagramok.
Ez utbbi kategria az albbi ngy diagramtpus sszefoglal neve
szekvencia
kommunikci
klcsnhats-ttekints (interaction overview)
id (timing).
A struktradiagramok azt mutatjk meg, hogy a modellelemek (objektumok) hogyan
kapcsoldnak egymshoz.
Lssuk, mire alkalmasak s hasznlatosak ezek a diagramtpusok az UML-ben!
Az osztlydiagramok a modellben szerepl osztlyok s klcsnhatsaik (rkls,
aggregci, trsuls) lersra szolglnak. Mivel az osztly az objektum-orientlt technikk
egyik legfontosabb alapfogalma, ezrt az osztlydiagramok igen fontos szerepet jtszanak a
modellezsben. A legfontosabb jellemzje ennek a diagramtpusnak az, hogy a rendszer
statikus struktrjt rja le.
Az objektumdiagramokat a vizsglt rendszer objektumai s a kzttk egy adott
idpillanatban meglv kapcsolatok brzolsra hasznljuk, mint egy pillanatfelvtelt.
Ilykppen teht az osztlydiagramok specilis esetnek tekinthetjk ket, ezrt nem fogjuk az
objektumdiagramokat kln trgyalni. Egy objektumdiagram kevsb absztrakt, mint a
megfelel osztlydiagram.
Az UML-ben a komponensdiagramok az jrahasznlhat (reusable), bizonyos rtelemben
autonm s nagyobb mret tervezsi egysget jelent komponenseket brzoljk a biztostott
s szksges interfszeikkel egytt. Fontos megjegyezni, hogy a komponensdiagramok az
implementci nzpontjbl rjk le a rendszert. Klnsen abbl a szempontbl hasznosak,
- 110 -
hogy lehetv teszik a terveznek annak vgiggondolst, vajon az alkalmazs valban
rendelkezik-e a szksges funkcionalitssal, azaz vgrehajtja-e mindazt, amit a megrendel
elvr tle. A komponensdiagramokat elszeretettel hasznljk a rendszer nagybani
architektrjt egyeztet megbeszlseken, ahol a projekt kulcsfiguri kztti trgyals
legfontosabb segdeszkzv vl(hat)nak. A komponensdiagramok tulajdonkppen lgi
felvtelknt funkcionlnak, s a rendszer egsznek szerkezett mutatjk. A felvtel felbontsa
alapveten attl fgg, pontosan mit is szeretnnk megmutatni.
Az alrendszer-diagramok vagy mskppen csomagdiagramok azt mutatjk meg, hogyan
lehet a modell elemeit nagyobb egysgekbe, alrendszerekbe, csomagokba rendezni, illetve
azt, milyen fggsgi kapcsolat ll fenn az egyes csomagok kztt. Az elsdleges ok, ami
miatt ezt a diagramtpust hasznljuk az az, hogy az UML brk meglehetsen nagyra kpesek
nni, olyan mretre, amit mr nehezen lehet tltni. Ilyenkor szoks a modell bizonyos
elemeit (pl. osztlyokat) valamilyen logikai szempont szerint csoportostani. Eredmnyknt
egy ttekinthetbb bra keletkezik. Leegyszerstve azt mondhatjuk, hogy a csomagok
fjlmappk, amelyek egy csoportban tartalmaznak logikailag sszetartoz dolgokat. Akkor
sikeres a csomagols, ha a klnbz alrendszerek kztti fggsg minl kisebb. A
tervezi cl minden esetben lazn kapcsold csomagok kialaktsa.
Az sszettel-diagram a vizsglt rendszer bels struktrjt, felptst, sszettelt
mutatja. Egszen pontosan azt, hogy a rendszer elemei hogyan kapcsoldnak egymshoz a
kvnt funkcionalits elrse cljbl. A diagramon lehetnek port-ok, amelyek kapuknt
szolglnak a krnyezet fel. Koncepcionlisan az sszettel-diagramok az osztlydiagramokat
s a komponensdiagramokat ktik ssze, de nem mutatjk az osztlydiagramok tervezsi,
illetve a komponensdiagramok implementcis rszleteit.
A teleptsdiagramok ksztsnek az a clja, hogy megmutassa, hogyan lesz a rendszer
fizikailag teleptve a hardver krnyezetbe, hol fognak az egyes komponensek mkdni, s
hogyan kommuniklnak majd egymssal. A teleptsdiagramok mind a
hardverkomponenseket, mind az n. kztes termkeket (middleware) brzoljk. Ez utbbiak
ragasztknt szolglnak hardver s szoftver kztt.
A tevkenysgdiagramok zleti folyamatok modellezsre szolglnak, a vizsglt rendszer
bels logikjnak feltrkpezsre. Azt mutatjk meg, milyen elemi tevkenysgekbl pl
fel egy komplex zleti folyamat, mi hajthat vgre prhuzamosan, s lteznek-e alternatv
tvonalak az zleti folyamat grfjban. A tevkenysgdiagramok sok hasonlsgot mutatnak
a strukturlt rendszerfejleszts taln legismertebb technikjval, az adatfolyambrkkal.
A klcsnhats-ttekints diagramok a tevkenysgdiagramok leegyszerstett vltozataknt
foghatk fel. Ezek is irnytott grfok, de a cscsok nem elemi tevkenysgek, hanem
klnfle klcsnhats-diagramok, leggyakrabban szekvenciadiagramok,
- 111 -
kommunikcidiagramok stb. A folyamatok ttekintseknt foghatk fel, s a rszleteket csak
elnagyoltan tartalmazzk.
A hasznlati eset diagram a kvetelmnyek feltrsnak egyik leghatkonyabb eszkze.
Azonostja az interakciban rszt vev szereplket, s megnevezi magukat a klcsnhatsokat.
Az aktorokat plcikafigurk, az interakci osztlyait pedig nvvel elltott ellipszisek jellik.
Az llapotgp-diagram (state machine, az UML korbbi verziiban state chart vagy state
transition) egy rendszer lehetsges llapotait rja le, s az llapotok kztti tmeneteket. Ezt a
diagramtpust mr vtizedek ta hasznljk az informatikban. Lnyegben egy irnytott
grfot jelentenek, kezd s vgponttal, s megengedjk, hogy folyamatok sztvljanak s jra
egyesljenek. Szoros az llapotgpek s a (Mealy s Moore) automatk kapcsolata.
A szekvenciadiagramok egy folyamat bels logikjt mutatjk be. Az osztlydiagramok
mellett a szekvenciadiagramok jelentik az egyik legfontosabb UML diagramtpust. A
szekvenciadiagramok a dinamikus modellezs eszkzei a tevkenysgdiagramokkal, a
kommunikcidiagramokkal stb. egyetemben. Klnsen alkalmasak forgatknyvek
(interakcisorozatok) lersra.
A kommunikcidiagramok a rendszer klnbz elemei, entitsai kztt lebonyoltott
kommunikcit brzoljk. Hasonl mdon kszlnek, mint a szekvenciadiagramok, de
ezekben az idbeli sorrend nem explicit mdon jelenik meg.
Az UML iddiagramja entitsok idbeli viselkedst rja le. Egszen pontosan azt, hogy a
vizsglt entits milyen hosszan marad egy adott llapotban. Az UML 2.0 verziban jelent
csak meg. Klnsen vals-idej rendszerek s begyazott szoftverek tervezsre hasznljk.
A felsorolt 13 diagramtpusbl nem szksges egyformn jl ismerni valamennyit ahhoz,
hogy j minsg alkalmazst tudjunk fejleszteni. Az UML hrom alkotjnak vlemnye
szerint is a nyelv 20%-nak ismerete elgsges a feladatok 80%-nak megoldshoz.
Gyakorlati tapasztalatok azt mutatjk, hogy zleti alkalmazsok fejlesztse sorn a
legfontosabbak a
tevkenysg-,
szekvencia-,
osztlydiagramok,
msodlagosan pedig a
hasznlati eset,
llapot-,
kommunikci-,
- 112 -
komponens-,
telepts
diagramtpusokat hasznljk. A fennmarad tpusok viszonylag ritkbban kerlnek
alkalmazsra, br szmos esetben nagyon jl hasznlhatk a kvetelmnyelemzs s a
tervezs fzisban. Terjedelmi korltok miatt ebben a fejezetben csak a legfontosabb
tpusokat fogjuk rszletesebben trgyalni.
14.1 Hasznlati esetek
Mint korbban emltettk, a hasznlati esetek azonostjk a klcsnhatsok szereplit s
magukat a klcsnhatsokat. Egy szerepl (aktor) brmi vagy brki lehet, aki valamilyen
kapcsolatban, klcsnhatsban ll a vizsgland rendszerrel, abbl a clbl, hogy azon
tudatos tevkenysget hajtson vgre, illetve valamilyen megfigyelhet eredmnyt rjen el a
tevkenysg eredmnyeknt. A hasznlati esetek szerepli lnyegben azt modellezik,
ahogyan a rendszerek felhasznli mkdtetnek, kezelnek vals rendszereket. A hasznlati
esetekkel trtn modellezs a kvetelmnyek feltrsnak egyik, ha nem a legfontosabb
technikja. Mskppen forgatknyv alap feltrsnak is nevezzk. A hasznlati eset
diagramoknak ngy alkot eleme van:
szereplk aktorok, amelyeket plcikafigurk szemlyestenek meg, illetve tglalapok
jellnek, bennk az <<actor>> szcskval, amennyiben ezek a szereplk a sajt
jogukon tovbbi rendszerek,
hasznlati esetek tevkenysgsorozatok, ellipszisekkel brzoljuk ket,
kapcsolatok szereplk s hasznlati esetek kztt fennll klcsnhatsok, vkony
folytonos vonallal brzolva,
rendszer hatrai a hasznlati esetek kr rajzolt tglalap, amely azt mutatja meg, mi
tartozik a rendszerhez, s mi nem. Mi van a hatrokon bell, illetve mi esik azokon
kvl.
Fontos megjegyezni, hogy a szereplk mindig kvl esnek a rendszer hatrain. Azonban az
elfordulhat, hogy a kls szereplknek ltezik valamilyen reprezentcija a rendszeren bell
is, pldul egy adatbzis, amely az gyfelek adatait tartalmazza. Az gyfl maga egy kls
aktor, de a lista mr egy bels adattrol.
A hasznlati esetek diagram elksztsnek egyik fontos lpse (a rendszer hatrainak
kijellse utn), a szereplk s a hasznlati esetek azonostsa. Egy bonyolult rendszer
esetben ez nem biztos, hogy egy knny feladat. Azzal tudjuk megknnyteni a keresst, ha
feltesznk pr krdst, s megprbljuk megvlaszolni azokat. Ilyen krdsek lehetnek:
- 113 -
Szereplk
Kik a rendszer hasznli?
Ki szolgltat adatot a rendszernek?
Ki kap informcit a rendszertl?
Ki tartja karban a rendszert?
Milyen ms rendszerek llnak kapcsolatban a vizsglt rendszerrel?
Hasznlati esetek
Milyen konkrt szolgltatst vr el egy szerepl a rendszertl?
Lesz-e brmelyik szerepl rtestve, ha vltozik a rendszer llapota?
Mely szereplk tevkenysge eredmnyezi adatok trolst, illetve visszakeressket?
Lteznek-e olyan kls esemnyek, amelyek hatssal vannak a rendszerre?
Sok esetben egy felhasznlt, egy felhasznli viselkedst egynl tbb szereplvel, aktorral
jellemezhetnk.
Hasznlati esetek kztt hromfle kapcsolatot definilhatunk. Az els egy rklsi vagy
mskpp generalizcis / specializcis kapcsolat. A hasznlati esetek egyike az utd, a
msik a szl szerept fogja jtszani, s az ket sszekt (nem szaggatott, hanem
folyamatos) vonal vgn lv nyl a specilistl (utd) az ltalnos (szl) fel mutat. E
kapcsolat jelentse az, hogy az utd hasznlati eset teljes egszben rkli a szl hasznlati
esetet, de azon mdosthat. Az ltalnos hasznlati esetet trhatja, a rsztevkenysgeken
egyszersthet, vagy azokhoz jabb rsztevkenysgeket adhat hozz. Egy szl hasznlati
esetnek lehet tbb utda, s elvben egy utdnak is lehet tbb szlje. ltalban arra ltunk
pldt, hogy felfel a kapcsolat egyrtelm, azaz egy utdhoz csak egy szl tartozik.
14.1. bra: rklsi (generalizcis / specializcis) kapcsolat
- 114 -
A generalizcis kapcsolat fordtott olvasatban egy specializcis kapcsolatknt foghat fel, s
taln ez a nzpont jobban is segti a fogalom megrtst.
A msodik lehetsges kapcsolati forma kt hasznlati eset kztt az <<extend>> (UML-ben
foglalt) szcskval rhat le. Itt is az egyik hasznlati esetet alapnak, a msikat pedig
kiterjesztsnek fogjuk hvni. A kt hasznlati esetet szaggatott nyl kti ssze, amely az alap
hasznlati eset fel mutat, s a nylra rjuk r az <<extend>> szcskt. Az alapeset a
kiterjesztsek nlkl is vgrehajthat, azaz nmagban is teljes. A kiterjeszts nhny olyan
rsztevkenysget tartalmazhat, amely nem tallhat meg az alapesetben. A kiterjesztsek
ltalban nem teljes rtk hasznlati esetek.
Az <<extend>> kapcsolat teht tovbbi tevkenysgeket ad hozz egy mr ltez hasznlati
eset tevkenysgeihez. Szemlletesen szlva az alapeset elre definilt beszrsi
(kiterjesztsi) pontokat tartalmaz(hat), ahov a kiterjesztsek bekelhetk.
14.2. bra: <<Extend>> kapcsolat
Tegyk fel a plda kedvrt, hogy egy knyvtri rendszert modelleznk, ahol az egyik
hasznlati eset a knyvek visszaadsnak folyamatt rja le. Ez lesz az alapeset, amely az
albbi tevkenysgeket tartalmazza:
9. A knyvtros beti a klcsnz szemly azonostjt
10. A rendszer kilistzza a klcsnz ltal klcsnvett knyvek (s a lejrati hatridk)
listjt.
11. A knyvtros megkeresi a behozott knyvet a listban
12. tveszi a behozott knyvet.
Ebben a hasznlati esetben figyelmen kvl hagytuk annak megvizsglst, hogy a knyvet
vajon lejrati id eltt vagy az utn hoztk vissza. Egy lehetsges kiterjeszts hasznlati eset
az lenne, hogy a ksedelmes visszahozs miatt bntetst fizet a beiratkozott olvas. Jellje a
kiterjesztsi pontot <ksKnyv>:
- 115 -
13. A knyvtros megkeresi a behozott knyvet a listban
14. <ksKnyv>
15. tveszi a behozott knyvet.
A <ksKnyv> azt a pontot jelli, ahol a BntetsFizets hasznlati eset tevkenysgei
hajtdnak majd vgre.
Az <<extend>> kapcsolatot elssorban arra hasznlhatjuk, hogy a kivteleket kezeljk.
Kivtel alatt azt rtjk, amikor a folyamat lefolysa valamilyen rtelemben eltr a
normlistl.
Kt hasznlati eset kztt definilhat harmadik kapcsolati forma az <<include>> szcskval
jellemezhet, s a rszeknt tartalmaz kifejezssel rhat le. A szaggatott nyl, rrva az
<<include>> megnevezs, a tartalmaztl (kliens) a tartalmazott (szolgltat) fel mutat. Ez
egy olyan kapcsolatot jell, ahol a tartalmazott hasznlati eset tevkenysgeit egy (vagy tbb)
terjedelmesebb hasznlati eset is tartalmazza, mgpedig teljes egszben. Igazbl akkor van
rtelme az <<include>> kapcsolat hasznlatnak, ha tbb hasznlati eset is ignyli a
szolgltatt.
14.3. bra: <<Include>> kapcsolat
ltalban azt mondhatjuk, hogy amennyiben tbb hasznlati eset viselkedsben ltezik
valami kzs, ezt a kzs rszt jelenthetjk meg egy kln hasznlati esetknt. Az
elmondottakbl kvetkezen csak akkor clszer az <<include>> kapcsolatot hasznlni, ha
rtelmesen megadhat ez az nmagban is megll kzs rsz. Az <<include>> kapcsolat egy
kicsit a fggvnyhvsra s a szubrutinok hasznlatra emlkeztet. A kliens hasznlati eset
futsa egy adott pontnl megll, a vezrls taddik a szolgltat hasznlati esetnek, majd
annak lefutsa utn ismt visszakerl a klienshez. Az <<include>> kapcsolat lehetv teszi,
hogy a szolgltat hasznlati eset tevkenysgeit bekeljk a kliens munkafolyamba.
Alapvet klnbsg az <<extend>> s az <<include>> kapcsolat kztt az, hogy mg az
- 116 -
<<include>> kapcsolatban a kliens hasznlati eset nem teljes a szolgltat hasznlati eset
nlkl, addig az <<extend>> kapcsolatban az.
14.2 Tevkenysgdiagram
A tevkenysgdiagram, az UML diagramtpusai kzl az egyik legfontosabb, egy vizsglt
rendszer folyamatainak bels felptst, szerkezett mutatja be. Egszen pontosan azt,
milyen lpsek, taszkok trtnnek valjban egy munkafolyamatban, milyen tevkenysgek
vgezhetk prhuzamosan, s lteznek-e alternatv tvonalak a folyamat grfjban. Ha
elksztettk a hasznlati eset diagramot, akkor ahhoz kapcsoldan a tevkenysg diagramok
egy-egy hasznlati eset rszletesebb lerst adjk.
Megjelenskben nagyban emlkeztetnek az vtizedekkel korbban hasznlt
blokkdiagramokra. A jellsek is nagyon hasonlak. Hasonltanak tovbb az UML
llapotgp-diagramjaira is. Az UML szerzi szndka szerint a tevkenysgdiagramok
valjban az llapotgp-diagramok egy varinst jelentik.
Tekintsk pldaknt a vendgli italrendels egy lehetsges tevkenysgdiagramjt!
14.4. bra: Az italrendels tevkenysgdiagramja
Az brn kt dntsi helyzet s egy egyestsi pont lthat.
ltalnossgban a tevkenysgdiagramok az albbi jellseket hasznljk:
Tevkenysgi llapotok lekerektett tglalapokba, n. kapszulkba rva
Egy kezdeti s egy vagy tbb vgllapot. A kezdeti llapotbl csak egyetlen vonal
indulhat ki, azaz egyetlen szlon indulhat el a tevkenysgsorozat
Feltteles dntsi helyzetek, valamilyen rfelttellel, IF THEN ELSE
Prhuzamossg kezelse, sztvls s egyests (fork/join) vastag vonallal megjellve
- 117 -
Partcik vagy mskpp plyk (swimlanes)
14.5. bra: Sztvls s egyests a tevkenysgdiagramon
Tevkenysgdiagramokkal nagyon knnyen modellezhetnk prhuzamos
munkafolyamatokat. A fenti brn a sztvlsi s az egyestsi vonal kztti tevkenysgek
prhuzamosan hajthatk vgre. A sztvlsi vonalnak pontosan egy bemenete s kett vagy
tbb kimenete, az egyestsi vonalnak pedig kett vagy tbb bemenete s pontosan egy
kimenete van.
14.3 Objektumok s osztlyok
Mint azt korbban tisztztuk, az UML nyelv osztlydiagramjai az osztlyokat s a kztk
meglv kapcsolatokat brzoljk, azokat szemlltetik, az objektumdiagramok pedig
ugyanezt teszik az objektumokkal s a kztk fennll kapcsolatokkal. Amikor a krlttnk
lev vilgot, annak folyamatait szeretnnk modellezni, azt leggyakrabban objektumok
segtsgvel tesszk. Objektumok lehetnek emberek, pletek, bankszmlk, lnyegben
brmi. Felttelezzk, hogy az objektumoknak ltezik egyrtelm objektumazonostjuk. Ez az
azonost klnbzteti meg ket ms objektumoktl. Minden objektumnak egyetlen
azonostja van, kt klnbz objektumnak pedig nem lehet ugyanaz az azonostja. Az
objektumokhoz hozz tudunk rendelni bizonyos fggvnyeket, mskppen eljrsokat,
mveleteket, metdusokat.
A vizsgland rendszer objektumait a hasonl tulajdonsg objektumokat tmrt
osztlyokba csoportosthatjuk. Az osztly fogalma teht absztrahlja az objektumok
valamilyen rszhalmazt. A vals letben csak objektumokkal tallkozhatunk (pl. Nagy Pter
harmadves hallgat vagy Nagy Pter, Oroszorszg crja), s absztrakci tjn jutunk el a
Hallgat vagy az Uralkod osztlyhoz. Az objektumokat az osztlyok pldnyainak fogjuk
nevezni.
- 118 -
Ha az Olvas valamennyire jrtas az adatbzisok elmletben, akkor az albbi prhuzam segt
megrteni, mi a logikai kapcsolat az osztlyok s az objektumok kztt. Tegyk fel, adott egy
bank adatbzisban kt tbla (mskppen relci), az egyik az gyfelek tbla, s ebben
troljk az gyfelek nevt, cmt s szemlyi szmt, a msik tbla pedig a Szmlk, amely
tbla trolja az egyes szmlk szmlaszmt, egyenlegt s a szmlatulajdonos szemlyi
szmt. Ha objektum-orientlt szemlletben kzeltnk a krdshez, akkor mindkt tblnak
egy-egy osztly felel meg, a tblkban szerepl rekordoknak pedig egy-egy objektum Azaz
gy tekintnk az objektumokra, mint egyedi rekordokra. Az objektumoknak mezi vannak,
amelyekben rtkek szerepelnek. Egy rekordbeli adatelemet tulajdonsgnak vagy
attribtumnak neveznk. Ezek egyttesen jellemzik, karakterizljk az objektumot.
Programozsi nzpontbl az attribtum egy loklis vltoz, amely csak az adott
objektumhoz tartozik.
Az osztlyokat az UML nyelvben rekeszekre osztott tglalapok jellik. Alapesetben hrom
rekeszt tartalmaznak a tglalapok:
Osztlynv
Tulajdonsgok, jellemzk, attribtumok felsorolsa
Mveletek, metdusok felsorolsa
(Az UML megengedi tovbbi rekeszek hasznlatt is, de ezekre most nem trnk ki.)
Szmla
-szmlaSzm : int
-szmll : int = 0
+ltrehoz(szszm : int)
+krSzm : int
-nvel()
+krSzmll() : int
A harmadik rekeszben szerepl mveleteket az egyik els objektum-orientlt programozsi
nyelv, a Smalltalk metdusnak, a Java nyelv opercinak, a C++ s a C# nyelv osztly
tagfggvnynek (class member function) nevezi. Szoks mg az eljrs s a szolgltats
megnevezsek hasznlata is. Ami a terminolgit illeti, az elemzs fzisban inkbb a
mveletek, a tervezs fzisban pedig a metdusok megnevezst hasznljuk. Az elemzs
fzisban nha elhagyjuk az attribtumok s mveletek felsorolst, s csak az osztlynv
szerepel a diagramon.
- 119 -
A kzps rekeszben szerepl attribtumok ltalnos alakja:
lthatsg nv szmossg : tpus = kezdetirtk
A harmadik rekeszben szerepl metdusok ltalnos alakja
lthatsg metdusnv (paramternv : paramtertpus, ) : returnType
A lthatsg lehet publikus (+), privt (-) vagy vdett (#).
Vilgosan kell ltnunk, hogy a mveletek, a metdusok biztostjk a rendszer
funkcionalitst. A metdusoknak lehetnek paramtereik, s vgrehajts utn visszaadhatnak
valamilyen rtket vagy vgrehajthatnak valamit, amire aktulisan szksg van.
14.3.1 Kapcsolatok
UML-ben a modellelemek kztt meglehetsen sokfle kapcsolat ltezhet. Ebben a rszben
az osztlyok kztti kapcsolattpusokat fogjuk ttekinteni.
Ezek kzl az albbi tpusokat hasznljuk elssorban:
Asszocici vagy trstsi kapcsolat, rviden trsts, s ennek specilis esetei az
aggregci, illetve a kompozci
Generalizci vagy ltalnost kapcsolat, rviden ltalnosts
Fggsgi kapcsolat, rviden fggsg, s ennek specilis esete az absztrakci (ezzel
bvebben most nem foglalkozunk)
14.6. bra: Kapcsolatok ttekintse
Az asszocici egy strukturlis kapcsolat kt osztly (vagy hasznlati eset) kztt. brzolsa
vkony folytonos vonallal trtnik. (AS1 s AS2)
- 120 -
Az aggregci az egsz rsz tpus kapcsolatot modellezi. Szemlletes plda erre a
kapcsolattpusra egy szmtgp s a perifrilis egysgei kztti kapcsolat. Az egsz s a
rsz entitsok lettartama fggetlen egymstl. Ha eldobjuk a szmtgpet, a perifrikat
egy j szmtgppel tovbb hasznlhatjuk. Kicserlhetjk a perifrikat, a szmtgp ettl
meg hasznlhat marad. brzolsa vkony folytonos vonallal trtnik, amelynek egyik
vgn egy nyl, a msik vgn pedig egy res rombusz tallhat, a logikailag bvebb
(egsz) entitshoz kapcsoldva. (AG1 s AG2)
A kompozci az aggregci ersebb fajtjnak tekinthet. Kompozci tpus kapcsolatban a
rsz lettartama az egsz lettartamtl fgg. Ha megsznik az egsz, megsznik a rsz
is. Kompozcira plda a virg s a szirmai kztti kapcsolat. A kompozci brzolsa
vkony folytonos vonallal trtnik, amelynek egyik vgn egy nyl, a msik vgn pedig egy
teli rombusz tallhat, a logikailag bvebb entitshoz kapcsoldva. (CO1 s CO2)
A generalizci tpus kapcsolatban az egyik osztly az utd (alosztly), a msik a szl
(szuperosztly) szerept jtssza. Ez a kapcsolattpus nem csak osztlydiagramon, hanem
komponens-, telepts- s hasznlati eset diagramon is megjelenhet. brzolsa vkony
folytonos vonallal trtnik, s a zrt res nylvg az utd modellelemtl mutat a szl
modellelem fel. ltalban egy szl s tbb utd osztly kapcsolatt brzolja, br elvileg
egy utdhoz tbb szl is tartozhat. (GE1 s GE2)
A fggsg tpus kapcsolatban az egyik elemet szolgltatnak, a msikat pedig kliensnek
nevezzk, s felttelezzk azt, hogy brmilyen vltozs a szolgltatban kihat a kliensre.
Fggsgi kapcsolat nem csak osztlydiagramban, hanem komponens-, telepts- s
hasznlati eset diagramban is ltezhet. brzolsa szaggatott vonallal trtnik, s a nylt
nylvg a kliens elemtl a szolgltat elem fel mutat. (DE1 s DE2)
Az absztrakci tpus kapcsolat a fggsg azon esete, amikor a kliens elem sokkal
rszletesebb, mint a szolgltat, vagyis az absztrakci klnbz szintjein tallhatk. (RE1 s
RE2)
14.3.1.1 Asszocici
Az asszocici osztlyok kztti szemantikus kapcsolat, amely ezen osztlyokat bizonyos
rtelemben rokontja egymssal. Asszocici lehetsges kett vagy tbb osztly kztt.
14.7. bra: Asszocicis kapcsolat, szemly - gpkocsi
- 121 -
Formailag a kt osztlyt reprezentl tglalapot egy egyenes vonallal ktjk ssze. A vonal
fl egy ige (birtokol) kerlhet, al pedig egy igei szkapcsolat (birtokban van). Az ige utn
tehetnk egy jobbra mutat nylvget (), az igei szkapcsolat el pedig balra mutat
nylvget (), de ennek hasznlata nem ktelez.
A tglalapokhoz illeszkeden szerepeltet(het)jk a kapcsolat szmossgt. A fenti pldban
egy szemlynek lehet, hogy nincs gpkocsija, lehet, hogy egy van neki, s lehet, hogy tbb.
Megfordtva, egy gpkocsinak lehet egy tulajdonosa, de lehet tbb is. Ezrt szerepel a
Szemly osztly mellett 1..* , s a Gpkocsi osztly mellett 0..* szmossg.
ltalnosan, szmossg lehet
Nulla egy : 0..1
Nulla sok: 0..*
Egy egy: 1..1 vagy 1
Egy sok: 1..*
M N: M..N
Tetszleges termszetes szmokbl ll nvekv sorzat
Az asszocicis kapcsolat lehet reflexv, azaz ugyanazt az osztlyt trstja sajt maghoz. Egy
szmtgp tetszleges szm szmtgppel kthet ssze.
14.8. bra: Reflexv asszocicis kapcsolat
Nzzk meg, hogyan lehet a biztost trsasg s az gyfl kapcsolatt asszocicis
kapcsolatknt modellezni!
Tegyk fel az albbiakat :
A biztost trsasg szerzdseket kt az gyfelekkel.
A szerzdsek a biztost trsasg s egy vagy tbb gyfl kztt jnnek ltre.
A biztost trsasgnak s brmelyik gyflnek tetszleges szm szerzdse lehet.
Egy adott szerzdst tetszleges szm gyfllel kthet meg a biztost.
Minden szerzdshez tartozik egy ktvny, de ez gyakran csak a szerzdskts utn
jelents ksssel kszl el. (Ennek a tnynek akkor van jelentsge, ha a kresemny
kzvetlenl a szerzdskts utn kvetkezik be.)
- 122 -
14.9. bra: Plda asszocicira
14.3.1.2 Hrmas asszocici
Trsulsi kapcsolat nem csak kt, hanem hrom vagy tbb osztly kztt is lehetsges.
Tegyk fel, hogy iparosok dolgoznak egy csaldi hz ptkezsn. Az albbi tblzat mutatja,
hogy melyik iparos melyik helyisgben milyen munkt vgez.
Iparos Helyisg Munka
Andrs konyha fests
Andrs nappali fests
Andrs frdszoba fests
Bla konyha parkettzs
Bla frdszoba parkettzs
Csaba nappali ftsszerels
Csaba konyha ftsszerels
Az UML az ilyen tpus trsulsok modellezshez rombuszt hasznl, s nem hromszg
alakzatban kti ssze az osztlyokat.
14.10. bra: Hrom osztly asszocicija
- 123 -
Tovbbi pldt szolgltat hrmas trsulsra a vonat utas lhely modell
14.11 bra: Hrom osztly asszocicija
14.3.1.3 Aggregci s kompozci
Az aggregci az asszocici specilis formja, ahol bizonyos rtelemben egsz s rsz
objektumokrl beszlhetnk. (Az UML angol nyelv lersban ezt a kapcsolatot
wholepart, consistsof, ispartof, hasa kapcsolatknt rjk le.) Az aggreglsra
plda egy szemlygpkocsi, amelynek egyebek mellett van motorja, futmve, karosszrija
s ngy kereke. Egy tovbbi plda az aggreglsra a
Sportklub Csapatok Jtkosok
kapcsolat, amit az albbi bra mutat:
14.12 bra: Aggregci s kompozci
A diagramon lthat nylvgi kis rombusz lehet res vagy teli. Az elbbi esetben gyenge vagy
osztott aggreglsrl, az utbbiban ers vagy sszetett aggreglsrl beszlhetnk. Gyenge
tpus aggregls esetn az objektum tbb egszhez is tartozhat, mg ers tpus
aggreglskor csak egyhez. Az elbbi esetben ha az egszt trljk, annak
kvetkezmnyeknt a rszek nem trldnek, mg ers tpus aggregls esetn igen. Ha egy
sportklub megsznik (FC Barcelona), akkor megsznnek a klub keretben mkd csapatok
(labdargs, kosrlabda, teke stb.) is, de ha a kosrlabda csapat megsznik, attl egy jtkos
mg jtszhat tovbb a tekecsapatban, hiszen egy jtkos egyszerre tbb csapatnak is tagja
lehet.
- 124 -
Kompozcira (ers aggreglsra) plda:
14.13 bra: Kompozci: virg s szirmai
A virg a szirmok kompozcijaknt foghat fel. Egy virgon lehet, hogy nincs szirom
egyltaln, s lehet, hogy tbb is van. Egy adott szirom azonban csak egyetlen egy virghoz
tartozhat. Ezt msknt gy fogalmazhatjuk meg, hogy az sszetett aggreglsban a rszek az
egszben lnek. Az egsz oldalon a szmossg lehet 0 vagy 1, a rsz oldalon viszont
tetszleges intervallum.
A kompozci egy msik lehetsges brzolsa a faszerkezet. Ezt akkor hasznljuk, ha az
egsznek egynl tbb rsze van.
14.14. bra: Kompozcis faszerkezet
A grafikus felhasznli fellet (GUI) sokfle ment, gombot, ikont s listt tartalmazhat.
14.3.1.4 ltalnosts
Az ltalnosts (vagy mskpp generalizci) kt osztly, egy ltalnos s egy specilis
entits, az n. szl s utd osztly kztti klnleges kapcsolatot modellezi. (Az UML angol
nyelv lersban ezt isakindof kapcsolatknt rjk le.) A specilis osztly
rendelkezik az ltalnosabb osztly tulajdonsgaival.
- 125 -
14.15. bra: ltalnosts / generalizci
A plda azt mutatja, hogy a Gpjrm osztly a Kzlekedsi eszkz osztly alosztlya, s a
Teheraut osztly szuperosztlya. Az ltalnosts lehetv teszi a hierarchikus osztlyozst,
ami az UML modellezs egyik lnyeges eleme.
Gyakran ltezik valamilyen hasonlsg egy modell klnbz osztlyai kztt, kt vagy tbb
osztlynak lehetnek kzs attribtumai s/vagy mveletei, metdusai. Mivel felmerl az a
termszetes igny, hogy ne kelljen tbbszr is ugyanazt a programrszletet megrni, ezrt
kihasznlhatjuk az rkls mechanizmust. Amikor az A osztly rkl a B osztlytl, azt
mondjuk, hogy az A osztly a B osztly egy alosztlya, megfordtva, B az A szuperosztlya.
Az UML nyelvben az rkls jellsre a zrt vg res nylhegyet hasznljuk, s a nyl az
alosztlytl a szuperosztly fel mutat. Tegyk fel pldaknt, hogy a modellnkben van egy
Hallgat osztly s egy Tanr osztly. Az elbbi attribtumai kztt szerepel a
nv
telefonszm
email cm
hallgati azonost
vfolyam
utols flvi tlag
az utbbi attribtumai kztt pedig a
nv
telefonszm
email cm
beoszts
iroda
fogadra.
- 126 -
Vezessk be a Szemly osztlyt, melynek attribtumai az albbiak lesznek
nv
telefonszm
email cm
Ekkor e hrom osztly egy rklsi hierarchiba (hierarchikus lncba) szervezhet. A
gykrosztlya a Szemly lesz a megadott attribtumokkal, a Hallgat s a Tanr pedig
alosztlyok, amelyek rklik a szuperosztly attribtumait, s emellett rendelkeznek sajt
attribtumokkal is. Paradox mdon a gykrosztly az rklsi hierarchia legfels osztlya.
14.3.1.5 Betokozs
Mint azt a korbbi fejezetben trgyaltuk, a betokozs vagy bezrs (encapsulation) egy
nagyon fontos tervezsi elv az objektum-orientlt alkalmazsfejlesztsben. A betokozs
fogalma leegyszerstve azt jelenti: nem szksges tudnunk, hogy valami miknt van
implementlva ahhoz, hogy kpesek legynk azt hasznlni. Ha ezt az elvet kvetjk, akkor a
fejleszts sorn brmikor megvltoztathatjuk egy komponens implementcijt anlkl, hogy
ez a rendszer ms komponenseit zavarlag rinten, feltve, hogy a szksges s a biztostott
interfszek vltozatlanok maradnak. A rszletek elrejtsnek elve s gyakorlata a mindennapi
let szmos terletn megfigyelhet. gy nem minden bankkrtya-tulajdonos tudja pontosan,
hogyan is mkdik egy krtyaautomata, de bzik abban, hogy az kiszolgltatja neki azt a
pnzmennyisget, amire aktulisan szksge van. Feltve persze, hogy rendelkezik azzal az
sszeggel a szmljn. A bank brmikor vltoztathat a krtyaautomata programjn,
tszervezheti az adatbzisait stb., de ez magt a szolgltatst nem fogja, pontosabban nem
szabad befolysolnia.
Egy osztlyt azrt zrunk be, mert biztostani akarjuk, hogy annak objektumai csak az
osztllyal egytt definilt mveleteken keresztl vltozhassanak. Ms szavakkal, a betokozs
megakadlyozza az objektumokhoz val kls hozzfrst, s azt, hogy az objektumokat meg
lehessen vltoztatni az osztly megalkotjnak szndka ellenben. Csak az osztly metdusai
mdosthatjk az osztlybeli objektumokat kzvetlenl.
A betokozs elve az egyik garancija annak, hogy nagymret szoftverrendszereket lehessen
ltrehozni, amelyekben viszonylag kevs hiba van. Ha ugyanis ez az elv nem rvnyeslne, s
a szoftver klnbz rszei kztt nagyfok kapcsolds llna fenn, akkor egy kicsi
vltoztats valamelyik modulban megkveteln a vltoztatsok tvezetst sok msik
modulban is, ami gyakorlatilag lehetetlenn tenn ezek nyomon kvetst.
14.4 Szekvenciadiagram
A szekvenciadiagramok a vizsglt rendszer entitsai kztti kommunikcit, azaz az
zenetvltsokat brzoljk, jl lthat idbeli sorrendben. A szekvenciadiagramok a rendszer
- 127 -
viselkedsi nzethez tartoznak. A hangsly azon van, hogyan kldenek s fogadnak
zeneteket a rendszer objektumai. A szekvenciadiagramok ktdimenzis brzolsok, az
egyik (vzszintes) tengely az objektumokat (s/vagy osztlyokat), a msik (fggleges)
tengely az idt reprezentlja. A vzszintesen felsorolt objektumok nevt kis tglalapokba
rjuk. Az idt jell fggleges szaggatott vonalon, amit letvonalnak neveznk,
helyezkednek el az aktv peridusokat jell vkony kis ll tglalapok.
A diagramon telt vg () nyilak mutatjk az zeneteket. Amikor egy zenet megrkezik, a
fogad objektum aktv llapotba kerl, s vagy maga hajt vgre bizonyos utastsokat, vagy
vlaszzenetre vr egy harmadik objektumtl, amelynek kldtt el egy zenetet. A
vlaszzeneteket telt vg szaggatott vonallal jellik. Az zeneteket szoks megszmozni, br
igazbl erre nincs szksg, mivel a diagram sugallja a sorrendisget.
Tovbbi lehetsgek:
Felttelek trsulhatnak az zenetekhez
Amennyiben az zenet neve eltt egy * szimblum szerepel, gy az zenet ismtelten
elkldsre kerl, azaz iterlt zenetrl beszlhetnk.
Lehetsges, hogy egy objektum sajtmagnak kld zenetet
Lteznek szinkron s aszinkron zenetek
Formlisan egy szekvenciadiagram elksztshez az albbi lpsek megttele szksges:
16. A rendszer objektumai kztti kommunikci (zenetvltsok) forgatknyvnek
lersa
17. Az objektumok (osztlyszerepek) megadsa
18. Az letvonal meghzsa valamennyi objektumra
19. Az aktv idszakok megrajzolsa
20. Az zeneteket (s a vlaszokat) jell nyilak megrajzolsa
21. Iterci, a modell finomtsa
Nzzk, pontosan mit is jelentenek a fenti fogalmak!
Az letvonal (lifeline) egy olyan grafikus jells, amely az objektumok (osztlyszerepek)
ltezst mutatja, ahogy idben haladunk elre. Az letvonalat szaggatott vonallal jelljk.
Az els zenet felett indul, s az idben utols zenet alatt, a szekvenciadiagram aljn r
vget.
Egy objektum tovbbi objektumokat kpes zenetek ltal ltrehozni. Az letvonal elkezddik,
ha az objektum ltrehozsra kerl (ezt egy res hegy (>) szaggatott vonal jelli a
diagramon), s vget r, ha az osztlyszerep megsemmisl. A megsemmisls tnyt egy X
szimblum jelli annl az zenetnl, amely azt (azaz a megsemmislst) eredmnyezte.
- 128 -
Pldaknt tekintsk egy knyvrendels szekvenciadiagramjt!
14.16 bra: Szekvenciadiagram egy knyvrendelsre
Az 14.16 bra a bolti knyvrendels leegyszerstett folyamatt mutatja. Hrom objektum
szerepel az brn:
22. Vev
23. Bolt
24. Keresett knyv.
Az brn megjelentett zenetek:
25. A vev (telefonon) megrendeli a knyvet a knyvesbolttl.
26. A bolti alkalmazott ellenrzi az adatbzisban a knyv megltt, illetve az rt.
27. Ha megvan a knyv, az elad feljegyzi a knyv rt.
28. Ezt az rat kzli a vevvel.
29. A vev kifizeti a knyv rt.
30. S megkapja az hajtott knyvet.
14.5 Kommunikcidiagram
Az UML korbbi szabvnyaiban kollaborcis diagramknt emlegetett bra tbb szempontbl
is hasonlt a szekvenciadiagramra. Az zeneteket ktelez megszmozni, mg a
szekvenciadiagramban az idt expliciten brzoljuk, fellrl lefel haladva. Nyilvnval,
- 129 -
hogy az idrendisget a szekvenciadiagrambl knnyebben tudjuk leolvasni. Tny, hogy egy
szekvenciadiagram elksztse utn mr knny feladat egy kommunikcidiagram
megszerkesztse, s fordtva is igaz ez az llts. Arra a krdsre, mikor rdemes
szekvenciadiagramot, illetve kommunikcidiagramot hasznlni, azt vlaszolhatjuk, hogy az
elbbit akkor, ha csak az zenetek sorrendje az rdekes, mg az utbbit akkor, ha inkbb a
kommunikci mibenltt szeretnnk megrteni.
A kommunikcidiagram hasznlatt egy bevsrlkzpontban mkdtetett bankjegykiad
automata pldjval illusztrljuk. (A bevsrlkzpontnak a trtnetben csak annyi a szerepe,
hogy az automatt nem maga a bank zemelteti.)
Az 14.17. brn lthat kommunikcidiagram entitsai az albbiak:
gyfl Automata Trsasg - Bank
A Bank bocstotta ki a plasztikkrtyt, s a Trsasg zemelteti az automatt. rtelemszeren
minden tranzakci keresztlmegy a trsasgon.
- 130 -
14.17 bra: Kommunikcidiagram egy bankjegykiad automatra
Az 14.17. brn szmokkal elltott zenetek a kvetkezk:
31. Krtya behelyezse az automatba
32. Jelsz krs
33. Jelsz megadsa
34. Szmlaszm rvnyests krse
35. Krtya rvnyests krse
36. Bank elfogadja a krtyt
37. Folyszmla rendben van
38. Feladatvlaszts krse
39. Feladat megadsa
40. sszeg megadsnak krse
41. sszeg begpelse
42. Tranzakci feldolgozsnak krse a Trsasgtl
43. Tranzakci feldolgozsnak krse a Banktl
- 131 -
44. Banki tranzakci sikeres
45. Tranzakci sikeres
46. Bankjegyek kiadsa
47. Kszpnz felvtele
48. Krtya kivtele az automatbl
Az objektumokat az brn nem szksgszeren vzszintesen helyezzk el, hanem abban a
formban, ami legjobban segti az objektumok kztti klcsnhatsok (kommunikci)
megrtst. A kommunikci irnyt nem az objektumokat sszekt nyilakra rjuk r, hanem
mellettk helyezzk el a kisebb nyilakat.
14.6 llapotgp-diagramok
Ha egy rendszer viselkedst kvnjuk lerni, a tevkenysg- s kommunikcidiagramok
mellett gyakran szksg van az n. llapotgp-diagramok hasznlatra is, amelyek az
elnevezsbl kvetkezen egy objektum llapotait s azokat a bels s kls esemnyeket
modellezik, amelyek vltozsokat idz(het)nek el bennk. Ez a diagramtpus klnsen
hasznos vals idej (real-time) s biztonsg-kritikus rendszerek fejlesztsben, ahol a vizsglt
rendszert a krnyezetbl rkez kls hatsok, ingerek vezrlik. Az llapotgp-diagramok
irnytott grfok hasznlatval azokat a rendszerllapotokat s ingereket, esemnyeket
mutatjk be, amelyek az egyik llapotbl egy msikba trtn tmenetet okozzk.
Termszetesen felttelezzk, hogy a lehetsges llapotok szma vges.
Illusztrci gyannt tekintsnk egy igazn egyszer rendszert, egy villanykapcsolt. Ennek
kt llapota ltezik: a leoltott s a felgyjtott llapot, rviden LE s FEL. Azzal a logikus
feltevssel lnk, hogy a rendszer brmely idpillanatban e kt lehetsges llapot egyikben
tallhat. Ktfle ingert, esemnyt (esetnkben cselekvst) klnbztethetnk meg, amelyek
llapotvltozst idznek el a rendszerben, ez a leolts s a felgyjts esemnye. Klnsen
bonyolultabb rendszerek esetn clszer tblzatba rendezni a rendszerllapotokat, az
ingereket (esmnyeket) s az tmeneteket.
llapot Felgyjts Leolts
LE FEL -
FEL - LE
Amennyiben nincs vltozs az llapotban vagy nem rtelmezhet az tmenet, a jel
szerepel a tblzatban.
Az llapotgp-diagramokon a lekerektett tglalapok jellik az llapotokat, kzepkbe rva az
llapot nevt, a folytonos, nyllal elltott vonalak pedig magukat az tmeneteket.
- 132 -
Rendszerllapot nem csak passzv lehet, mint a fenti pldban, hanem aktv is. Ilyenkor az
llapotnv alatt a do szcska s a tevkenysg megnevezse szerepel. Az llapotgp-
diagramokon kt kitntetett llapot szokott szerepelni, a kezdeti s a vgllapot.
A diagramok msik eleme az tmenet, amely kt rendszerllapot kztt ltezik. Ezek egyikt
forrs-, msikt clllapotnak nevezzk. Az tmenetet jell nylra nem csak az esemnyt,
hanem annak logikai felttelt is rrhatjuk. gy az tmenet csak akkor kvetkezik be, ha a
logikai felttel rtke igaz.
Tegyk fel a plda kedvrt, hogy egy DVD-lejtsz a modellezend rendszer. Hrom
llapotot klnbztethetnk meg: lejtszs, sznet s lells. Az llapottblzat az albbi lesz:
llapot Lejtszs gomb
megnyomsa
Sznet gomb
megnyomsa
Stop gomb
megnyomsa
Lejtszs Sznet Lells
Sznet Lejtszs Lells
Lells Lejtszs
Knnyen belthat, hogy Lells Lejtszs tmenet csak abban az esetben valsul meg, ha
van lemez a lejtszban.
Az llapotgp-diagramok kizrlag akkor hasznlatosak, amikor olyan objektumokat
kvnunk modellezni, amelyek eltr mdon viselkednek aszerint, hogy aktulisan melyik
rendszerllapotban vannak. Ha egy objektum nem vltoztatja az llapott letciklusa sorn,
akkor nem indokolt llapotgp-diagram ksztse. Gyakorlati problmkban, amikor
nagymret rendszereket modelleznek, mind a lehetsges llapotok, mind az ingerek szma
meglehetsen nagy, akr tbb szz is lehet.
- 133 -
15 Az alkalmazsfejleszts folyamata, szoftver-letciklus
modellek
A szoftverrendszerek tervezsben s megvalstsban kevsb jratos emberek rendszerek
fejlesztst gyakran azonostjk a szmtgpek programozsval. Ebbl kvetkezen gy
gondoljk, hogy a rendszerfejleszts lnyegben alig tbb mint programrs. Ha kzelrl
megvizsglunk egy pr informatikai projektet, klnsen a nagyobb mreteket, akkor azt
fogjuk tapasztalni, hogy az elvgzett munknak tlagosan 10%-a fordtdott tnylegesen
programrsra, tesztelssel egytt kb. 30%-a, a fennmarad 70% ugyanis egyb
tevkenysgeket takar. Az emltett arnyok termszetesen csak tjkoztat jellegek. E
szmok projektrl projektre vltoznak, mgpedig meglepen nagy szrssal, msrszt a
klnbz szmtsok nem mindig veszik figyelembe az sszes, rendszerfejlesztssel
kapcsolatos tevkenysget. Ez klnsen a mr elkszlt szoftverrendszerek karbantartsra,
az n. szoftverevolcira vonatkozik, amely fzis pedig nagyon fontos rsze a
rendszerfejlesztsnek.
15.1 A szoftverrendszerek fejlesztsnek folyamata
A szoftverrendszerek fejlesztsnek folyamatt 7 alapvet fzisra bonthatjuk, tekintet nlkl
arra, hogy maga a fejleszts tnylegesen milyen mdszerrel trtnik:
49. clok meghatrozsa, projektindts,
50. elemzs, a rendszerrel szemben tmasztott kvetelmnyek meghatrozsa,
51. tervezs,
52. kivitelezs, implementls, integrci,
53. validci,
54. telepts, tads
55. zemeltets, karbantarts, evolci.
Ez a ht fzis alkotja egytt a alkalmazsfejleszts letciklust. (Termszetesen ezek a fzisok
sszefondhatnak, sszefsldhetnek, s nincs arrl sz, hogy egy fzist csak s kizrlag
akkor lehet elkezdeni, ha a megelz fzis mr teljes egszben befejezdtt.) Az letciklus-
modell azokat a lpseket s feladatokat tartalmazza, amelyek minden rendszerfejlesztsi
projektben kzsek. Ugyanis, tekintet nlkl arra, hogy milyen tpus s mekkora mret
informatikai rendszert akarunk fejleszteni, mindig szksg van a jelenlegi rendszer
tanulmnyozsra legyen az manulis (kzi) vagy automatizlt , a megrendeli
kvetelmnyek megfogalmazsra, megvalsthatsgi tanulmny ksztsre, szksg van az
- 134 -
egsz informatikai projekt megtervezsre, kltsgterv ksztsre, dokumentlsra,
validlsra, a felhasznlk kikpezsre s betantsra, teleptsre stb.
Lssuk, hogy az letciklus egyes fzisai tnylegesen milyen tevkenysgeket tartalmaznak!
A projektindts fzisa a gyakorlatban szmos, nagy fontos, gyakran kritikus lpst fog
ssze. Ide tartozik minden olyan tevkenysg, amely elkszti a tnyleges informatikai
fejlesztst, ami a rendszerelemzssel indul. A projektek elindtsnak tlete tbbflekppen
merlhet fel. Taln leggyakrabban az a motivcija egy informatikai fejleszts
kezdemnyezsnek, hogy a felhasznlk elgedetlenek a mkd rendszerrel ami lehet
teljesen vagy csak rszben automatizlt esetleg teljesen manulis , s javasoljk akr a rgi
rendszer lnyeges mdostst, akr egy j rendszer kiptst. A projektek elkezdsnek
msik gyakori oka j zleti lehetsgek felmerlse, amelynek rvn a vllalat verseny-
elnyre kpes szert tenni. Erre taln a legjobb plda az e-business terlete.
Legyen brmi is a motivci, felttlenl szksges egy alapos s krltekint vizsglat a
megvalsts lehetsgeit s eslyeit illeten. Ennek a vizsglatnak fontosabb megllaptsait
tartalmazza az n. megvalsthatsgi tanulmny (feasibility study).
A szoftverprojekt menedzsernek dolga az, hogy biztostsa (megtervezze, temezze, rtkelje,
felgyelje stb.), a szoftverprojekt megfelel a kltsgvetsi s temtervi megszortsoknak, s
olyan rendszer kerl leszlltsra s tadsra, amely jelentsen hozzjrul a szervezet, cg,
kzintzmny zleti cljai elrshez. Szoftverprojektek menedzselse felttlenl szksges,
mert a szoftverfejleszts mindig kemny pnzgyi (kltsgvetsi) s temezsi (idbeli)
korltok kztt folyik. A projektmenedzser feladatai kzl az albbiak a legfontosabbak:
Projektjavaslatok rsa
Projektek tervezse s temezse
Projektkockzatok azonostsa, elemzse s figyelse
Projektkltsgek figyelemmel ksrse
Projektek fellvizsglsa
Rsztvevk kivlasztsa s teljestmnyk rtkelse
Beszmoljelentsek rsa s prezentcik ksztse
A projektindts egyik legfontosabb tevkenysge
a szksges emberi erforrsok (ember nap, man month),
az idtartam (naptri hnapok),
a kltsgek
lehetsg szerinti minl pontosabb megbecslse.
- 135 -
(Ha tegyk fel egy feladat elvgzsnek emberi erforrs ignye 6000 ember - nap, akkor ez
azt jelenti, hogy pldul 30 fnek 10 hnapig, 200 fnek msfl hnapig, 1200 fnek pedig
egy htig kellene dolgoznia a megoldson. Termszetesen a valsgban a feladat termszete,
a rszfeladatok egymsra plse kizrhat bizonyos kombincikat.)
Maguk a becslsek leggyakrabban a korbbi projektek tapasztalataira ptenek. Viszonylag
egyszer a helyzet, ha az j projekt a rendeltetst s mrett illeten hasonlt korbbi
fejlesztsekre. Br kt egyforma projekt nincs, mgis valszn, hogy az j vllalkozs
nagysgrendileg ugyanannyi erforrst fog a ignyelni, mint a korbbiak. A helyzet
lnyegesen bonyolultabb, ha olyan projekt beindtst tervezik, amelyhez hasonlt (legalbbis
a projekt rsztvevi) nem ismernek. Ilyenkor azt az eljrst szoktk alkalmazni, hogy
megksrlik a fejleszts vrhat folyamatt egszen apr rszekre bontani, s e rszekre kln-
kln ksztenek becslst mltbeli tapasztalatok felhasznlsval s klnfle
szoftvermrtkek alkalmazsval.
A projektindts fzisnak, amellyel kapcsolatban nem lehet elgg hangslyozni, hogy
mennyire kritikus a rendszerfejleszts egsznek sikert illeten, tovbbi fontos rsze a
fejleszts temtervnek elksztse. Elsknt a rszfolyamatokat kell azonostani, hozzjuk
rendelve a vgrehajts idtartamignyt. Majd a rszfolyamatok fggsgi viszonyait kell
feltrkpezni, ami azt jelenti, hogy minden rszfolyamatra meg kell mondani, mely
tevkenysgeknek kell azt megelznik; illetve mely tevkenysgek elkezdsnek felttele,
hogy a szbanforg tevkenysg rszben vagy teljesen befejezdjn. Fontos megjegyezni,
hogy az temezsnek nem csak az idtartamra, hanem az emberi erforrsokra is vonatkoznia
kell. A rendszerfejleszts els fzisnak termszetesen rsze a fejleszti csapat sszelltsa.
Prbljuk megfogalmazni miben is klnbzik az alkalmazsfejleszts, a szoftverrendszerek
fejlesztse (software engineering) ms (mrnki) tevkenysgektl. (Az eltrsek, a
klnbsgek szem eltt tartsa azrt is kvnatos, mert nagyon sok, hagyomnyosan
menedzselt szoftverprojekt bizonyult sikertelennek az informatika rvid, alig 60 ves
trtnetben. A kudarc arnya lnyegesen fellmlja az ipari tlagot.)
Legalbb ngy okot tudunk megnevezni, ami miatt a szoftvertervezk munkja nem olyan
jelleg, mint a hagyomnyos mrnkk:
56. A szoftver nem egy kzzelfoghat termk. Ha egy toronyhz ptse csszik, mind a
kivitelezk, mind a megrendelk ltjk az elmaradst. A szoftverprojekt csszst
sokkal nehezebb felismerni. Ezrt szoktak a projektek megrendeli ragaszkodni
ahhoz, hogy idrl-idre valamilyen kzbens termk (deliverable) tadsra kerljn,
br ez nem oldja meg teljesen a problmt.
57. A szoftver egyedlllan rugalmas termk. Ha egy pletet eredetileg krhznak
terveztek, menetkzben nehz azt mondjuk sportstadionn tpteni.
Szoftverprojektekben ilyen mret irnyvlts gyakran elfordul.
- 136 -
58. A szoftverprojektek jelentsen klnbzhetnek a korbbiaktl. Br a mrnki
tudomnyok fejldse is gyors, az mg sem kzelti meg az informatika fejldsi
temt. A gyakori technolgiai vltsok a korbbi projekttapasztalatokat rendkvl
hamar elavultt teszik.
59. Nehz megjsolni mikor fog egy szoftverprojekt fejlesztsi problmkba botlani. Az
informatikban mg nem rtk el azt a szintet, hogy a termktpusok s az ket
elllt szoftverfolyamatok kapcsolatt tkletesen megrtsk.
A rendszerelemzs fzisban a projekt rsztvevi az zleti problmt s annak krnyezett
tanulmnyozzk, elemzik abbl a clbl, hogy pontosan, egzakt mdon meg tudjk
fogalmazni a leend informatikai rendszerrel szemben tmasztott ignyeket, elvrsokat s
kvetelmnyeket, fggetlenl attl, hogy ltezik-e mr valamilyen informatikai rendszer,
vagy a semmibl kell azt megkonstrulni. (A tovbbiakban a kvetelmny elnevezst abban
az rtelemben fogjuk hasznlni, mint az informatikai rendszer ltal nyjtand szolgltatsok
magas szint, absztrakt megfogalmazst.) A rendszerelemzs fzisnak fontossgt nem
lehet elgg hangslyozni, br a gyakorlatban errl sajnlatos mdon igen gyakran
megfeledkeznek. A tapasztalatok szerint az elindtott rendszerfejlesztsi projekteknek csak kis
tredke fejezdik be a kitztt hatridre s az eltervezett kltsgvetsen bell. Ennek az
egyltaln nem megnyugtat tnynek az az elsdleges magyarzata, hogy az elemzk az
esetek jelents rszben nem a kell krltekintssel vgeztk munkjukat. Fontos
megjegyezni, hogy a rendszerelemzs elssorban nem informatikai feladat, hanem
szakterleti (gazdasgi, mezgazdasgi, orvosi stb.). A hangsly a szakterleti problmn
van, s nem a szmtgpes programrson. A rendszerelemzkkel kapcsolatban tmasztott
egyik legfontosabb elvrs a kivl kommunikcis kszsg, hiszen a kvetelmnyek
megfogalmazsa fknt a felhasznlkkal folytatott megbeszlsek s a velk ksztett
interjk rvn lehetsges.
A tervezs fzisa az alternatv megoldsi javaslatok rtkelst s a vglegestett megolds
rszletekbe men megadst, az n. specifikcik rgztst tartalmazza. A tervezs sorn a
hangsly az zleti clokrl, problmkrl s krnyezetrl fokozatosan ttoldik a szigoran
vett informatikai krdsekre, mint pldul kpernytervek, riportformtumok elksztse,
adatbzisok, illesztsek, programok tervezse stb. Megklnbztetnk logikai s fizikai
tervezst. A tervezs fzisnak vgtermke, a specifikcikat rgzt dokumentum lesz a
kiindul pontja a programozk munkjnak.
A kivitelezs vagy implementls fzisa a megolds fizikai megkonstrulst jelenti, s annak
zembe lltst a megrendel telephelyn. Ehhez a fzishoz tartozik a programozs vagy
kdols.
A validls fzisa mindazokat az ellenrz folyamatokat tartalmazza, amelyek biztostjk,
hogy a szoftverrendszer megfelel specifikcijnak s kielgti a felhasznlk ignyeit. A
validls legfontosabb tevkenysge a tesztels, ami az egyes programrszek, azaz modulok
- 137 -
ellenrzstl az egyttmkdst biztost n. integrcis teszteken keresztl a teljes rendszer
(azaz szoftver, hardver, hlzatok s adatbzisok) megfelel viselkedsnek ellenrzsig
terjed. Fontos megjegyezni, hogy a br a validcit egytt szoks emlegetni a verifikcival,
ez a kt fogalom nmileg mst jelent. Verifikci alatt azt rtjk, hogy vajon megfelel-e a
szoftverrendszer a specifikcijnak, illetve azt, hogy eleget tesz-e a funkcionlis s nem-
funkcionlis kvetelmnyeknek, mg a validci annak ellenrzse, hogy megfelel-e a
szoftverrendszer a megrendel, az gyfl, a vev valdi elvrsainak. A klnbsg tisztn
kivehet.
A 20. szzadi menedzsmenttudomny legnagyobb hats gondolkodja, Peter Drucker szerint
az eltrs a kvetkezkppen fejezhet ki kzrthet formban:
Verification "Are we building the product right?"
Validation "Are we building the right product?"
A telepts fzisban kerl sor egyebek mellett a rendszer tadsra amely lps meglepen
sokflekppen trtnhet , a vgleges dokumentci elksztsre s a felhasznlk
betantsra.
Az zemeltets fzisa egyrszt felleli a folyamatos napi mkdtetst, annak tmogatst,
msrszt az esetleges hibk kijavtst, a rendszer tkletestst, a megvltozott
krlmnyekhez trtn adaptlst. Ez a fzis, amit mskpp rendszerevolcinak is
neveznek, ltalban hossz ideig tart s kltsges, s azzal r vget, hogy a rendszer elavultt
vlik, kpletesen szlva meghal. Ekkor zemen kvl helyezik, s ez jelenti az letciklus
vgt.
Informatikai rendszerek fejlesztsnek az elmlt 50 vben szmos mdja vlt ismertt. A
nagy rendszerek semmibl val ltrehozsa mellett, amire egyre kevesebb megrendel
vllalkozik, az utbbi vekben egyre npszerbb lett az jrafelhasznlhat komponens alap
fejleszts, a ksz alkalmazsi programcsomagok adaptlsa s hasznlata, valamint kisebb
projektekben az nll vgfelhasznli fejleszts. A kvetkez fejezetekben rszletesen
megvizsgljuk s sszehasonltjuk a rendszerfejleszts klnfle formit, folyamatmodelljeit
s folyamatiterciit.
Informatikai rendszerek sikeres fejlesztse, mint azt a fentiekben mr rszletesen elemeztk,
teljessggel elkpzelhetetlen az zleti folyamatok megrtse nlkl, amelyek tmogatsra
tervezik s fejlesztik e rendszereket. Ez a tevkenysg a rendszerelemzs, vagy mskppen a
kvetelmnyek meghatrozsa (requirement engineering) fzisban trtnik meg. Minden
ltez vagy tervezett zleti folyamat s ezzel egytt a rendszerek sokflekppen elemezhetk.
Ezen megkzeltsek nmelyike az alkalmazott technolgira, msok a szervezetre
koncentrlnak, amelyben az zleti folyamatok lejtszdnak. Ltezik egy tovbbi
- 138 -
megkzelts, amely az zleti folyamatok sorn elvgzett zleti tevkenysgekre figyel, ezek
alapjn r le, illetve elemez rendszereket. Ez a mdszer az elmlt vekben igen elterjedtt vlt.
15.2 A rendszerfejleszts folyamatmodelljei
A rendszerfejleszts folyamata, tekintet nlkl arra, hogy az tnylegesen hogyan is trtnik,
bizonyos tevkenysgeket, erforrsokat, termkeket, technikkat s eszkzket foglal
magban. Az elmlt vtizedekben tbbflekppen kzeltettek e folyamathoz. Ezen
megkzeltsek kzl az albbi t hasznlatos ma is:
hagyomnyos vzessmodell, s annak varinsai,
szoftverprototpus ksztse, evolcis fejleszts,
jrafelhasznlson alapul fejleszts,
ksz alkalmazsi programcsomagok hasznlata,
vgfelhasznli fejleszts.
Ebben a fejezetben ezeket a rendszerfejlesztsi technikkat ismertetjk s hasonltjuk ssze,
trgyalva elnyeiket s htrnyaikat. Fontos hangslyozni, hogy a rendszerfejleszts
brmelyik vltozatt vlasztjuk is, valamennyi technika a mr emltett tevkenysgekbl ll:
projektindts,
kvetelmnyelemzs,
tervezs,
megvalsts, kivitelezs, implementci, integrci
validls, tesztels
telepts, zemeltets, karbantarts, rendszerevolci.
Meg kell itt jegyeznnk, hogy a fzisok szmt, illetve azok elnevezst illeten sokfle
konvenci van forgalomban. Az letciklus tagolst, az alkot fzisok szmt illeten az
informatikusok vlemnye eltr. Valjban nincs nagy jelentsge annak, hogy 5, 6 vagy 7
tevkenysget klnbztetnk-e meg. Ezt a krdst teht rugalmasan kell kezelni. Idnknt
tbb fzist ssze fogunk vonni, illetve egy-egy fzist tovbbi rszfzisokra fogunk bontani.
rtelemszeren a projektindts szakaszban elsknt magt a problmt kell definilni. Ez
ltalban az albbi krdsek feltevst s megvlaszolst jelenti:
Mirt van szksgnk egy j informatikai fejlesztsre, egy j projektre?
Mit szeretnnk megvalstani, elkszteni, megoldani az j informatikai rendszerrel?
Tmogatja-e a tervezett rendszer a vllalat, az intzmny ltalnos (zleti)
clkitzseit?
Mit kell tmogatnia a tervezett rendszernek s mit nem?
Milyen problmk merltek fel a jelenlegi folyamatokkal kapcsolatban?
Hogyan segtene ezeken a tervezett j rendszer?
- 139 -
Hogyan jrul hozz a tervezett rendszer az zleti clok megvalstshoz?
Mi trtnne, ha a rendszert nem valstank meg?
Megvalsthat-e a tervezett rendszer a jelenlegi (elrhet) technolgival az adott
kltsgkereten bell s adott temezs szerint?
Ignyel a rendszer j technolgit?
Milyen integrcis problmk lehetnek?
Integrlhat-e a tervezett rendszer ms, mr a vllalatnl hasznlatban lv mkd
rendszerekkel
Ebben a fzisban kell a projekt elindtsrl dnteni egy krltekint megvalsthatsgi
tanulmny alapjn, kltsgbecslst s projekttervet kszteni, sszelltani a fejleszti csapatot
stb.
Az elemzs fzisa a (ltez s/vagy az j) rendszer tanulmnyozst s modellezst jelenti.
Az esetek tekintlyes szzalkban a mr ltez (rszben vagy teljesen automatizlt, vagy
akr teljesen manulis) rendszer problmit elemzik a lehet legnagyobb rszletessggel. Ms
esetekben j kihvsoknak igyekeznek innovatv mdon megfelelni. Valamennyi esetben
pontosan meg kell hatrozni a rendszerrel szemben tmasztott kvetelmnyeket. Az elemzs
clja teht a problma nagyon pontos, kimert, lehetsg szerint teljes s vilgos lersa.
A tervezs fzisban az elzekben megfogalmazott kvetelmnyeket, specifikcit kell
hardver/szoftver megoldss talaktani. Az informatikban a terv a megolds
specifiklst, egzakt lerst jelenti, az implementls pedig a rendszer fizikai meg-
valstst, kivitelezst, validlst, tesztelst s tadst a megrendelnek, mgpedig
abban a krnyezetben, ahol tnylegesen hasznlni fogjk. A megvalsts trtnhet a
szksges szoftver
megrsval vagy
megvsrlsval, esetleg
lzingelsvel.
Az implementls fzisban kell a hardvert beszerezni s installlni, amennyiben az mg nem
ll rendelkezsre. Szintn az implementls rsze a felhasznlk betantsa, kikpzse s a
felhasznli, illetve a rendszerdokumentci vglegestse.
A validls fzisa az ellenrzst jelenti. Ez ltalban nem az implementls befejezsekor
kezddik el, hanem lnyegben vgig kisri a megelz fzisokat. Is.
Az zemeltets fzisa akkor kezddik, amikor a fejleszti csapat tadja a rendszert a
megrendelnek, s azt folyamatos napi hasznlatra zembe lltjk. Egyrszt a mkds sorn
felmerl hibkat kell viszonylag gyorsan kijavtani, msrszt adaptlni a rendszert a
megvltozott zleti krlmnyekhez, tovbb tkletesteni, pldul a funkcik bvtsvel.
- 140 -
A fentiek egyttesen alkotjk az informatikai rendszer letciklust. Az elnevezs rendkvl
tall, hiszen egy rendszer lete valban sok hasonlsgot mutat az emberi lettel.
Mindkett esetben beszlhetnk kezdetrl s vgrl. Az informatikai rendszerek halla,
azok zemen kvl helyezse s lecserlse, hasznos lettartamuk utn, jabb rendszerekre.
Elre javallott megtervezni az zemen kvl helyezst, s gondoskodni kell az adatok
konverzijrl, nehogy azok elvesszenek a tovbbi felhasznls szmra.
A szoftverrendszer-fejleszts mdszereit nem lehet s nem rdemes rangsorolni, az eltr
helyzetek klnbz megkzeltseket tesznek, tehetnek indokoltt. Ha ltezne egy olyan
mdszer, amelyik minden tekintetben jobb a versenytrsainl, szksgtelenn tenn a
tbbiekkel val foglalkozst. Mivel ilyen nem ltezik, ezrt tisztban kell lennnk azzal, hogy
milyen kritriumok alapjn vlasszunk az alternatvk kzl.
15.2.1 Klasszikus vzess modell s varinsai
15.2.1.1 A vzess modell
A hagyomnyos vzess modell tnylegesen a legrgibb rendszerfejlesztsi technika. Az els
modell mg az tvenes vek elejn, kzepn szletett meg, br elnevezst vzess modell
csak 1969-ben kapta. A nv magyarzata, hogy az egyes fejlesztsi szakaszok gy kvetik
egymst, mint egy tbblpcss (kaszkd-) vzess.
A vzess modell bizonyos vltozataiban az egyes fzisokat tovbb bontjk. A tesztels
pldul ltalban t lpsben trtnik:
egysgteszt,
modulteszt,
integrcis teszt,
rendszerteszt,
elfogadsi teszt;
az tads pedig hrom, idben elklnl tevkenysgbl ll:
3
installci,
dokumentci vgleges vltozatnak tadsa,
betants s trning.
- 141 -
2. ELEMZS
3. RENDSZER- S
PROGRAMTERVEZS
4. PROGRAMRS
5. TESZTELS
6. TADS
7. ZEMELTETS
1. PROJEKTINDTS
15.1. bra A rendszerfejleszts hagyomnyos vzess modellje
Fontos kiemelni, hogy a vzess modell egy szigoran dokumentumvezrelt folyamat. Ez azt
jelenti, hogy egyik fzisbl az utna kvetkez fzisba csak a fzis teljes befejezse s a
befejezst igazol dokumentum, rszeredmny (deliverable) elkszlte utn lehet tmenni. (A
rszeredmnyek olyan eredmnyek, amelyek a szoftverfejleszts egyes mrfldkveinl
tadhatk a megrendelnek.) E folyamatmodellben a lpsek sorrendje elre rgztett. Az
egsz folyamat a legaprbb rszletekig bezrlag szablyozott. Ez a tny, br lnyegesen
megnyjtja a fejleszts idtartamt, egyttal ltalban garancia is a minsgi munkra. A
tradcionlis vzess modellt (tovbbfejlesztseivel egytt) szinte kizrlag nagy mret s
hossz lettartam rendszerek fejlesztsre hasznljk. A szigor elrsok garantljk a j
minsg, br lass fejlesztst. ltalnos szablyknt elmondhatjuk, hogy a vzess modellt
csak akkor rdemes alkalmazni, ha a kvetelmnyek mr elre jl ismertek.
A klasszikus vzess modellt gyakran hasonltjk egy olyan bevsrlshoz, ahol a vevnek
mr az zletbe lpve pontosan meg kell mondania, mit hajt vsrolni, anlkl, hogy idt
hagynnak neki az alapos krbenzsre, az rak sszehasonltsra. Ebben a helyzetben nincs
md, pontosabban nagyon csekly lehetsg van csak arra, hogy menet kzben mdostsunk
eredeti elkpzelseinken. A vzess modell egyetlen igazi problmja a flexibilits hinya. Ez
a megfogalmazs azt jelenti, hogy meglehetsen korn, mr a fejlesztsi folyamat elejn kell
elkteleznnk magunkat bizonyos dntsek mellett, s ezeken a ksbbiekben nem ll mdunk
vltoztatni.
- 142 -
15.2.1.2 A V modell
A kilencvenes vek legeleje ta nagyon npszer a rendszerfejlesztk krben a nmet
nemzetvdelmi minisztrium ltal kidolgozott folyamatmodell, az n. V modell. A fejleszts
egyes fzisai egy V bett formlnak, amelynek cscsban a programrs tevkenysge ll, tle
balra az elemzs s a tervezs, tle jobbra pedig a tesztels s a karbantarts lpse tallhat.
A V alakzat magyarzata az, hogy ebben a folyamatmodellben a tesztels kerl kzponti
helyre. A modulteszt s az integrcis teszt verifiklja a rszletes programtervet, azaz igazolja
a terv helyessgt, a rendszerteszt pedig verifiklja magt a rendszertervet. A megrendel
ltal elvgzett elfogadsi teszt validlja, azaz rvnyesti, igazolja a rendszerelemzs
helyessgt. Ez utbbi azt jelenti, hogy a megrendel ellenrzi, vajon minden, a rendszerrel
szemben megfogalmazott kvetelmny megvalsult-e a rendszerfejleszts sorn.
A V modellben 9 fejlesztsi fzist klnbztetnk meg, amelyek kzl hrom a tesztelsre
vonatkozik.
60. projektindts,
61. elemzs, kvetelmnyek meghatrozsa,
62. rendszerterv elksztse,
63. rszletes programterv elksztse,
64. programrs,
65. modul- s integcis tesztels,
66. rendszertesztels,
67. elfogadsi tesztels,
68. tads s zemeltets, karbantarts.
1
2
3
5
verifikci I.
verifikci II.
validci
6 4
7
8
9
15.2. bra A rendszerfejleszts V modellje
- 143 -
Mint azt korbban tisztztuk, a validci annyit jelent, hogy meggyzdnk arrl, vajon a
helyes, azaz a megrendeli ignyeknek, kvetelmnyeknek eleget tev, megfelel rendszert
ptjk-e, a verifikci pedig azt jelenti, hogy meggyzdnk arrl, helyesen ptjk-e a
rendszert, azaz a tervezsi dokumentumban rgztett specifikcik alapjn. Az elfogadsi
tesztels sorn gyzdik meg a megrendel, hogy a szmra elksztett informatikai rendszer
rendelkezik-e mindazon funkcionlis s nem-funkcionlis tulajdonsgokkal s jellemzkkel,
amelyeket tle elvrnak. Ha nem rendelkezik ezekkel, akkor vissza kell trni az elemzs
fzishoz, s azt jra el kell vgezni. S ezt a visszacsatolst annyiszor kell (s lehet)
megismtelni, ahnyszor arra szksg mutatkozik.
A rendszer verifikcija ktflekppen is megtehet. Az integrcis tesztels sorn tapasztalt
diszkrepancia (eltrsek) esetn a rszletes programtervhez, a rendszertesztelsnl tapasztalt
problmk esetn pedig a rendszertervhez kell visszanylni. Termszetesen az iterci itt is
lehetsges.
15.2.2 Prototpusok ksztse, evolcis fejleszts
15.2.2.1 Szoftverprototpusok alkalmazsa
A tradicionlis vzess modellen alapul rendszerfejleszts gyengesgeit viszonylag hamar
felismertk. Ezek kikszblsre szmos elkpzels szletett, melyek kzl a
szoftverprototpusok alkalmazsa az egyik legismertebb s leggyakrabban hasznlt technika.
A prototpus sz mintapldnyt jelent, s a rendszerfejlesztsben tbbfle rtelemben is
hasznljk ezt a kifejezst:
az evolcis rendszerfejleszts eszkzeknt,
a rendszerrel szemben tmasztott felhasznli kvetelmnyek megfogalmazsakor,
specifiklsakor felmerl problmk megoldsra,
valamely nagyobb befektetst ignyl dnts tmogatsra a lehetsges megold-
sokkal val ksrletezssel.
A szoftverprototpusok hasznlatnak alaptlete az, hogy minl hamarabb ki kell fejleszteni
egy kezdetleges implementcit, s azt sok-sok itercis lpsen keresztl finomtani
mindaddig, amg a megfelel rendszert nem rtk el, s mindezt a felhasznlkkal val
folyamatos konzultcik sorn.
Rgi tapasztalat, hogy az informatikai rendszerek megrendeli a projekt indtsakor ltalban
alig, vagy nagyon nehezen tudjk valamennyi elvrsukat pontosan megfogalmazni a
kifejlesztend rendszerrel kapcsolatban, ami termszetesen egyltaln nem meglep. Egy j
rendszer irnti igny motivcija az esetek nagy rszben az, hogy a megrendel elgedetlen
a jelenlegi helyzettel. Ennek egyik oka lehet az, hogy a jelenlegi rendszer egyltaln nem
- 144 -
kpes kezelni azokat a problmkat, amelyek felmerlnek, vagy nem megfelelen, nem
hatkonyan kezeli azokat.
A meglev rendszer ismerete azonban nem biztos, hogy elgsges az jjal szembeni elvrsok
teljes krnek meghatrozshoz. Gyakori eshetsg az, hogy a megrendel nincs teljesen
tisztban azzal, hogy az j rendszer rvn egyltaln milyen elnykhz juthat hozz. Ilyen
esetekben is hasznos egy mkd, funkcionalitsban hasonl, m teljestmnyben,
kapacitsban, sebessgben, zembiztonsgban, vdettsgben, robosztussgban,
sszetettsgben, komplexitsban a kvnt rendszertl esetleg lnyegesen elmarad
mintapldny megalkotsa, amely bizonyos krdsek tisztzsra alkalmas a rendszerfejleszt
csoporton bell, ltalban a megrendel s a rendszerelemz kztt. Ms terletekkel
(autgyrts, rhajzs stb.) sszehasonltva a szoftverprototpusok elksztse ltalban nem
tl kltsges s idignyes. Bizonyos esetekben akr tbb tucat prototpus is viszonylag
knnyen kifejleszthet. Ezen prototpusok fejlesztsnek nagyjbl ugyanazok a folyamatai,
mint a teljes rendszernek, azaz
elemzs,
tervezs,
kivitelezs, megvalsts,
validls, tesztels,
interci,
Ezek a fejlesztsi lpsek ismtldnek, iterldnak mindaddig, amg a rendszerfejleszt
csapaton bell meg nem szletik a konszenzus a kvetelmnyeket illeten. Ezutn kerlhet
sor a nagy rendszer fejlesztsnek kvetkez fzisra, a rendszertervezsre. Az elksztett
prototpusokat a rendszerfejleszts tovbbi fzisaiban nem felttlenl hasznljk. (Innen az
elnevezs: eldobhat (throw away) prototpus, br ezek gyakran jrafelhasznlhatk ms
projektekben.)
Ez az eljrs tulajdonkppen annak ellenrzse, hogy valban a j rendszert fejlesztik-e. Az
eldobhat prototpusok ksztsnek a clja teht a kvetelmnyek vilgosabb ttele s a
fejlesztsi folyamat kockzatnak cskkentse.
- 145 -
PROJEKTINDTS
ELEMZS
TERVEZS
MEGVALSTS
TESZTELS
RENDSZERTERVEZS
MEGVALSTS
TESZTELS
ZEMELTETS
15.3. bra A rendszerfejleszts folyamatmodellje prototpusok alkalmazsval
Ltezik a prototpusok hasznlatnak egy msik mdja is, s igazbl ez az elterjedtebb,
amelyre kt dolog jellemz:
lnyegben nincs elemz fzis,
a kezdeti prototpus alakul t, fejldik az itercik, az evolci sorn a vgtermkk.
Kiss leegyszerstve az llthat, hogy az evolcis prototpusok alkalmazsakor a
megrendel elszr egy olyan, tvolrl sem teljes mintarendszert kap, amely a kvetelmnyek
halmaznak egyfajta korltozott megrtsn alapul. Ez a kezdeti rendszer azutn fokozatosan
mdosul, mind tbb kvetelmnynek tve eleget. Ez a technika klnsen akkor hasznos, ha a
rendszer egy nem, vagy rosszul strukturlt problma megoldsra szolgl. Ilyenkor ltalban
a fejlesztk nem rtik teljes mlysgben az automatizlni kvnt folyamatot, mert pldul az
rendkvl bonyolult. (A mestersges intelligencia terletrl sok ilyen rendszert lehetne
emlteni.)
A kvetelmnyek hinya miatt a rendszeres elemzs fzisa kiesik. A kvetelmnyek
meghatrozsa, amely az egsz rendszerelemzs lnyege, fokozatosan, lpsrl lpsre
trtnik.
Termszetesen az evolcis prototpusok technikjt olyan rendszerek esetn clszer csak
alkalmazni, ahol egy-egy iterci gyorsan vgrehajthat, azaz a javasolt mdostsokat
- 146 -
gyorsan lehet megvalstani, implementlni, azaz ahol a ciklusid rvid. Ennek a
gyorsasgnak azonban vannak htrnyai is:
A folytonos vltoztatsok miatt a rendszer szerkezete, struktrja ltalban kevsb
tlthat, transzparens s kvetkezetes. (Az egyetlen termk a programkd.) A
javtgatsok s vltoztatgatsok kvetkeztben a kiindulsi struktra sokat romolhat.
A specifikci hinya a (javt, tkletest, bvt, adaptv s preventv) karbantartst
igen megneheztheti s megdrgthatja. Ezrt az gy fejlesztett rendszerek lettartama
ltalban viszonylag rvid. Fontos megjegyezni, hogy ltalban a karbantartst nem
felttlenl ugyanazok vgzik, akik magt a rendszert fejlesztettk.
Fontos nemfunkcionlis rendszerjellemzket, mint pldul a teljestmnyt,
biztonsgot, megbzhatsgot felldozzk a gyorsasg miatt, ami nehzkess teszi
ezen nem-funkcionlis kvetelmnyek utlagos teljestst.
A nem-funkcionlis kvetelmnyeket nem lehetsges a prototpusimplementcikon
mdszeresen tesztelni.
Nem kszl komoly rendszerdokumentci, hiszen annak idignyessge lehetetlenn
tenn a vltoztatsok gyors realizlst. Igazbl az egyetlen specifikcit maga a
prototpus kdja kpezi.
Az evolcis szoftverprototpusok hasznlatnak egyik tovbbi problmja, hogy a
verifikci lpse rtelmezhetetlen. A verifikci, mint az korbban trgyaltuk, annyit jelent,
hogy meggyzdnk arrl, helyesen ptjk-e a rendszert. Ez a gyakorlatban annyit tesz, hogy
ellenrizzk, a rendszer megfelel-e a megadott kvetelmnyspecifikciknak. Itt azonban
nincsenek specifikcik, teht formlisan nem lehetsges verifikci sem. Ehelyett egy
meglehetsen szubjektv rtkelst szoks elvgezni, amely nem knnyen mrhet.
A fenti problmk s htrnyok azonban nem jelentik azt, hogy az evolcis prototpusok
hasznlata bizonyos krlmnyek kztt ne lenne ajnlhat. ppen ellenkezleg. Pldul
interaktv rendszereket, szakrti rendszereket, felsvezeti informatikai rendszereket vagy
grafikus felhasznli felleteket ltalban ezzel a technikval fejlesztenek. Lthat azonban,
hogy igazn nagy mret s hossz lettartam rendszerek fejlesztsre ez a technika nem
alkalmas.
sszefoglalva azt mondhatjuk, hogy az eldobhat prototpusok hasznlatnak clja az
ismeretlen, kevss megrtett, nem vilgos rendszerkvetelmnyek tisztzsa. Azon
kvetelmnyekre, amelyek egyrtelmek, amelyeket nem kell tisztzni, nem kszl
prototpus. Az evolcis prototpusok viszont elszr a legjobban megrtett kvetelmnyeket
ptik be a modellbe, s azutn lpsrl lpsre, a megrendel s a fejleszt team szoros
egyttmkdsben dolgozzk fel a hinyz, vagy kevsb vilgos, fuzzy ignyeket.
- 147 -
15.2.2.2 A spirl modell
Az elz kt szoftverfolyamat-modell trgyalsakor lttuk, hogy hasznlatukkor komoly
problmk merlnek fel. Az 1988-ban bevezetett Boehm-fle spirlis folyamatmodell tvzi a
klasszikus vzess modell s a szoftverprototpusok alkalmazsnak technikjt, s ezenkvl
bepti a kockzatelemzst is a modellezsbe.
Ngy f tevkenysget klnbztet meg:
69. tervezs (clok kijellse, meghatrozsa, knyszerek s kockzatok azonostsa,
alternatv stratgik tervezse),
70. kockzatelemzs, becsls s cskkents,
71. termkfejleszts (szoftverprototpusok ksztse) s V&V (validci s verifikci),
72. rtkels, ttekints, tervezs s dntshozatal a folytatst illeten.
A spirlmodellben minden egyes iterci sorn az albbiakat kell megadni:
73. clok,
74. korltok (pnz, id stb.),
75. alternatvk,
76. kockzatok, veszlyek,
77. kockzatcskkent stratgik,
78. eredmnyek,
79. tervek,
80. dnts a folytatsrl.
Cl lehet pldul a szoftverminsg radiklis javtsa, korltozs pedig, hogy e clt nagyobb
tkebefektets s komolyabb szervezeti vltoztatsok nlkl szeretnk elrni. A folytatsrl
meghozott dnts lehet az, hogy tovbbi 10 hnapig folytatjk a finanszrozst.
Az els krben meghatrozzk a kvetelmnyeket (pontosabban azok egy minl bvebb
rszhalmazt), s elzetes tervet ksztenek a fejlesztsre, ide rtve a kltsgek, kls
knyszerek (a rendelkezsre ll pnz s id), valamint a tervezsi, krnyezeti alternatvk
meghatrozst. rtkelik a kockzatot s a prototpus alternatvkat. A kvetelmnyek
rendszere fokozatosan vlik teljess s konzisztenss. Az els iterci termke a
megvalsthatsgi tanulmny, a msodik kvetelmnyek teljes krnek meghatrozsa, a
harmadik a terv s a negyedik a tesztels.
Minden itercis lps sorn kockzatelemzssel mrlegelik a lehetsges alternatvkat a
kvetelmnyek s a knyszerek fggvnyben. A prototpusok verifikljk a
megvalsthatsgot, mieltt egy alternatva kivlasztsra kerlne. Amikor a veszlyeket,
kockzatokat azonostottk, akkor a projektvezetnek el kell dntenie, hogyan minimalizlja a
kockzatot. Ez pedig gy trtnik, hogy prototpusok kszlnek, s ezeken teszteket
vgeznek.
- 148 -
1. Kltsg-
vets
2. Kltsg-
vets
3. Kltsg-
vets
4. Kltsg-
vets
1. AT
2. AT
3. AT
4. AT
1. KE
2. KE
3. KE
4. KE
Kezds
Mkdsi
terv
1. Proto-
tpus
2. Proto-
tpus
3. Proto-
tpus
4. Proto-
tpus
Rszletes
terv
Elemzs
Tervezs
Tesztels
Program-
rs
Elfogads
V&V
V&V
Alternatvk
tervezse (AT)
Kockzat-
elemzs (KE)
rtkels
Kvetkez
fzisok
megterve-
zse
Fejleszts
V&V
15.4. bra A rendszerfejleszts spirlmodellje
15.2.3 Fejleszts jrafelhasznlssal
A harmadik rendszerfejlesztsi folyamatmodell a szoftverek jrafelhasznlsn alapul. A
tapasztalatok szerint a klnbz informatikai rendszerek fejlesztsekor lnyegben nagyon
hasonl szakmai krdsek, problmk merlnek fel. Ennek az a nyilvnval oka, hogy az
zleti letben szinte minden hasonl profil cg, vllalat, szervezet lnyegben ugyanazokkal
a kihvsokkal szembesl, ugyanazok vagy nagyon hasonlak az zleti clok s stratgik, a
krnyezeti felttelek, kls krlmnyek, jogi s szmviteli szablyok stb. vtizedeken
keresztl tbb ezer prhuzamos fejleszts trtnt, tbb ezer vagy tbb tzezer informatikus
dolgozott lnyegben azonos problmk megoldsn. Az ltaluk megtallt megoldsok
valsznleg nagyon hasonltottak egymsra, br errl viszonylag keveset tudunk, mivel az
egyes rendszerfejleszt projektek meglehets titkolzs kzepette zajlottak s zajlanak, a
- 149 -
rszletmegoldsok ritkn vltak publikuss, s a rsztvevk nemigen kommunikltak
egymssal. Ezt a helyzetet teht a szellemi erforrsok erteljes pazarlsa jellemezte.
Viszonylag ksn. a nyolcvanas vek kzepn, de igazbl csak az objektum-orientlt
technolgia trnyersvel, merlt csak fel annak a szisztematikus ignye, hogy az egyszer mr
jl megrt, alaposan tesztelt s sikeresen felhasznlt szoftverrszeket, komponenseket ksbbi
hasonl projektekben jra hasznostsk, s ebbl a clbl egy jl katalogizlt specilis
komponensknyvtrat hozzanak ltre. A tudomnyos szmtsokban mr a hatvanas vek
eleje ta hasznlnak n. szoftverknyvtrakat (NAG, IMSL), amelyek a leggyakrabban
alkalmazott numerikus matematikai eljrsok (algebrai egyenletrendszerek megoldsa,
sajtrtkek szmtsa, parcilis differencilegyenlet(rendszerek) megoldsnak kzelt
meghatrozsa), valamilyen programnyelvben (FORTRAN, Pascal, C++, Java) megrt s
jrafelhasznlsra alkalmass tett forrskdjait tartalmazzk. A kilencvenes vekre azonban
ez ltalnos gyakorlatt kezdett vlni az zleti letben is, a szoftver jrahasznlat (software
reusability) pedig az egyik leginkbb kutatott informatikai terlett lett.
A szoftver jrafelhasznlsa nem felttlenl jelenti azt, hogy az egyes rszeket vltoztats
nlkl alkalmazzk az elkvetkez projektekben, hanem inkbb arrl van sz, hogy megsznt
a semmibl jat teremts gyakorlata. Ehelyett korbbi rendszerek komponenseit vizsgljk
meg, vajon azok adaptlhatk-e, vagy ami mg szerencssebb, vltoztats nlkl
jrafelhasznlhatk-e a fejleszts sorn. Fontos megjegyezni, hogy ezt akkor is rdemes s
clszer megnzni, ha az j informatikai projekt egsze lnyegesen klnbznek is tnik a
korbbiakhoz kpest. (Az angol nyelv informatikai irodalomban a mdosts nlkli
jrafelhasznlsra szoks a black-boksz reuse, az adaptcit magban foglal vltozatra pedig
a white-box reuse kifejezsek hasznlata.)
Az adaptcis jrafelhasznls esetben mindig rdemes mrlegelni, hogy a mr ltez
komponens szerkezetnek s mkdsnek megrtse, valamint a szksges vltoztatsok
tvezetse nem ignyel-e tbb erfesztst s hosszabb idt, mint egy vadonatj
programmodul megalkotsa. Felismerve ezt a problmt, a knyvtrakban ltalban olyan
komponenseket helyeznek el, amelyek a paramterek megvlasztsnak fggvnyben
sokoldalan alkalmazhatk. A felttlenl szksgesnl tbb paramter hasznlata nagy
mrtkben javthatja az jrafelhasznls eslyeit.
A szoftver-jrafelhasznls s ezt a gyakorlat igazolta jelentsen cskkenti a fejleszts
kltsgt, s szignifiknsan nveli a termelkenysget. (Ez pldul KLOC/PM egysgben
mrhet). A termelkenysg nvekedse nemcsak annak a kvetkezmnye, hogy kevesebb
idt kell programrssal tlteni, hanem annak is, hogy a tesztelsre s a dokumentcik
ksztsre fordtand id is jelentsen cskkenthet. Az jrafelhasznls, s ezt lnyeges
hangslyozni, nemcsak a forrskd programsorokra vonatkozik, hanem a kvetelmnyek
meghatrozsra, a folyamatokra, a tervezsre, a tesztesetekre s tesztadatokra, valamint a
dokumentcira is.
- 150 -
A szoftver-jrafelhasznls a rendszerfejleszts folyamatban a leggyakrabban gy trtnik,
hogy a mr emltett komponensknyvtrakban fellelt ksz programrszeket szemlletesen
szlva ptkockaknt kezelik, s azok kr, azokra pl r a teljes szoftver. Ez a megkzelts
teht alulrl felfel haladva ptkezik, alapul vve azt, ami mr rendelkezsre ll. Az
jrafelhasznls legnehezebb problmjnak az tnik, hogyan lehet a szoftverknyvtrakban
az adott szitucira legalkalmasabb komponenst megtallni a nagy szm lehetsg kzl.
A gyakorlati tapasztalatok azt bizonytjk, hogy az j informatikai projektekben az
jrafelhasznlt komponensek alkalmazsnak mrtke elrheti, st meghaladhatja a 70-80%-
ot, ami jelents kltsgcskkenst s minsgjavulst eredmnyez. Szmos fejlesztcg kln
sztnzrendszert dolgozott ki a szoftver-jrafelhasznls tmogatsra.
Az eddig lertak a szoftverkomponensek jrafelhasznlsra vonatkoztak. Az rem msik
oldala az ilyen komponensek megrsa, ltrehozsa. Egy, az elmlt vekben vgzett
sszehasonlt vizsglat megllaptsa szerint ennek relatv kltsge tlagosan a ktszerese-
tszrse egy ugyanolyan mret, de nem jrafelhasznlsra sznt programrszlet
elksztsnek. Ugyanezen vizsglat az jrafelhasznls relatv kltsgt tlagosan 10-20%-ra
teszi. Ezek az adatok, mg ha nagy szrst is mutatnak, jl jelzik, hogy milyen elnykkel s
milyen extrakltsgekkel jr a szoftverkomponensek jrafelhasznlsa.
Az albbi felsorols sszefoglalan tartalmazza az jrafelhasznls potencilis elnyeit s
problmit:
Elnyk
Kisebb kockzat kisebb a bizonytalansgi tnyez a fejlesztsi kltsgekben
Fokozott megbzhatsg mkd rendszerekben mr kiprblt s alaposan tesztelt
komponensek
Gyorsabb fejleszts s cskken kltsgek szignifikns javuls rhet el
Szabvnyoknak val megfelels szabvnyok implementlsa szabvnyos
jrafelhasznlhat komponensekben
Szakemberek hatkonyabb alkalmazsa komponensek s nem a szakemberek
jrafelhasznlsa kvnatos
Problmk
Nvekv karbantartsi kltsgek a rendszer vltoztatatsval az jrafelhasznlt
elemek inkompatibiliss vlhatnak
Az eszkztmogats hinya a CASE-eszkzkszletek nem tmogatjk az
jrafelhasznlson alapul szoftverfejlesztst
Komponensknyvtrak karbantartsa magas kltsggel jr a katalogizlsra s a
visszakeressre szolgl technikk hasznlata
- 151 -
Komponensek megtallsa s adaptlsa komoly jrtassg kell hozz
15.2.4 Ksz alkalmazsi programcsomagok hasznlata
A negyedik rendszerfejlesztsi technika a ksz alkalmazsi programcsomagok hasznlata. E
mdszer alapgondolata, hogy br minden vllalat klnbzik a tbbiektl, valjban az ket
kiszolgl informatikai rendszerek nagyon hasonltanak egymsra. Mivel vllalatok ezreirl,
esetleg (ha nem csak egyetlen orszgban tekintjk ket) szzezreirl van sz, gy
meglehetsen termszetesen addik a felvets, hogy mirt ne lehetne olyan
programcsomagokat kszteni, amelyek minimlis mdostsokkal alkalmasak nagy szm
vllalat azonos tpus problminak megoldsra. ltalban ezek a vllalatok hasonl
mretek, s a piac azonos szegmensben tallhatk, br lteznek olyan programcsomagok is,
amelyek sokkal szles krben hasznlhatak. A bevezetben emltett fzisok, a
projektindts, projektmeghatrozs,
elemzs,
tervezs,
tesztels, validci,
implementls, integrci,
zemeltets, karbantarts, tmogats
ugyangy felismerhetk a ksz alkalmazsi programcsomagokkal trtn fejleszts esetn is.
Tves az a vlekeds, hogy egy ksz alkalmazsi programcsomag megvsrlsa feleslegess
teszi az letciklus modellt, br ktsgtelenl jelentsen lervidtheti a fejleszts idtartamt.
Az els kt fzis (projektmeghatrozs s elemzs pontosan gy trtnik, mint a tradcionlis
rendszerfejleszts esetn. Az elemzs fzisa s a funkcionlis specifikcik elksztse
nlklzhetetlen, hiszen vilgosan s egyrtelmen meg kell fogalmazni, hogy mit vrunk el a
rendszertl.
A tovbbi fzisok jelentsen leegyszersdnek, br pldul ekkor is szksg van annak
eldntsre, hogy a megvsrolt szoftver pontosan milyen funkciira tartunk ignyt, ekkor is
t kell adni s tesztelni kell a szoftvert (legfeljebb a modulteszt lpse maradhat el), s a
dokumentcit is testre kell szabni.
Az installls lpse lnyegben abbl ll, hogy el kell dnteni, a programcsomag ltal knlt
opcikbl melyekre tartunk ignyt. Ez trtnhet pldul gy, hogy megadjuk, milyen
paramterekkel kvnjuk a rendszert hasznlni.
- 152 -
Ksz alkalmazsi programcsomag megvsrlsa esetn is gondoskodni kell a felhasznlk
betantsrl, br ez ltalban egyszerbb feladat, mert a szoftvergyrt cg, pontosan a
szoftvereladsok nagy szma miatt, jelents tapasztalattal rendelkezik a trning tern.
Az utols fzis, az zemeltets s karbantarts vonatkozsban szintn nincs klnbsg a
hagyomnyos s az alkalmazsi programcsomaggal trtn rendszerfejleszts kztt, br a
tancsadst illeten ugyanaz a helyzet, mint a betantssal.
Mint a prototpusok esetben is, a ksz alkalmazsi programcsomaggal trtn rend-
szerfejlesztst is a tradicionlis mdszerrel szoks elnyk s htrnyok vonatkozsban
sszehasonltani.
A ksz alkalmazsi programcsomaggal trtn fejleszts egyebek mellett az albbi
elnykkel jr:
A fejleszts idtartama lnyegesen lervidlhet, s ennek kvetkeztben a projekt
haszna hamarabb jelentkezik.
A fejlesztprojekt kockzata jelentsen lecskken, valszntlen a hatrid tllpse,
hiszen a szoftver azonnal hozzfrhet.
Mind a dokumentci, mind a tancsads sznvonala ltalban magasabb, mint a sajt
fejleszts.
A szoftvergyrt cg szakmai felkszltsge ltalban jobb, mint az ad hoc fejleszti
csapat.
Ugyanakkor a ksz alkalmazsi programcsomaggal trtn fejlesztsnek htrnyai is vannak:
A szoftver nem teljesen illeszkedik a vllalat ltez zleti folyamataihoz, ezrt
gyakran kompromisszumokat kell ktni, s mdostani kell a folyamatokon.
Krlmnyes a programcsomagok adaptlsa j helyzetekhez, mivel pldul a
forrskd alig hozzfrhet.
Gyakran kell j hardvert, szoftvert vsrolni, mivel a meglvk nem illeszkednek a
vsrolt rendszerhez, vagy nem kompatibilisek azzal.
Br a ksz alkalmazsi szoftverek tbbfunkcisak, gyakran az egyes modulok ki-
dolgozottsga igen eltr sznvonal, s nhny esetben jelentsen gyengbb, mint a
sajt fejlesztsek.
Br a szoftverek eladsi ra viszonylag nem tl magas, legalbb is a sajt fejleszts
kltsgvel sszehasonltva, szmos rejtett kltsg jelentkezik az installlsnl. Egy
viszonylag friss felmrs szerint az installci teljes kltsge akr a tzszerese is lehet
a vtelrnak, klnsen akkor, ha a rendszernek nagyon sok kls illesztse van.
- 153 -
15.2.5 Vgfelhasznli fejleszts
A rendszerfejleszts tdik technikja a vgfelhasznli fejleszts. Az informatikusok szerint
ennek a mdszernek az a lnyege, hogy nem halat adunk a rszorulnak, hanem megtantjuk
halszni, termszetesen gy, hogy elltjuk korszer felszerelssel.
A nyolcvanas vek elejtl a legklnflbb eszkzk:
tblzatkezelk,
adatbziskezel programok,
negyedik genercis programozsi nyelvek,
adatelemz/statisztikai szoftverek
segtsgvel sok vllalatnl indultak vgfelhasznli fejleszti (EUD, end-user development)
projektek. Ha az ilyen tpus fejlesztsek letciklust megvizsgljuk, akkor megllapthat,
hogy az elemzs fzisa jelentsen leegyszersdik, mivel nincs szksg formlis specifikci-
ra, hiszen nem lehet kommunikcis problma a fejleszt s a felhasznl kztt. Hasonlan
az implementls is egyszerbb, hiszen nem kell a felhasznlt megtantani a rendszer
hasznlatra. A karbantarts s tancsads fzisa viszont nehzkesebb lehet, hiszen ha
professzionlis programozra van szksg, akkor annak elbb meg kell rtenie a nem
felttlenl hatkonyan rt programot.
Termszetesen a vgfelhasznli rendszerfejleszts elssorban, s szinte kizrlag kis mret
(<10KLOC) feladatokra szortkozik, s gy nem alternatvja a msik ngy fejlesztsi
techniknak. Ez a megllapts azonban semmikpp nem cskkenti a vgfelhasznli
rendszerfejleszts elnyeit. Egy kisvllalkozs teljes knyvelst automatizlni lehet pldul
Excel vagy Access makrk megrsval. Ehhez a felhasznlnak mindssze a Visual Basic for
Application (VBA) programnyelvet kell elsajttania, s az Excel/Access knlta programozsi
krnyezetben a feladatok knyelmesen elvgezhetk.
- 154 -
16 Fggelk
16.1 A Visual Studio 2005. letltse s teleptse
16.1.1 Letlts
A Visual Studio 2005 telept csomag a Campus Agreement keretben a felsoktatsban
rsztvev hallgatk s oktatk szmra ingyenesen hozzfrhet a
http://www.tisztaszoftver.hu/
honlapon. A honlap csak az egyetemek regisztrlt cmtartomnybl rhet el, otthon
felesleges prblkozni a letlssel. Aki nem tudja megoldani a letltst s az image fjlok
CD-re getst, 5000 Ft. kltsgtrts ellenben postai ton juthat a teleptlemezekhez. A
rendels rszleteirl szintn a fenti honlapon olvashatunk tjkoztatst.
A teleptkszlet t CD-bl ll. Az els kett tartalmazza magt a fejlesztkrnyezetet, mg az
utols hrom az elektronikus dokumentcit. A dokumentci Interneten keresztl is elrhet.
16.1.2 Telepts
Sajnos a Visual Studio 2005 teleptprogramjba hiba kerlt. Az els CD teleptse kzben a
gp egy rejtlyes ENU 1 nev CD-t kr - ilyen lemez nincs a teleptkszletben. A hibt az
okozza, hogy az _15780_RTL_x86_enu_NETCF_v2.0.cab fjlt a telept az els CD-n
keresi, pedig a msodik CD-n van. A sikeres teleptshez egy apr trkkt kell alkalmaznunk:
81. A letlttt ISO fjlokat gessk CD-re.
82. Kezdjk el a teleptst - futtassuk a setup.exe-t az els CD-rl.
83. Folytassuk a teleptst addig, amg a kpernyn meg nem jelenik az elre kitlttt
termkkulcs. A termkkulcsot jegyezzk fel egy darab paprra, majd lpjnk ki a
teleptbl.
84. Hozzunk ltre egy knyvtrat a merevlemezen, majd msoljuk ide az els kt CD
tartalmt. Fontos: ne msoljuk az egyes CD-ket kln alknyvtrakba. A Windows hat
fjlnl krdezi meg, hogy fellrhatja e a mr meglvt. Nyugodtan vlaszolhatunk
igen-t.
85. Kezdjk jra a teleptst a merevlemezre msolt setup.exe-vel.
86. A termkkulcs mr megvan, folytathatjuk a teleptst az instrukciknak megfelelen.
- 155 -
16.2 A C# kulcsszavai
Kulcssz Jelents
abstract Mdost, amely arra utal, hogy egy osztlyt csak egy msik
osztly seknt hasznlhatjuk.
as Tpusknyszerts.
base Az sosztly rtkeit s tpusait teszi elrhetv.
bool A logikai adattpus kulcsszava.
break Ciklus, feltteles utasts vagy esetsztvlaszts elhagysa.
byte A byte adattpus kulcsszava.
case Esetsztvlasztson bell egy eset (felttel).
catch A try-catch kivtelkezels rsze. A catch blokk segtsgvel
elkaphatjuk a kivteleket, s meghatrozott hibakezel
mveleteket futtathatunk le.
char A karakter adattpus kulcsszava.
checked Ellenrztt kdrszt azonost kulcssz.
class Osztlydefinci kulcsszava.
const Adattaghoz vagy vltozhoz kapcsold mdost, amely azt jelzi,
hogy a krdses adat tartalma nem vltoztathat.
continue Ugrs a kvetkez ciklusfordulra.
decimal A decimal adattpus kulcsszava.
default Cmke a switch esetsztvlaszt utastsban. Itt folytatdik a
vgrehajts, ha egyik case felttel sem teljesl.
delegate Referencia tpus, amely meghatrozott formj tagfggvnyeket
tartalmazhat.
do Ciklusszervez utasts.
double A double adattpus kulcsszava.
else Az if feltteles utasts msklnben gt jelzi.
enum Adattpus, amely elre meghatrozott lland rtkeket tartalmaz.
event Esemnyek, esemnykezelk definilsra szolgl kulcssz.
explicit A felhasznl ltal ltrehozott adattpusok talaktst jelz
kulcssz.
extern Programunkon kvl lev fggvny jelzse.
false Logikai hamis rtk.
finally A try-catch utasts rsze, a try blokk utn hajtdik vgre
fggetlenl attl, hogy a vgrehajts sorn fellpett-e hiba vagy
sem.
fixed Kezeletlen kdban ezzel a kulcsszval zrolhatjuk a
memriahivatkozsokat, hogy az automatikus szemtgyjt ne
szabadtsa fel azokat.
float A float lebegpontos adattpus kulcsszava.
for Ciklusszervez utasts.
foreach Ciklusszervez utasts.
- 156 -
goto A program egy adott cmkvel elltott utastsra lehet ugrani vele.
if A feltteles utasts kulcsszava.
implicit Kulcssz, amely automatikusan vgrehajthat tpustalaktst r le.
in A foreach kulcsszval egytt hasznland; Az in kulcssz
azonostja a gyjtemnyt vagy tmbt, amit a ciklus vgigjr.
int Az int adattpus kulcsszava.
interface Olyan hivatkozst definilunk vele, amely jelzi tagmetdusait, de
nem rja le azokat.
internal Hozzfrs mdost. Lehetv teszi, hogy az adott adattpust csak
az azonos gyjtemnyben lv fjlokbl rhessk el.
is Objektum tpusvizsglathoz hasznlt kulcssz.
lock Kritikus kdrszek jellse. Az ilyen kdrsz egyszerre csak egy
szl szmra lesz elrhet.
long A long adattpus kulcsszava.
namespace Kulcssz, amellyel tpusainkat csoportosthatjuk. Segt a
nvtkzs elkerlsben.
new Objektum ltrehozsa.
null rtk, amely azt jelzi, hogy a hivatkozs nem mutat semmire.
object A .NET keretrendszer System.Object osztlyn alapul tpus. A
C#-ban minden ms adattpus ebbl szrmazik.
operator Az osztlyok s struktrk mveleteinek ltrehozsra vagy
tlterhelsre szolgl kulcssz.
out Csak kimen metdus-paramter jelzse.
override Virtulis metdus felvltst elidz felldefinilsa a
leszrmazott osztlyban.
params Vltoz tagltszm paramterlista(rsz) jelzse.
private Lthatsg mdost.
protected Lthatsg mdost.
public Lthatsg mdost.
readonly Adattag mdost. Azt jelzi, hogy a kezdeti rtkads utn a tag
tartalma mr nem vltoztathat.
ref Cm szerinti paramtertads jelzje a formlis paramternl.
return Kilps a fggvnybl s a visszatrsi rtk megadsa.
sbyte Az sbyte adattpus kulcsszava.
sealed Osztlymdost, amely meggtolja, hogy az osztlybl tovbbi
osztlyokat szrmaztassanak.
short A short adattpus kulcsszava.
sizeof Adattpus mretnek meghatrozsa.
stackalloc Kulcssz, amellyel memrit foglalhatunk a veremben. A
visszakapott mutat nem tartozik az automatikus szemtgyjts
hatkrbe.
static Lthatsg mdost.
string A string adattpus kulcsszava.
struct Adattpus, amely adatokat s tagfggvnyeket egyarnt
tartalmazhat.
- 157 -
switch Az esetsztvlaszt utasts kulcsszava.
this Az aktulis struktrt vagy objektum-pldnyt jelli.
throw Kivtelt generl utasts.
true Logikai igaz.
try A kivtelkezel blokk vdett utastsait tartalmaz blokkjt jelz
kulcssz.
typeof Objektum tpust adja vissza, .NET formtumban.
uint Az uint adattpus kulcsszava.
ulong Az ulong adattpus kulcsszava.
unchecked Azt jelzi, hogy a hatskrbe utalt egsz tpus mveleteknl
mellzni kell a tlcsorduls-vizsglatot.
unsafe Olyan kdrszletet jell, amelyez a kezelt (managed) krnyezetben
nem biztonsgos vgrehajtani (pl. mutatk hasznlatnl).
ushort Az ushort adattpus kulcsszava.
using lnevek ltrehozsa nvterekhez.
virtual Virtulis metdus jellse.
void Metdusoknl jelzi, hogy nincs visszatrsi rtkk.
while Ciklusszervez utasts.
16.3 C# nyelvben hasznlatos, egyszer tpusok
Tpus Mret rtktartomny A tpusban trolhat adatok
byte 1 0 tl 255 ig eljel nlkli egsz szmok
int 4 -2,147 483 648 tl 2 147 483 647 ig eljeles egsz szmok
float 4 1.5 10
45
tl 3.4 10
38
ig vals(lebegpontos) szmok
double 8 5.0 10
324
-tl 1.7 10
308
-ig vals(lebegpontos) szmok
decimal 16 1.0 10
28
tl 7.9 10
28
-ig vals(lebegpontos) szmok
bool 1 true / false true, false rtkek
char 2 U+0000-tl U+FFFF-ig unicode karakterek
string - - karakterlncok
(karaktertmbk)
- 158 -
Ellenrz krdsek
A krdsre kattintva megkapja a vlaszt
1. fejezet
1.1. Sorolja fel a szoftverfejleszt rendszerek hrom csoportjt s jellemezze ket
(elnyk, htrnyok alapjn)! (4-5. old.)
1.2. Milyen kztes nyelveket ismer? Milyen elnyei illetve htrnyai vannak? (5-6. old.)
1.3. Ismertesse s jellemezze az objektumorientlt programozs alapfogalmait! (7-8. old.)
2. fejezet
2.1. Ismertesse dihjban a Visual Studio 2005 fejlesztkrnyezet elemeit! (10-14. old)
2.2. Hogyan trtnik a szemantikai hibk feldertse (trspontok, nyomkvets)! (14-15.
old.)
2.3. Ismertesse az alapvet komponenseket s fontosabb tulajdonsgait a Visual Studio
2005 fejlesztkrnyezetben! (15-21. old.)
2.4. Ismertesse a fontosabb specilis komponenseket s fontosabb tulajdonsgait a Visual
Studio 2005 fejlesztkrnyezetben! (22-24. old.)
3. fejezet
3.1. Mi jelentenek a kulcsszavak egy adott fejlesztkrnyezetben? (25. old.)
3.2. Mire hasznljuk az azonostkat s milyen szablyok vonatkoznak rjuk? (25. old.)
3.3. Mire hasznljuk a vltozkat programjainkban s milyen tpusai vannak? (25-27. old.
s 150. old)
3.4. Ismertesse a tmb, mint sszetett adattpus hasznlatnak lehetsgeit? (27-28. old.)
3.5. Mire hasznlhatk a literlok s milyen tpusai vannak? (28-29. old.)
3.6. Mi a konstansok, llandk szerepe a programozs sorn? (29. old.)
3.7. Milyen mveleteket vgezhetnk vltozkkal, konstansokkal, stb.? (29-31. old.)
3.8. Ismertesse a kifejezsek felptst s a precedencia szablyokat! (32. old.)
3.9. Ismertesse a nvterek szerept a C# programozs sorn! (33-34. old.)
4. fejezet
4.1. Ismertesse a relcis opertorokat s hasznlatukat a logikai mveletekben! (35-36.
old.)
4.2. Hogyan pl fel az egyg szelekci a C#-nyelvben? Mikor hasznljuk? (37. old.)
4.3. Hogyan pl fel a ktg szelekci a C#-nyelvben? Mikor hasznljuk? (37-38. old.)
4.4. Hogyan pl fel a tbbg szelekci a C#-nyelvben? Mikor hasznljuk? (38-41. old.)
5. fejezet
5.1. Mikor hasznlunk s hogyan deklarlunk stringeket programjainkban? (42. old.)
5.2. Ismertesse a stringek fontosabb metdusait! (42-44. old.)
5.3. Hogyan hasznlhatjuk a stringeket vektorknt? (44-45. old.)
6. fejezet
6.1. Ismertesse az elrt lpsszm ciklus felptst a C# nyelvben! (49. old.)
6.2. Ismertesse a feltteles ciklusok (elltesztel, htultesztel) felptst a C# nyelvben!
(50-51. old.)
6.3. Ismertesse a kilpsi feltteleket, valamint a vgtelen ciklus lehetsgt a feltteles
ciklusoknl! (50-51. old.)
7. fejezet
7.1. Ismertesse a sajt metdusok ksztsnek lehetsgeit a C# nyelvben! (56. old.)
7.2. Hogyan pl fel az eljrsszint metdus? Ismertesse fbb jellemzit! (56. old.)
7.3. Hogyan pl fel a fggvnyszint metdus? Ismertesse fbb jellemzit! (56. old.)
8. fejezet
8.1. Ismertesse az objektumorientlt alkalmazsok sszetevit! (60. old.)
8.2. Hogyan trtnik az osztlyok deklarlsa a C# nyelv keretein bell? (60. old.)
- 159 -
8.3. Hogyan trtnik az adattagok deklarlsa a C# nyelvben? (60-61. old.)
8.4. Hogyan trtnik a metdusok deklarlsa a C# nyelvben? (61-62. old.)
8.5. Hogyan trtnhet a metdusok paramterezse a C# nyelvben? (62-63. old.)
8.6. Milyen lthatsgi szintek vannak a C# nyelvben? (63. old.)
8.7. Mire hasznlhatk a property-k s mi a hasznlatuk elnye? (64-65. old.)
9. fejezet
9.1. Ismertesse a Graphics osztly fontosabb elmeit (szn, toll, ecset, szvegrajzols)!
(66-69. old.)
10. fejezet
10.1. Ismertesse a MessageBox zenetablak felptst, rszeit! (71-72. old.)
10.2. Ismertesse a tbbablakos alkalmazsok ksztsnek elvt! (73-76. old.)
11. fejezet
11.1. Ismertesse a szintaktikai s a szemantikai hibk kztti klnbsget! (77. old.)
11.2. Ismertesse az utlagos hibakezels lehetsgt a C# nyelvben (try-catch-finally)!
(77-79. old.)
11.3. Ismertesse a programoz ltal definilt kivtelek kezelsnek lehetsgeit a C#
nyelvben! (79-80. old.)
11.4. Ismertesse a kivtelkezels lehetsgt a checked s az unchecked hasznlatval!
(80. old.)
12. fejezet
12.1. Ismertesse az llomnykezels fontosabb mozzanatait az llomnytpusok kezelsn
keresztl a C# nyelvben! (83. old.)
12.2. Ismertesse a szveges llomnyok kezelsnek lehetsgt a C# nyelvben! (83-84.
old.)
12.3. Ismertesse a binris llomnyok kezelsnek lehetsgt a C# nyelvben! (84-85.
old.)
12.4. Ismertesse a C# nyelv fontosabb knyvtrkezelsi utastsait! (88-89. old.)
12.5. Ismertesse a C# nyelv fontosabb llomnykezelsi utastsait! (92-93. old.)
13. fejezet
13.1. Ismertesse rviden az XML nyelv alapjait, szintaxist! (94-96. old.)
13.2. Ismertesse az XML nyelv elnyeit! (96. old.)
13.3. Hogyan trtnik az XML llomnyok feldolgozsa C# krnyezetben? (97-98. old.)
14. fejezet
14.1. Ismertesse az UML nyelv fontosabb diagramtpusait! (104-108. old.)
14.2. Mik azok a hasznlati esetek s mire hasznlhatk? (108-111. old.)
14.3. Mire hasznljuk a tevkenysgdiagramot? (112-113. old.)
14.4. Ismertesse az objektumok s osztlyok hasznlatt az UML-n bell! (113-115. old.)
14.5. Ismertesse a modellelemek kztti kapcsolatok lehetsgeit az UML-ben? (115-116.
old.)
14.6. Milyen asszocicis, aggregcis s generalizcis lehetsgek vannak a
modellelemek kapcsolataiban? (116-121. old.)
14.7. Ismertesse a szekvenciadiagram felhasznlsi lehetsgeit az UML keretein bell!
(122-124 old.)
14.8. Ismertesse a kommunikcidiagram felhasznlsi lehetsgeit az UML keretein
bell! (124-126 old.)
14.9. Ismertesse az llapotgp-diagram felhasznlsi lehetsgeit az UML keretein bell!
(126-127 old.)
15. fejezet
15.1. Ismertesse az alkalmazsfejleszts lpseit! (128-132. old.)
15.2. Ismertesse a rendszerfejleszts folyamatmodelljeit! (133-134. old.)
- 160 -
15.3. Ismertesse konkrtan a vzess modellt! (134-136. old.)
15.4. Ismertesse konkrtan a V modellt! (136-137. old.)
15.5. Ismertesse a prototpusok alkalmazsnak lehetsgt! Mirt volt szksg ennek az
elmletnek a bevezetsre? (137-140. old.)
15.6. Ismertesse a spirl modellt! (140-147. old.)
- 161 -
Internetes linkek, hasznos weboldalak
1. Wikipedia, Internet-lexikon:
a. http://en.wikipedia.org/wiki kezdlap (angol)
b. http://hu.wikipedia.org/wiki kezdlap (magyar)
2. ttekints, gyjtemnyek:
a. http://dotnet.lap.hu (magyar, angol)
b. http://csharp.lap.hu (magyar, angol)