You are on page 1of 150

Programozs

2. bvtett kiads rta Fbin Zoltn Budapest, 2007 prilis

1 2 3

BEVEZETS ............................................................................................................................................................ 7 ALAPFOGALMAK................................................................................................................................................. 8 ALGORITMUSOK ................................................................................................................................................. 9 3.1 ALGORITMUSELR MDSZEREK, NYELVEK ..................................................................................................... 12 3.1.1 Folyamatbra ............................................................................................................................................. 12 3.1.2 Struktogram ................................................................................................................................................ 14 3.1.3 Mondatszer lers ..................................................................................................................................... 14 3.2 PROGRAM VAGY ALGORITMUS SPECIFIKCI ................................................................................................... 16 3.3 ALGORITMUSOK DOKUMENTLSA ................................................................................................................. 16

ADATSZERKEZETEK, ADATTPUSOK, ADATTROLS......................................................................... 18 4.1 AZ ADATTPUSOK OSZTLYOZSA MEGSZMLLHATSG SZERINT ............................................................... 19 4.2 AZ ADATTPUSOK OSZTLYOZSA BONYOLULTSG SZERINT ........................................................................... 19 4.3 EGYSZER ADATTPUSOK................................................................................................................................. 19 4.3.1 Numerikus tpusok ...................................................................................................................................... 19
4.3.1.1 4.3.1.2 4.3.1.3 4.3.1.4 4.3.1.5 4.3.1.6 4.3.1.7 4.3.1.8 4.3.1.9 Kettes szmrendszerbeli szmok brzolsa........................................................................................................19 Kettes komplemens szmbrzols......................................................................................................................20 Oktlis szmok brzolsa (8-as szmrendszer) ..................................................................................................21 Hexadecimlis szmok brzolsa (16-os szmrendszer) ....................................................................................21 Tetszleges alap szmrendszerek (nem trzsanyag rettsgire) ........................................................................21 Byte .....................................................................................................................................................................21 Word - Sz ...........................................................................................................................................................22 Integer - Egsz .....................................................................................................................................................22 Lebegpontos szmbrzols ..............................................................................................................................22 Szvegek trolsa sztring adattpus ..................................................................................................................23

4.3.2 4.3.3 4.3.4 4.3.5 4.3.6 4.3.7

Karakter tpus, kdlapok, karakterkdols................................................................................................. 23 Logikai tpus ............................................................................................................................................... 24 Mutatk, pointerek ...................................................................................................................................... 24 Megszmllhat s nem megszmllhat adattpusok ............................................................................... 25 Konverzik .................................................................................................................................................. 25 Globlis- s loklis adatok kezelse, az adatok lthatsga ...................................................................... 26
Numerikus feladatok............................................................................................................................................27 llaptsuk meg egy szmrl, hogy prmszm-e? (prmteszt)...............................................................................27 Erasztothenszi szita ............................................................................................................................................27

4.3.2.1

4.3.7.1 4.3.7.2 4.3.7.3

4.4 SSZETETT ADATSZERKEZETEK ....................................................................................................................... 29 4.4.1 Halmaz tpus ............................................................................................................................................... 29 4.4.2 Tmbk, sorozatok ...................................................................................................................................... 29
4.4.2.1 4.4.2.2 Gauss eliminci..................................................................................................................................................31 Gauss-Jordan eliminci ......................................................................................................................................33

4.4.3 Rekord tpus ................................................................................................................................................ 34 4.5 FELHASZNLK LTAL DEFINILHAT TPUSOK .............................................................................................. 34 4.5.1 Sor adattpus, FIFO .................................................................................................................................... 34 4.5.2 Verem adattpus .......................................................................................................................................... 36 4.5.3 Lista adattpus ............................................................................................................................................ 38 4.5.4 A grf, mint matematikai fogalom .............................................................................................................. 43 4.5.5 Fa adattpus ................................................................................................................................................ 43 4.5.6 Grf adattpus ............................................................................................................................................. 46 4.5.7 Grfbejrs: ............................................................................................................................................... 46 4.5.8 Szlessgi keress ....................................................................................................................................... 47
4.5.8.1 Pldk: .................................................................................................................................................................47

4.5.9

Mlysgi keress ......................................................................................................................................... 47

4.5.10 4.5.11 4.5.12 4.5.13 4.5.14 4.5.15 4.5.16 5

Tovbbi algoritmusok ............................................................................................................................. 48 Topologikus rendezs ............................................................................................................................. 48 Egy pontbl kiindul leghosszabb utak .................................................................................................. 48 Legrvidebb utak slyozott grfban egy kezdpontbl .......................................................................... 48 Legrvidebb utak minden cscsprra .................................................................................................... 49 Fjl adattpus ......................................................................................................................................... 50 Objektum adattpus, osztlyok ................................................................................................................ 52

ELEMI ALGORITMUSOK, PROGRAMOZSI TTELEK .......................................................................... 56 5.1 BONYOLULTSG .............................................................................................................................................. 56 5.2 SOR, RTK TTELEK ....................................................................................................................................... 56 5.2.1 sszegzs ttel ............................................................................................................................................ 57 5.2.2 tlagszmts .............................................................................................................................................. 57 5.2.3 Eldnts ...................................................................................................................................................... 57 5.2.4 Keressek .................................................................................................................................................... 58
5.2.4.1 5.2.4.2 Lineris keress ...................................................................................................................................................58 Binris keress .....................................................................................................................................................58

5.2.5 Megszmlls ............................................................................................................................................. 59 5.2.6 Maximum kivlaszts (minimum kivlaszts) ttele ................................................................................... 59 5.3 SOR, TBB RTK ............................................................................................................................................. 60 5.3.1 Kivlogats ttele ....................................................................................................................................... 60 5.3.2 Kivlogats ttele mdostsa .................................................................................................................... 60 5.3.3 sszefuttats ttele ..................................................................................................................................... 61 5.3.4 Uni kpzse ............................................................................................................................................... 61 5.3.5 Metszet kpzse ........................................................................................................................................... 62 5.3.6 Klnbsg kpzse ...................................................................................................................................... 62 5.4 RENDEZSEK .................................................................................................................................................... 62 5.4.1 Egyszer csere ............................................................................................................................................ 63 5.4.2 Ciklikus permutci .................................................................................................................................... 63 5.4.3 Bubork rendezs ........................................................................................................................................ 63 5.4.4 Minimum kivlasztsos (maximum kivlaszts) rendezs .......................................................................... 64 5.4.5 Beszrsos rendezs ................................................................................................................................... 64 5.4.6 Shell rendezs ............................................................................................................................................. 65 5.4.7 Gyorsrendezs (quicksort) .......................................................................................................................... 65 5.4.8 Nem ktelez rendezsi algoritmusok ......................................................................................................... 66
5.4.8.1 5.4.8.2 5.4.8.3 5.4.8.4 5.4.8.5 sszefslses rendezs(Merge sort) ..................................................................................................................66 Lda Rendezs (Bin sort).....................................................................................................................................66 Radix rendezs.....................................................................................................................................................67 Lncrendezs .......................................................................................................................................................67 Kupacrendezs (=Halom, heap sort) ....................................................................................................................67

5.5 PROGRAMOZSI TTELEK ALKALMAZSA ........................................................................................................ 68 5.5.1 Numerikus algoritmusok ............................................................................................................................. 69 5.6 SZVEGFILE-OK KEZELSE ............................................................................................................................... 69 6 REKURZI ............................................................................................................................................................ 70 6.1 A REKURZV ELJRSOK, FGGVNYEK........................................................................................................... 70 6.1.1 Fibonacci szmok: ...................................................................................................................................... 70 6.1.2 N alatt a K kiszmolsa .............................................................................................................................. 71 6.1.3 Hanoi torony ............................................................................................................................................... 71 6.1.4 Binomilis egytthat ellltsa ............................................................................................................... 71 6.1.5 Backtrack algoritmus - Visszalpses keress ............................................................................................ 72 6.2 REKURZI S A CIKLUSOK ................................................................................................................................ 75 6.3 REKURZV ADATSZERKEZETEK......................................................................................................................... 76 6.4 MIKOR HASZNLJUNK, S MIKOR NE HASZNLJUNK REKURZV ALGORITMUSOKAT? ....................................... 76 7 BEVEZET, AVAGY MRT KELL MDSZERESEN PROGRAMOZNI? ................................................ 78 7.1 7.2 7.3 A MONOLITIKUS PROGRAMOZS ...................................................................................................................... 78 A KEZD PROGRAMOZ - FRONTLIS TMADS MDSZERE ............................................................................. 78 A MODULRIS PROGRAMOZS ......................................................................................................................... 78

7.4 TOP - DOWN DEKOMPOZCIS MDSZER .......................................................................................................... 79 7.5 DOWN-UP KOMPOZCIS MDSZER .................................................................................................................. 80 7.6 VEGYES MDSZER............................................................................................................................................ 81 7.7 TOVBBI PROGRAMOZSI ELVEK ..................................................................................................................... 81 7.7.1 Taktikai elvek .............................................................................................................................................. 81 7.7.2 Taktikai elvek .............................................................................................................................................. 82 8 STRUKTURLT PROGRAMOZS MDSZERE .......................................................................................... 84 8.1 8.2 8.3 8.4 8.5 8.6 9 A MODULRIS PROGRAMOZS ELNYEI ........................................................................................................... 84 DIJKSTRA: HIERARCHIKUS PROGRAMOZS ...................................................................................................... 84 MILLS: FUNKCIONLIS PROGRAMOZS ............................................................................................................ 84 WIRTH: A PROGRAMOK RSZEKRE VAL BONTSNAK ELVEI ........................................................................ 84 JACKSON S WARNIER: ADATORIENTLT PROGRAMOZSI MDSZERTAN ........................................................ 84 BOEHM S JACOPINI ......................................................................................................................................... 84

OBJEKTUM-ORIENTLT PROGRAMOZS OOP .................................................................................... 86 9.1 AZ OOP ALAPJA .............................................................................................................................................. 86 9.1.1 Az Objektum ................................................................................................................................................ 86 9.1.2 Az osztly .................................................................................................................................................... 86 9.1.3 Egysgbezrs ............................................................................................................................................ 86 9.1.4 rkls........................................................................................................................................................ 87 9.1.5 Polimorfizmus ............................................................................................................................................. 87 9.1.6 Kts ........................................................................................................................................................... 87 9.1.7 zenet ......................................................................................................................................................... 87 9.1.8 Az Objektum orientlt nyelvek fajti ........................................................................................................... 87

10

NAGYOBB RENDSZEREK FEJLESZTSNEK LPSEI ...................................................................... 89 10.1 A RENDSZER TERVEZSE .................................................................................................................................. 89 10.1.1 Egy nagyobb rendszer fejlesztsnek megkezdse, elksztse ............................................................. 89 10.1.2 A rendszer tervezse ............................................................................................................................... 90
10.1.2.1 10.1.2.2 10.1.2.3 10.1.2.4 10.1.2.5 10.1.2.6 10.1.2.7 10.1.2.8 10.1.2.9 10.1.2.10 10.1.2.11 10.1.2.12 A programspecifikci.........................................................................................................................................90 Kpernytervek ...................................................................................................................................................91 Adatszerkezetek tervezse ...................................................................................................................................91 sszefggsek az adatok kztt ..........................................................................................................................91 Felhasznli fellet user interface ....................................................................................................................92 Segtsgads a programokban ..............................................................................................................................94 A tervezs lpsei. ...............................................................................................................................................95 A megfelel hardverhttr megllaptsa. ...........................................................................................................95 A megfelel opercis rendszer ...........................................................................................................................95 A felhasznlhat fejleszteszkzk kivlasztsi szempontjai. ...........................................................................97 Fizets, Shareware, Freeware programok. OEM, Multi licensz. ........................................................................97 A terv dokumentlsa .........................................................................................................................................98

10.1.3 Megvalsts........................................................................................................................................... 99 10.1.4 Javtott vltozat .................................................................................................................................... 101 10.1.5 Vgleges vltozat, s tovbbfejleszts .................................................................................................. 101 10.1.6 Verzikezels ........................................................................................................................................ 101 10.2 A MEGVALSTS GYAKORLATI ESZKZEI ..................................................................................................... 102 10.2.1 Compiler, Interpreter, P-kd, Virtual Machine .................................................................................... 102
10.2.1.1 10.2.1.2 10.2.1.3 10.2.1.4 Compilerek ........................................................................................................................................................102 Interpreteres rendszerek: ....................................................................................................................................103 P-kd s Virtual Machine alap nyelvek .........................................................................................................103 Mikor melyiket ..................................................................................................................................................104

10.2.2 10.2.3
10.2.3.1

A programozsi nyelvek szintjei ........................................................................................................... 104 A programozsi nyelvek msik fle osztlyozsa ................................................................................. 105
Procedurlis nyelvek..........................................................................................................................................105

10.2.3.2 10.2.3.3 10.2.3.4

Automata elv programozsi nyelvek ...............................................................................................................105 Fggvnyelv programozsi nyelvek ................................................................................................................106 Logikai nyelvek .................................................................................................................................................106

10.3 PROGRAMKDOLS ....................................................................................................................................... 106 10.3.1 Programozsi ttelek hasznlata.......................................................................................................... 107 10.3.2 Egyes programozsi nyelvek eltr kdolsi lehetsgei, mdszerei .................................................. 107 10.4 A PROGRAMOK TESZTELSE, HIBAKERESS .................................................................................................... 111 10.4.1 Statikus tesztelsi mdszerek ................................................................................................................ 111 10.4.2 Dinamikus tesztelsi mdszerek ........................................................................................................... 112
10.4.2.1 10.4.2.2 10.4.2.3 Fehr doboz mdszerek .....................................................................................................................................112 Fekete doboz mdszerek....................................................................................................................................113 Specilis tesztek.................................................................................................................................................113

10.4.3 Hibakeressi mdszerek ....................................................................................................................... 113 10.4.4 Hibakeressi eszkzk .......................................................................................................................... 114 10.4.5 A tesztelk szemlye, szervezett tesztek................................................................................................. 115 10.5 HATKONYSGVIZSGLAT, OPTIMALIZLS ................................................................................................. 116 10.5.1 Rendszerek hatkonysgnak megllaptsa ....................................................................................... 116
10.5.1.1 10.5.1.2 Egzakt mdszerek ..............................................................................................................................................116 Kzi mdszerek .................................................................................................................................................116

10.5.2 Globlis optimalizls .......................................................................................................................... 117 10.5.3 Loklis optimalizls ............................................................................................................................ 117 10.5.4 Hatkonysg transzformcik .............................................................................................................. 118 10.6 DOKUMENTCI ............................................................................................................................................ 119 10.6.1 A dokumentci formja ...................................................................................................................... 119
10.6.1.1 10.6.1.2 Az elektronikus dokumentci szoksos eszkzei .............................................................................................119 A papr alap dokumentci ..............................................................................................................................120

10.6.2 Felhasznli dokumentci .................................................................................................................. 120 10.6.3 Fejleszti dokumentci ....................................................................................................................... 121 10.7 BETANTS, OKTATS .................................................................................................................................... 121 10.7.1 ltalnos informatikai jelleg oktats.................................................................................................. 122 10.7.2 Rendszer betantshoz szksges oktats ........................................................................................... 123 10.8 GARANCIA, AZ ELKSZLT RENDSZEREK TOVBBI GONDOZSA .................................................................... 123 11 MODERN ALKALMAZSFEJLESZTSI MDSZEREK ...................................................................... 125 11.1 A PROBLMA .................................................................................................................................................. 125 11.1.1 A modellalkots hrmas szintje ............................................................................................................ 125 11.2 FEJLESZTSI FILOZFIK................................................................................................................................ 125 11.2.1 Folyamatorientlt mdszer................................................................................................................... 126 11.2.2 Adatfolyam orientlt mdszer .............................................................................................................. 126 11.2.3 Struktrlt mdszertan ......................................................................................................................... 126 11.2.4 Objektum-orientlt mdszertan ............................................................................................................ 126 11.3 MODELLEK .................................................................................................................................................... 126 11.3.1 Vzess modell ...................................................................................................................................... 126 11.4 MDSZERTANOK ............................................................................................................................................ 127 11.4.1 Inkrementlis fejlesztsi mdszertan .................................................................................................... 128 11.5 ESZKZK UML - UNIFIED MODELLING LANGUAGE .................................................................................... 128 11.6 AZ UML NZETEI, DIAGRAMJAI ..................................................................................................................... 128 11.7 ELEMEK S RELCIK .................................................................................................................................... 129 11.8 DIAGRAMOK .................................................................................................................................................. 130 11.8.1 Prototpus (prototype) .......................................................................................................................... 135 11.8.2 Az eXtrm Programozs- egy j programfejlesztsi paradigma (mdszer) ......................................... 135 12 SZERVEZSI ISMERETEK ......................................................................................................................... 140 12.1 RENDSZERELMLETI ALAPOK......................................................................................................................... 140 12.1.1 Elemzs ................................................................................................................................................. 140 12.1.2 Modellezs ............................................................................................................................................ 140 12.1.3 Szervezet elemzs .................................................................................................................................. 140 12.1.4 Szervezet - szervezeti felpts .............................................................................................................. 141

12.1.5 Gazdasgi rendszerszervezs ............................................................................................................... 141 12.1.6 Ismeretelmleti alapfogalmak .............................................................................................................. 141 12.1.7 Rendszerfejlesztsi projekt.................................................................................................................... 142 12.2 AZ INFORMCIRENDSZER FEJLESZTS LETCIKLUSA ................................................................................... 143 12.2.1 Rendszerelemzs ................................................................................................................................... 143 12.2.2 Rendszertervezs .................................................................................................................................. 143 12.2.3 Kivitelezs ............................................................................................................................................. 143 12.2.4 Tesztels, a rendszer bevezetse ........................................................................................................... 143
12.2.4.1 12.2.4.2 12.2.4.3 12.2.4.4 12.2.4.5 A programok tesztelsnek clja .......................................................................................................................144 A tesztels kritriumai .......................................................................................................................................144 Statikus tesztelsi mdszerek.............................................................................................................................144 Dinamikus tesztelsi mdszerek ........................................................................................................................145 Fehr doboz mdszerek .....................................................................................................................................145

12.2.5 12.2.6
12.2.6.1

Fekete doboz mdszerek ....................................................................................................................... 145 Specilis tesztek .................................................................................................................................... 146


Tesztllapotok....................................................................................................................................................146

12.2.7 Program dokumentlsa ...................................................................................................................... 146 12.2.8 Rendszer felhasznli kziknyve ......................................................................................................... 146 12.3 A FEJLESZTST SEGT EGYB RENDSZEREK .................................................................................................. 147 12.3.1 Verzikezel szoftverek ......................................................................................................................... 147 12.4 FORRSKD GENERL SZOFTVEREK ............................................................................................................ 147 12.5 CASE ESZKZK SZEREPE A PROGRAMOZSBAN .......................................................................................... 148 12.6 A PROGRAMOZ, SZERVEZ S FELHASZNL INFORMLIS KAPCSOLATA ..................................................... 148 13 ZRSZ........................................................................................................................................................ 150

Bevezets

Amikor elkezdtem programozssal foglalkozni, mg a Commodore 64-es gpek voltak divatban, s az amatrk kedvenc programozsi nyelve a BASIC volt. Hamarosan a nyelv minden csnjval-bnjval tisztban voltam, majd rvetettem magam a gp gpi kd programozsra is. Sokat programoztam. Mgis nagy gondom volt, hogy krlbell 1000 sor hossz programok rsakor a programjaim mr nem sikerltek igazn, tele voltak hibval, megmagyarzhatatlanul viselkedtek, ttekinthetetlenekk vltak. Ekkor kezdtem el az egyetemet, az informatika szakot. Az els vek egyikben volt egy Mdszeres programozs cm trgyunk. A kurzus vgre rjttem, hogy korbbi programjaim nem is mkdhettek hibtlanul, mert a kezemben nem volt semmi mdszer, amitl hibtlanok lehettek volna. Sokfle rendszer hasznlata sorn rjttem, hogy a programozs egyfajta gondolkodsi forma, ugyanis a problmk rendszeresen klnbz krnyezetekben ugyanazok, csak a megjelensi formjuk klnbzik. Ez azt jelenti, hogy a gondolkozsi formt kell alapveten elsajttani annak, aki meg akar tanulni programozni, utna mr az egyes programozsi nyelvek specialitsai knnyen mennek. A jegyzet nem foglalkozik az egyes programozsi nyelvek specilis krdseivel, hanem a programozst, a problmk megkzeltsnek mdszert trgyalja. A programozs tanulsnak sorrendjben kvetkeznek az egyes fejezetek. Akik az Informatikai alapismeretek tantrgy kzpszint vagy emelt szint rettsgijre kszlnek, vagy az Informatika tantrgy emelt szint rettsgijre kszlnek, azoknak javaslom az albbi fejezetek ttanulmnyozst: Alapfogalmak Algoritmusok Adatszerkezetek, adattpusok, adattrols Egyszer adatszerkezetek sszetett adatszerkezetek Elemi algoritmusok, programozsi ttelek

Akik a Szmtstechnikai Programoz, Mszaki informatikai mrnkasszisztens, Rendszerinformatikus s hasonl OKJ-s kpzs vizsgjra kszlnek a fentieken kvl a tbbi fejezetet is sikeresen forgathatjk. Fbin Zoltn fz@szily.hu Budapest, 2007. mjus 20.

Alapfogalmak

A programozs vals problmk szmtgpes megoldsa. Milyen tulajdonsgai fontosak a szmtgpnek? A szmtgp ltalnos cl (univerzlis) automatikus vezrls elektronikus digitlis. Mi a klnbsg az ember s a szmtgp kztt? Hogyan szmol az ember? Olvassa az utastsokat rtelmezi Vgrehajtja Rtr a kvetkez utastsra, vagy arra, amit elrnak Milyen utastsok vannak? Bemeneti/kimeneti (input/output) Adatkezelsi Aritmetikai Dntsi

A szmolsi tevkenysget vgz ember szmra magyar nyelven lehet olyan utastsokat adni, amit kpes vgrehajtani. A magyar nyelv kellen sszetett ahhoz, hogy a bonyolultabb munkafolyamatokat is megrtse az ember. A szmtgp szmra a vezrlegysg ltal rtelmezhet s vgrehajthat utastsok (parancsok) adhatk. Kezdetben az ember megtanulta ezeket az utastsokat (a szmtgp nyelvt). A kommunikci ezen a nyelven lass, nehzkes, sok hibval jrt. Feltesszk a krdst, hogy mirt nem tanul meg inkbb a szmtgp magyarul? A problma sszetett. Valakinek meg kellene tantania r. A nyelv ktrtelm, a szmtgp flrertheti Az l nyelvben sok minden fgg a szvegkrnyezettl Szemantika problma (el kellene magyarzni a szavak jelentst)

Megoldsi lehetsg, ha az ember is s a szmtgp is megtanul egy kzs nyelvet! Ez a nyelv kifejezi a szndkainkat, azaz mit szeretnnk kezdeni a szmtgppel. Mit is? Szeretnnk megmondani neki, hogy milyen tevkenysget hajtson vgre. A szmtgp azt tudja megcsinlni, amit megmondunk neki. Meg szeretnnk mondani, hogy hogyan hajtson vgre dolgokat. Ha megmondjuk a hogyant, akkor a szmtgp kpes elvgezni a feladatot.

Algoritmusok

Az ember a fejben megbv gondolatokat tevkenysgek sorozatra fordtja le. Ez cselekvssorozat az algoritmus. Definci Az algoritmus egy cselekvsi sorozat formlis lersa. Az algoritmus elssorban az embernek szl formlis lers. Az algoritmusok lersnak jl definilt mdszerei vannak. Az algoritmusok fontos tulajdonsgai: Vgessg vges id alatt be kell fejezdnie Meghatrozott Minden egyes lpsnek pontosnak kell lennie. Az l nyelv nem felttlenl alkalmas erre, ezrt az algoritmus egy formlis nyelv Bemenet/Input Meg kell adni a bemeneti paramtereit, vagy ha ezek nincsenek, akkor ezt is jellni kell Kimenet/Output Meg kell adnia a kimeneti adatokat Elvgezhet Olyannak kell lennie, amelyet egy ember is el tud vgezni megfelel sok papr s ceruza felhasznlsval. Univerzlis Kellen ltalnos ahhoz, hogy megfelel peremfelttelek teljeslse esetn a feladatt elvgzi

Definci Az algoritmus vezrlsi szerkezete meghatrozza, hogy a programban (algoritmusban) lert utastsokat a program milyen sorrendben hajtsa vgre. Definci A szekvencia olyan program vezrlsi szerkezet, amelyben az utastsok lersnak sorrendje meghatrozza a vgrehajtsuk sorrendjt is. Tipikusan az egyms al rt utastsok lersi sorrendje a vgrehajtsi sorrend. Az egy utastsbl ll program specilis szekvencinak foghat fel. Definci A szelekci (ms nven elgazs) olyan vezrlsi szerkezet, amely egy logikai felttel hatsra a program vgrehajtsa kt vagy tbb irnyra sztbomlik s a felttel eredmnytl fggen klnbz szekvencit hajt vgre a program. Ha a felttel eredmnye igaz vagy hamis, akkor egy vagy kt klnbz szekvencia vgrehajtsa kztt dnt a program. Ilyenkor ktirny elgazsrl beszlnk. Ha a felttel eredmnyeinek sszessge (eredmnyhalmaza) egymstl jl megklnbztethet rtkeket jelent, akkor tbb irny elgazsrl beszlnk. Ekkor a lehetsges eredmnyekhez hozzrendelnk szekvencikat, amelyeket a program vgrehajt, s ha a megjellt eredmnyek egyike sem jn ltre, akkor az alaprtelmezett szekvencit hajtjuk vgre.

Definci A ciklus olyan programszerkezet, amely egy szekvencit ismtel. A ciklusnak a lnyege az, hogy bizonyos utastsok sorozatt ismtli. A ciklus az albbi rszekbl ll: Ciklus fej A ciklusfejben hatrozzuk meg azokat a feltteleket, amelyek teljeslse esetn a program vgrehajtja a ciklus magot. Ciklus mag Az a szekvencia, amelyet a program ismtelten vgrehajt. Ciklusok fajti: Elltesztel ciklus a ciklusmag vgrehajtst meghatroz felttel a ciklusfejben van. A felttel vizsglata egyszer mindenkppen lezajlik. A ciklusfejbe a ciklus vgrehajtsnak a felttelt rjuk (a bennmarads felttele), vagyis ha a felttel ppen igaz, akkor vgrehajtjuk a ciklusmagot. Lehetsges olyan helyzet, hogy a program vgrehajtsa sorn a ciklus felttele eleve hamis, ekkor a ciklus mag sohasem hajtdik vgre. Htultesztel ciklus a ciklusfej nem tartalmaz felttelt, a ciklusmag mindenkppen lefut egyszer, s a ciklusmag lefutsa utn vizsgljuk meg a felttel teljeslst. Itt ltalban szintn a bennmarads felttelt rjuk le. Megszmllsos ciklus A ciklus fejben a ciklusmag ismtlsnek szmt hatrozzuk meg. Ez is elltesztel ciklus, teht ha az ismtlsek szma 0 lenne, akkor a ciklusmag nem fut le egyszer sem. Definci A vltoz a programban megadott nvvel megklnbztetett memriaterlet. Itt trolhatunk adatokat a programban. A vltozk tulajdonsgai: a vltoz neve erre specilis szablyok vannak (ltalban alfanumerikus karakterek lehetnek plusz alhzs jel) a vltoz tpusa azt jelenti, hogy milyen fajta adatot trolhat a vltoz (szveg, szm, dtum, stb...). Ha egy programozsi nyelv tpusos, akkor a vltoz deklarlsakor (ltrehozsakor) megadott tpus rtket lehet csak trolni a vltozban (pl C, Pascal, Java, Basic). Ha a programozsi nyelv enyhn tpusos, akkor a vltoz deklarcija nem jelenti egyttal a tpusnak is a meghatrozst, st esetenknt a tpusa vltozhat is futs kzben. A vltoz rtktartomnya a vltoz ltal felvehet lehetsges rtkek halmaza. a vltozk rtke a program futsa sorn rtket adhatunk a vltoznak. A vltozkat a program futsa elejn inicializlni kell, azaz kezdrtket kell nekik adni. A programozsi nyelvek ltalban automatikusan az inicializlst elvgzik. A vltoz cme a memrinak az a helye, ahol futs kzben az adott vltoz elhelyezkedik. A vltoz cmnek kezelst a programoz szinte sohasem maga vgzi, hanem egy szimbolikus nvvel, a vltoznvvel hivatkozik az adott helyre. A konkrt memriacm vagy a program fordtsakor, vagy futs kzben dl el. A vltozk olyan szimblumok, amelyek hasznlatval utastjuk a programot, hogy futskor biztostsa az vltoz tpusnak megfelel mret helyet a memriban. A program fordtsakor az ltalunk hasznlt szimblumok lefordulnak olyan memriacmekk, ahol a megfelel tpus adatokat lehet trolni. A program a memriba val betltdskor ezeket a cmeket kiegszt az opercis rendszer egy pillanatnyi alapmemriacmmel s gy tudja kezelni vgl is a programokat. Definci A konstans a programban megadott nvvel megklnbztetett rtk. A program futsa sorn a konstansnak csak egyszer lehet rtket adni. ltalban olyan adatokat trolunk benne, amelyek a program teljes terletn llandak, s elrhetnek kell lennik. A program fordtsakor a konstans helyre az adat binris megfelelje kerl, vagyis az rtket bedrtozzuk a programba.

Definci Az eljrs a program nll, zrt egysge, amelyek a fprogramtl fggetlenl definilt. Az eljrsokat egyedi nvvel azonostjuk a programon bell. Az eljrs lerst nevezzk az eljrs definilsnak. Ha egy programban a definilt eljrst le akarjuk futtatni, akkor meghvjuk az eljrst, azaz nevvel hivatkozunk r. A program vgrehajtsa ekkor tkerl az eljrs definilsnak helyre, majd amikor befejezte az eljrst, akkor a program vgrehajtsa visszakerl a hvsi hely utni utastsra. Az eljrsok a hvsi helytl paramtereken keresztlkaphatnak rtkeket. A paramterek olyan vltozk vagy konstansok, amelyek a hvs helyn lteznek. Az eljrs belsejben ezekre az tadott rtkekre hivatkozni lehet, azok rtkeit lehet mdostani. A paramtertads mdjtl fggen a mdostott paramterek az eljrs befejezse utn rvnyre jutnak a hv programrszben vagy nem. A paramtertads mdjrl ksbb rszletesen szlunk. Definci A fggvnyek olyan programozsi zrt egysgek, amelyek minden tulajdonsgukban megegyeznek az eljrsokkal, de a fggvnyek rendelkeznek egy visszatrsi rtkkel, amelynek kvetkeztben a fggvnyek kifejezsekben is rszt vehetnek, k megadott rtk s tpus rtket kpviselnek. Definci Paramtertadsnak hvjuk azt, amikor a hv programrsz rtkeket ad t a meghvott eljrsnak vagy fggvnynek. Ezt az rtket a hvott eljrs vagy fggvny fel tudja hasznlni, mdosthatja, stb. A paramtertadsnak az albbi formi lteznek: rtk szerinti paramtertads: Ekkor a hvskor a hvsi helyen lv rtkekrl msolat kszl, s ezzel a msolattal dolgozik a meghvott eljrs. Az adat tvtelekor ugyanolyan tpus paramtert kell jellnnk, mint az tadskor, de az tadott s az tvett paramterek neveinek nem kell megegyeznie. Az eljrson bell brmilyen mdosts az eljrs befejezse utn nem jut rvnyre. Paramterknt megadott tpus vltoz, konstans szerepelhet. Cm szerinti paramtertads: Ekkor a hvs helyn szerepl paramtereknek a memrin belli helyt (cmt) adja t a program az eljrsnak. Az adat tvtelekor ugyanolyan tpus paramtert kell jellnnk, mint az tadskor, de az tadott s az tvett paramterek neveinek nem kell megegyeznie. Ha az eljrs mdostja a paramter rtkt, akkor termszetesen ez a mdosts az eljrs befejezse utn is hatlyban marad. Konstansokat cm szerint nem lehet tadni eljrsnak

Megjegyzs A Pascal s a C ms s ms mdon kezeli a paramtertadst. A lnyeg az, hogy a Pascalban a hv s a hvott eljrsban a vltozk, adatok tpusnak s szmnak meg kell egyeznie, mg a C nyelvben a tpusnak sem kell mindig megegyezni, s lehetsg van arra, hogy kevesebb adatot vegynk t, mint amennyit tadna a hv eljrs. Br a rendszer bizonyos esetekben figyelmeztet a turpissgra, de a program lefordul s fut is.

Egy futtathat EXE, COM vagy BAT fjl is tud tvenni az opercis rendszertl adatokat a PC-ken. Ekkor mindig rtk szerinti a paramtertads.

3.1 Algoritmuselr mdszerek, nyelvek Hromfle algoritmusler mdszer terjedt el Magyarorszgon. Az els lersi mdszert mg a msodik genercis gpek idejn talltk ki, ma is sokan hasznljk. Ez a folyamatbra. A folyamatbrt elssorban az egyszerbb rendszerek futtatsi folyamatainak brzolsra talltk ki. Elnye az, hogy vizulisan megmutatja a programok futsnak menett. Az oktatsban, az egyszerbb folyamatok brzolsban nagy szerepe van. Ahogy a programozs egyre inkbb tudomnny vlt a folyamatbra mr nem felelt meg az egzakt s absztrakt brzolsnak, a programozk kitalltk a struktogram-ot. A struktogram preczen brzolja a folyamatokat, ugyanakkor olvassa esetenknt nehzkes, a valdi programozstl kicsit elrugaszkodott. Formalizmusa precz, de nehezen rtkelhet vizulis brkat eredmnyez. A programozs oktatsban vezettk be a mondatszer lerst vagy pszeudo-kdot. A mondatszer lers nagy trt hdtott, mivel nagyon jl illeszkedik a Pascal programozsi nyelv szintaktikjhoz, kellen szabadon definilhatk az egyes programozsi elemek, ugyanakkor nem vizulis. A mondatszer lers hasznlata esetn a kdols esetenknt a magyar nyelvrl az angol nyelvre val fordtsra egyszersdik. A felsorolt hrom algoritmus-ler mdszer egyenrang, mind a hrom alkalmas arra, hogy kisebb-nagyobb rendszerek algoritmusait megfogalmazzuk segtsgkkel. Itt nem trgyaljuk, de a bonyolult rendszerek lershoz a fenti mdszerek egyike sem elegend ma mr, ezrt az objektum-orientlt programok lershoz az UML (=Universal Modelling Language) az egyik leggretesebb lernyelv, amit a jegyzet ksbbi rszben rszletesen trgyalunk

3.1.1

Folyamatbra

A folyamatbrk hasznlatakor grafikai jelekkel jelljk az egyes programozsi egysgeket. A grafikai jeleket nyilakkal ktjk ssze, a program futsnak megfelel mdon. ltalban egy program vagy egy eljrs fentrl lefel vagy balrl jobbra hajtdik vgre, legalbbis a folyamatbra rajzolsnl erre kell trekedni. A szoksos feldolgozsi lpseket az albbi mdon szimblumokkal jelljk:
Start

Algoritmus indulsa

Egy utasts

Utasts

Feltteles elgazs

Felttel

Igaz

Hamis

Az algoritmus vge

Stop

A folyamatbrban egy eljrs brzolsa gy jelenik meg, hogy a tglalapba berjuk az eljrs nevt, majd egy kln brban lerajzoljuk az eljrs folyamatbrjt.

Gondot jelent egy fggvny brzolsa, ugyanis a folyamatbra esetn nincsen megolds a fggvny visszatrsi rtknek jelzsre. A hrom alapvet programvezrlsi szerkezet jelzse itt tallhat meg. Szekvencia

Els utasts

Szekvencia

Msodik utasts

Harmadik utasts

Szelekci (feltteles elgazs)

Szelekcik

Felttel

Igaz Utasts

Hamis

Igaz

Felttel

Hamis

Utasts

Utasts

Iterci (Ciklus)
Itercik (ciklusok ) elltesztel ciklus
ciklus vgrehajtsnak felttele Igaz Igaz

Utasts (ok)

htultesztel ciklus

Utasts (ok)

ciklus vgre hajtsnak felttele

i := kezdrtk

megszmllsos ciklus
i <= vgrtk Hamis

Igaz

Utasts (ok) i:= i+1

3.1.2

Struktogram

A struktogram algoritmus ler mdszer elssorban a professzionlis programozs oktatsa sorn hasznland. Ennek a ler mdszernek az elnye rendkvl egzakt mdjban s tmrsgben van. Taln kezdk szmra nem annyira ttekinthet, mint a folyamatbra, de annak hibit kikszbli. A lnyeg az, hogy egy programot egymsba gyazott dobozokkal szemlltetek s minden doboz egyttal tovbbi programszerkezetek trolja is.
Szekvencia Utasts 1 Utasts 2

Szelekci (Feltteles elgazs)

Felttel igaz Utasts hamis Utasts

Felttel

Iterci (ciklus)

A ciklusban marads felttele Utastsok szekvencija (ciklusmag)

Itt is problematikus az eljrsok s fggvnyek kibontsa. Erre lehet az albbi jellst hasznlni.

Ezutn a megfelel nvvel alkotunk egy jabb struktogramot, s ott bontjuk ki az eljrst.

3.1.3

Mondatszer lers

A mondatszer lersnak akkor van rtelme, ha a programoz valamennyire tisztban van egy szmtgpes program mkdsvel, rti az utastsok egymsutnisgt, az rtkads, az elgazsok, a ciklusok fogalmt. rti azt, hogy mit jelent egy eljrs hvsa s mit jelent egy fggvny hvsa. Mint ltjuk majd, az algoritmus-ler nyelv egyfajta magyar nyelv programozsi nyelv. A magyarorszgi programozs-oktatsban kzpszinten s egyetemi szinten is tbb terleteken preferljk ezt a mdszert, radsul az rettsgi s az OKJ-s vizsga is tartalmazhat ilyen mdon megfogalmazott feladatokat, ezrt ezt egy kicsit rszletesebben trgyaljuk. A mondatszer lers a kvetkez szintaktikai (=helyesrsi) szablyokat tartalmazza:

1. Egy sorba egy utastst runk 2. Vltoz nevnek, tpusnak s rtelmezsi tartomnynak megadsa
Byte i Egsz szm Tomb A[N] szvegekbl ll tmb

Egy vltoz tpust nem kell mindig kln deklarlnunk, ha az rtkadskor kiderl a tpus.
j := 23

3. Beviteli s kiviteli utastsok


Ki: Be: Kir utasts Adatbeviteli utasts

4. Program struktrk Program jelzse


Program Nv Program vge

Eljrs jelzse
Eljrs Nv(paramterlista) Eljrs vge

Fggvny jelzse
Fggvny Nv(paramterlista) Nev := visszatrsi rtk Fggvny vge

Az eljrsokat s fggvnyeket az albbi mdon hvhatjuk meg a programbl:


Nv( paramterlista )

vagy
rtk := Nv( paramterlista )

5. Egy vltoz rtkadsa


B := rtk

Pl.
B := 65

A kt oldalon azonos tpus rtkek vannak 6. Vezrlsi szerkezetek Feltteles elgazs


Ha felttel igaz akkor Utasts

vagy
Ha felttel igaz akkor Utastsok Elgazs vge

vagy

Ha felttel igaz akkor Utastsok Klnben Utastsok Elgazs vge

Ciklusok Definci: Megszmllsos ciklus Olyan ciklus


Ciklus cv :=kezdrtktl vgrtkig lpskzzel Ciklus vge

vagy
Ciklus amg felttel igaz Ciklus vge

vagy
Ciklus amg felttel Ciklus vge

3.2 Program vagy algoritmus specifikci Amikor egy programot vagy algoritmus ksztnk meg kell hatrozni, hogy milyen tpus s rtktartomny adatokat kap a program s milyen kimeneti adatokat vrunk a programtl. Definci: Programspecifikci (algoritmus specifikci) A program bemeneti s kimeneti adatainak a meghatrozsa. Meghatrozzuk a program bemen s kimen adatainak a Nevt, rtelmt Tpust, rtktartomnyt Meg kell hatroznunk, hogy a bemen adatok ismeretben milyen kimen adatokat tekintnk helyesnek s melyeket helytelennek, azaz meg kell hatroznunk az sszefggst a bemen s kimen adatok kztt. 3.3 Algoritmusok dokumentlsa Brmelyik algoritmusler mdszert is hasznljuk, fontos a program rszletes dokumentlsa. Az absztrakt mdszerek hasznlata esetn (folyamatbra, struktogram) ez fokozottabban rvnyes. Az eljrshvsok helyn le kell rni a nem magtl rtetd eljrsok szerept, az tadott paramtereket s a visszakapott rtkeket. Az eljrs kifejtsekor le kell lerni az eljrs fejlcnl, az tvett rtkek s visszaadott rtkeket, nv s tpus szerint. Rviden le kell rni a fggvny vagy eljrs szerept. A programhoz vagy algoritmushoz akkor kell megjegyzseket fzni, ha a kd nem teljesen trivilis az tlagos fejleszt szmra. Figyelembe kell venni, hogy a programozk egy-kt hnap utn elfelejtik a sajt kdjukat is, teht inkbb tbb megjegyzst, mint kevesebbet clszer hasznlni. Az algoritmusok lersnl mindig trekedjnk a vilgos ttekinthet lersra, inkbb tbb helyet hagyjunk egy-egy programrsznek, mint kevesebbet. Hasznljuk a bekezdses rsmdot. Ez azt jelenti, hogy az elgazsok s ciklusok belseje kezddjn a mdin (papron, a szvegszerkesztben) beljebb, mint az elgazs vagy ciklus fejlce.

Ugyangy az eljrsok eljrs magja is kezddjn beljebb az eljrs fejlcnl.

Adatszerkezetek, adattpusok, adattrols

Az informatikban az adatokat nem fizikai megjelensi formjukban troljuk, hanem kdolva. Kdolson azt rtjk, amikor egy adatsorozatot, jelek sorozatval helyettestjk, s a jelsorozatot troljuk, tovbbtjuk. A kdols clja sokfle lehet. Az adatok rthetbb vagy egyrtelm megjelentse, tmrebb trolsa, gyorsabb tvitele, stb. A kdoland adat flesge meghatrozza azt, hogy hnyfle jellel lehet kdolni az adatot. Gyakori eset, hogy egy mr kdolt jelsorozatot tovbbkdolunk, s gy tbbszrs kdols jn ltre. Ha az eredeti adatokat vissza akarjuk nyerni, akkor a kdols fordtottjnak, a dekdolsnak kell lezajlania. Ha egy adatsort tbbszrsen kdolunk, akkor a dekdolsok sorozata a kdols sorozatval fordtott sorrendben zajlik le. A programozsi nyelvek az adatokat bizonyos keretek kztt troljk. A szmtgpek fizikai felptsbl kvetkezen az adatokat bitek sorozataknt troljk a memriban. Tekintettel arra, hogy egy bit csak ktfle adatot tartalmazhat, ezrt a biteket nagyobb egysgekbe szervezik s a processzorok knyelmes mdot adnak a nagyobb egysgekben trtn adatkezelshez. Br az adatok trolsnak mdja programnyelvenknt, st a programnyelv implementciiknt is vltozhat, ugyanakkor vannak olyan alapvet adatszerkezetek, amelyek a gpek tulajdonsgai miatt azonosak. A szmtgpek az adatokat byte, word (2 byte = sz) vagy duplasz (4 byte) hossz egysgekben kezelik. A processzorok tpustl s a memrik szervezstl fggen a hromfle adatkezels sebessge ms s ms. Erre plda, hogy a nyolc bites processzorok a byte hossz adatokat kezeltk a leggyorsabban, a 80286os processzorok a sz hosszsg adatokat, mg a 386-os s annl fejlettebb Intel processzorok a duplasz hossz adatokat kezelik a leggyorsabban. Ha optimlis sebessg programot akarunk rni, ekkor az adattpusok meghatrozsnl erre is figyelni kell. Amikor egy programozsi nyelv adatainak trolst vizsgljuk, akkor felttelezzk, hogy van egy kellen nagy memrink, amely byte nagysg egysgekbl ll. A byte-ok sorfolytonosan helyezkednek el a memriban. Az adatok trolsa sorn a szmtgpet nem rdekli egy adat rtelme, jelentse. A programoznak kell mdot tallnia arra, hogy az adatot jelentsnek megfelelen kezelje. A szmtgpes programok azonban nyilvntarthatjk bizonyos formai mdszerekkel az adatok egyb paramtereit. Az adatok jellemzi: Minden adat rendelkezik tpussal Az adattpus meghatrozza az adat lehetsges rtkt. Az adattpus lehetsges rtkeinek halmaza az rtktartomny. Az adat ltal a httrtron vagy a memriban elfoglalt hely nagysga az adat mrete. Egyes adattpusok mrete eleve adott, ms adattpusok mrete a definci sorn alakul ki a rsz adattpusok mreteibl kvetkezen, mg vannak olyan adattpusok, amelyeknek mrete a program futsa kzben dl el Fontos az adat elhelyezkedse a memriban. Ez az adat cme. A programok az adat cmnek ismeretben kpesek hozzfrni az adat rtkhez, azt a megadott helyrl kiolvassk s szksg esetn mdostjk, illetve visszarjk a httrtrakra. Az adat tpusa egyrtelmen meghatrozza az adattal vgezhet mveleteket (pl. numerikus adatokkal matematikai mveleteket lehet vgezni, de szveggel nem ...). Egyes adattpusok mrete eleve adott, ms adattpusok mrete a definci sorn alakul ki a rsz adattpusok mreteibl kvetkezen, mg vannak olyan adattpusok, amelyeknek mrete a program futsa kzben dl el. Alap adattpusok a rendszerekben elre definilt tpusok. A rendszerekben ltalban van lehetsg az alap adattpusok s a korbban definilt tpusok felhasznlsval j tpusok definilsra is. Bvtett adattpusok A rendszerekben meglv alap adattpusok felhasznlsval ltrejv j tpusok, amelyek az eredeti alaptpus valamilyen tulajdonsgnak a mdostsval jnnek ltre. Ilyen mdosts lehet pl. az rtktartomny szktse, bvtse.

Korbban mr definiltuk a konstans s a vltoz fogalmt. Amikor deklarlunk egy vltozt, vagy egy konstanst ltrehozunk az n. ersen tpusos nyelvek esetn ilyen a C, C++, Pascal, Visual Basic a vltoznak egyttal megadjuk a tpust is. Ms nyelvek esetn a vltoz tpusa futs kzben, az els rtkadskor dl el. Vannak olyan nyelvek, ahol a vltoz az rtktl fggetlenl vltoztathatja adattpust pl. PHP. 4.1 Az adattpusok osztlyozsa megszmllhatsg szerint A halmazelmletbl ismert fogalom a megszmllhatsg. Amikor egy halmaz elemeit hozz tudjuk rendelni a pozitv egsz szmok halmazhoz, akkor mondjuk, hogy a halmaz megszmllhat szmossg. Ez a gyakorlatban azt jelenti, hogy egyesvel vgig tudok valamilyen mdon lpkedni a halmaz elemein. Ilyen halmaz pldul az egsz szmok halmaza, a betk halmaza, stb. Az ilyen adattpusokat szoks felsorolsi adattpusoknak is hvni. A vals szmok halmaza azonban nem megszmllhat, mivel mindig tudok kt olyan szmot mondani, amelyek kztt vgtelen szm vals szm tallhat, s amelyek nem bejrhatk. Ennek a halmaznak a szmossga nem megszmllhat. Ilyen adattpus a vals szmok vagy lebegpontos szmok halmaza. Ezen a ponton meg kell llni, ugyanis beletkznk az abba a tnybe, hogy a vals szmtgpek fizikailag korltosak minden szempontbl, azaz vgtelen szm rtket vges helyen nem tudunk trolni! Kompromisszumot kell ktnnk, s azt mondjuk, hogy azok az adattpusok nem megszmllhat szmossgak, amelyek rszre nem ll rendelkezsre megfelel kapacits. Persze ez egy kicsit sntt, de ez van. 4.2

Az adattpusok osztlyozsa bonyolultsg szerint

Definci Az egyszer adattpusokat a rendszer egysgknt kezeli s nem bonthat szt sszetevkre. Definci sszetett adattpusok ms adattpusok valamifle kombincijaknt jnnek ltre. A rendszer nem felttlenl tudja egyben kezelni az sszetett adattpust, ebben az esetben a programoznak kell gondoskodni a feldolgozsrl. Az sszetett adattpusnak vannak nllan is feldolgozhat rsz adatai. Az sszetett adattpusokbl is kszthetnk tovbbi sszetteleket, gy meglehetsen bonyolult adatstruktrkat lehet kialaktani. Az adattpusok helyett szoks az adatszerkezet kifejezst is hasznlni. 4.3 Egyszer adattpusok Az egyszer adatszerkezeteket minden szmtgpes rendszer ismeri. Ilyenek a numerikus, karakter, logikai tpusok. Az egyszer adattpusokat a gpek processzor szinten, azaz gpi kd utastsokkal tudjk kezelni, ezrt hasznlatuk a lehet leggyorsabb programokat eredmnyezi.

4.3.1

Numerikus tpusok

Tetszleges alap szmok brzolsa A szmokkal val mveletek sorn hozzszoktunk a 10-es alap szmrendszerhez, de a szmtgpeknek mindegy, hogy mi a hasznlt szmrendszer alapja (elvileg). Technikailag clszer olyat vlasztani, amely illeszkedik a szmtgpek bels lelkivilghoz, ezrt a legjobban elterjedt rendszerek a kettes (binris), 16os (hexadecimlis) s a 8-as (oktlis) szmrendszer. A szmrendszer alapszma egyttal megadja a szm lersnl hasznlhat jelek szmt is.

4.3.1.1 Kettes szmrendszerbeli szmok brzolsa


A kettes szmrendszer esetn a szmokat 0 s 1 jelek sorozatval jelljk. Annyi jelet runk le, hogy a jelek szma kett hatvnyaival legyen egyenl (1, 2, 3, 8, 16, 32, 63 jel), Egy jelet egy bit-nek hvunk (Binary Digit). Ennek alapjn beszlhetnk 4, 8, 16 stb... bites szmokrl.

Egy szm talaktsa 10-esbl kettesbe. Elosztjuk a 10-es szmrendszerbeli szmot 2-vel, a maradk lesz a jobbrl szmtott legutols bit bit, majd a hnyadost osztjuk 2-vel s a legszls lesz az utols eltti bit, stb...) Az gy kapott bitsorozatot kiegsztjk annyi nullval, hogy megfeleljen a kvnt trolsi mretnek. (8 bit, 16 bit, 32 bit, stb...) Egy szm talaktsa kettes szmrendszerbl 10-esbe A jobbrl szmtott els bit jelenti a kett 0. hatvnyt, a kvetkez kett 1. els hatvnyt, stb... Ha 1 van a megfelel helyirtken, akkor az eredmnyhez hozzadom a megfelel 2 hatvnyt. 00010101 = 0*128+0*64+0*32+1*16+0*8+1*4+0*2+1*1 =23 0 s 1 kztti 10-es szmrendszerbeli szmok binris brzolsa. A szmot elosztom 2-vel. A hnyados lesz a kettedes pont utni els jegy. A maradkot elosztom 2 kvetkez hatvnyval, s gy folytatom, amg a megfelel trolsi mretet el nem rem. Osztand /oszt 0,7 / 0,5 0,2 / 0.25 0,2 / 0,125 0,075 / 0,0625 0,0125 / 0,03125 0,0125 / 0,015625 0,0125 / 0,0078125 ... Az gy kapott szm: 0,10110001 Hnyados => 1 => 0 => 1 => 1 => 0 => 0 => 1 Maradk 0,2 0,2 0,075 0,0125 0,0125 0,0125 0,0046875

Lthat, hogy az eredmny nem pontos, mivel az utols oszts utn is van maradk! Az utols bit rtkt kerekteni kell. ltalban igaz, hogy az egyik szmrendszerben megadott vges szm nem felttlenl lesz vgesek ms szmrendszerben.

4.3.1.2 Kettes komplemens szmbrzols


Az tetszleges mret eljeles egsz szmok brzolsnak elve. A szmot 2n db bittel rjuk le, ahol n=8, 16, 32, stb. A legmagasabb helyirtk bit az gynevezett eljelbit. Az eljelbit 0 rtke jelenti azt, hogy a szm pozitv vagy nulla, az eljelbit 1-es rtke jelenti azt, hogy a szm negatv. Hogyan llapthatjuk meg egy 10-es szmrendszerbeli szmbl a kettes komplemens alakjt? Vesszk a szm abszolt rtkt. Ha a szm pozitv, akkor ez nem mdost semmit, ha negatv, akkor elhagyjuk az eljelet. Ennek a szmnak kiszmtjuk a binris rtkt. (korbban lttuk) Az gy kapott bitsorozatot kiegsztjk annyi nullval, hogy megfeleljen a kvnt trolsi mretnek. (8 bit, 16 bit, 32 bit, stb...) Ha az eredeti szm pozitv volt, akkor vgeztnk. Ha az eredeti szm negatv volt, akkor a kapott binris szmban minden bit rtkt felcserlem 0-rl 1-re s 1-rl 0-ra. Ekkor kapom az egyes komplemens rtket. A vgn hozzadunk 1-et. Pl. Eredeti szm Egyes komplemens: Kettes komplemens: 22 -22 => => => 00010100 11101011 + 1 11101100

4.3.1.3 Oktlis szmok brzolsa (8-as szmrendszer)


Az oktlis szmoknl a hasznlhat jelek 0,1,2,3,4,5,6,7 Az oktlis szmokat mindig hrmasval csoportostva rjuk le. A 10-es szmrendszerbl az albbiak szerint szmoljuk t a szmot 8-asba. Az eredeti szmot elosztjuk 8-cal, s a maradk lesz a legkisebb helyirtk szm. A hnyadost osztjuk megint 8-cal s a maradk lesz a kvetkez jegy, stb... 196 / 8 => 24, maradk 4 24 / 8 => 3, maradk 0 3/ 8 => 0, maradk 3 Az eredmny: 304 A szoksos jellse az oktlis szmoknak az, hogy balrl kiegsztjk egy 0-val a szmot, azaz 0304. Visszafel hasonlkppen jrhatunk el, mint a binris brzolsnl. Binris szmokat talaktani oktliss egyszer, mivel 3 bit alkot egy oktlis szmjegyet, azaz: 0304 => 000 011 000 100, ami persze csak 8 bites lesz, azaz 11000100.

4.3.1.4 Hexadecimlis szmok brzolsa (16-os szmrendszer)


A hexadecimlis szmoknl a hasznlhat jelek 0,1,2,3,4,5,6,7 ,8,9,A,B,C,D,E,F. A hexadecimlis szmokat mindig ngyesvel csoportostva rjuk le. A 10-es szmrendszerbl az albbiak szerint szmoljuk t a szmot 16-osba. Az eredeti szmot elosztjuk 16-tal, s a maradk lesz a legkisebb helyirtk szm. A hnyadost osztjuk megint 16-tal s a maradk lesz a kvetkez jegy, stb. 196 / 16 => 12, maradk 4 => 4 12 / 16 => 0, maradk 12 => C Az eredmny: C4 A szoksos jellsei a hexadecimlis szmoknak: 0xC4, #C4, $C4 Visszafel hasonlan jrunk el, mint a binris szmoknl. Binris szmokat hexadecimliss s vissza konvertlni egyszer, mivel 4 bit alkot egy hexadecimlis szmjegyet: 192 => 0xC4 => 0110 100

4.3.1.5 Tetszleges alap szmrendszerek (nem trzsanyag rettsgire)


Az x alap szmrendszer esetn a hasznlt jelek 0-tl (x-1) ig terjednek. Ha a szmrendszer alapja x, akkor 10-esbl erre az alapra gy konvertlunk, hogy elosztjuk az eredeti szmrtket az alappal s a maradk lesz a szmrendszerbeli szm utols jegye. A hnyadost osztjuk megint s gy tovbb. Visszakonvertlni gy kell: Ha van egy x alap szmom: a1,a2...an, jelsorozat az albbi polinom rtkt jelli: a1 *Xn-1 + a2 *Xn-2... + an *X0

4.3.1.6 Byte
A mrete 1 byte, rtke 0..255 kztti egsz szm lehet (28 rtk) Ennek egy bvtett adattpusa a rvid egsz vagy shortint, vagy short, amelynek az rtkei 128..,0, ..+127 kztti egsz rtkek lehetnek. A szm eljelt a legmagasabb helyirtk bit eljele jelli. Ha a bit rtke egy, akkor negatv szmrl vagy a nullrl van sz. 8 bites rendszerekben a leggyorsabb adatkezelst biztostjk

4.3.1.7 Word - Sz
Mrete 2 byte, rtke 0..65535 kztti egsz szm lehet. (216 db rtk)

4.3.1.8 Integer - Egsz


Mrete kt byte, rtke 32768..,0,..+32767 kztti egsz rtket veheti fel. (216 rtk) A szm eljelt a legmagasabb helyirtk bit eljele jelli. Ha a bit rtke egy, akkor negatv szmrl vagy nullrl van sz. 16 bites rendszerekben a leggyorsabb adatkezelst biztostjk az Integer s Word tpusok. Lehetsges mveletek: sszeads Kivons Egsz tpus oszts Egsz tpusok osztsakor maradka Eggyel val nvels, cskkents sszehasonltsokban < kisebb, mint, > nagyobb mint, <= kisebb egyenl mint, >= nagyobb egyenl mint, == egyenl, <> vagy # nem egyenl relcik lehetnek. A fenti tpusok bvtsei a longint (Pascal), long int, unsigned long. Ezek 4 byte hossz, adatok, ugyanazokkal a felttelekkel, amelyek a fentiekben trgyaltunk. (232 rtk) + Div vagy / Mod vagy % ++, -A+B AB A div B vagy A / B A Mod B vagy A % B A++, B--

4.3.1.9 Lebegpontos szmbrzols


A 10-es szmrendszerben definilt szmok brzolsa sszetett feladat, radsul rendszerenknt kiss eltr lehet. Kln problmt jelent a 0 brzolsa is s a negatv szmok brzolsa. Elljrban elmondom, hogy a lebegpontos szmokat gyakran 4 bjton, azaz 32 biten brzoljk, amelybl 1 bit az eljelbit, 23 a mantissza s 8 bit a karakterisztika (kitev). Az eljelbit rtke 1-ha a szm negatv, 0 ha a szm pozitv. Egy tzes szmrendszerbeli lebegpontos szm brzolshoz az albbi folyamaton kell vgigmenni: talaktjuk a szmot kettes szmrendszerbeliv, kln az egszrszt s kln a trt rszt: pl. -486,17 => 111100110.001010111000010 Normalizljuk a szmot (A normalizlsnl addig toljuk el a binris pontot, amg a binris ponttl balra nem kerl az els 1-es bit): 1.11100110001010111000010 x 28 Innen kln kezeljk a mantisszt s a karakterisztikt. A mantissza legfels bitje mindig egyes, hiszen a normalizlsnl gy toltuk el a binris pontot. Ezt a bitet elhagyjuk (!) s a mantissza el rjuk az eljelbitet, ami a pldnkban 1-es. 11110011 00010101 11000010 lesz a mantissza A karakterisztiknl trkkznk egyet, a kitev rtkhez hozzadunk 128-at. Ennek az indoka az, hogy ezltal kitev is pozitv szmm vltozna, teht a kitev 8 => 8+127 =135 => 10000111 A karakterisztikt az Intel processzoros gpeken mindig a mantissza eltt troljk a memriban, teht a teljes szm gy fog kinzni: 10000111 11110011 00010101 11000010 Lehetsges mveletek sszeads Kivons Oszts Matematikai fggvnyek. Kerekts, trtrszkpzs sszehasonltsokban < kisebb, mint, > nagyobb mint, <= kisebb egyenl mint, >= nagyobb egyenl mint, + / sin, cos, tg, atg exp, log, Round, trunc A+B AB A/B

== egyenl, <> vagy # nem egyenl relcik lehetnek. A real bvtsnek felelnek meg a double 8 byte, extended, long double 10 bytet pusok. ltalban az sszeads, kivons, szorzs, oszts esetn az rtkek lehetnek kevert tpusak is, azaz egsz tpus s lebegpontos is, de az eredmny mindig olyan tpus lesz, mint a legnagyobb helyet elfoglal rtk vagy lebegpontos. Az olyan fggvnyek, amelyek lebegpontos rtket vrnak, nem elgednek meg egsz tpus paramterekkel s fordtva.

4.3.2

Karakter tpus, kdlapok, karakterkdols

Definci A karakter egy rsjelet trol adattpus. A karakteres adattpus egy karaktere a 8 bites karakterkezelsnl 1 byte helyet foglal, azaz 256 klnbz rtket vehet fel. Valjban a karakterek trolsakor a szmtgp egy byte informcit trol, de hogy az milyen karakternek felel meg milyen betnek az a kdolsi rendszerektl fgg. A PC-k vilgban az ASCII (American Code for Information Interchange ) karakterkdolsi rendszer terjedt el. Ez a kdrendszer 7 bites, azaz a kdrendszernek csak az els 127 karaktere definilt. A 0 31 kd karakterek nem lthat karakterek. A kpernyn mozg kurzort alfanumerikus kpernyn a nyomtat fejt s egyb olyan jeleket definiltak, amelyeknek nincsen lthat formjuk, de azrt fontosak. Nhny pldt csak: 0 nem lthat, 1- , 2 - , 10 soremels, 13 kocsi vissza (Enter), 27 Esc, A 32 Szkz. 33-47-ig klnbz rsjelek vannak, 48 tl 58-ig a 0,1,2,9 szmjegyek, 58-tl 63-ig rsjelek, 64 - @ jel (kukac). 65-tl 90-ig az angol ABC nagybeti, A, B, C, D,.Z-ig. 91-tl 96-ig rsjelek, majd 97-tl 122-ig angol ABC kisbeti, a, b, c, d,.z-ig. 123-tl 127-ig megint rsjelek. Sok olyan nyelv van, amely ezen kvl mg ms rsjeleket is hasznl. Ezeket eredetileg a fels 128 jel kz tettk volna be, de ez nem volt elegend. Ennek a problmnak a megoldsra talltk ki, az un. kdlapokat. A kdlapok az ASCII karakterkszlet egyfajta kiterjesztsei. A klnbz kdlapok esetn az als 128 karakter megegyezik, de a fels 128 karakter az illet kdlapban rvnyes jeleket jelent. A korrekt megjelents rdekben a futtat hardvernek, az opercis rendszernek, a nyomtatnak s minden egyb eszkznek kpesnek kell a klnbz kdlapok hasznlatra, csak gy lehet korrekt megjelentst elrni. A problma vglegesnek tn megoldsa a 16 bites Unicode kdkszlet hasznlata. Ekkor egy karakter kt byte helyet foglal el a memriban s ennek megfelelen 65535 fle jelet lehet megjelenteni. Ez mr elegend a knai s a japn valamint az egyb nem eurpai nyelvek jeleinek a megjelentsre is. Htrnya, hogy a karakterek tbb helyet foglalnak el. A mai opercis rendszerek alapveten alkalmasak ennek a kdrendszernek a hasznlatra.

4.3.2.1 Szvegek trolsa sztring adattpus


Ha a szmtgpek memrijban a karaktereket egyms utn troljuk le, s valamilyen mdon megadjuk, hogy hol van a karakterlnc vge, akkor egy j adattpust, a karakterlncot vagy kzkelet nevn sztringet (string) kapunk. Ktfle karakterlnc kezelsi mdszer terjedt el. Az adott hosszsg sztringek kezelse A Pascalban a karakterek maximlisan 254 byte hosszak lehetnek, mivel a 0. Helyen ll karakter kdja adja meg a sztring hosszt. Ez a karakter egybknt sohasem jelenik meg a kpernyn, de a program ennek alapjn tudja megllaptani a sztring vgt. Ennek az a htrnya, hogy nem lehet tetszlegesen hossz a karakter. A Pascalban elre meg kell mondani, hogy a karakter milyen hossz lesz. 0 vg sztringek kezelse A C nyelvben s annak minden folyomnyban a 0 vg karakterkezels terjedt el, ami azt jelenti, hogy a sztring addig tart, amg nem nulla karakterek jnnek egyms utn. Ennek elnye, hogy elvileg tetszleges hosszsg, a gyakorlatban maximum 65535 karakter hossz stringeket lehet kezelni. A htrnya, hogy azokban az esetekben, amikor szksges tudni a sztring hosszt egy rutinnak vgig kell szaladni a sztring elejtl a 0 kd karakterig s meg kell szmolnia a karaktereket ez kis lassulst okoz a

sztring mveleteknl. Megjegyzend, hogy a Borland Pascal 7-es verzijtl ltezik a Pstring nev adattpus, amely 0 vg karakterkezelst tesz lehetv a Borland Pascal nyelvekben. A karakterekkel nem lehet semmifle matematikai mveletet vgezni. Vannak azonban alapvet mveletek, amelyeket minden programozsi nyelvben el lehet vgezni. A mveletek ltalban fggvny alakban lteznek s a klnbz nyelveken ms s ms a megvalstsuk is. Azt is el kell mondani, hogy ltalban azok a mveletek, amelyek karakterre alkalmazhatk, alkalmazhatk sztringekre is. A fenti adattpusokkal lehetsges mveletek: sszefzs Karakter kdja Kd alapjn katakter Sztring bal oldala Sztring jobb oldala Sztring kzps karakterei sszehasonltsokban A karaktereket ugyanazokkal a jelekkel hasonltjuk ssze, mint a karakterlncokat, < kisebb, mint, > nagyobb mint, <= kisebb egyenl mint, >= nagyobb egyenl mint, == egyenl, <> vagy # nem egyenl relcik lehetnek. Mindig balrl jobbra kezdi a rendszer karakterenknt az sszehasonltst s az els klnbsgnl mr el is dnti az eredmnyt. Ha kt karakterlnc ugyanazt tartalmazza vgig, de az egyik rvidebb, mint a msik, akkor az a kisebb. Olyan adatok, esetn, amikor az adatokat tbb klnbz tpus opercis rendszerbl kezelik clszer az adatokat karakterekknt trolni s lehetleg az ASCII kdrendszert felhasznlni r.
Megjegyzs: A Pascal s a C nyelv sztringkezelse kztt van klnbsg. A Pascalban a programozsi nyelv rsze a sztrinkezel fggvnyek s eljrsok sorozata, a C-ben viszont kln knyvtri fggvnyek vannak, amelyeket a programhoz kell szerkeszteni.

+ ASCII(k), ORD(k) CHR(szm) Left(sztring, szm) Right(sztring, szm) Mid(sztring, szm, dbszm)

A + B => AB ASC(A) => 65 CHR(66) => B LEFT(ABC,1) => A Right(ABCD,2) => CD MID(ABCDE,2,3) => BCD

4.3.3

Logikai tpus

A logikai adattpus kt rtket vehet fel, Igaz, vagy Hamis rtkeket. Ez a kt rtk klnbz programnyelveken lehet a True-False, Yes-No, Igen-Nem, Nem nulla Nulla rtkprosok valamelyike. Br a logikai adatokat elvileg egy bit is egyrtelmen jelzi, de a gpek binris felptse s a gpi kd utastskszletek mindig egy byte mret adatknt kezelik. A logikai adatokra lehet alkalmazni a kvetkez mveleteket: <, >, <=, >=, <> Logikai s, Logikai Vagy, Logikai Kizr Vagy, Tagads. A szoksos jellsek gyakorlatilag a legtbb programozsi krnyezetben: <, >, <=, >=,<>, #, AND, OR, XOR, NOT.

4.3.4

Mutatk, pointerek

Definci A mutat olyan vltoz, amely a memriban lv adat memriacmt tartalmazza. A memriban trolt adatoknak mindig van cmk. Azokat a vltozkat, amelyek ms adatok memriacmt tartalmazzk, mutatknak vagy pointereknek nevezzk. A pointerek az egyes programozsi nyelvekben s opercis rendszerekben nem kezelhetk egysgesen, nem egyforma a mretk sem, de egy adott opercis rendszer, memriamodell s fejleszteszkz esetn pontosan meghatrozhatk a pointerek mretei.

Ha az adatok egy 64Kb-os memriaterleten elfrnek, akkor elegend a pointernek csak a terlet elejhez viszonytott eltolst (offszet) trolni. Ebben az esetben a pointer mretre elegend csak 2 byte. Ha nagyobb memriaterletet akarunk megcmezni, annak megfelelen kell a pointerek mrett nvelni, ltalban 4 byte vagy 8 byte lesz a pointer mrete. Definci A mutat (pointer) tpusa annak az adatnak vagy vltoznak a tpusbl ered, amilyen adatra vagy vltozra a pointer mutat. Ilyenkor a pointernek ms tpus adatra vagy vltozra nem mutathat. A Pascal s a C, mint kt alapvet programozsi nyelv kiss ms szintaktikval jelli a mutatkat s a vgezhet mveletek kre is ms s ms. A PC-k esetn a pointerek ltalban segmens:offset, mdon, 4 bjton troldnak. Az Intel processzorok tulajdonsgai miatt a trols als kt bjtja az offszete, a fels kt bjt a szegmens tartalmazza. Pascal nyelv v vltoz cmnek letrolsa p pointerbe Hivatkozs a mutatott p vltozra rtkads v vltoznak pointer segtsgvel A sehov sem mutat pointer konstans sszehasonltsok p pointer offszetje p pointer szegmense P:=@v vagy p:=Addr(v) p^ p^ := 133 Nil vagy Ptr(0,0) <>,= Ofs(p) Seg(p)

A C nyelv lehetsgei a pointerekkel val mveleteket nagyon elsegtik, de a pointerek hasznlata a programokat kiss ttekinthetetlenn teheti. Ha az ilyen programot jl rjuk meg, akkor a pointerek hasznlata hatkonysgjavulst okoz. C nyelv v vltoz cmnek letrolsa p pointerbe Hivatkozs a mutatott v vltozra rtkads v vltoznak pointer segtsgvel A sehov sem mutat pointer konstans sszehasonltsok pointer ltal mutatott vltoz mdostsa p = &v *p *p = 133 Null ==, != *p = *p + 33

4.3.5

Megszmllhat s nem megszmllhat adattpusok

Az eddig trgyalt sszes egsz tpus adat, a karakter tpus s a logikai tpus egyben megszmllhat tpus is. A megszmllhat tpusokat lehet ltrehozni gy is, hogy felsoroljuk a tpust alkot lehetsges rtkeket. A megszmllhat adattpusok egyes elemei bitmintaknt trolhatk, ezrt ltalban a megszmllhat adattpusok trolsi egysgei a byte 2 hatvnyai. A fenti adattpusokkal lehetsges mveletek: Els adat Adattpus kvetkez adata Adattpus elz adata Tpus(0) Succ(adat) Pred(adat) 0. Succ(A) => B Predd(199) => 198

4.3.6

Konverzik

A klnbz nyelveken az egyes adattpusokat ms s ms fggvnyekkel lehet tkonvertlni. Erre azrt van szksg, mert az egyes programozsi nyelvek a klnbz tpusokat mskppen kezelik. A konverzi all a C nyelv bizonyos mrtkig mentesthet, mivel a C-ben a rvid egsz tpust lehet karakternek is tekinteni, tovbb sztringet lehet rvid egszek tmbjnek tekinteni stb Az adatkonverzik leggyakoribb eljrsai: Karakter kdja Kd alapjn katakter ASCII(k), ORD(k) CHR(szm) ASC(A) => 65, ORD(B) => 66 CHR(66) => B

Realbl integer Integerbl Real Sztringbl szm Szmbl Sztring

Round(Real) Int(egsz tpus szm) VAL(sztring, szm, dbszm ) STR(szm)

Round(1.321) => 1 Int(344) => 344.00 VAL(123.34, vltoz, hibakd) A Pascalban ez gy mkdik, hogy a hibakd megmutatja, hogy a konverzi hibtlan volt-e STR(1876.01) => 1876.00

4.3.7

Globlis- s loklis adatok kezelse, az adatok lthatsga

Amikor egy programban adatokkal dolgozom ltalban nincsen szksgem a programban felhasznlt brmelyik adat elrsre. A jl strukturlt programokban egy eljrs vagy fggvny jl specifiklhatan csak bizonyos adatokkal dolgozik. A feldolgozand adatokat vagy az t hv eljrstl kapja meg, vagy a fggvnyben eljrsban keletkezik s esetleg az t hv eljrsnak adja vissza, vagy amikor kilp a programrszletbl, akkor elenyszik, mert nincsen r szksg. A BASIC programozsi nyelv eredetileg globlis adatokkal dolgozott csak, azaz minden adatot mindig el lehetett rni a program minden pontjrl. Bonyolultabb programok esetn az adatok kvetkezetes kezelse nehzkes, st csaknem megoldhatatlan. A problma megoldsra vezettk be a globlis s a loklis adat/vltozk fogalmt. Egy adat loklis egy programegysgre nzve, ha abban a programegysgben az adat elrhet, esetleg mdosthat, mg a programegysget hv programegysgekbl az adat nem ltszik. ltalban az ilyen adat akkor jn ltre, amikor elkezdi vgrehajtani a programegysget a program s akkor sznik meg, ha kilp belle. Egy adat globlis egy programegysgre nzve, ha az adat mr ltezik akkor, amikor elkezddik az egysg vgrehajtsa. Nyilvn ha egy adat globlis egy programegysgre nzve, akkor az egysgbl meghvott programrszekre is globlis az adat. Az adatok lthatsgnak krdse sszefgg az adatok globalitsval is. ltalban ha egy adat globlis egy programegysgre nzve, akkor lthat is, de ez nem minden programozsi nyelven igaz. A Pascalban csak azok a globlis adatok lthatk, amelyek a programszvegben elrbb vannak deklarlva, vagy specilis kulcsszval utastjuk a fordtt, hogy tegye lthatv mshonnan is. A C nyelven a header fjlokban kell megadni azoknak a globlis vltozknak a defincijt, amelyeket ms eljrsokban ltni szeretnnk. Ha egy eljrsban ugyanolyan nev vltozt definilunk, mint amilyen egy globlis vltoz neve, akkor a loklisan definilt vltoz vlik lthatv, eltakarja a globlis vltozt. Ez mg akkor gy van, ha a kt vltoz tpusa nem egyezik meg. Bizonyos nyelvek ebben az esetben fordtskor hibazenetet adnak, de ezzel most nem foglalkozunk. Ha kilpnk a krdses eljrsbl, akkor termszetesen megint az eredeti globlis vltoz vlik Ha a loklis adat ltrejttekor meghvunk egy eljrst s egybknt a nyelv szintaktikja engedi, akkor a meghvott eljrsban is lthat az adat, hiszen arra az eljrsra nzve a krdses adat globlis. Vannak olyan specilis nyelvek, amelyek kpesek ltrehozni egy begyazott azaz valahonnan meghvott eljrsban is a teljes programra nzve globlis adatokat. Ilyen a Clipper programozsi nyelv.

4.3.7.1 Numerikus feladatok 4.3.7.2 llaptsuk meg egy szmrl, hogy prmszm-e? (prmteszt)
Specifikci Adott egy szm, llaptsuk meg a szmrl, hogy prm-e (Prmszm az a pozitv egsz szm, amely csak 1gyel s nmagval oszthat!)
program primvizsgalat; szam,i int; prim boolean; jel char; //adat beolvassa Ki: Krem a vizsgland szmot Be: szam //tegyk fel, hogy prm prim:=igaz; szam:=Abs(szam); //Ha pros, akkor nem prm Ha szam mod 2 = 0 akkor Ki: 2, nem prm prim:=FALSE; end; elgazs vge //fciklus i:=1; Ciklus amg ((i*i<=szam) s prim ) // A pratlan szmokat prbljuk osztani Ha szam mod (i*2+1) = 0 akkor Ki: ,i*2+1 prim:=hamis; elgazs vge i :=i+1 ciklus vge //ha 2,3,5 volt, akkor prm Ha (szam=2) vagy (szam=3) vagy (szam=5) akkor prim:=igaz; Ha szam=1 akkor Ki: Nem prm prim:=FALSE Elgazs vge // az 1 nem prm

Ha prim akkor Ki: 'A szm prim' Klnben Ki:'A szmm nem prm' Elgazs vge Program vge

4.3.7.3 Erasztothenszi szita


Specifikci Adjuk meg a prmszmokat N-ig. Megolds elve Felsoroljuk az egsz szmokat 1-tl N-ig s sorban vizsgljuk ket. Ha tallunk egy prmszmot, akkor annak a tbbszrseit bejelljk, hogy nem prmek s a megvizsgland szmok kzl sokat kizrtunk.

program eratosztenesz; Szita[N], logikai rtkekkel teli Ciklus i:=1-tl N-ig Szita[i] := igaz Ciklus vge, for i:=1 to N do szita[i]:=TRUE; Ki: 2 //mert a 2 prm, a szamts a 3-mal indul

i:=3; { ciklus, amg i nem lesz nagyobb a hatr ngyzetgyknl } Ciklus amig i<= Ngyzetgyk(N) Ha szita[(i-1) div 2] akkor Ki: i // A pratlan szmszoros elemeket kiejtjk koz:=2*i; // az els a 3-szorosa a tallt prmnek } j:=3*i; Ciklus amig j<=2*N+1 //{ a tbbszrs trlse a prmek kzl } szita[(j-1) div 2]:=hamis; j:=j+koz; Ciklus vge Elgazs vge i:=i+2; Ciklus vge Ki: A tallt prmek: 2, j:=1; Ciklus i:=1-tl N-ig Ha szita[i] akkor J:=J+1 Ki: 2*i+1 Elgazs vge Ciklus vge Eljrs vge

Feladatok rj programot, amely bekr kt egsz szmot s meghatrozza a kt szm legnagyobb kzs osztjt. rj programot, amely bekr kt egsz szmot s meghatrozza a kt szm legkisebb kzs tbbszrst! rj programot, amely meghatrozza egy szm prmtnyezs felbontst! rj programot, amely bekr egy numerikus adatot a billentyzetrl, s addig nem fogadja el a vlaszt, a bevitt adat hibtlan nem lesz! A hiba ltrl rtestse az adatbevitelt vgzt! rj programot, amely megvalst egy egyszer 4 alapmveletes szmolgpet az egsz szmok krben! A program figyelmeztessen arra, hogyha egy mvelet eredmnye tlcsordul vagy alulcsordul s ne hajtsa azt vgre! Az oszts eredmnyt, amennyiben nem egsz rja hnyados s maradk alakban! rj programot, amely megvalst egy egyszer szmolgpet, amely kpes a 4 alapmvelet, a ngyzetre emels, gykvons s nhny egyb matematikai fggvny elvgzsre! Ha nem megfelel paramtereket adunk a matematikai fggvnynek, akkor figyelmeztessen, de a program lljon le futsi hibval! A program figyelmeztessen arra, ha egy mvelet eredmnye tlcsordul vagy alulcsordul s ne hajtsa azt vgre! rj egyszer titkost programot! A program a bevitt vagy parancssorbl paramterknt megadott stringet titkostsa gy hogy a karakterek ASCII kdjt manipullja. A legegyszerbb mdszer, az ASCII kd eltolsa, bonyolultabb, ha az ASCII kd mdostshoz valamilyen helytl fgg fggvnyt is hasznlunk, de a legjobb az un. nylt kd titkosts. rj programot, amely bevitt vagy parancssorbl paramterknt megadott stringben lv kezetes karaktereket a tviratokban szerepl megoldssal helyettesti, azaz = ee, =OEE, =oe, stb r programot, amely bevitt vagy parancssorbl paramterknt megadott stringben lv egyms utni tbb szkzt egy szkzzel, a tabultor jelet 8 szkzzel helyettesti!

A feladathoz fel lehet hasznlni a stringek tmb termszett, az STR(), a LEN() fggvnyt. A STR() fggvny ebben az esetben nem formzza a szveget, hanem tizedestrt alakban rja ki adja meg az eredmnyt! 4.4 sszetett adatszerkezetek Az eddigiek sorn csak egyszer adatszerkezetekrl volt sz, de ezek ltalban nem elegendek a programok ltal feldolgozand adatok trolsra. A tovbbiakban olyan adatszerkezeteket trgyalunk, amelyek egyszerbb adatszerkezetek sszeptsvel jnnek ltre. A ltrejtt adatszerkezetek helyet foglalnak a memriban. Az adatszerkezetek trolshoz szksges hely nagysga az adatszerkezetet alkot egyszerbb adatok szmra szksges helyek nagysgbl tevdik ssze. Memriaszervezsi s adminisztratv okokbl alkalmanknt az sszetett adatszerkezet mrete nagyobb, mint az alkot adatok mreteinek sszege, azonban a mretnvekeds ltalban nem tl nagy az adatszerkezet teljes mrethez kpest, csak nhny bjtot jelent. Feladatok rj programot, amely egy text fjlbl beolvas egy szveget s szavanknt j sorba rja ki a kpernyre (a sz olyan karaktersorozat, amelyet alfanumerikus karakterket tartalmaz csak)!

4.4.1

Halmaz tpus

Nem minden programozsi nyelvben van meg ez a tpus. A halmaz elemeit ltalban fel kell sorolni. A halmaz elemei ugyanolyan tpusak. Az elemeknek sorszma van, ltalban 0..255 kztti sorszmuk lehet. Mvelet Ltrehozs rtkads Metszet Egyests Klnbsg Egyenlsg Tartalmazs Elem vizsglata Jel Set Of alaptpus := * + = <=, >= IN Plda Var B : SET of A..Z A := [A..Z] A:=A*B A:= A + B A := A-B A=B A <= B c IN [y,Y,n,N]

4.4.2

Tmbk, sorozatok

Definci Amikor azonos tpus adatokat trolunk a memriban egyms utn, akkor beszlhetnk tmbrl vagy sorozatrl. A tmbt alkot adatokat a tmb elemeinek hvjuk. Az egyes elemekre a tmb indexvel hivatkozunk. Az index ltalban egy sorszm. Egy tmb deklarcijakor meg kell adnunk a tmb elemeinek tpust s a tmb mrett. Ha a tmbnek csak egy indexe van, akkor egy dimenzis tmbrl beszlnk. Az egy dimenzis tmbket a szmegyenes egsz helyein lv adatokkal szemlltethetjk. Ha egy tmbnek kt indexe van, akkor kt-dimenzis tmbrl beszlnk, s gy tovbb A kt-dimenzis tmbket egy sk egsz koordintj pontjaiban elhelyezked adatokkal szemlltethetjk. A tmbket a memriban a programok sorfolytonosan troljk, ami kt dolgot jelent. Egyrszt jelenti, hogy a tmb elemei egyms utn helyezkednek el a memriban, msrszt tbbdimenzis tmb esetn a mindig az utols index nvekedik. Pldul egy T[10][3][2] deklarcij tmb elhelyezkedse a memriban, ahol az indexek 0..9,0..2,0..1 ig terjednek: T[0][0][0], T[0][0][1], T[0][1][0], T[0][1][1], T[0][2][0], T[0][2][1], T[1][0][0], T[1][0][1], T[1][1][0], T[1][1][1],

Valjban a tbbdimenzis tmbt lekpezzk egy-dimenzis tmbbe. A lekpezs sorn a tbb dimenzis indexekhez hozzrendelnk egy egy-dimenzis indexet. Nzzk a fenti deklarcit! Ha a T[i][j][k] elem elhelyezkedst vizsgljuk, akkor az egy dimenzis indexet az albbi kplet adja meg:
Index := 3*2*i + 2*j +k

ltalban, ha a tmb dimenzii n1,n2,n3,n4,.nm, nagysgak s az indexek i1,i2,i3,.im, akkor a tetszleges T[i1][i2][i3][im] elem egy dimenzis indexe: Ennek segtsgvel a tmb els elemnek memriacme ismeretben, valamint a tmbelem mretbl ki lehet szmolni tetszleges elem memriacmt. Ha a fenti deklarciban a els elem cme M, akkor az i,j,k index tmbelem memriacme
Cim := index * elemmret + M, := ( 3*2*i + 2*j +k) * elemmret + M
m

index := i1*n2 + i2*n

+ i3*n

+..+ im-1*n

+ im

azaz
Cm Cm

i,j,k

ltalnos esetben,
i1,i2,,in

i,j,k

:=(i1*n2*n 3**n m+ i2*n 3**n elemmret + M

+...+ im-2*n

* n

m-1

+ im-1*n

+ im) *

A fenti kpleteket cmfggvnynek hvjk. Felvetdik a krds, hogy az egy dimenzis elhelyezkeds ismerete eset a tbb dimenzis elhelyezkeds kiszmolhat-e egyrtelmen. A fenti plda alapjn az Index ismeretben az i,j,k-t a kvetkez algoritmussal lehet kiszmolni:
I := Ma:= J := K := index div (3*2), index mod (3*2) ( Ma ) div 2 Ma mod 2 (n2*n 3**n m) (n2*n 3**n m) (n 3**n m) (n 3**n m)

ltalnos esetben a kvetkez algoritmust kell hasznlni:


i1 := Cm div Ma := Cm mod I2 := Ma div Ma := Ma mod Im:= Ma mod nm

Az egyes programozsi nyelvek ms s ms szintaktikt hasznlnak, de alapveten ugyanazt rhetjk el velk. A Pascalban a tmb kezd s utols indext kell megadnunk, innen tudjuk az tmb mrett, s meg kell adni az elemek tpust.
T: Array [els..utols] of Tpus

Hivatkozs egy elemre:

T[5]

Tbb dimenzis tmbt az albbi mdon lehet deklarlni:


T1: Array [els..utols, msik_els..msik_utols] of Tpus

Hivatkozs egy elemre:


Tpus T[elemszm]

T1[5,6]

A C-ben a tmb elemeinek darabszmt kell megadnunk s a tmb indexe 0-tl az elemszm-1 ig tart. Hivatkozs egy elemre: T[5] Tbb dimenzis tmbt az albbi mdon lehet deklarlni:
Tpus T1[elemszm, elemszm1]

Hivatkozs egy elemre: T1[5,6]

A fentiek alapjn knnyen kiszmolhat egy elemnek a memriban elfoglalt helye s a tmbnek szksges memria mrete is. A tmbk elemeit a klnbz nyelvek ltalban sorfolytonosan troljk a memriban, azaz tbb dimenzis tmb esetn elszr az els sor elemeit, majd a msodik sor elemeit s gy tovbb. A tmb adatok feldolgozsa szorosan sszefgg a ciklusokkal. Ha olyan feladatot kell megoldani, amely a tmb minden egyes elemnek feldolgozst jelenti, akkor megszmllsos ciklusokat kell alkalmazni, ha pedig a tmb elemein valamilyen tulajdonsg megltt vizsgljuk, akkor ciklus amg a felttel nem igaz jelleg ciklust kell hasznlnunk. Tbb dimenzis tmbk feldolgozsakor annyi egymsba gyazott ciklust kell hasznlnunk, ahny dimenzija van a tmbnek. Definci Asszociatv tmbnek olyan tmbt neveznk, amelyben az index tetszleges karaktersorozat lehet. Ilyen megoldst lehet ltni PHP-ban, s ms, egyb, alapveten szvegfeldolgozsra kifejlesztett scriptnyelvekben. Gyakorl feladatok tmbkre: Egy 25x80-as mtrixba rjunk vletlenszeren lthat karaktereket. rjunk programot, amely minden oszlopot eggyel balra lptet, az els oszlopot pedig az utols oszlop helyre teszi. (Esetleg kpernyn!) Tltsk fel egy stringekbl ll tmbt egy text file sorainak szavaival (sz, amit nem alfanumerikus karakter hatrol, azaz nem 0..9, s a..z, A,..,Z! Tkrzzk egy adatokkal feltlttt kt-dimenzis mtrixot a bal-fels jobb-als tljra (ftl)! Egy NxN-es mtrix adatait forgassuk el 90 fokkal! (pl. A[1,2] = A[2,N), stb.) Tltsnk fel kt NxM-es mtrixot adatokkal. rassuk ki az sszeg mtrix s a klnbsg mtrixot! (C[i,j] = A[i,j]-B[i,j]) Egy tmbben nvekv szmokat trolunk gy, hogy a tmb kzps elembe rjuk a legkisebbet, a bal oldalra a kvetkezt, a jobb oldalra a kvetkezt, jobb oldalra a kvetkezt s gy folytatjuk, amg be nem telik a tmb. rjunk programot, amely meghatrozza kt tetszleges sorszm elem klnbsgt! A fld felsznnek magassgadatait kt-dimenzis tmbben troljuk. A felszn feletti magassgokat sznekkel jelljk (kk, tengerszint, zld 200m alatt, barna 1000m alatt, sttbarna 1000-2000mkztt stb.) rjunk programot, amelyik kirja a kperny megfelel helyre a domborzat magassgnak megfelel sznkdot. Troljunk egy dimenzis tmbben kt-dimenzis mtrix bal als hromszgnek adatait. Adjuk meg a cmfggvnyt! Az egy dimenzis tmb adatait rjuk ki hromszg alakban! rjunk programot, amely kiszmolja a Pascal hromszg adatait elhelyezi az adatokat egy kt dimenzis mtrix bal fels sarkban! Egy sakktbln vletlenszeren ugrl egy l sakkfigura. rjunk programot, amely szimullja az ugrlst. lljon meg az ugrls, amikor ugyanarra a mezre ugrik mg egyszer!

4.4.2.1 Gauss eliminci


Specifikci Ksztsnk programot, amely meghatrozza egy N ismeretlenes egyenletrendszer megoldsait. A program krje be az egytthatkat, majd rja ki az eredmnyt. A megolds felttele Matematikbl bizonythat, hogy megolds akkor van ha n ismeretlen esetn legalbb n db egyenlet van. ha nincsenek egymsnak ellentmond egyenletek,

ha nincsenek egymsbl szrmaztathat egyenletek. A megolds mdszere Tudjuk azt, hogy az egyenletrendszer egyenleteit konstanssal beszorozhatjuk, az egyenleteket sszeadhatjuk s kivonhatjuk egymsbl, az egyenletrendszer megoldsa nem vltozik. Talljunk ki mdszert, amivel a fenti mveletekkel az eredmnyhez eljutunk. Nzzk az albbi pldt:
I. 5x + 3y +4z = 8 II. 7x + 9y +2z = 2 III. x y z = 3

1. lps - Az I. egyenletet 7/5 szrst vonjuk ki a II. egyenletbl


I. 5x + 3y + 4z = 8 II. 0 + 4,8y - 3,6z = -9,2 III. x y z = 3

2. lps - Az I. egyenlet -1/5-szerest vonjuk ki a III. egyenletbl


I. II. III. 5x + 3y + 4z = 8 0 + 4,8y 3,6z = -9,2 0 0,4y 0,2z = 4,6

Vegyk szre, hogy a II. s III. egyenletben az x egytthatja 0, teht a teljes tag rtke 0! 3. lps - Az I. egyenletet beszorozzuk 1/5-tel.
I. x II. 0 III. 0 +0,6 y + 0,8z = 1,6 + 4,8y 3,6z = -9,2 0,4y 0,2z = 4,6

A fenti lpsek eredmnyeknt az els sort 1 oszlopban az ismeretlen egytthatja 1, az els oszlop tbbi egytthatja pedig 0. 4. lps - A II. egyenlet, -0,4/4,8 szorost kivonjuk a III.-bl.
I. x + 0,6y + 0,8z = 1,6 II. 0 + 4,8y 3,6z = -9,2 III. 0 - 0 - 0,5z = 3,83

5. lps - A II. egyenletet osztjuk 4,8-cal!


I. x + 0,6y + 0,8 z = 1,6 II. 0 + y 0,75z =-1,92 III. 0 0 - 0,5 z = 3,83

A II. egyenlet 2. ismeretlennek az egytthatja 1, az alatta lv 0. 6. lps - A III. egyenletet szorzom 1/-0,5-tel
I. x +0,6y + 0,8 z = 1,6 II. 0 + y 0,75z = -1,92 III. 0 0 + z = -7,67

A z rtke megvan. 7. lps - Helyettestsk be a z rtkt a II. egyenletbe:


I. II. x +0,6 y +0,8 z = 1,6 0 + y + 5,7525 = -1,92

Vagyis y = -7,67 8. lps - Helyettestsk be z s y rtkt az I. egyenletbe: Megkapjuk x rtkt I. x- 4,602 - 6,136 = 1,6 Vagyis x = 12,338

A fenti gondolatmenet alapjn az algoritmus szavakban: Az egyen ismeretlenjeinek egytthatit beviszem egy n sorbl s n+1 oszlopbl ll ktdimenzis tmbbe. Ennek a tmbnek beszlhetnk a ftljrl. Ezek az A[i,i] elemek. Az egyenletek sszeadsa, a tmb megfelel sorban lv elemeinek sszeadst, egy egyenlet szorzsa a megfelel sor elemeinek szorzst jelentik. Ciklikusan vgigmegyek a sorokon i=1-tl n-ig. Az i. sor esetn a ftl egytthatjt felhasznlva (A[i,i]) a kvetkez sorokbl (j. sor) kivonom az i. sor valahnyszorost s ez gy eliminlom a j. sorban az i. ftl alatti elemet: A[j,i ] = A[j,i] A[i,i] * A[j,i]*1/A[i,i] =>0 A tbbi elemet pedig ugyanezzel az egytthatval kiszmolom az i. sor megfelel elemei alapjn: A[j,k] = A[j,k] A[i,k] * A[j,i]*1/A[i,i] Lesz egy bels ciklusom j= i+1-tl n-ig Ezen bell egy harmadik ciklusom, amely k=j-tl megy n+1-i
Eljrs Gauss eliminci; Tmb: A[N,N+1] Ciklus i:= 1-tl N-ig S := A[i,i] //N db transzformci lesz //A ftl eleme

Ciklus j:= i+1-tl N+1-ig Ciklus k:= 1-tl N-ig A[j,k] = A[j,k] A[i,k]*A[j,k]/s Ciklus vge Ciklus vge // vgigosztom az i. sort a ftlban lv elemmel Ciklus k := i-tl N+1-ig A[i,k] := A[i,k] / S Ciklus vge Ciklus vge //Ez itt a Gauss eliminci vge //Ezen a ponton a ftl alatt csupa 0 egytthat tallhat, a ftlban //csupa 1. //Az ismeretlenek rtknek kiszmtsa kvetkezik. Az ismeretlen rtke //Az A[i,N+1] elemekbe kerl Ciklus i:=N-tl 1-ig -1-esvel S := A[i,N+1] Ciklus k:=i+1-tl N-ig S:= S- A[i,k]*A[k,N+1] Ciklus vge Ciklus vge Eljrs vge

A fenti algoritmust termszetesen kiss mskppen is meg lehet valstani.

4.4.2.2 Gauss-Jordan eliminci


Gauss-Jordan elimincinak hvjuk, amikor a ftl felett is kinullzzuk a tmbt. Ekkor a Gauss elimincival mr a ftl alatt kinullztuk a tmbt. Az N. sor, N. oszlopnak rtkt felhasznlva kinullzzuk az N. oszlop elemeit. Mivel az utols sorban csak az N. s az N+1-ik oszlopban van rtk, ezrt a feljebb lv sorokban csak ezek az rtkek vltoznak. Utna az N-1-ik sorral s az N-1-ik oszloppal nullzzuk az tl feletti elemeket.

A vgeredmny az lesz, hogy a ftlban csupa 1 ll s az N+1-ik oszlop tartalmazza az ismeretlenek rtkt.

4.4.3

Rekord tpus

A rekord adattpus elemei klnbz tpusak lehetnek. Egy rekord alkotit mezknek hvjuk. A rekordok trolsa a memriban a definicik sorrendjben trtnik. A rekordok mrete ltalban nem korltos, br a Pascalnl termszetesen megvan a 64 kb-os korlt. A szoksos jellsek a kvetkezk. Definici Pascal Type nev = Record 1.meznv:tpus 2.Meznv:tpus end; Type tanulo = Record Nev : string[20]; Neme: string[4]; ; end; Var Gyerek: Tanulo; Tanulo.nev C Typedef struct nev { Tpus 1.meznv; Tpus 2.Meznv; ; }; Typedef struct tanulo { char nev[26]; char Neme[4]; ; }; Tanulo Gyerek Tanulo.nev

Hivatkozs egy rekord mezire

A Pascalban s a C-ben is lteznek vltoz rekordszerkezet adattpusok. A C-ben ezeket unionoknak hvjk. Ekkor egy mez rtktl fggen a rekord tbbi mezjben trolt adatok tpusa, mrete is vltozhat. Az union esetn a lefoglalt mret a legnagyobb sszetev mrete lesz. Amikor az union mezire hivatkozunk, akkor a lefoglalt terletbl csak annyit hasznl a rendszer, amibe az ppen trolt adattpus elfr, de a tbbi memrit nem szabadtja fel, hanem tovbbra is lefoglalva marad. Termszetesen rekordokbl is lehet definilni tmbket. Ilyet tipikusan akkor hasznlhatunk fel, ha egy adatfjl ugyanolyan tpus rekordokbl pl fel, mint amibl a tmbt ptjk fel. A fjl adatait beolvassuk a tmbbe, majd ott feldolgozzuk. 4.5

Felhasznlk ltal definilhat tpusok Sor adattpus, FIFO

4.5.1

Az eddigi adatszerkezetek majdnem minden programozsi nyelvben megtallhatk a nyelv rszeknt. A tovbbiakban olyan adatszerkezeteket tekintnk t, amelyek ltalban a nyelvekben nincsenek explicit mdon utastsszinten megvalstva, a programoznak sajt magnak kell ltrehoznia azokat. A kvetkez adattpusok alapja egy legalbb egy dimenzis tmb. Ennek az egy dimenzis tmbnek a szerkezetre ptjk r a kvetkezkben az adatszerkezeteket. Termszetesen, ha a programoz dinamikus memriakezelssel tmbk nlkl is meg tudja oldani a feladatot, akkor taln gyorsabb feldolgoz programokat kap, de tmbk felhasznlsval egyszerbben megvalsthatk az adatszerkezetek. A sor egy olyan adatszerkezet, amelybe az egyms utn bert adatokat a bers sorrendjbl vehetjk ki (FIFO First In First Out). Az adattpusnak akkor van ltjogosultsga, amikor kt nem egyforma sebessggel mkd rendszer kztt adattvitelt akarunk megvalstani. Akkor is hasznos kt rendszer kz egy soros adatszerkezetet kelni, ha az adatokat tadsa vagy az adatok tvtele nem folyamatos, hanem lksszer. Pldul ilyen lehet a szmtgp telefonos kapcsolata vagy egy szmtgp s a hlzat kapcsolata. A sor adatszerkezetnek kt utastsa van. Az IN utasts egy elemet betesz a sorba, az OUT utasts kiveszi a sor kvetkez elemt. A bettelnl arra kell vigyzni, hogy ha megtelt a sor rszre fenntartott memriaterlet, akkor nincsen hely a beteend adat rszre hibazenetet kell adni -, ha res a sor, akkor pedig a

kivtelnl kell visszaadni hibazenetet. Az is megolds, hogy res sor esetn olyan adatot adunk vissza, amely nem fordulhat el rvnyesen az adatok kztt. A sort ktflekppen is meg lehet megvalstani. Egyszer megvalsts
Sormutat: Kvetkez szabad hely Ezt az elemet vesszk ki

adat

adat

adat

adat

adat

Adatok lptetse

Az els megvalsts egyszer s lass. A sor adatszerkezetnek van egy sor mutatja. Ez a mutat mutatja meg, hogy hol van a kvetkez szabad elem a tmbben. Ha betettnk egy elemet, akkor a szabad hely mutatja nvekedik eggyel. Ha kivesznk egy elemet, akkor az els elemet vesszk ki a tmbbl, s minden elemet eggyel kisebb index helyre msolunk.
T[N] elem tmb jelenti a sort. A tmb indexe 1-tl indul. Sormutat jelenti az els res helyre mutat vltozt. Kezdetben a sormutat rtke = 1. Fggvny IN(adat) : Logikai Ha Sormutato = N+1 akkor In := Hamis Klnben T[sormutato] := adat sormutato := sormutato + 1 In := Igaz Elgazs vge Eljrs vge Fggvny OUT Ha sormutato = 1 akkor Ki:res a sor OUT := NIL Klnben OUT := T[1] Ciklus i:=2-tl sormutato-ig T[i-1]:=t[i] Ciklus vege sormutato := sormutato 1 Elgazs vge Eljrs vge (Ha Hamis, akkor tele van a sor, ha igaz, akkor akkor nincsen tele)

A megvalsts htrnya a kivtelnl a ciklikus msols. Ez lasstja a kivtelt. Msodik megvalsts

A msodik megvalstsnl is egy N elem, T tmb jelenti a sort, ahol az N elem tmbt 0-tl N-1-ig indexeljk. Itt kt mutatt hasznlunk. A sorba jelenti azt a helyet, ahov a kvetkez elemet beteheti az IN utasts. A sorbol jelenti azt a helyet, ahonnan ki lehet venni a kvetkez elemet. Az IN utasts beteszi a sorba ltal mutatott helyre az j adatot, majd nveli a sorba mutatt, mg az OUT utasts a sorbol l-

tal mutatott helyrl veszi ki az adatot s nveli a sorbol mutatt. Ha brmelyik mutat tlmutat a tmb utols elemn, akkor a mutatt a tmb els elemre irnytjuk. Itt nagyon fontos annak a megllaptsa, hogy mit jelent az, hogy a sor res s mit jelent az, hogy a sor tele van. Normlis esetben a kt mutat nem mutathat ugyanarra a helyre. Ekkor tudunk elemet betenni a sorba, s tudunk elemet is kivenni a sorbl. Mikor res a sor? Ha a psorbol ugyanoda mutat, mint a psorba, ekkor ugyanis a kiveend adat megegyezik a kvetkez beteend adat helyvel. Mit jelent az, hogy tele van a sor? A sorba mutat utolri a sorbol mutatt, azaz ugyanaz az rtkk??? Ez gy nem lehetsges, hiszen ugyanaz jelenti mind a kt esemnyt. A megolds egyszer s majdnem ugyanez! Legyen tele a sor tele, akkor ha a sorba eggyel kisebb, mint a sorbol mutat. Legyen res a sor, ha a sorbol mutat eggyel kisebb, mint a sorba mutat. A fenti okoskods eredmnyekppen a sor mrete eggyel kisebb lesz, mint szeretnnk, hiszen egy elemet soha nem tudunk kihasznlni. Sebaj, nveljk meg a tmb mrett N+1-re, azaz a tmb 0-tl N-ig indexelt, gy jra N db elemet tudunk trolni maximlisan a sorban. Termszetesen inicializlni kell a sort, azaz res sorral kezdnk a program elejn. Mg egy problmra kell vlaszt tallni. Mi van, ha akrmelyik mutat elrte az utols helyet s nvelnem kell tovbb? Ebben az esetben a mutat N-nel val osztsnak maradkt kell sszehasonltani a msik mutatval. A kt kd a kvetkezkppen nz ki. Inicializls:
sorba := 2 sorbol := 1 Eljrs IN(adat) Ha ((sorba+1) mod N) = sorbol akkor Ki: Tele van a sor, adatveszts Klnben T[sorba] := adat sorba := (sorba + 1) mod N Elgazs vge Eljrs vge Fggvny OUT Ha ((sorbol+1) mod N ) = sorba akkor Ki:res a sor OUT := NIL Klnben OUT := T[sorbol] sorbol := (sorbol + 1) mod N Elgazs vge Eljrs vge

A msodik eljrs gondolatmenete bonyolultabb, de lthatlag gyorsabb kdot eredmnyez.

Veremmutat

4.5.2

Verem adattpus

A verem olyan adatszerkezet, amelybe az adatokat betehetjk, illetve kivehetjk. A verembl mindig az utoljra bevitt adatot vehetjk ki elszr (LIFO Last In First Out, vagy vagy stack-nek is hvjk) Rengeteg helyen hasznljuk a verem adatszerkezetet. Minden program, amely az opercis rendszerben fut, st maga az opercis rendszer is rendelkezik veremmel. Amikor egy program meghv egy eljrst, a program futsnak pillanatnyi cmt a verembe teszi el a gp, majd az eljrsbl visszatrve a verembl kapja vissza a futs megszakadsnak helyt s gy tudja ugyanonnan folytatni a gp a program vgrehajtst. Ha ltalban a verembl kivett adatok mennyisge vagy sorrendje nem egyezik meg a betett adatok mennyisgvel s sorrendjvel, akkor egy program knnyen olyan helyzetbe kerlhet,

adat adat adat

hogy a program folytatsnak cme nem megfelel. Ennek kvetkezmnye ltalban a program lefagysa. A klnbz programozsi nyelvek eljrsai, fggvnyei szintn vermek felhasznlsval adjk t egymsnak a paramtereket. A verem adatszerkezetnek van egy veremmutatja (stack pointer). A verem mrete korltos. A veremmutat azt mutatja, hogy hol van az els szabad hely a veremben. Mint emltettk kt mvelet van a veremmel kapcsolatban. Az adat bettele a verembe ezt PUSH utastsnak szoks hvni. Egy adatot akkor lehet betenni, ha a verem mg nem telt meg. Ha tele van a verem s mg egy elemet be akarok tenni a verembe, akkor az utasts hibazenettel kell, hogy visszatrjen. Ha a verem nincsen tele, akkor a veremmutat ltal mutatott helyre beteszem az adatot, majd a veremmutatt nvelem eggyel. A korbbiaknak megfelelen egy T nev, N elem tmb lesz a verem. A tmb indexe 1-tl indul s N-ig tart. T globlis vltoz hogy az eljrst a program szksges helyrl el lehessen rni.
Eljrs PUSH(adat) Ha Veremmutato = N+1 akkor Ki: Tele van a verem Adat := lehetelen adat Klnben T[veremmutato] := adat Veremmutato := veremmutato + 1 Elgazs vge Eljrs vge

A PUSH mveletben az adat paramtert clszer cm szerinti paramtertadssal hasznlni. Az adat kivtele a verembl szoksosan a POP nevet viseli. Itt is felmerlhet egy hiba, nevezetesen, hogy van-e adat a veremben. res a verem, ha a veremmutat a verem els helyre mutat. A POP utasts ilyenkor hibazenettel tr vissza. Ha nem res a verem, akkor kivesszk az adatot, majd cskkentjk a veremmutatt eggyel.
Fggvny POP Ha Veremmutato = 1 akkor Ki:res a verem POP := NIL Klnben POP := T[veremmutato] Veremmutato := veremmutato - 1 Elgazs vge Eljrs vge Megjegyzs: A POP mveletet clszer fggvnyknt definilni. Mind a kt mveletnl hiba esetn is szksges visszatr adatot generlni, clszeren az adat szablyos krlmnyek kztt nem elfordul adat legyen.

A fenti algoritmus megvalsthatjuk Objektum orientlt mdon is, ekkor a kt definilt eljrs s fggvny lesz az objektum kt metdusa. A verem felhasznlsra egy jellegzetes alkalmazst mutatunk be. 4.4.1. Lengyel forma Lukasewich lengyel matematikus az 50-es vekben a matematikai formulk olyanfajta talaktst dolgozta ki, amelynek segtsgvel a fordtprogram knnyen ki tudja szmtani a kifejezs rtkt. (Pontosabban: olyan kdot generl, amely vgrehajtva kiszmtja a kifejezs rtkt.) Erre azrt volt szksg, mert az ember ltal megszokott infix s zrjeles rsmd nem ltszott alkalmas struktrnak a kirtkels cljra. (Infix jells amikor X+Y, a kt operandus kz tesszk a mveleti jelet). A bevezetett j brzolsi formt a szerz tiszteletre lengyelformnak is nevezik. Msik elnevezs a postfix forma.

Mind a lengyelformra hozs, mind pedig annak kirtkelse vermet hasznl algoritmus, s jobban alkalmazhat kifejezsek kirtkelsre, mint az infix forma. A forma lnyege, hogy minden mveleti jel kzvetlenl az operandusai mgtt ll. A lengyelformra hozott kifejezs elnyei: nincs benne zrjel, azaz a mveletek precedencijt nem kell megvltoztatni az operandusok sorrendje egymshoz kpest vltozatlan, Egyszer pldk: a+b a*b+c a * (b + c) a+bc a^2^3 ab+ ab*c+ abc+* ab+ca23^^ (eltr precedencik) (zrjel hatsa) (azonos precedencik) (hatvnyozs esetn fordtva: a ^ 2 ^ 3 = a ^ 8)

4.5.3

Lista adattpus

Definci A lista olyan adattpus, lista elemekbl ll. A lista egy eleme tartalmazza a trolt adatot, s tartalmazza a kvetkez listaelem helyt a memriban. Ilyenkor egy irny listrl beszlnk, mivel az adatok elrse csak a listaelemek sorrendjben trtnhet. A lista els elemt egy specilis adat, a listafej adja meg. Definci Ktirny listrl beszlnk, ha a lista eleme nem csak a kvetkez, hanem az elz adat helyt is tartalmazza. Definci Krkrs listrl beszlnk, ha az utols elem mutatja az els elem mutatjra mutat vissza. A listkat legegyszerbben egy korbban mr trgyalt adattpusra, a tmbre pthetjk r. Ebben az esetben a listaelem rekordokbl ll tmb. A tmb egy eleme a lista egy eleme. A tmbelem egy rekordjban az egyik sszetev tartalmazza a troland adatot, a msik a kvetkez elem indext tartalmazza. A listkat olyan helyen clszer hasznlni, ahol az adatok elrse nem sorfolytonos, az adatok kz vesznk fel j elemeket s trlnk is ki. A gyakorlatban a lemezek FAT tbljt, a programok memriakezelst s sok egyb terletet listakezelssel valstanak meg. Minden lista rendelkezik listafejjel. A listafej megmutatja, hogy hol tallhat a lista els eleme, ugyanis nem biztos, hogy a lista els eleme egyttal a fizikailag is a listt megvalst alaprendszer els eleme. A listafej egy vltoz. Ha a listafej lehetetlen, vagy un. NULL rtket tartalmaz, akkor a listban nem trolunk rtkes adatot. Ha a listafej rvnyes helyre mutat, akkor ott a lista egy eleme tallhat. A listban szerepl elemek lncot alkotnak. A lista utols elemt gy jelljk, hogy a mutat lehetetlen cmet, NULL elemet tartalmaz (pl. negatv szmot). Ha a listba beszrunk egy elemet, honnan tudjuk, hogy a memriba hova tudjuk elhelyezni azt? Msik problma, hogyha a listbl kitrlnk egy elemet, akkor a felszabadul memriaterletet hogyan tudjuk ksbb ismt hasznostani? A megolds a Szabadlista hasznlata.

Definci A szabadlista olyan lista, amely nem tartalmaz adatokat, de az res terleteket listba fzve trolja. Ha az adatokat tartalmaz listbl kitrlnk egy adatot, akkor azt a szabadlista vgre fzzk, ha egy j elemet akarunk a listnkba betenni, akkor a szksges helyet a szabadlistbl vesszk el. Kezdetben, amikor mg res a lista, minden elem a szabadlistba van felfzve. A memria akkor telik meg, ha a szabadlistban mr nincsen elem. Lista bejrsa A lista adatait gy lehet elrni, hogy a lista elejtl a vgig vgigjrjuk az elemeket, s minden elem feldolgozsa utn a kvetkez elemre ugrunk, amg el nem rjk az utols elemet.

A lista egyfajta megvalstsa a kvetkez lehet. Egy N elem, T tmb tartalmazza a listt. A tmb elemeit alkot rekordok az adat s a kovetkezo nev mezkbl ll, ahol az adat nev mez tetszleges adatot tartalmazhat, mg a kovetkezo egy egsz tpus, megfelel mret mez.
Tpusdefinci: L = rekord Adat : tetszleges adattpus Kovetkezo: egsz tpus Rekord vge T[N], L tpus elemekbl ll tmb.

A fent definilt adatszerkezetben a lista elejrl el lehet jutni a lista vgig gy, hogy egyesvel vgigmegynk a lista elemein. Ezt a lista bejrsnak hvjk. Lista bejrsa:
Eljrs Bejaras i := Listafej Ciklus amg i <> NULL Ki: T[i].adat i := T[i].kovetkezo Ciklus vege Eljrs vege

//***

Hogyan tudjuk a listban szerepl adatok sszegt vagy a listban lv elemek szmt megadni? A programozsi ttelek megfelel rszeit ttanulmnyozva ezekre a krdsekre vlaszt kaphatunk. A listban val mozgs megfelel a tmbkben val lpsnek! Az egyirny listkat csak az elejrl kezdve lehet bejrni! Sok krds kzl egy, az utols elem megkeresse a listban

Fggvny Vegkeres(elso_elem) i := elso_elem Ciklus amig T[i].kovetkezo <> NULL i := T[i].kovetkezo Ciklus vege Vegkeres := i Fuggvny vge

Hogyan kereshetnk meg egy adott elemet a listban? Az albbi pldban fggvnyknt adjuk meg az algoritmust, s paramterknt adjuk t a keresett adatot. Egy elem keresse
Fggvny Kereses(Keresett_adat) i := Listafej Ciklus amg (i<>NULL) s (T[i].adat <> keresett_adat) i := T[i].kovetkezo Ciklus vege Ha i <> NULL akkor Ki: A keresett adat sorszama:, i Ki: A keresett adat:, T[i].adat Kereses := i Kulonben Ki: Nem ltezik a keresett adat Kereses := NULL Elgazs vge Fggvny vege

Hogyan tudunk egy j elemet betenni a listba, s egy elemet kitrlni a listbl? Elszr egy keresett elemet trljnk ki a listbl. A trlshez felhasznljuk az elbb definilt keress algoritmust egy kicsit mdostva. A Kereses algoritmus elozo paramtert cm szerint adjuk t!
Eljrs Torls Be: torlendo_adat elozo := NULL elso_elem := Listafej i := Keress(torlendo_adat, elozo, elso_elem) Ha i <> NULL akkor T[elozo].kovetkezo := T[i].kovetkezo Elgazs vge Eljrs vge Fggvny Kereses(keresett_adat, elozo, elso_elem) i := elso_elem Ciklus amg (i<>NULL) s (T[i].adat <> keresett_adat) elozo := i i := T[i].kovetkezo Ciklus vege Ha i <> NULL akkor Kereses := i Kulonben Kereses := NULL Elgazs vge Fggvny vge

Ha a 2. elem a kitrlend adat, akkor az 1. elem kvetkez mutatjt kell tlltani gy, hogy a 3. elemre mutasson.

Mi trtnik ilyenkor a felszabadult hellyel? Kt lehetsg van. Az els esetben a felszabadult hely mutatjt NULL-re lltjuk, az adatmezvel nem trdnk, hiszen ettl kezdve nem hasznljuk az ott trolt adatokat. A lista inicializlsakor a linkelsi adatokkal fel kell tlteni a tmbt s ksbb is kvetkezetesen tartani magunkat az elhatrozshoz. Ebben az esetben a trl eljrs gy vltozik:
Eljrs Torls1 Be: torlendo_adat elozo := NIL elso_elem := Listafej i := Keress(torlendo_adat, elozo, elso_elem) Ha mutato <> NIL akkor T[elozo].kovetkezo := T[i].kovetkezo T[i].kovetkezo := NIL Elgazs vge Eljrs vge

A msik lehetsg bonyolultabb, de a valsghoz jobban kzelt. Minden listakezel rendszerben ltalban kt listt tartanak nyilvn. Az egyik lista a foglalt elemeket tartalmazza, mg a msik lista a szabad elemeket tartja nyilvn. A foglalt elemek listjbl val trls azt jelenti, hogy az elemet ttesszk a szabad listba. A szabad s a foglalt lista elemei sszessgben kiadjk a listt tartalmaz rendszer sszes elemt. Legyen a szabadlista feje a SzListafej, a szabadlista els elemre mutat elem az SzListafej.mutato. Ekkor gy mdosul a program, hogy miutn megtalltuk a trlend elemet, az elemet betesszk a szabadlista elejre.
Eljrs Torls1 Be: torlendo_adat elozo := NIL elso_elem := Listafej i := Keress(torlendo_adat, elozo, elso_elem) Ha i <> NIL akkor T[elozo].kovetkezo := T[i].kovetkezo Sz_Elso_elem := Sz_Listafej T[i].adat := NIL T[i].kovetkezo := Sz_Elso_elem Sz_Listafej := i Elgazs vge Eljrs vge

j adat a lista vgre Hogyan lehet j adatot betenni a lista vgre? Vgig kell menni a lista elemein, majd az utols elemet megtallva a szabad lista els elembe kell betenni az adatot, az utols elem mutatjt rirnytani az j elemre s a szabadlista fej mutatjt rirnytani a szabadlista kvetkez elemre. A beszrt elem mutatjt NIL-re kell lltani, valahogy gy:

Eljrs Ujadat_a_vgre Be: Adat vegso := Vegkeres(Listafej) Regi_Sz_elso := Sz_Listafej Sz_elso := T[Regi_Sz_elso].kovetkezo T[vegso].kovetkezo :=Regi_Sz_elso T[Regi_Sz_elso].adat := Adat T[Regi_Sz_elso].kovetkezo := NIL Sz_Listafej := Sz_elso Eljrs vge

A fentiek alapjn megoldhat az adat beszrsa tetszleges helyre is. Ktirny listk. Gyakran elfordul, hogy a listkban nem csak az elejtl a vge fel kell mozogni, hanem visszafel is szksges. Erre a bonyolultabb megolds az, mindig jegyezzk azt, hogy hnyat mozdultunk a listban. A visszafel mozgst is ellrl kezdjk el, szmoljuk, hogy hnyat lptnk s eggyel elbb megllunk, mint korbban. rezheten bonyolult. Egyszerbb megolds, ha a lista rekordszerkezetbe felvesznk mg egy mezt. Ez a mez az elz elemre mutat majd. A lista defincija ekkor gy alakul: Tpusdefinci:
L1 = rekord Adat : tetszleges adattpus Kovetkezo : egsz tpus Elozo : egsz tpus Rekord vge

T[N], L1 tpus elemekbl ll tmb.

Nyilvnvalan ekkor a Listafej tartalmaz mg egy adatot, mgpedig az utols elem indext, hiszen csak gy lehet visszafel bejrni a vgrl a listt. Krkrs lista A ktirny listnak az egyik specilis esete a krkrs lista, amikor a lista utols elemnek mutatja az els elemre mutat. A listafej is egy a lista elemei kzl, de a lista ltrejttekor automatikusan generlja a rendszer. Ilyen adattpussal lehet megvalstani pl. egy kooperatv multitaszkos (Windows 3.1 multitaszk rendszere) rendszert, amikor a rendszerben fut programok egymsnak adjk t a vezrlst a nekik kiszabott id lejrtakor. Feladatok: Hatrozzuk meg egy listban trolt szmrtkek sszegt! Vlasszuk ki a lista legnagyobb elemt! Egy nvekven rendezett listba szrjunk be egy elemet a nagysgnak megfelel helyre, vagyis a bejrs, nvekv nagysg elemeket rjon ki! Fordtsuk meg egy egy-irny listban az elemek sorrendjt! Adott kt rendezett lista, fzzk ssze a kt lista elemeit gy, hogy a tovbbiakban is rendezett lista legyen!

Alaktsunk ki egy listt egy tmbbl. A listt tltsk fel nvekv adatokkal, majd vletlenszeren tegynk t elemeket a szabadlistba. A billentyzetrl bevitt adatokat szrjuk be nagysg szerinti helykre. Minden beszrt adat utn rassuk ki a tmb llapott, a bert adatot s a listban elfoglalt helyt.

4.5.4

A grf, mint matematikai fogalom

A matematika egyik gyakran hasznlt fogalomrendszere a grfelmlet. Mirt is j ez neknk? Nagyon sok helyen az informatikban a grfelmlet eredmnyeit hasznljuk, hogy bizonyos programozsi feladatot megoldjunk. Ilyen pldul a hlzati forgalomirnyts, egy tudsadatbzis, mint pldul a Windows opercis rendszerek regisztrcis adatbzisa. Most nhny szemlletes fogalmat vezetnk be ebbl a krbl. Defincik: Grfnak nevezzk a cscspontok s a cscspontokat sszekt lek halmazt. tvonal: Kt kivlasztott pont kztti lek sorozata, amelyeken az egyik pontbl eljutunk a msikba. Irnytott grf: Ha az leken csak egyik irnyba lehet haladni. sszefgg egy grf, ha minden kt pontja kztt ltezik sszekttets. Nem sszefgg egy grf, ha van olyan kt pontja, ami kztt nem ltezik sszekttets. Kr van a grfban, ha van olyan kt pontja, amelyet legalbb kt klnbz tvonal kt ssze. Definci: A fa olyan grf, amelyikben nincsen kr. A tovbbiakban ezt a krdskrt tekintjk t egy kicsit. Definci: Binris fa az olyan fa, amelyiknek cscspontjaibl maximum kt tvonal indul el, azaz 0, 1 vagy 2.

4.5.5

Fa adattpus

A fkat olyan esetekben hasznljuk, ha az adatok kztt valamilyen al s flrendeltsgi viszony jelenik meg. A fk legismertebb felhasznlsi terlete a lemezek knyvtrszerkezete.

Binris fa

Fa gykere

Els szint

Msodik szint

Harmadik szint

Harmadik szint

Harmadik szint

Negyedik szint

Negyedik szint

A fkban nincsenek hurkok. Kt cscspont kztt a ft csak egyrtelmen lehet bejrni. A fk elemei az brn a dobozokban vannak. A fa gykere egyttal a hierarchiban legmagasabb helyen ll elem. Binris fk A binris fkat alapveten rendezsi feladatok megoldsra lehet felhasznlni.

Minimlis magassg fa Olyan fa, amelyben az egyes gak hosszai a lehet legrvidebbek. Az elvi hatr N elem esetn log2N az g hossza Kiegyenslyozott fa Ha brmely elem esetn a bal s a jobb oldali rszfk magassga legfeljebb egy elemmel tr el. Tkletesen kiegyenslyozott fa Ha minden rszfjban elhelyezett elemek szma maximum eggyel tr el. Fs rendezs, keresfa, rendezfa Sorban vigynk be adatokat egy binris fba. Az els elemet helyezzk el. Ha a kvetkez bevitt elem kisebb, mint az elz, akkor a gykrelemtl balra helyezzk el, ha nagyobb vagy egyenl, akkor jobbra. Az egyms utn bevitt elemekkel jrjuk be a fa gait, s ha egy csomponttal sszehasonltva az ppen bevitt elem kisebb, akkor tle balra menjnk, ha nagyobb vagy egyenl, akkor tle jobbra menjnk. Az gy kialakult fban minden elemre igaz lesz, hogy a tle balra elhelyezked elemek nla kisebbek lesznek, a jobbra elhelyezked elemek pedig nagyobb vagy egyenlk lesznek vele. Ennek megfelelen, ha balrl jobbra bejrjuk a ft gy, hogy mindig balra tartva lemegynk a legmlyebb szintre, majd ha mr nem tudunk tovbb menni, kirjuk az ott tallt elemet. Ez lesz a legkisebb elem. Egy szinttel visszalpve kirjuk a kvetkez elemet, ez lesz a nagysgrendi sorrendben a msodik, majd ha van jobb oldali g, akkor oda lemegynk. Ha a jobb oldali gat is bejrtuk, akkor egy szinttel visszalpve kirjuk a fenti elemet, majd annak a jobb oldalt jrjuk be. Nagysg szerint rendezett bejrst kapunk. Egy binris fa egyfajta megvalstsa a kvetkez lehet: Tpusdefinci:
Fa = Rekord Bal_mutato : egsz tpus Adat :valamilyen adattpus Jobb_mutato : egsz tpus Rekord vge Legyen T[N], Fa tpus, N elem tmb.

A T[i].adat tartalmazza az adatot, T[i].Bal_mutato jelenti a fban tle balra elhelyezked elem, mg a T[i].Jobb_mutato jelenti a fban tle balra elhelyezked elem pozcijt. A fa feltltse adatokkal.

Eljrs Feltoltes Be:T[1].adat T[1].Bal_mutato := NIL T[1].Jobb_mutato := NIL Be:Uj_adat i:=1 Ciklus amg Uj_adat <> NIL s (I <= N ) T[i].adat:=Uj_adat Uj_elem_Beszrsa(1,i) i := i + 1 Be:Uj_adat Ciklus vge Eljrs vge Eljrs j_elem_Beszrsa(p,i) Ha T[i].adat < T[p].adat akkor Ha T[p].Bal_mutato = NIL akkor T[i].Bal_mutato :=NIL T[i].Jobb_mutato :=NIL T[p].Bal_mutato := i Kulonben j_Elem_Beszrsa(T[p].Bal_mutat,i) Elgazs vge Klnben Ha T[p].Jobb_mutato = NIL akkor T[i].Bal_mutato :=NIL T[i].Jobb_mutato :=NIL T[p].Jobb_mutato := i Kulonben j_Elem_Beszrsa(T[p].Jobb_mutat,i) Elgazs vge Elgazs vge Eljrs vge

Termszetesen az j_Elem_Beszrsa fggvny rekurzv, nmagt meghv mdon rhat csak meg. Megjegyzend, hogy N elem esetn a rekurzi mlysge jsolhatan csak Log2N lesz, amely 1024 elem esetn csak 10.

4.5.6

Grf adattpus
A grf adattpus az egyik legelvontabb, legnehezebben kezelhet, de mgis sok esetben szksges adattpus. A grfok szemlltetshez kpzeljnk el egy orszgot, az orszgban lv teleplseket, s a teleplseket sszekt utakat. Ezek gy egytt grfot alkotnak.
vkony t

A teleplsek az adott rendszerben a grf csompontjai, a teleplseket sszekt utak a grf lei s az egyes utak hoszsza a grf lnek slyozsa. Tbb krdst lehet feltenni, amelyekre szmtgpes programmal keressk a vlaszt: El lehet-e jutni az egyik vrosbl a msikba? Hny km a tvolsga kt tetszlegesen kivlasztott vrosnak?

Ha a teherautnak X km-re elegend zemanyaga van, merre kell mennie, hogy egy adott vrosbl eljusson egy msikba. Melyik a legrvidebb t kt vros kztt? Adott egy tbb vrost rint krt. Melyik az optimlis tvonal Ezen kvl rengeteg hasonl krdst lehet feltenni, de a megvlaszolsuk tlmegy a jegyzet keretein, ezrt csak nhny tmpontot adunk itt a tovbbiakhoz. A grfokat gyakran brzoljuk egy kt-dimenzis tmbben (cscsmtrix g[n,m]) A tmbnek annyi oszlopa s sora van, ahny vros van. Ha kt cscspont kztt van tvonal, akkor a megfelel sor s oszlop ltal meghatrozott helyen a tvolsgtl fgg pozitv szmot runk, amely cscspontok kztt nincsen t, ott nullt runk. Termszetesen a cscspontoknak sajt magukhoz nem vezet t, ezrt az tlban csupa nulla szerepel. Teht g[i,j] igaz, ha i-bl j-be vezet l, vagy g[i,j]=az i-bl j-be vezet l hossza (slya), vagy ha nem vezet l, akkor g[i,j]=? vagy 0, ami pp praktikusabb. Ha a grf irnytatlan, g[i,j]=g[j,i]. g[i,i] rtke szintn vltoz lehet, az aktulis helyzettl fgg. 1. vros 2. vros 3. vros 4. vros 5. vros 6. vros 7. vros 1. vros 0 1 1 0 1 1 0 2. vros 1 0 1 0 0 0 1 3. vros 1 1 0 1 1 0 0 4. vros 0 0 1 0 1 1 1 5. vros 1 0 1 1 0 0 0 6. vros 1 0 0 1 0 0 0 7. vros 0 1 0 1 0 0 0

Ritka grfokat (kevs benne az l) szomszdsgi listval szoktak brzolni, ha pl. kevs a hely a cscsmtrixra. Ilyenkor g[i] annak a (dinamikus) listnak az els tagjra mutat, melynek elemei azoknak a pontoknak a sorszmai, melyekbe i-bl vezet l. Lteznek multigrfok, melyekben kt pont kztt tbb l is vezethet, ill. lehetnek olyan lek, melyek egy pontbl ugyanabba a pontba mutatnak. Lehet, hogy g[i,j] rtkt csak fggvnnyel kaphatjuk meg, mindig menet kzben szmoljuk ki. Pros grfokban nincsenek izollt pontok (melyekhez nem vezet l) s a pontokat kt csoportra lehet osztani gy, hogy egy csoporton bell brmely kt pont kztt nem vezet l.

4.5.7

Grfbejrs:

Egy kezdpontbl elindulunk, s bizonyos koncepci alapjn elmegynk ebbl mindenfle pontokba. Sznezzk be a grf pontjait: fehr az legyen, amelyikben mg nem jrtunk fekete az, ahol mr jrtunk s az sszes kivezet lt megvizsgltuk

szrkk pedig azok a pontok, melyekbe mr eljutottunk valamelyik feketbl, de mg nem vizsgltuk meg az sszes kivezet lt. Kezdetben mindegyik pont fehr, csak a kezdpont szrke, a vgn mindegyik (kezdpontbl elrhet pont) fekete lesz. Fekete pontbl csak fekete pontba vagy szrkbe vezethet l. Ha egy szrke pontbl megvizsgltuk az sszes kivezet lt (ha voltak fehrbe vezet lek, azokat a pontokat beszrktettk), a szrke pontok kzl kell vlasztanunk egyet, amelyiket legkzelebb vizsglunk. Ha azt vlasztjuk, amelyik legrgebben lett szrke, szlessgi keresst hajtunk vgre (a pontokat egy sorban (FIFO) troljuk). Ha azt, amelyik legutbb lett szrke, akkor ez a mlysgi keress (a hasznlt adatszerkezet ilyenkor verem, LIFO).

4.5.8

Szlessgi keress

n pontbl ll slyozatlan grfra mkdik. Ha tav[i]=?, akkor az i. pont szne fehr; ha tav[i]<? s az i. pont bent van a sorban, akkor a pont szrke; egybknt fekete. sorbol(i) kiveszi a sorbl a legels pontot s a sorszmt berakja i-be; a sorba(i) berakja a sor vgre az i. pontot. A sor legegyszerbben dinamikus listval valsthat meg. tav[i] az i. pont tvolsga a kezdponttl gy, hogy az i. pontba szulo[i]-bl megynk. inf jelenti ?-t.
Eljrs szlessgi keress(pont): uressor; tav[1..n]:=inf; szulo[pont]:=0; tav[pont]:=0; sorba(pont); ciklus amig nem_ures_a_sor) sorbol(pont); Ciklus i:=1 to n Ha (g[pont,i]) s (tav[i]=inf) akkor sorba(i); szulo[i]:=pont; tav[i]:=tav[pont]+1; elgazs vge Ciklus vge Eljrs vge

A szlessgi keress megadja slyozatlan grfban a legrvidebb utat a kezdpont s az abbl elrhet sszes pont kztt. rd meg az utat_nyomtat(i) eljrst, ami kirja az utat a kezdpontbl az i. pontba a tav s a szulo tmbk alapjn!

4.5.8.1 Pldk:
Szlessgi keress segtsgvel sok krdsre vlaszt lehet mg adni: legrvidebb t a-bl b-be a-ba rkez sszes legrvidebb t (a grf transzponltjnak felhasznlsval: minden lt megfordtunk, magyarul g[i,j]-bl g[j,i] lesz) sszefgg -e a grf? pros -e a grf? grf komponenseinek meghatrozsa

4.5.9

Mlysgi keress

n pontbl ll slyozatlan grfra mkdik. Itt vermet hasznlunk, az ebben lv pontok a szrkk. Ha szulo[i]=? s volt[i]=0, akkor az i. pont fehr, nincs bent a veremben. Ha szulo[i]<? s volt[i]=0, akkor az i. pont szrke, bent van a veremben, de mg nem vizsgltuk meg a belle kivezet sszes lt. Ha szulo[i]<? s volt[i]=1 lesz, akkor az i. pont fekete, minden kivezet le szrke pontba vezet, de csak akkor vesszk ki a verembl, ha az sszes olyan pontot, amibe ezen a ponton keresztl jutottunk el, mr kivettk a verembl. A fprogram megvizsglja az sszes pontot, gy biztos, hogy a vgn minden pont fekete lesz. A verem_teto visszaadja a verem tetejn lv elem rtkt, a verembol eljrs pedig kiveszi azt a verembl. Hasznlunk

mg egy msik vermet is, amibe az elhagys sorrendjben kerlnek be a fekete pontok. Vagyis ha egy pontbl megvizsgltuk az sszes kivezet lt, s az abbl elrhet sszes pontra is megtettk ugyanezt, akkor rakjuk be a pontot a msik verembe. Magyarul a veremben az i pont alatt lesz az sszes olyan pont, amit ksbb rtnk el, mint i-t. Itt egy rekurzv algoritmust adunk meg.
Eljrs mk-bejar(pont): Ciklus i:=1 tl n Ha (g[pont,i]) s (szulo[i]=inf) akkor szulo[i]:=pont; mk-bejar(i); elgazs vge Ciklus vge masik_verembe(pont); Eljrs vge

4.5.10 Tovbbi algoritmusok 4.5.11 Topologikus rendezs


Mlysgi keresssel tudunk egy irnytott, krmentes grfot topologikusan rendezni: ez a pontok egy olyan felsorolst jelenti, melyben minden i,j-re igaz, hogy a felsorolsban i megelzi j-t, ha i-bl j-be vezet l. A msik verem hasznlatval a veremben fntrl lefele ilyen sorrendben lesznek bent a pontok. Plda Ksztsnk grfot, melynek pontjai a ruhadarabok, s ha egyikbl msikba vezet l, az azt jelenti, hogy egyiket elbb kell flvenni, mint msikat (mondjuk zoknit a cip eltt)! Ha erre vgrehajtunk topologikus rendezst (vagyis mlysgi keresst, s a pontokat flrjuk fordtott elhagysi sorrendben), akkor megkapunk egy lehetsges ltzkdsi sorrendet.

4.5.12 Egy pontbl kiindul leghosszabb utak


Irnytott, krmentes (slyozott vagy slyozatlan) grfban az egy pontbl kiindul leghosszabb utakat is a topologikus rendezs segtsgvel hatrozhatjuk meg legknnyebben. A kiindul pontra hvjuk meg az mkbejar() fggvnyt, majd a msik verem felhasznlsval megkeressk a leghosszabb utakat: az lhtav vektorban lesznek a legnagyobb tvolsgok a kezdponttl, lhszulo[i] pedig az a pont lesz, melybl a leghosszabb t sorn i-be megynk.
Eljatras lhu: lhtav[1..n]:=0; masik_verembol(pont); //ez lesz a kezdpont, mert mk-bejar()-T ezzel hvtuk // meg lhszulo[pont]:=0; Ciklus amig(nem_ures_a_masik_verem) Ciklus i:=1 tl n Ha g[pont,i]<inf akkor Ha lhtav[i]<lhtav[pont]+g[pont,i] akkor lhtav[i]:=lhtav[pont]+g[pont,i]; lhszulo[i]:=pont; Elgazs vge Elgazs vge Ciklus vge masik_verembol(pont); Ciklus vge Eljrs vg

4.5.13 Legrvidebb utak slyozott grfban egy kezdpontbl


A legrvidebb utak slyozott grfban egy kezdpontbl problma a szlessgi keresshez hasonl algoritmussal oldhat meg. A szrke pontok kzl ilyenkor azt kell vlasztani, amelyiknek az eddig szmtott, kezdponttl val tvolsga a legkisebb. A leggyorsabb megolds az, ha prioritsos sorban troljuk a szrke pontokat, a tav tmb megfelel rtkei alapjn rendezve, mindig a legkisebb ilyen rtkt tudjuk kiszedni a sorbl. A prioritsos sor itt dinamikus listval van megvalstva, de lehet mshogy is, a hivatalos megoldst,

az Algoritmusokban lehet olvasni. A prisorba(i) berakja a sorba az i. elemet, a tav[i]-nek megfelel helyre. prisorrendez(i) az i. elemet a tav[i]-nek megfelel helyre rakja t a prioritsos soron bell (olyankor hasznljuk, ha tav[i]-nak megvltozott az rtke).
Eljrs lrus(pont): tav[1..n]:=inf; szulo[1..n]:=0; tav[pont]:=0; prisorba(pont); Ciklus (nem_ures_prisor) prisorbol(pont); Ciklus i:=1 tl n-ig Ha g[pont,i]<inf akkor Ha tav[i]>tav[pont]+g[pont,i] akkor Ha tav[i]=inf akkor tav[i]:=tav[pont]+g[pont,i]; prisorba(i); klnben tav[i]:=tav[pont]+g[pont,i]; prisorrendez(i); Elgazs vge szulo[i]:=pont; Elgazs vge Elgazs vge Ciklus vge Ciklus vge Eljrs vge

4.5.14 Legrvidebb utak minden cscsprra


Az eddigi grfalgoritmusok mind moh stratgia alapjn mkdtek, ez vgre egy dinamikus programozssal kszlt megolds. Slyozatlan s slyozott grfra is mkdik. Ilyen feladat pl. gyr (Vlogatverseny 2002/7) Ha g[i,j] azt jelenti, hogy van -e l i-bl j-be, ill. az l hossza i-bl j-be, akkor legyen o[i,j] az, hogy van-e t i-bl j-be, ill. a legrvidebb t hossza i-bl j-be. Ezt az eredmny tmbt dinamikus programozssal kapjuk meg: v[i,j,k] legyen az, hogy van -e t i-bl j-be gy, hogy a kzblsk kzl mindegyik pont sorszma kisebb vagy egyenl, mint k (ill. a legrvidebb t hossza ugyangy). Legyen mg v[i,j,0]:=g[i,j], ez lesz a rekurzi kilpsi felttele. Ltjuk? Hrom-vltozs dinamikus programozs! A fggvny defincija (ha k>0): v[i,j,k]=v[i,j,k-1] vagy (v[i,k,k-1] s v[k,j,k-1]) (logikai vagy, s) ill. v[i,j,k]=min(v[i,j,k-1],v[i,k,k1]+v[k,j,k-1]). Teht vagy nincs bent az tban a k. pont (v[i,j,k-1]) vagy benne van, s ezen keresztl megy az t (v[i,k,k-1] s v[k,j,k-1] ill. v[i,k,k-1]+v[k,j,k-1]), ezek kzl vesszk az egyiket ill. ezek kzl vlasztjuk a kisebbet. A kvetkez algoritmus g-bl kiszmtja o-t, de csak kt tmbt hasznl, g lesz v[i,j,k-1], o pedig v[i,j,k] (k=1,2,3, ..., n).
Eljrs lrum: Ciklus k:=1 tl n-ig Ciklus i:=1 tl n-ig Ciklus j:=1 tl n-ig o[i,j]:=min(g[i,j],g[i,k]+g[k,j]); //v agy o[i,j]:=g[i,j] or (g[i,k] // and g[k,j])} g:=o; Ciklus vge Ciklus vge Ciklus vge Eljrs vge

Tbb algoritmus alapja a szlessgi keress. Itt egy sor segtsgvel fedezi fel a program a grfot, s pt fel ez alapjn egy ft. Kezdetben a kezdpontot s-t szrkre sznezi, majd a szrke cscsok mindegyiknek megkeresi a mg fehr szomszdjait. Ezeket szrkre sznezi, s felveszi egy sorba. Miutn a szrke cscs minden szomszdjt meghatroztuk, a cscsot feketre festjk. A kezdcscs tvolsga 0, minden ms cscs

tvolsga vgtelen. Mivel a fehr oldalra fehr betket nem rdemes rni, a kvetkez szneket alkalmazzuk az soron kvetkez brkon:

4.5.15 Fjl adattpus


Definci Fjloknak hvjuk azokat az adattrolsi egysgeket, amelyekben a szmtgp programok troljk az ltaluk feldolgozand adatokat. Fizikailag a httrtron elhelyezked sszefgg adathalmazt tekinthetjk fjloknak. A lemezeken elhelyezked fjloknak van nevk, fizikai elhelyezkedsk a lemezen, mretk, attribtumaik s ms s ms rendszereken mg sok egyb jellemzik is. Ha az opercis rendszerben fut program fel akarja dolgozni egy lemezen elhelyezked fjlban lv adatokat, akkor azt elszr tudatnia kell az opercis rendszerrel egyrtelmen, hogy melyik a krdses fjl, aminek hatsra az opercis rendszer fizikailag megkeresi a fjlt, s az adatait hozzfrhetv teszi a program szmra. Fjl megnyitsa A fjl megnyitsa az a folyamat, amikor az opercis rendszer a felhasznli programok rszre rhatv s/vagy olvashatv teszi a fjlokat. A mr megnyitott fjl esetn a feldolgoz programnak nincsen szksge a fjl nevre, hiszen az opercis rendszer dolga a nv (s esetleg az elrsi tvonal) alapjn a fjllal kapcsolatos fizikai teendk intzse, ppen ezrt a megnyitskor az opercis rendszer egy sorszmot ad a megnyitott fjlnak. Ezt a sorszmot a fjl handlernek (filepointer, filemutat stb...) szoks nevezni. A tovbbiakban a kezel program minden fjllal kapcsolatos mvelet esetn a handlerre hivatkozik. Ha egy fjlt megnyitottunk, akkor a feldolgoz programnak mr mindegy, hogy a fjl fizikailag hol vagy hogyan helyezkedik el. Logikailag a fjlokat gy tekintjk, hogy a feldolgoz program parancsra az opercis rendszer megnyit egy adattviteli csatornt a program s a klvilg kztt, majd ezen a csatornn keresztl kzlekednek az adatok. A program szmra a fjl egy megnyitott adattviteli csatorna. A fjl megnyitsa egyenl az adattviteli csatorna megnyitsval. A fjlokat megnyithatjuk csak olvassra. Ekkor az adatok ramlsa csak a httrtrrl a program fel lehetsges. A fjlokat megnyithatjuk csak rsra is. Ebben az esetben az adatok a programbl a httrtr fel kzlekednek. Vannak esetek, amikor rsra s olvassra nyitjuk meg a fjlt, ekkor ktirny adattvitel trtnik. Ha a fjlt rsra s olvassra nyitjuk meg, akkor ismerni kell valamilyen mdon azt a helyet, ahov ppen rhatunk, vagy ahonnan olvashatunk a fjlbl. Ezt a helyet a fjl pointere mutatja meg. A fjl megnyitsakor a pointer a fjl els elemre mutat s minden olvassi s rsi mvelet utn egy egysgnyit mozdul elre automatikusan. A pointer rtkt ki lehet olvasni, s t lehet lltani. A megnyitott fjlok kezelsekor figyelnnk kell arra, hogy a fjlnak van-e valamilyen felismerhet bels szerkezete. Alapveten hromfle fjltpust klnbztethetnk meg, Szekvencilis fjlok. A fjl adatai csak sorban, egyms utn dolgozhat fel. Ilyennek pldul a billentyzetrl bevitt karakterek sorozata is, vagy egy nyomtatra elkldtt adatok sorozata. Pascal nyelven ezt Text tpusnak hvjuk. Beszlhetnk relatv elrs (vagy direkt elrs) fjlokrl is. Ilyenkor ismerjk a fjl adattrolsi egysgnek mrett, s ennek a mretnek az egsz szm tbbszrseivel tudunk elre s htra mozogni a fjlban, azaz a fjl brmelyik rszt fel tudjuk dolgozni, bvthetjk. Pascal nyelven ezt a fajta fjlt tpusos fjlnak hvjuk s File of tpus mdon definiljuk. (Adatbzisok esetn hasznlhatk az ilyen fjlok) A harmadik a tpusnlkli fjl. Ekkor az adatok direkt elrsek, de a fjlnak nincsen ismtld bels szerkezete. Ekkor az adattrolsi egysg ltalban byte. Ha a fjlnak mgis van valamilyen rejtett bels struktrja, akkor a programoznak kell megrnia azt a kdot, amely feldolgozza fjlban tallhat adatokat. (Pldul a BMP fjlok bels szerkezete is ilyen tpus nlkli). Pascalban ezt a fjltpus egyszeren File-knt definiljuk. A tovbbiakban sszefoglaljuk, hogy milyen mveletek lehetnek fjlokon.

Pascal Minden fjltpus esetn a fjl Reset megnyitsa. Fjl megnyitsa rsra Rewrite A file bezrsa Close() Olvass a fjlbl Read(f,), Readln(f,.) rs fjlba Write(f,), Writeln(f,) Nagyobb adatblokk beolvassa BlockRead() fjlbl Nagyobb adatblokk kirsa fjlba BlockWrite() Fjl pointer mozgatsa Seek() Termszetesen nem adtunk kimert lerst minden mveletre. Feladatok Szekvencilis fjlok

C, C++ fopen fopen() close() getc(), fgets(), fread(), sscanf() fputc(), printf(), fputs(), fprintf(), fwrite() fread() fwrite() fseek()

Ksztsk el bemeneti szvegfjl msolatt, amelyben minden szt csak pontosan egy szkz vlaszt el. Egy szvegllomnyban bizonyos rszeket % jelek kz tettnk. Ksztsnk kt kimeneti szvegfjlt. Az egyikben a szveggel megjellt rszek legyenek, a msikban a jelletlenek. Ksztsnk programot, amely egy bemeneti szvegfjlban kicserli egy adott kifejezs minden elfordulst egy msikra, s a mdostott fjlt rja ki a kimenetre. Feladatok Relatv elrs fjlok Ksztsk el egy adatfjlt, amelyben gpkocsik adatait troljuk. A tovbbi feladatok erre a fjlra vonatkoznak. Az albbi feladatokat kln-kln programban is meg lehet valstani, de clszer egy menrendszerrel vezrelt program rszv tenni. Kszts rutint, amely az adatfjlt feltlti adatokkal, mdosthatja a rekordokat, tovbb trli a rekordokat. Kszts rutint, amely megkeresi egy adott mez, adott rtkkel rendelkez elemt. Kszts rutint, amely kirja az adatfjl adatait tblzatos formban a kpernyre, s sszegzi az r jelleg mezk tartalmt. Kszts rutint, amely az adattbln bngszst engedlyez, a kurzormozgat billentyk segtsgvel. Kszts rutint, amely egy megadott tetszleges szempont szerint fizikailag rendezi az adatokat. (nehz!) Kszts rutint, amely egy indexfjlban trolja egy tetszleges rendezsi szempont szerint az adatok logikai sorrendjt Tpus nlkli fjlok rjunk programot, amely megjelenti egy BMP fjl sszes lnyeges paramtert a kpernyn! A file-ok szerkezetnek lerst krd el tanrodtl, vagy keresd meg az Interneten! A wav fjlok szerkezete is megkereshet. rj programot, amely a legfontosabb adataikat kirja a kpernyre! A fjl szerkezetnek megllaptshoz hasznld fel az iskola Internet kapcsolatt!

4.5.16 Objektum adattpus, osztlyok


A programozs mdszereinek fejldsi irnya olyan, hogy a programozst minden mdon igyekszik a htkznapi gondolkodshoz kzelteni. Ennek a fejldsnek az eredmnye az objektumok megjelense bizonyos programozsi nyelvekben. Az objektumokat elszr a Smalltalk programozsi nyelvben, majd a Turbo Pascalban, illetve ksbb a C nyelv bvtseknt megvalsult C++ nyelvben vezettk be. Az objektumok megjelense hatott a programozs mdszereire is. Manapsg mr majdnem minden modern programozsi nyelv tartalmazza az objektum orientlt programozs (= Object Oriented Programming => OOP) sok elemt. Vannak olyan nyelvek, ahol teljeskren, mg msokban csak rszlegesen valstottk meg az OOP elemeit. Objektum Orientlt elemeket tartalmaz a fent felsorolt nyelveken kvl a Delphi, Visual Basic, C#, C++, PHP, Java, Javascript, hogy csak a nhny leggyakrabban hasznlt rendszert emltsem. Objektumok a vilgban A vals vilgban ltez dolgok tulajdonsgokkal jellemezhetk. A vals vilg dolgait ltalnossgban az angol nyelv object-nek, azaz objektumoknak hvja. A programozsban a vals vilg egyes dolgainak teht objektumok felelnek meg. A programozsban az objektumokat tulajdonsgaikkal (tulajdonsg = property) jellemezzk. Ha egy objektum megvltozik, az azt jelenti, hogy egy vagy tbb tulajdonsga megvltozik. zenetek az objektumok kztt Mitl vltozik meg egy objektum llapota. A klvilgbl ingerek rik ezeket ltalnossgban zeneteknek ( zenet= message ) hvjuk s az objektum az ingerekre reagl, kijelzi, trli, mdostja valamelyik tulajdonsgt, llapott, s zenetet kldhet ms objektumnak. Az objektumokban metdusoknak hvjuk az zenetet kld, fogad s azokra reagl eljrsokat. Osztlyok az objektumok csoportjai Az objektumokat tulajdonsgaik alapjn csoportokba, osztlyokba sorolhatjuk. Pldul a jrmveknek vannak olyan tulajdonsgaik, amelyek alapjn megalkothatjuk a jrmvek osztlyt. Jrmnek nevezzk azt, ami kzlekedik, szllt, stb. A jrmveknek vannak olyan tulajdonsgai, amelyek minden jrmre igazak, pldul a szllthat szemlyek szma, a szllthat teher mennyisge, a maximlis sebessge, stb., Ugyanakkor megalkothatjuk az osztlyok specializlt eseteit is, mint pldul a fldn kzleked jrmvek, a repl jrmvek vagy a vzen kzleked jrmvek.. Egyes fajtknak ugyanakkor vannak specilis tulajdonsgai, mint pldul a repl jrmveknek a maximlis emelkedsi magassg, a fldn kzleked jrmvek motoros, vagy nem motoros, stb. Amikor egy osztlyba tartoz objektumok egy csoportja egy vagy tbb plusz tulajdonsg alapjn megklnbztethet az osztly tbbi tagjtl, akkor e tagokat rszosztlyba sorolhatjuk, amelynek a tagjai minden tulajdonsggal rendelkeznek, amivel a f osztly tagjai rendelkeznek, de tovbbi kzs specilis tulajdonsgaik is vannak. A rszosztly esetenknt tovbb bonthat rszekre. A rszekrebontst specializcinak hvjuk. Az albbi bra a jrmvek osztly specializcijnak vzlatt mutatja:

A f osztly a Jrmvek nev osztly. A Repl jrmvek, a Szrazfldi s a Vzi jrmvek a Jrmvek osztly leszrmazottjai. A leszrmazott osztlyok minden tulajdonsggal rendelkeznek, amivel az sk, de tovbbi tulajdonsgok is rvnyesek rjuk. A vals vilg modellezse A programok a vals vilgot modellezik. Amikor a vals vilgot modellezni akarjuk, akkor rdemes a vilg objektumaibl csoportokat alkotni kzs jellemzik alapjn. Ha egy csoport egyes tagjainak vannak specilis tulajdonsgai, akkor azokbl rdemes egy leszrmazott csoportot alkotni. Definci A programokban a vals vilg objektumainak csoportjait osztlyoknak (=class) nevezzk. Az osztly absztrakt fogalom. Olyan sszetett adattpus, amelyet a programoz meglv elemi vagy ms sszetett adattpusokbl pt fel. Az osztlyban lv sszetev adattpusokat az osztly tulajdonsgainak hvjuk. Az osztlyok tartalmazzk azt a programkdot is, amelyek segtsgvel az osztly tagjai tudnak reaglni a kls krnyezetbl rkez zenetekre. Ez a programkd formailag fggvnyekbl s eljrsokbl ll. Az gy definilt eljrsokat s fggvnyeket metdusoknak hvjuk. Rviden teht az osztly mindig egy adattpust jell, a valsg objektumainak egy csoportjt. Ha ennek az osztlynak egy konkrt objektumt akarjuk kezelni, akkor ltre kell hozni az osztly egy pldnyt. Definci Pldnyostsnak nevezzk, amikor egy osztly konkrt elfordulst ltrehozzuk. Az gy ltrejtt programegysget objektumnak (=Object) hvjuk. A programokban ez egy vltoz, aminek tpusa az osztly, amibl pldnyostottuk. Az objektumok olyan zrt programozsi egysgek, amelyek az kezelni kvnt adatokon kvl tartalmazzk azokat az eljrsokat s fggvnyeket is, amelyek az objektumok megfelel kezelsre kpesek. Hogy egy programozsi egysget objektumoknak tekintsnk az albbiakban trgyalt hrom tulajdonsg meglte szksges. Egysgbe zrs Az objektumoknak azt a tulajdonsgt, hogy az adatmezkn kvl az t kezel eljrsok vagy fggvnyek is az adattpus rszt kpezik, egysgbezrsnak (encapsulation) hvjk. Az objektum adatait manipull fggvnyeket, eljrsokat metdusoknak hvjuk. Specilis metdusok Az objektumok specilis metdusai. A konstruktor metdus akkor fut le, amikor egy objektumot, futs kzben ltrehozunk. A konstruktor biztostja a helyet a memriban az adatok s az egyb kdok rszre. A destruktor metdus akkor fut le, amikor az objektum megsznik. Annyi a feladata, hogy a megfelel memriaterleteket felszabadtja, a megnyitott fjlokat lezrja. A fejlesztrendszerek automatikusan ltrehozzk az egyszerbb objektumok konstruktorjnak s destruktorjnak kdjt, a programoznak esetleg hivatkozni sem kell rjuk. rklds Az objektumok ltalban tartalmazhatnak ms objektumokat is. A tartalmazott objektumokat s objektumnak szoks hvni, mg a tartalmaz objektumot leszrmazott objektumnak, vagy gyereknek hvjuk. A leszrmazott objektumok rklik seik tulajdonsgait, azaz minden eljrst, metdust s adatmezt, amivel azok rendelkeznek. Ennek megfelelen a leszrmazott objektumban is hasznlhatjuk az s objektum metdusait.

Tbbrtsg (Polimorfizmus) Ha egy leszrmazott objektum metdust ugyanolyan nven definiljuk, mint egy snek metdust, akkor a program futsi idejben fizikailag ms eljrst kell hasznlnia a rendszernek az ppen hasznlt objektumtl fggen. Pldul a rajzol() nev metdus nem lehet ugyanaz pont, vonal, kr s sokszg esetn. A polimorfizmus azt eredmnyezi, hogy a program a megfelel metduspldnyt vlasztja ki futs kzben a rendelkezsre ll ugyanolyan nev szimblumok kzl. Az objektum orientlt programozs az objektumok hasznlata kiss ms gondolkozst kvn meg a programozktl, mint a hagyomnyos procedurlis programozs. A program tervezse ttoldik az objektumok hierarchijnak tgondolt megtervezsre, tovbb az objektumok rszeinek megfelel kd ltrehozsra. A legtbb fejlesztrendszerben mr ltezik az objektumoknak egy olyan hierarchija, amely a kpernykezelsnl, a felhasznli fellet kialaktsnl elengedhetetlen.
Megjegyzs Az objektum orientlt programozs a Windows 3.1 elterjedsvel vlt npszerv, mivel ekkor nagymrtkben eltoldott hangsly a programok fejlesztse sorn a felhasznli fellet fel, azt pedig egyszer mdon csak objektum orientlt programozssal lehetett fejleszteni. ltalban a grafikus fellet programok esemnyvezreltek, ami szintn az OOP irnyba viszi el a fejlesztst.

Egy osztlyt hasznlni algoritmusler nyelven gy lehet:


Vizi = Osztly kiterjesztve Jarmu Vitorla: Byte Katamaran: Bool Metodusok Indul (parameterlista) Megall(paramlterlista) Init() konstruktor Close() destruktor Osztaly vge Vltozo : Vizi

Pascalban
Vizi = Object(TObject); Vitorla : byte; Katamaran: Boolean; Procedure indul(...) Function Megall() : boolean; Constructor Init(); Destructor close(); End;

PHP-ben
Class Vizi { Var Vitorla : byte; Var Katamaran: Boolean; Function indul(){...} Function Megall(){...} Vizi(); //Ez itt a konstruktor, a neve megegyezik az osztly nevvel } //PHP-ban nincsen destruktor. Amikor a vltoz megsznik, //akkor automatikusan felszabadul minden erforrs.

JAVA-ban
class Vizi { Var Vitorla : byte; Var Katamaran: Boolean; Public void indul(...) Public int megall(){...} public Vizi(){...} }

rtket adni egy objektum egy vltozjnak gy lehet:


Valtozo->mezo1 = Adat

vagy gy
Valtozo.mezo1 = Adat

Egy objektum egy metdust gy hvhatjuk meg: Egy metdusra gy lehet:


Valtozo->indul(paramterek);

Vagy gy
Valtozo.megall();

A fenti pldkbl ltszik, hogy a klnbz nyelvi megvalstsok meglehetsen hasonltanak egymshoz. Ebbl addan a szintaktika s annak rtelme is hasonl. A klnbsgeket sajnos az adott programozsi nyelv rszletes tanulmnyozsakor kell elsajttani. Formailag hasonlt a lers a rekordok hasznlathoz, de itt a vltozra val hivatkozs biztostja, hogy mr fordtsi idben csak azokat az eljrsokat metdusokat hajtassuk vgre a vltozn, amivel azt a vltozt lehet kezelni. A jegyzet vgn kitrnk az OOP-ra, rszletesen megnzzk azokat a mdszereket, amelyek segtsgvel hatkonyan lehet nagy mret programokat kszteni az OOP felhasznlsval. Feladatok: ptsk fel az albbi objektumstruktrt: ktdimenzis pont, egyenes szakasz, trtvonal, krv, kr! Az objektumokba vegyk bele a pontok, illetve egyb alkotelemek sznt is!

Elemi algoritmusok, programozsi ttelek

A tovbbiakban olyan algoritmusokat trgyalunk meg, amelyek a programozs sorn rendszeresen elfordul feladatok megoldsra ksz vlaszt adnak. Ezeket az algoritmusokat programozsi tteleknek hvjk. A programozsi ttelek azok az ptkvek, amelyek egy program ltrehozsa sorn minduntalan elfordulnak. A programozsi ttelek bizonythat mdon elvgzik a feladataikat, teht ha a programozsi tteleket helyesen hasznlja a programoz, akkor helyesen mkd programot tud rni. Az albbi linken megtallhat tbb programozsi ttel s egyb algoritmus demonstrcis programja, igaz tbbnyire angol nyelven. http://www.cs.bme.hu/~kiskat/sza/anim.html Az elemi algoritmusok sorn hasznlt kzs jellsek Minden programban egy vagy tbb A[N] jel, N elem vagy B[M] jel, M elem tmb tartalmazza a kiindul tetszleges tpus adatokat. Esetenknt a C[K] jel tmb K elem tartalmazza az eredmny rtkeket. T az elemeknek egy tulajdonsga, amit A[N].T-vel jellnk. (Ezt a jellst a rekordokbl ll tmbktl vettk t. Egyszerbb esetekben a T tulajdonsg maga az elem rtke.) A tmbket csak a trgyals egyszersge miatt alkalmaztuk, azok lehetnek azonos tpus rekordokbl ll fjlok vagy listk is. Ennek megfelelen a programozsi ttelek megfogalmazhatk azonos hosszsg rekordokbl ll fjlokra s listkra is. Ilyen esetekben az albbi mveleteket kell kicserlni az algoritmusokban: Tmb Egy tmbelem vizsglata File Egy rekord beolvassa egy vltozba, majd a megfelel mez vizsglata Iterci egy ciklusban Lps a file kvetkez rekordjra A tmb vgnek vizsglata End Of File vizsglata Egy tmb elem rtknek az Ugrs az adott sorszm rekordra, majd trsa rs a rekordba, rs, utn a rekordmutatt eggyel visszalltjuk tmbindex rekordsorszm Lista A listaelem beolvassa s a megfelel mez vizsglata Lps a kvetkez listaelemre A listamutat 0-e vizsglat A Listaelem kirsa Egy szmll tpus rtk, a listafej esetn 0 s minden iterci esetn nvekedik eggyel.

5.1 Bonyolultsg Az algoritmus bonyolultsgt nem a konkrtan vgrehajtand mveletek szmval szoks jellni, hanem N elem esetn az N-tl val fggssel. O(1) : konstans futsi idej algoritmus jelent, azaz nem fgg az elemszmtl az algoritmus O(N) : azt jelenti, hogy az elemszmmal linerisan vltozik a futsi id O(N2) : az elemszmmal ngyzetesen vltozik a futsi id O( log N) : az elemszmmal logaritmikusan vltozik a futsi id O (N log N) : az elem szmmal arnyosan s annak logaritmusval vltozik a szksges futsi id O(N!) : az elemszm faktorilisval vltozik a futsi id Elg nagy N esetn: O(1) < O(log N) < O(N) < O (N log N) < O(N2) < O(N!)

5.2 Sor, rtk ttelek Olyan ttelekrl van sz, amelynl egy sorhoz egy rtket rendelnk hozz. Azaz a kiindul adatok A[N], N elem tmbben vannak.

5.2.1

sszegzs ttel

Specifikci Adott egy A nev N elem tmb. A tmb elemei fel vannak tltve numerikus adatokkal. rassuk ki az A[N] tmb elemeinek sszegt.
Osszeg := 0 Ciklus i:=1-tl N-ig Osszeg := Osszeg+A[i] Ciklus vge Ki: Osszeg

5.2.2

tlagszmts

Specifikci Adott egy A nev N elem tmb. A tmb elemei fel vannak tltve numerikus adatokkal. rassuk ki az A[N] tmb elemeinek tlagt. Az tlagszmts visszavezethet az sszegzsi ttelre. Vigyzni kell arra, hogy mg a tmb elemei lehetnek egsz tpusak, az tlag kiszmtsnl vagy vals tpust kell alkalmaznunk, vagy egsz szmok osztst kell hasznlnunk.
Osszeg := 0 Atlag := 0 Ciklus i:=1-tl N-ig Osszeg := Osszeg + A[i] Ciklus vge Atlag : = Osszeg / N Ki: Atlag

5.2.3

Eldnts

Specifikci Adott egy A nev N elem tmb. A tmb elemei fel vannak tltve tetszleges, de azonos tpus adatokkal. Dntsk el, hogy a tmbben ltezik-e T tulajdonsg elem! A vlaszt irassuk ki A keresett elemet a K nev vltoz tartalmazza majd, amit bekr a program. A keresett tulajdonsg teht: K A vlaszt a Letezik nev logikai tpus vltoz fogja tartalmazni.
Be: K i:=1 Ciklus amg NEM ( (i <= N) s ( A[i].T == K ) ) i := i + 1 Ciklus vge Letezik := (i <= N)

Itt kt fontos elemet meg kell magyarznunk. A keressi ciklus fejlcben kt felttel szerepel. Az els felttel biztostja, hogy a tmb vge utn mr ne keressnk, mg a msodik felttel azt adja meg, hogy a keresett tulajdonsg az aktulis elemre igaz-e. Az utols sorral kapcsolatban azt jegyzem meg, hogy a legtbb programozsi nyelvben az rtkads jobb oldaln ll kifejezst rtkeli ki elszr a program, s annak igazsgrtkt (igaz vagy hamis) adja rtkl a bal oldalon ll vltoznak. Ha egy nyelv nem tmogatja a fenti kifejezst, akkor a kvetkez sorokkal lehet helyettesteni az utols sort.
Ha i <= N akkor Letezik := Igaz klnben Ltezik := Hamis

5.2.4

Keressek

5.2.4.1 Lineris keress


Specifikci Adott egy A nev N elem tmb. A tmb elemei fel vannak tltve tetszleges, de azonos tpus adatokkal. Dntsk el, hogy a tmbben ltezik-e T tulajdonsg elem! Ha ltezik, akkor adja meg az elem sorszmt, klnben adjon vissza egy lehetetlen sorszmot. Ha ltezik a keresett elem, akkor a Sorszm nev vltoz a keresett elem indext fogja tartalmazni, ha nincs adott tulajdonsg elem, akkor lehetetlen rtket fog a vltoz tartalmazni. A Sorszm vltoz kezdrtkt gy kell megvlasztani, hogy a tmb legkisebb index elemnl is kisebb legyen.
Be: K Sorszam := -1 i:=1 Ciklus amg NEM ((i <= N) s ( A[i].T == K ) ) i := i + 1 Ciklus vge Letezik := (i <= N) Ha (i <= N ) akkor Sorszam := i klnben sorszam := Lehetetlen rtk

Ha a fenti eljrst fggvnyknt hasznljuk, akkor a fggvny rtknek a lekrdezsnl azt kell vizsglni, hogy a Sorszmknt visszaadott rtk benne van-e a tmb rtelmezsi tartomnyban. Hatkonysgvizsglat A lineris keress tlagosan N/2-szr fut le, mivel vletlenszer elemek esetn s nagy szm keresst felttelezve tlagosan az N/2-ik lesz a keresett elem, a bonyolultsg, teht O(N). Ennl sokkal jobb eredmnyt ad a binris keress.

5.2.4.2 Binris keress


Specifikci N elem tmb azonos tpus elemekkel van feltltve. A tmb elemei T tulajdonsg szerint nvekven rendezettek. Dntsk el, hogy a tmbben ltezik-e T tulajdonsg elem! Ha ltezik, akkor adja meg az elem sorszmt, klnben adjon vissza egy lehetetlen sorszmot. A keressi eljrs elve az, hogy megnzzk a tmb kzps elemt. Ha megtalltuk a keresett elemet, akkor befejeztk a keresst. Ha a kzps elem T tulajdonsga kisebb, mint a keresett elem, akkor nyilvn a fels fl tartomnyban kell keresni a keresett elemet, ha pedig kisebb, akkor az als fl tartomnyban kell keresni. gy minden egyes sszehasonlts sorn kizrjuk a maradk elemek felt.

Be: K Also := 1 Felso := N Kozepso := ( Also + felso ) / 2 Ciklus amg ( Also <= Felso ) s (A[Kozepso].T <> K ) Ha A[Kozepso].T > K Akkor Felso := Kozepso - 1 Klnben Also := Kozepso + 1 Elgazs vge Kozepso := int(( Also + Felso ) / 2) Elgazs vge Ciklus vge Ha (A[Kozepso].T = K) Klnben Akkor Sorszam := Sorszam := Kozepso -1

A rutinban szerepl osztsok termszetesen az adott programozsi nyelv egsz tpus osztsnak felelnek meg, s egsz tpus eredmnyt kell visszaadniuk. Hatkonysgvizsglat: log2N keress alatt megtalljuk az eredmnyt, illetve eldnthetjk, hogy az elem benne van-e a keresett elemek kztt. Pldul N =1024 esetn 10 sszehasonlts elegend, mivel log21024 = 10. Ennek a keressnek a hatkonysga sokkal jobb, mint a lineris keress. Mirt nem ezt a mdszert hasznljuk mindig? Nem minden esetben biztosthat automatikusan, hogy a keressre hasznlt halmaz rendezett legyen, ha pedig nem rendezett, a rendezs idbe telik. A bonyolultsg teht O( log2N)

5.2.5

Megszmlls

Specifikci: Egy N elem tmb A nev tmb azonos tpus elemekkel van feltltve. Hatrozzuk meg, hogy a tmbben hny db. T tulajdonsg elem van. Itt az a krds, hogy az adott tulajdonsg hnyszor fordul el, teht definilunk egy Szamlalo nev egsz rtkeket felvev vltozt, amelynek a kezd rtke 0. Az fogja tartalmazni a krdses elemszmot. A korbbi ttelekkel ellenttben itt nyilvnvalan vgig kell nzni a teljes tmbt, ezrt nem ciklus amg, hanem ciklus -tl ig tpus ciklust kell hasznlni.
Be: K Szamlalo := 0 Ciklus (i = 1tl N-ig) Ha A[i].T == K akkor Szamlalo := Szamlalo + 1 Ciklus vge Ha (i <= N ) akkor Sorszam := i

5.2.6

Maximum kivlaszts (minimum kivlaszts) ttele

Specifikci Egy N elem tmb A nev tmb azonos tpus elemekkel van feltltve. Keressk meg az A[N] tmb elemei kzl a T tulajdonsg szerinti legnagyobb elemet s a sorszmt valamint az rtket magt adjuk meg eredmnyl. Az Ertek nev vltoz tartalmazza majd a legnagyobb elem rtkt, s a Hely mutatja meg a legnagyobb rtk helyt.

Ertek := A[1] Hely := -1 Ciklus i = 1tl N-ig Ha A[i].T > Ertek.T akkor Ertek := A[i] Hely := i Elgazs vge Ciklus vge Ki: Ertek, Hely

Nyilvn a legkisebb elemet (minimumkivlaszts) gy tudjuk kivlasztani, hogy a relcis jelet megfordtjuk. Ha a tmb nullval kezddik, akkor a ciklusunk is 0-val kezddik, N-1-ig tart s a felttelezett legnagyobb elem is a 0. lesz. A fenti kt algoritmus bonyolultsga O(N) 5.3 Sor, tbb rtk Az eddigi programozsi ttelek egy rtket szolgltattak. A tovbbiakban olyan ttelek nznk, amelyek tbb rtket adnak vissza. Ennek megfelelen az eredmnyeket is egy tmbben kapjuk vissza. A tmb nha ugyanaz, mint a bemeneti rtkeket tartalmaz tmb, de nha msik tmb vagy tmbk is lehetnek.

5.3.1

Kivlogats ttele

Specifikci Adott N elem A nev tmb. Az A tmb bemeneti rtkei kzl rassuk ki a K tulajdonsggal rendelkezket.
Be: K Ciklus (i = 1 tl N-ig) Ha A[i].T == K akkor Ki: A[i] Ciklus vge

Nyilvn a fenti algoritmus nem tudja visszaadni az sszes rtket az t meghv eljrsnak, ezrt ennek egy javtst fogjuk megnzni a kvetkezkben.

5.3.2

Kivlogats ttele mdostsa

Specifikci: Adott N elem A nev tmb. Az A tmb bemeneti rtkei kzl msoljuk t a K tulajdonsggal rendelkez elemeket egy C[K], K elem eredmnytmbbe. Felttel, hogy C[K] tmb elemszma nagyobb vagy egyenl legyen A[N] elemszmval, azaz K>=N. Az algoritmus vgn C[j] az eredmny tmb utols rtkes eleme.
Be: Elem j := 0 Ciklus (i = 1 tl N-ig) Ha A[i].T == Elem.T akkor j := j+1 C[j] := A[i] Elgazs vge Ciklus vge

A fenti algoritmus magtl rtetd.

5.3.3

sszefuttats ttele

Specifikci: Adottak A[N] s B[M] tetszleges adatokkal feltlttt, s T tulajdonsg szerint rendezett tmbk. lltsuk el azt a T tulajdonsg szerint rendezett C[K], K elem eredmnytmbt, amelyben A s B elemei kzl mindegyik annyiszor szerepel, ahnyszor azok a forrstmbkben benne vannak. Nyilvn az eredmnytmbnek K := M + N elemnek kell lennie.
i := 1 j := 1 l := 0 Vege := Hamis Ciklus amg Nem Vege l := l + 1 Ha A[i].T < B[j].T akkor C[l] := A[i] i := i + 1 Ha i > N Akkor Vege := Igaz klnben C[l] := A[j] j := j + 1 Ha j > M Akkor Vege := Igaz Elgazs vge Ciklus vge Ha i > N Akkor Ciklus amg j<= M C[l] := B[j] l := l + 1 j := j + 1 ciklus vege klnben Ciklus amg i<= N C[l] := B[i] l := l + 1 i := i + 1 ciklus vege Elgazs vge

Az algoritmus els rsze akkor r vget, amikor az egyik tmb elemeibl kifogytunk, utna a msik tmb elemeit kell tmsolni az eredmnytmbbe. Csnya megolds, hogy ott van a msol ciklus. Ezt gy kszblhetjk ki, hogy az A s B tmb utols eleme utn betesznk a kt tmbbe, a legnagyobb elemnl nagyobb elemet. A[N+1] elem s B[M+1] elem, ahol A[N+1] := s B[M+1] = ;
Eljrs sszefuttats2() k:=0 i:=1; j:=1 Ciklus amg i<N vagy j<M k:= k+1 Elgazs A[i] < B[j] esetn C[k]:= A[i]; i:=i+1 A[i] = B[j] esetn C[k]:= A[i]; i:=i+1; j:=j+1 A[i] > B[j] esetn C[k]:= B[j]; j:=j+1 Elgazs vge Ciklus vge Eljrs vge.

5.3.4

Uni kpzse

Adottak A[N] s B[M], N s M elem tetszleges adatokkal feltlttt tmbk

Eljrs Egyests(): Z:=X; k:=N Ciklus j=1-tl M-ig i:=1 Ciklus amg iN s B[j]A[i] i:=i+1 Ciklus vge Ha i>N akkor k:=k+1; C[k]:=B[j] Ciklus vge Eljrs vge.

5.3.5

Metszet kpzse

Specifikci: Adottak A[N] s B[M], N s M elem tetszleges adatokkal feltlttt tmbk. Els lehetsg: lltsuk el azt a T tulajdonsg szerint rendezett C[K], K elem eredmnytmbt, amelyben azok az elemek szerepelnek, amelyek A-ban s B-ben is benne vannak. Az eredmnytmbnek K := Min(N,M) elemnek kell lennie.
Konstans MaxN:Egsz(???) Tpus THk=Tmb(1..MaxN:TH) Eljrs Metszet(): Db:=0 Ciklus i=1-tl N-ig j:=1 Ciklus amg jM s X(i)Y(j) j:=j+1 Ciklus vge Ha jM akkor Db:=Db+1; Z(Db):=X(i) Ciklus vge Eljrs vge.

5.3.6

Klnbsg kpzse

Specifikci: Adottak X[N] s Y[M], N s M elem tetszleges adatokkal feltlttt tmbk. lltsuk el azt a Z[] eredmnytmbt, amelyben azok az elemek szerepelnek, amelyek A-ban benn vannak s B-ben nincsenek benne. Z elemszma Max(N,M)lesz.
Eljrs Metszet(): Db:=0 Ciklus i=1-tl N-ig j:=1 Ciklus amg jM s X(i)Y(j) j:+1 Ciklus vge Ha j>M akkor Db:+1; Z(Db):=X(i) Ciklus vge Eljrs vge.

5.4 Rendezsek A rendezsi algoritmusok a programozs leggyakrabban hasznlt eljrsai. A rendezsek legfbb szempontja, hogy a rendezs helyben trtnjen, azaz az eredmnytmb megegyezik a bemen adatok tmbjvel. Ebbl az okbl kifolyan br az eredmny tmb, de mgsem sorolhatjuk be a Tmb -> Tmb tpus algoritmusok kz. A rendezsek hatkonysgnak legfontosabb szempontja az, hogy hny sszehasonlts s hny csere trtnik a rendezs sorn. Br a modern szmtgpek nhny ezer rtk esetn gyorsan el tudjk vgezni a

rendezseket, azonban nem ritka a tbb szzezer vagy tbb milli bemen adat. Az ilyen adatmennyisgeknl nyilvn a leggyorsabb szmtgp is sok idt tlt el a rendezs sorn. Mindig a megfelel rendezsi eljrst kell alkalmazni. A rendezsek sorn gyakran alkalmazzuk a Csere eljrst, amely kicserli a kt bemen paramtert egymssal. A rendezsi algoritmusok hatkonysgt meghatrozza az, hogy hny sszehasonltst vgez, s hny elem cserjt vgzi az algoritmus. A hatkonysg vizsglata esetn a legjobb eset, amikor minden elem a helyn van s a legrosszabb eset, amikor pont ellenttes sorrendben vannak az elemek. A tipikus esetben vletlenszer sorrendben vannak az elemek. Az albbi linken megtallhat egy sor rendezsi algoritmus megvalstsa s animcija. A demonstrcikhoz ltalban JAVA VM-et kell telepteni a szmtgpre. http://www.cs.bme.hu/~kiskat/sza/anim.html

5.4.1

Egyszer csere

Az egyszer csere nem a rendezsekhez tartozik, mgis nagyon fontos eljrs. Legyen a s b cm szerint tadott kt paramtere a Csere nev eljrsnak.
Eljrs Csere( &a, &b ) c := a a := b b := c Eljrs vge

5.4.2

Ciklikus permutci

Ez az eljrs az egyszer csere tovbbvitele. Ez az eljrs nem szksges a rendezsekhez, de rdekesen hasznlhat ms esetekben. Egy A[N], N elem tmb elemeit egy hellyel lptetni kell gy, hogy az els elem az utols helyre kerl s a tbbi elem egy indexxel kisebb helyre kerl.
Eljrs Permutci( A[N] ) C := A[1] Ciklus i:= 1tl N-1 ig A[i] := A[i+1] Ciklus vge A[N] := C Eljrs vge

A fenti eljrsban rdemes megfigyelni, hogy a ciklus N-1 ig megy, mivel ha N-ig menne, akkor az rtkadsban az i = N esetben az i+1 tlmutatna a tmb hatrn. Hasonl feladat, amikor egy tmb elemeit eggyel nagyobb index helyre kell lptetni. Ekkor az algoritmus gy nz ki:
Eljrs Lptets( A[N] ) C := A[1] Ciklus i:= N-1tl 1 ig A[i+1] := A[i] Ciklus vge Eljrs vge

Az els helyen szerepl elemet menteni kell esetleges ksbbi felhasznlsra szmtva.

5.4.3

Bubork rendezs

A buborkalgoritmus elve az, hogy az egyms utni elemeket sszehasonltom. Ha a nagyobb rtk elem alacsonyabb index helyen van, mint a kisebb rtk, akkor kicserlem ket. Majd tovbb folytatom az szszehasonltst, amg a tmb vgre nem rek. Ekkor a legnagyobb elem a legnagyobb sorszm helyen lesz. A msodik menetben csak N-1 ig megyek, stb.

Ciklus i := N tl 1 lefel 1 -esvel Ciklus j := 1-tl i-1 -ig Ha A[j].T > A[j+1].T akkor Csere( A[j], A[j+1] ) Cilus vge Ciklus vge

Az eljrs hatkonysga: Legrosszabb esetben N*N/2 csere, legjobb esetben 0 csere kell, teht tlagosan N*N/4 csere szksges tlagosan. A problma az, hogy tlsgosan sokszor cserljk az elemeket s tl sok sszehasonltst vgznk!

5.4.4

Minimum kivlasztsos (maximum kivlaszts) rendezs

A maximum kivlaszts elve az, hogy ha egy tmb 1..N eleme kzl kivlasztjuk a legkisebbet, majd azt a legels elem helyre tesszk, akkor a 2..N elem nla mr csak nagyobb lehet. Ekkor a 2..N elembl is kivlasztjuk a legkisebbet, majd a 2. Helyre msoljuk. A vgn az elemek nvekv sorrendben lesznek.
Ciklus i := 1 tl N-1 ig Ciklus j := i+1-tl N-ig Ha A[j].T < A[i].T akkor Csere( A[j], A[i] ) Cilus vge Ciklus vge

A rendezs hatkonysga hasonlt az buborkos rendezsre, mivel itt is sok sszehasonlts s sok csere van, N*(N-1)/2 csere szksges tlagosan. Ha a krdses elemek sszetettebb elemek, akkor a rengeteg csere nagyobb adatmozgatst eredmnyezhet. Ennek az adatmozgsnak a lecskkentsre javtjuk az algoritmust.
Ciklus i := 1 tl N-1 ig k := i Ciklus j := i+1-tl N-ig Ha A[j].T < A[k].T akkor k:= j Cilus vge Csere( A[k], A[i] ) Ciklus vge

A javts azon alapul, hogy a bels ciklusban nem cserlek, csak rtkadst vgzek. Mivel egy csere egy szubrutinhvsbl s hrom rtkadsbl ll, ezrt bonyolultabb adatszerkezet esetn ez az eljrs gyorsabb.

5.4.5

Beszrsos rendezs

A mdszer azon alapul, hogyha feltesszk, hogy egy tmb els i-1 eleme rendezett, akkor az i-ik elemet kiveszem a helyrl, majd megkeresem a helyt s beszrom a megfelel pontra. Ehhez termszetesen feljebb kell tolni a nlnl nagyobb elemeket egy hellyel. Itt fontos, hogy az A tmbnek legyen 0. eleme is, amely nem tartalmaz rtkes elemet, hanem biztosan minden elemnl kisebb rtket kell tartalmaznia.
Ciklus i := 2 tl N ig Ha A[i].T < A[i-1].T akkor Ment :=A[i] j := i-1 Ciklus amg A[j].T => Ment.T A[j+1] := A[j] j := j-1 Ciklus vge A[j] := Ment Elagazas vege Ciklus vge

A fenti algoritmus gyorsabb az elz kt rendezsi mdszernl, mert a bels ciklus nem fut tovbb, ha megtallta a beillesztend elem helyt. Ezrt az gynevezett majdnem rendezett esetekben (amikor csak kevs elem van rossz helyen) lnyegben O(N) a hatkonysga.

5.4.6

Shell rendezs

A shell rendezs elve az, hogy a rendezend adatokat rszlistkra bontjuk, amelyeket kln kln rendezett tesszk a beszrsos rendezs segtsgvel, a rszben rendezett elemekbl nagyobb rszlistkat alkotunk, amit szintn rendezett tesznk. Legvgl a teljes adatsor lesz a lista, vagyis vgs soron minden listt beszrsos rendezssel rendeznk. Vegynk egy N elem tmbt s vegyk minden H-ik elemt. Ekkor lesz H db listnk, amelyben az elemek szma int(N/H). Mekkora legyen a H kezd rtke s a tbbi rtke? A rendezs akkor lesz gyors, ha minden rendezsi menet nagy tvolsgokra mozgatja az adatokat, ezrt clszeren megfelelen nagy H rtkkel kell kezdeni a rendezst, majd a H rtkt folyamatosan cskkentve vgl a H rtke 1 lesz. Az eredeti javaslat szerint H rtkt 2 hatvnyaival hatroztk meg, vagyis mondjuk 10000 elem esetn H kezd rtke 8192, majd 4096, 2048, ...32, 16, 8, 4, 2, 1. A kutatsok azt mutattk ki, hogy a kezd elemszmtl fggen ms s ms a legclszerbb H szmsorozat. Egyes kutatk azt lltjk, hogy ha a H rtkeket az albbi mdon szmoljuk ki H = 3*H +1, ez megfelelen optimlis lesz. Ennek alapjn egy lehetsges H szmsorozat az albbi: 1, 4, 13, 40, 121, 364, 1093, stb... Vagyis kivlasztjuk ennek a szmsorozatnak a megfelelen nagy elemt, amellyel kezdjk a rendezst, majd ezt cskkentve hajtjuk vgre a rendezst. Legyen A[N] a rendezend adat, s legyen az cols[16] a fenti szmsorozatot cskken sorrendben tartalmaz 16 elem (megfelel mret) tmb. Clszeren a tmbt 0-val kezdden indexeljk!
Eljrs shell () cols = {1391376, 463792, 198768, 86961, 33936, 13776, 4592, 1968, 861, 1093, 364, 121, 40, 13, 4, 1} ciklus k=0-tl k=15-ig h= cols[k]; ciklus i=h-tl n-1-ig v=a[i]; j=i; ciklus amg (j>=h && a[j-h]>v) a[j]=a[j-h]; j=j-h; Ciklus vge a[j]=v; Ciklus vge Ciklus vge Eljrs vge

5.4.7

Gyorsrendezs (quicksort)

A mig is leggyorsabb rendezsi eljrst Hoare dolgozta ki 1962-ben. A keresztsgben a Quicksort vagy Gyorsrendezs nevet kapta. Hasznlathoz rekurzv programozsi nyelv szksges, de szerencsre a legtbb nyelv rendelkezik ezzel a kpessggel. A felsorolt algoritmusok kzl messze a leggyorsabb, de mivel mindennek van ra, nagy tmeg adatok esetn a program vermnek nagynak kell lennie. Az eljrs elve a kvetkez. Vegyk a tmb szmtanilag kzps elemt. Balrl kezdjk el megkeresni az els olyan elemet, amely nagyobb vagy egyenl a kzps elemmel, majd jobb oldalrl kezdve keressk meg az els olyan elemet, amely kisebb vagy egyenl a kzps elemmel. Ha talltunk kt ilyen elemet, akkor cserljk ki ket. A kvetkezkben folytassuk a fenti tulajdonsg elemek keresst s cserjt, amg a bal s a jobb oldali elemek tallatai ssze nem rnek. Ha sszertek, az azt jelenti, hogy a kzps elemtl balra csupa kisebb jobbra pedig csupa nagyobb elem ll. Rekurzv hvssal futtassuk le az algoritmust a bal oldali, majd a jobb oldali tartomnyra is. Amikor az eljrsbl visszajn a program, akkor a megfelel tartomny mr rendezett. Az eljrsban az A[N] tmbt adottnak tesszk fel, a Quicksort eljrs kt index paramtert kap, ami az eljrsra nzve loklis vltozkat jelentettek.

Eljaras Quicksort(Bal, Jobb) I := Bal J := Jobb Kozepsokulcs := A[(i+j)/2].T Ciklus amg i <= j Ciklus amg A[i].K< Kozepsokulcs i := i + 1 Ciklus vge Ciklus amg A[j].K > Kozepsokulcs j := j - 1 Ciklus vge Ha i<j akkor Csere( A[i] , A[j] ) i:=i+1 j:=j-1 Elgazs vge Ciklus vge Ha Bal < j akkor Quicksort(Bal, j-1) Ha i < Jobb akkor Quicksort(i+1, Jobb) Eljrs vge

5.4.8

Nem ktelez rendezsi algoritmusok

5.4.8.1 sszefslses rendezs(Merge sort)


Ez a rendezsi algoritmus rekurzin alapul. A lnyege az, hogy rendezzk a tmb els felt, majd a msodik felt s vgl a kt rszt sszefsljk. A rendezs maga rekurzv, teht az els fl rendezse rekurzv mdon zajlik le. A rekurzi vget r, ha a rendezend rsz mr csak egy elembl ll. Rosszabb a hatkonysga, mint a gyorsrendezs!

5.4.8.2 Lda Rendezs (Bin sort)


Ez a rendezs csak meglehetsen specilis esetben hasznlhat. Adott A[N] tmb s M pozitv egsz szm, amelyekre igaz, hogy minden i-re 0 A[i] < M s A[i] pozitv egsz szm! (lthat, hogy meglehetsen szigor felttelek vannak!) Hozzuk ltre a kezdetben -1-gyel feltlttt Lada[M] tmbt. A rendezs elve a kvetkez. Vgigmegyek A tmb elemein, s a Lada[A[i]] = A[i]-vel, majd a vgn vgigmenve a lada tmbn visszakapjuk az elemeket sorrendben. Ha egy elembl tbb is van, akkor az adott lada elembe egy
Ciklus i=0-tl M-1-ig Ciklus i=0 tl N-ig Lada[A[i]] =A[i] Ciklus vge Ciklus vge Ciklus i=0-tl M-ig Ha M[i]>0 akkor Ki: M[i] Ciklus vge

Az algoritmus javtsa, ha egy elembl tbb is lehet, akkor minden lda legyen egy lista. s a ldkat troljuk kzs memriaterleten!

Ciklus i=0-tl M-1-ig Ciklus i=0 tl N-ig Listaba(A[i]) Ciklus vge Ciklus vge Ciklus i=0-tl M-ig Ha Nem Ures(Lista[i]) akkor Ki: Listakiiratsa(Lista[i]) Elgazs vge Ciklus vge

Ez a rendezs kiss nagyvonalan gazdlkodik a memrival. A listk kezelst korbban lttuk. Az algoritmus hatkonysga O(N+M). Kevesebb memrival az albbiakat lehet tenni:
Ciklus i=0-tl N-1-ig Ha A[i] <> i akkor csere(a[i],a[a[i]) Ciklus vge

Ebben az esetben nincsen nagy memriafelhasznls, de a csere miatt 3* lassabb lesz az eljrs.

5.4.8.3 Radix rendezs


A Radix rendezs a Lda rendezs ltalnostsa. Legyen n egsznk, 0 s N2 kztt, s ezeket kell rendeznnk. ) A ldarendezshez kpest, ekkor M = N2 s ekkor O(M+N) =O(N2). Kt lpsben rendeznk. 1. lpsben N ldt hasznlunk s az A[i] elemet az A[i mod N] ik ldba tesszk. 2. lpsben vgigmegynk a ldkon s a ldkban lv elemeket (amelyek listt alkothatnak) betesszk ugyanezen ldkba az albbi mdon: A[i] elemet az integer( A[i] /N)-ik ldba tesszk.
Ciklus i = 0 tl N-1-ig Listba(lada[ A[i ] mod N], A[i] ) Ciklus vge Ciklus i = 0-tl N-1-ig K = Listbl(Lada[i] ) Listba(Lada[ int(A[i] / N) ], A[i]) Ciklus vge

A Radix rendezs hatkonysga O(N log N). A hatkonysg levezetst hagyjuk az egyetemre .

5.4.8.4 Lncrendezs
A feladat egy lncolt lista rendezse gy, hogy csak a pointereket vltoztathatjuk meg, az adatmezket nem.

5.4.8.5 Kupacrendezs (=Halom, heap sort)


Binris fa Olyan fa, amelyben minden pontnak van egy szlje (kivve a gykeret) s legfeljebb kt fia. Pont magassga A leghosszabb, levlig vezet ton lev lek szma. Fa magassga A gykr magassga. Kupac Egy olyan majdnem teljes binris fa, amelyben minden elemre teljesl a kvetkez: A[SZL[i]] >= A[i]. Egy tmb i SZL(i) BAL(i) JOBB(i) = 2*i+1 s = egy als = kupac kztti egsz kapcsolat: tmbindex rsz(i/2) 2*i

Plda a kupacra: 16,14,10,8,7,9,3,2,4,1 Binris faknt trtn brzolsa:

16 14 8 2 4 2 7 9 10 3

Ennek a fnak a magassga 3. Minden (n hossz, A) tmbre teljesl az, hogy A[n div 2 + 1, ..., n] kupac.
Eljrs Kupacrendezs (A) Kupacot_pt(A) ciklus i = hossz[A]-tl 2-ig visszafel -1-vel do Csere(A[1],A[i]) kupacmret[A]-Sllyeszt (A,1) Ciklus vge Eljrs vge Eljrs Kupacot_pt(A) kupacmret[A] = hossz[A] ciklus i = hossz[A]/2 tl 1-ig visszafel -1-vel Sllyeszt(A,i) Ciklus vge Eljrs vge Eljrs Sllyeszt (A,i) l = BAL(i) r = JOBB(i) Ha l<=kupacmret[A] s A[l]>A[i] akkor legnagyobb=l klnben legnagyobb=i Elgazs vge Ha r<=kupacmret[A] s A[r]>legnagyobb akkor legnagyobb = r Ekgazs vge Ha legnagyobb <>i akkor Csere(A[i],A[legnagyobb]) Sllyeszt(A,legnagyobb) Elgazs vge Eljrs vge

5.5 Programozsi ttelek alkalmazsa Az albbiakban olyan feladatokat jellnk meg, amelyben a programozsi tteleket lehet alkalmazni. Tpus feladatok: Egy repl indul az egyik kontinensrl a msikra s repls kzben rendszeresen mri az alatta lv felszn tengerszint feletti magassgt. A mrt rtk nulla ekkor tenger felett repl vagy pozitv ekkor szrazfld felett repl. Ksztsnk olyan programot, a Top - Down mdszer felhasznlsval, amelyik a kvetkezkre kpes: Szimullja a mrseket vletlenszeren, figyelve arra, hogy az els s az utols mrs szrazfld felett trtnt. Az eredmnyeket fjlba menti. Grafikusan kirajzolja a felsznt, s elrept felette egy kis replt (mrs kzben vagy a mrsek lezajlsa utn) Kirja a kpernyre s a fjlba is: Milyen tvol van egymstl a kt kontinens? Hol vannak a szigetek partjai (eltte tenger, utna szrazfld vagy fordtva)? Hny sziget van a kt kontinens kztt?

Hny hegycscsot tallt (A hegycscs az a hely, ami eltt s mgtt kisebb a tengerszint feletti magassg)? t tud-e menni a kt kontinens kztt egy kajakos, ha egyszerre csak egy adott tvolsgot tud evezni, mert ha tbbet evez, akkor elpusztul? Mekkora a szigetek tlagos tvolsga? Van-e leszllplya valamelyik szigeten (olyan rsz, amely vzszintes legalbb kt mrs tvolsgig) Hny darab apr sziget van (maximum 3 mrshosszsg)? Szeretnk alfldn lni. Van-e olyan rsz, amely sk vidk, elg nagy s alfld? Keressk meg ezt a helyet! Adjuk meg a leghosszabb sziget kezdpontjt!

A fenti krdsekre vlaszt ad gyis, hogy vletlen-szl gtolja, vagy segti a replgp tjt Tltsnk fel adatokkal egy kt-dimenzis tmbt! rjunk programot, amely kirja a legnagyobb elemet tartalmaz sor szmt! rjunk programot, amely nvsorba rendezi egy osztly vletlenl bert neveit! rjuk programot, amely a kperny legfels sorban lv kirs karaktereit ciklikusan permutlja. A kirand szveg legyen hosszabb a kperny szlessgnl! Hmrskletet mrnk a ht minden napjn reggel, dlben s este. Ksztsnk programot, amely kirja a reggeli, dli s az esti hmrskletek tlagt, kirja a ht tlagosan leghidegebb napjt, s meghatrozza, hogy melyik napon a legmagasabb a hmrsklet s mikor.

5.5.1

Numerikus algoritmusok

llaptsuk meg kt bekrt szm legnagyobb kzs osztjt llaptsuk meg kt bekrt szm legkisebb kzs tbbszrst 5.6 Szvegfile-ok kezelse A szveges fjlok kezelse a programozs terletnek egyik tipikus feladata. Mirt is az? A szveges fjlokon csakis sorrendben lehet vgighaladni, teht visszatrni nem lehet korbbi llapotokba. Tovbbi problmt jelent az, hogy a szveges fjl sorainak hossza tetszleges, s a sor vgt egy un. sorvge jel (CR/LF) zrja. A szveges fjl hossza sem ismert ltalban, azt a fjlvge (EOF) jelli. Milyen ltalnos megfontolsokat lehet ebben a trgyban elmondani? A szveges fjlok tpusfeladataiban ltalban meg kell nyitni egy vagy tbb szveges fjlt, majd az eredmnyt ki kell rni msik fjlba, s/vagy a kpernyre is. A szoksosan hasznlt programozsi nyelveken van egy fjlmegnyits parancs. A fjl a httrtrak egyikn tallhat fizikai fjl, a programunk azonban annak egy logikai megfeleljt kezeli a memriban. Ez azt jelenti, hogy egy specilis file tpus vltozt kell ltrehoznunk a memriban, s a fizikai fjl paramtereit hozz kell rendelnnk ehhez a fjl vltozhoz, majd a fjlt meg kell nyitni. rsra, olvassra, hozzrsra tudunk megnyitni egy szveges fjlt. Ha tudnnk a fjl egy-egy sornak hosszt, akkor kpesek lennnk a fjlban elre s htra lpegetni, de a szveges fjlokban erre nincsen lehetsg a korbbiak miatt.

Rekurzi

Rekurzinak hvjuk azt a mdszert, amikor egy rtket vagy egy llapotot gy definilunk, hogy definiljuk a kezdllapott, majd ltalban egy llapott az elz vges szm llapot segtsgvel hatrozzuk meg. Ez a fajta meghatrozs gyakran rvidebb s jobban hasznlhat, mintha valamilyen zrt alakot hasznlunk. A rekurzv programozsnl a programok nmagukat hvjk meg s az aktulis llapotuk elmentsre vermet (stack) hasznlnak. A rekurzv programok a feladat megoldst visszavezetik addig, amg a megolds trivilis (kezdrtk), majd ebbl lltjk el az ltalnos rtket. Mivel a verem vges, ezrt mindig biztostani kell egy vgfelttelt, amely biztostja azt, hogy a rekurzi vget r. Ha ez nem trtnik meg, akkor a rekurzv program a vgtelensgig hvn magt, azonban a verem gyorsan megtelik, s hibval lell a program. 6.1 A rekurzv eljrsok, fggvnyek A programozsi nyelvek ltalban biztostjk a programozk szmra azt, hogy egyes eljrsok nmagukat hvhassk meg. Az albbi ltalnos lersban egy fggvny kapcsn mutatjuk be a rekurzit.
Fggvny Rekurziv(Bemen paramter) Bemen paramter mdostsa Ha Feltetel(Bemeno parameterre) = igaz akkor Eredmny := Kezdrtk Klnben Eredmny := Rekurziv(Bemeno parameter) Elgazs vge Rekurziv := eredmny Eljrs vge

A fenti eljrsban a rekurzv hvs az eljrsban vgzett mveletek utn helyezkedik el. Az ilyen rekurzit jobb rekurzinak hvjuk. Ha a rekurzv hvs elszr jn ltre, majd ksbb kvetkeznek a mdost mveletek, bal rekurzirl beszlnk. A szmtgpek eljrshvsi mechanizmusa gy mkdik ltalban, hogy az eljrs meghvsakor a program a pillanatnyi futsi cmet verembe menti, illetve a vermen keresztl tadja a paramtereket is. A meghvott eljrs a verembl kiveszi a paramtereket s felhasznlja, s az elmentett utastscmet otthagyja. Amikor vge szakad egy eljrsnak, akkor a visszatrsi utasts hatsra kiveszi a verembl az elzleg elmentett futsi cmet, majd ez alapjn, a cmen mutatott utasts utni utastson folytatja a program vgrehajtst. A fenti eljrsban definilt minden vltoz loklis, ezrt amikor az eljrs meghvja nmagt, ai vltoznak egy j pldnya jn ltre, fggetlenl a tbbitl. A felttelvizsglat biztostja, hogy egy bizonyos felttel meglte esetn a rekurzi vget rjen. Ha rossz felttelt lltunk a rekurziban, akkor elfordulhat, hogy vgtelenl sokszor nmagt hvja meg a rekurzi, s a verem betelik. A program hibazenettel lell. Nzznk nhny egyszerbb rekurzival megoldhat feladatot:

6.1.1

Fibonacci szmok:

A Fibonacci szmok sorozata olyan szmsorozat, amelyben az i-edik elem az i-1 s az i-2-ik elem sszegbl jn ki. Az F(0) := 1 s az F(1) :=1. Matematikailag: F(i) := F(i-1) + F(i-2) Ksztsnk olyan rekurzit tartalmaz programot, amely megadja az F(N)-t.
Fggvny Fibonacci(N) Ha N=0 vagy N=1 akkor Fibonacci := 1 Klnben Fibonacci := Fibonacci( i-1) + Fibonacci (i-2) Elgazs vge Fggvny vge

6.1.2

N alatt a K kiszmolsa

A feladat egy matematikai defincinak megfelel rtk kiszmolsa. Ha van N db elemnk, s ki akarunk venni kzle K darabot, akkor N alatt a K flekppen tudjuk kivenni, pldul a 90 db lottszmbl hny fle mdon tudunk 5 db-ot kivlasztani.
Fggvny N_alatt_a_K(n, k) Ha k = 0 vagy k = n akkor N_alatt_a_K := 1 Klnben N_alatt_a_K := N_alatt_a_K(n-1,k-1)+ N_alatt_a_K(n-1,k) Elgazs vge Fggvny vge.

Ennek a feladatnak a megrtshez ismerni kell a matematikban a Pascal hromszgnek nevezett fogalmat. Itt magyarzatot nem adunk a fogalomra, matematika tantrgyban a kombinatorika rszen lehet ennek az elmleti alapjaival megismerkedni.

6.1.3

Hanoi torony

Van hrom plciknk, A,B,C jel. Az A jel plcikn nagysg szerint cskken mdon N darab korong van. Milyen sorrendben tudjuk tvinni a C jel plcikra a korongokat, gy hogy szintn nagysg szerint cskken mdon legyenek, ha csak egyesvel mozgathatjuk ket, mindig egyik plcikrl a msikra tve.
Eljrs Hanoi(N, A, C, B) Ha N>0 akkor Hanoi (N-1, A, B, C) Ki: N, mozgats A-rl C-re Hanoi( N-1, B, C, A) Elgazs vge Eljrs vge

A fenti eljrst gy lehet ellenrizni, ha elszr N=1 re majd, N=2-re ellenrizzk, azaz vgigjtsszuk. A fenti rekurzv algoritmusok mindegyike a matematikai gondolkods alapjn jl rthet, azonban a rekurziknak alapvet hibja, hogy futs kzben viszonylag sok helyre van szksg a veremben, tovbb a sok verem mvelet miatt viszonylag lassak az algoritmusok. A veremkezel mveletek gpi szinten a leglassabb mveletek kz tartoznak.

6.1.4
1.

Binomilis egytthat ellltsa


Rekurzv specifikci s algoritmus: 2. Rekurzv specifikci s algoritmus a pascal hromszg elve alapjn:
1, ha N = 1 Bin( N , K ) = 1, ha K = 1 Bin( N 1, K 1) + egybknt Bin( N 1, K )
Fggvny Bin(N, K) : egsz Ha (N = 1) vagy (K = 1) akkor Bin:=1 klnben Bin := Bin(N1, K1) + Bin(N1, K) Elgazs vge Fggvny vge

1, ha N = 1 Bin( N , K ) = 1, ha K = 1 Bin( N , K 1) egybknt N K +1 K


Fggvny Bin(N, K) : egsz Ha (N = 1) vagy (K = 1) akkor Bin:=1 klnben N K +1 Bin := Bin( N , K 1) K Elgazs vge Fggvny vge

6.1.5

Backtrack algoritmus - Visszalpses keress

A megoldstr szisztematikus bejrsa. Elindulunk egy irnyba, felttelezve, hogy az a j irny. Ha "zskutcba" jutottunk, akkor visszalpegetnk addig a legkzelebbi pontig, ahol tudunk ms utat is vlasztani. A megvalsts technikja ltalban rekurzi, viszont ez a problma minden esetben implementlhat rekurzi nlkl is (ELSFI, TESTVR). Olyan feladat megoldsra alkalmas, ahol eredmnyl egy sorozatot kell kapni. E sorozat minden egyes tagjt egy-egy sorozatbl kell kikeresni, de az egyes keressek sszefggnek egymssal. Minden egyes j vlaszts a korbbitl fgghet (fk fggvny), a ksbbiektl azonban nem. Egyes esetekben nem csak a korbbiaktl, hanem sajt jellemzjtl is fgghet a vlaszts (ft fggvny). A megolds legfels szintjn keresnk az i. sorozatbl megfelel elemet. Ha ez sikerl, akkor lpnk tovbb az i+1. sorozatra, ha pedig nem sikerlt, akkor lpnk vissza az i-1. sorozatra, s abban keressk az jabb lehetsges elemet. A keress befejezdik, ha mindegyik sorozatbl sikerlt elemet vlasztanunk (i>N) vagy pedig a visszalpsek miatt mr az elsbl sem tudunk jabbat vlasztani (i<1). Bemenet: N N; M N N ; i [1..N ] : S i H
Mi

ft : N H L

{Az adott sorozat indexelt eleme vlaszhat-e?} {Az egyik sorozat egy adott eleme sszeegyeztethet-e a msik so rozat egy adott elemvel?}

fk : N H N H L
M(i)

{Az i. sorozat elemszma (minden egyes rszsorozat lehet klnbz hosszsg)}

Kimenet: Van L; X N N X(i) Elfelttel: Utfelttel: Van Az i. sorozatbl az X(i). elemet vlasztottuk a megoldsba

( X N

: i [1..N ] : ( X (i ) [1..M (i )]) s

(j < i : f k (i,
Algoritmus:

S i ( X i ), j , S j ( X j )

)) )

( f t (i,

S i ( X i ) )) s

Visszalp ses keress (N, M, X, Van ) X ( ) := 0 i := 1 Ciklus amg (i > 0 ) s (i N ) Jesetvla szts(i, Van, Melyik) Ha Van akkor X(i) : = Melyik i:= i +1 klnben X(i) : = 0 i:= i 1 Elgazs vge ciklus vge Van : = (i N ) Ha Van akkor Ki : X( ) Visszalp ses keress vge

ekkor van megolds

Ha ez nem teljesl, akkor nincsen megolds. Teht, ha mindent kiprblva visszalptnk az els eltti l

Innen kezdi legkzelebb a keresst.

A Jesetkeress lnyegben az S(i)-ben egy adott tulajdonsg elem lineris keresse.

Eljrs Jesetvlaszts(i, Van, Melyik ) Ciklus amg ( j M(i) ) s j:= j +1 ciklus vge Van : = ( j M (i ) ) Ha Van akkor Melyik : = j j : = X (i) + 1

((Rosszvlaszts(i, j) )

vagy (nem f t ( i, j ) ))

Megmondja, hogy az i. sorozat j. eleme ft tulajdonsg-e

Eljrs vge
Rosszvlas zts (i, j ) : logikai amg

Ha ft nem teljesl, akkor mr mindegy, hogy fk teljesl-e, vagy nem.

A Rosszvlaszts fggvny ltalnos esetben a feladattl fgg fk fggvny kiszmolst jelenti.


Fggvny ciklus l :=1 l := l +1 ciklus vge Rosszvlas zts : = (l < i ) Rosszvlas zts vge

(l < i )

(f k (i ,

j , l ))

Megmondja, hogy az i. sorozat j. eleme sszeegyeztethet-e az t megelz l. elemmel.

Kivlogats visszalpses keresssel:


Eljrs(N, M, Db, Y ) X ( ) := 0 i :=1 Db := 0 Ciklus amg (i > 0 ) Ciklus amg (i > 0 ) s (i N ) Jesetvlaszts(i, Van, Melyik) Ha Van akkor X(i) : = Melyik i:= i +1 klnben X(i) : = 0 i:= i 1 Elgazs vge ciklus vge Ha i > N akkor Db := Db + 1 Y ( Db) := X ( ) i := i 1 Elgazs vge ciklus vge Eljrs vge

A kivlogats elfelttele az, hogy ltezik olyan sorozat, amely minden eleme megfelel az ft s fk fggvnyeknek. Ha egy megoldst tallunk, azt felrjuk Y-ba, s visszalpnk, mintha ez nem is lenne megolds.

73

Maximumkivlaszts visszalpses keresssel:


Eljrs (N, M, Y ) X ( ): = 0 Y ( ) := i :=1 Ciklus amg (i > 0 ) Ciklus amg (i > 0 ) s (i N ) Jesetvlaszts(i, Van, Melyik) Ha Van akkor X(i) : = Melyik i:= i +1 klnben X(i) : = 0 i : = i 1 Elgazs vge ciklus vge Ha i > N akkor i := i 1 Ha X > Y akkor Y := X Elgazs vge Elgazs vge ciklus vge Eljrs vge

A kivlogats ttelnek specilis esete, amikor valamilyen szempontbl a legjobb megoldst kell megadnunk. Ha olyan megoldst tallunk, amely jobb az eddigi legjobbnl (ami az Y), akkor azt felrjuk Y-ba, s visszalpnk, htha tallunk jobbat. Feladatok 8 vezr problma - Hnyflekppen lehet egy 8x8-as sakktbln 8 vezrt elhelyezni gy, hogy azok ne ssk egymst? (ltalnosabban megfogalmazva: NxN-es sakktbla, N darab vezr.) Tic-Tac-Toe - A feladat az, hogy generljuk le az sszes lehetsges Tic-Tac-Toe jtszmt. Ksztsnk statisztikt arrl, hogy hny vgzdik a kezd gyzelmvel stb. Sakk-huszr - Keressnk egy olyan huszrugrs-sorozatot, amely minden egyes pontot rint a sakktbln pontosan egyszer, s ugyan oda tr vissza, ahonnan indult. Labirintus - Adva van egy M*N-es labirintus, (1,1) a bejrat, (M,N) a kijrat. Keressnk egy utat a bejrattl a kijratig. Aknakeres - Adva van egy NxM-es tbla (1<=N,M<=15). A tbla minden egyes pontjn adva van az, hogy krltte hny akna tallhat. A feladat egy lehetsges aknatrkp meghatrozsa.

74

Pl. 4 6 232321 2 4 3 2 4 3 3 3 3 3 5 2 1 1 2 1 3 2 Megoldsa: 1 1 0 1 1 0 0 1 1 0 0 0 0 1 0 1 1 0 0 1 1 0 1 1

(Sorba bejrjuk a pontokat. Elszr azt felttelezzk, hogy ott akna van. Amint ellentmondsra jutunk, viszszalpnk, s a megfelel helyen tvltunk "nincs akn"-ra.) Mgikus lmpa - Adott MxN darab, mtrixszeren elhelyezett lmpa. Alapbl mindegyik lmpa ki van kapcsolva. A feladat az, hogy midegyik lmpt bekapcsoljuk. Ha az (i,j) lmpnak a kapcsoljt tkapcsoljuk, akkor az (i-1,j), az (i,j), az (i,j-1), az (i,j+1) s az (i+1,j) lmpa is invertldik. 6.2 Rekurzi s a ciklusok Krds az, hogy van-e olyan eset, amikor rdemes rekurzit hasznlni, ciklusok helyett, illetve lehet-e rekurzv algoritmusokat nem rekurzvv talaktani. Elszr megmutatjuk, hogyan kell trni ciklusokat tartalmaz eljrst rekurzvv: Elltesztel ciklus esetn
Eljrs Cikl(x) Ciklus amg Felt(x) = igaz Vegreh(x) Ciklus vge Eljrs vge Eljrs Rek(x) Ha Felt(x) akkor Vegreh(x) Rek(x) Elgazs vge Eljrs vge Eljrs Rek(x) Vegreh(x) Ha Felt(x)= igaz akkor Rek(x) Elgazs vge Eljrs vge

Htultesztel ciklus esetn


Eljrs Cikl(x) Ciklus Vegreh(x) amg Felt(x) = igaz Ciklus vge Eljrs vge

Az utols esetben egy megszmllsos ciklust runk t rekurzvv. A ciklus eltt adunk kezdrtket egy vltoznak s a ciklusban is mdostjuk a vltoz tartalmt a korbbi rtke s egy tmb aktulis rtke alapjn. (Pldul brmilyen sszegzs elvgezhet gy.)
Fggvny R(bemen paramterek) S:=0 Ciklus i:=1- tl N-ig S:= fn(S, A[i]) Ciklus vge R := S Fggvny vge

A fenti fggvnyben az Fn() tetszleges sszegz tpus fggvnyt jelent. A rekurzv vltozat gy nz ki:

75

Fggvny R ( bemen paramterek, i) Ha i>N akkor R:= kezdrtk Klnben R := Fn(A[i], R( paramterek, i+1) ) Elgazs vge Fggvny vge

6.3 Rekurzv adatszerkezetek Itt visszatrnk az adatszerkezetek tmra. A korbbi tanulmnyaink alapjn megismert adatszerkezetek kzl a lista, a binris fa, adatszerkezetek rekurzival is definilhatk. A lista defincija: I:=0 esetn a lista res, I>0 esetn a lista az j elem + az addigi listbl jn ltre. A binris fa defincija: I:=0 esetn a binris fa res, I>0 esetn a binris fa := Bal oldali binris fa + j elem + Jobb oldali binris fa. Ha mutat tpus vltozval oldjuk meg a kvetkez elem elrst, illetve a listaelem helyt a memriban is mutat adja meg, akkor a Lista^.rtk jelenti a listaelem rtkt, illetve a LISTA^.mutat a kvetkez listaelemre mutat. Ebben az esetben a lista bejrsa a kvetkez rekurzival oldhat meg:
Eljrs Bejrs (Lista) Ha Lista<>NIL akkor Ki: Lista^.rtk Bejrs(Lista^.mutat) Elgazs vge Eljrs vge

Ha a binris ft a listval analg mdon a kvetkezkppen jelljk: Fa^.rtk jelenti az aktulis elem rtkre mutat pointer, Fa^.Bal s a Fa^.Jobb pedig a bal rszfa illetve a jobb rszfra mutat pointer, akkor a fa bejrs a kvetkez:
Eljrs Balkozepjobb (Fa) Ha Fa<>NIL akkor Balkozepjobb(Fa^.Bal) Ki: Fa^.rtk Balkozepjobb(Fa^.Jobb) Elgazs vge Eljrs vge

Feladatok Valstsuk meg a LOGO-bl ismert geometriai, ismtld mintkat az PASCAL, C vagy algoritmusler nyelven! 6.4 Mikor hasznljunk, s mikor ne hasznljunk rekurzv algoritmusokat? A rekurzi mellett szlnak azok az esetek, amikor a feladat megfogalmazsa rekurzv. Korbban lttuk a Fibonacci szmokat. Matematikai elvek, szmsorozatok, sorozatok definilsa gyakran rekurzv, ekkor clszer hasznlni rekurzit. Ha egy feladatban felismerjk, hogy egy rsz megoldsa lnyegben ugyanaz, mint az egsz megoldsa (Quicksort algoritmus) Mikor ne hasznljunk rekurzit? A rekurzival szembeni szoksos kifogsok:

76

A rekurzi a ciklusnl bonyolultabb programszerkezet, s mindketten ugyanarra a clra szolglnak: valamilyen tevkenysgek ismtelt vgrehajtsra Mivel a szmtgpek nem tartalmaznak rekurzv lehetsgeket, ezrt amit szmtgppel meg lehet oldani, azt rekurzi nlkl is meg lehet oldani Nagy kzponti trignnyel jrhat Nagymrtk futsi idnvekedst okoz

77

Bevezet, avagy mrt kell mdszeresen programozni?

Hogyan kell nagyobb llegzet programozsi feladatokat megoldani? A programozs folyamata nem nyelv-specifikus, mindig ugyanazokon az elveken alapul. A programozs alapveten egyfajta gondolkodsi, algoritmizlsi, feladat-megoldsi eljrs. A programozs alkot munka. A programozs mdszernek trtnete annak a trtnete, hogy az egyszer pr soros alkalmazsok rstl hogyan jutott el a programozk trsadalma a manapsg mr ltez sszetett rendszerekig s hogyan lp tovbb taln a kzeljvben akr a mestersges intelligenciig. 7.1 A monolitikus programozs A programozs trgyalsnl nem kezdhetnk gy egy knyvet, hogy mr az kori grgk is ...., mivel az kori grgknek nem volt mg szmtgpk, de igaz ma mr trtnelem, de az 1950-es vektl kezdve azrt voltak mr ilyen gpek, voltak programozk s rtak programokat is. Az idszak mai szemmel egyszer programjai ms technikval kszltek, mint a maiak, sokkal kevsb voltak sszetettek, mint a maiak. Ezek a programok ltalban egy-egy programoz keztl szlettek. Azt lehetett mondani, hogy egy program egy programoz. Az elltand feladatok nem voltak tl bonyolultak, az egy programoz a megoldsok algoritmusait tltta, a programokat lekdolta, a programok ltalban lineris felptsek voltak, egy-egy elgazssal s egy-egy ciklussal. A programokat viszonylag knnyen s gyorsan meg lehetett rni. A programoknak nem volt bels struktrjuk. Ezek voltak a monolitikus programok s a programozsi mdszert monolitikus programozsnak hvjuk. 7.2 A kezd programoz - frontlis tmads mdszere A kezd programoz miutn megrt tbb apr egyenknt nhny tucat soros - programot, gyakran azt hiszi, hogy akkor nhny ezer soros programok a fejlesztse is ugyanaz lesz, mint a rvidebbek, csak tovbb tart. a monolitikus programozs idszaknl tart. A kezd programoz a programozs tanulsa sorn felcsipegeti a tudsmorzskat, a trkkket, a megszaktsi cmeket s a spci megoldsokat. Esetleg optimalizlsi megoldsokrl is hall, st dokumentlsrl is olvasott. Egy j, esetleg sszetettebb feladat megoldshoz is gy viszonyul, mint a korbban megrt rvidebb programokhoz. Nagy vonalakban tgondolja az adatszerkezetet, a megoldsi mdszert, amit a feladat elejn mg nem lt. Arra majd idben kitall valamilyen megoldst gondolja magban. Rvid tervezgets utn, elveszi a szeretett s jl megtanult programozsi nyelvet (4GL vagy egyb fejleszt eszkzt) s elkezdi rni a programot, az els sztl folyamatosan haladva az utols fel. Termszetesen, mivel a program hosszabb, mint szokott, ezrt gyorsan jabb s jabb eljrsokat tall ki a feladatok megoldsra, jabbnl jabb alacsonyszint rendszerkezel programrszletet dolgoz ki. Lehetleg a program minden rszvel foglalkozik frontlis tmads mdszere -, mivel csupa globlis vltozt hasznl, s az esetlegesen meglv programmodulok ezeken a vltozkon keresztl kommuniklnak. A program rsa az utols sor utni END.(csuk kapcsos zrjel vagy RETURN, stb.) szavakkal vgzdik. Mivel az gy megrt program ltalban nem mkdik, a fejleszt mgus hamarosan megunja az lland javtsokat. A programot javtani senki sem tudja, mg sem. A javtsok jabb problmkat vetnek fel. Viszonylag gyorsan lehet kis programokat fejleszteni, de a programot mr az els pillanattl a fejben kell tartania fejlesztnek. 7.3 A modulris programozs Kztudott, hogy egy ember egy bizonyos bonyolultsg utn a teendket nem tudja tltni, csak sztneire, megrzseire hagyatkozhat. A programokat sztnbl azonban nem lehet megrni. A modulris programozs azt jelenti, hogy a problmt olyan rszfeladatokra bontjuk, amelyeknek a bonyolultsga mr nem okoz gondot, amit mr egy modulban monolitikusan meg tud rni egy programoz, azaz cskkentjk a problma bonyolultsgt. 78

Ha tbb ember egytt dolgozik egy munkn, akkor az elvgzend feladatot szintn rszekre kell bontani, s a rszeknek az sszekapcsolst, sszekapcsoldst meg kell tervezni. Itt is a megfelel megolds az, hogy a programokat bontsuk modulokra. A rszek kztti egyttmkdsi felletet interface-nek hvjuk, a programozsi mdszert modulris programozsnak. A tovbbiakban felmerl a krds, hogy milyen elvek alapjn, hogyan bontsuk rszekre a programot? 7.4 Top - Down dekompozcis mdszer A Top Down mdszer abbl indul ki, hogy a feladatot nagyobb viszonylag egymstl fggetlen egysgekre bontja. Ezek az egysgek csak jl definilt interface-eken kommuniklnak egymssal, ms kapcsolat az egyes modulok kztt nem lehet. Az egyes rszek fejleszti kvlrl csak dokumentlt defincikat hasznlhatnak fel. Ha egy rszleg a fejleszts sorn rjn, hogy a msok ltal is hasznlt kls paramterek nem illeszkednek megfelelen az ltala megoldand feladathoz, akkor kt dolgot tehet: Sajt hatskrben kidolgozza a kls kapcsolatok olyan bels rtelmezst, amely mr a cljainak megfelel, de kifel csak a szabvnyos felleten rintkezik a tbbi modullal. A tbbi modul fejlesztjvel rtekezve javasol egy olyan megoldst a kzsen hasznlt kls paramterekre, amelyek mindenki szmra megfelelek.

A feladat legmagasabb szintje

A feladat rszekre bontva

A feladat tovbbi finomtsa Mind a kt mdszernek vannak elnyei s htrnyai. Az els esetben a krdses modul megvalstsa az optimlisnl bonyolultabb lehet, kvetkezskppen lassabb, esetleg a szksgesnl nagyobb erforrst lefoglal. Ebben az esetben a bels modul s a kls kztt lennie kell egy konvertl modulnak is, amely, amely a bels, megvltoztatott szabvnyok ltal adott eredmnyeket tfordtja a kls kapcsolatok ltal megkvnt formra. Tovbbi problmk forrsa lehet, ha a bels mdosts esetleg csak rszben teljesti a tbbi modul ltal megkvnt feltteleket. Ha a tbbi modul kvn vltoztatsokat a kzs paramtereken, akkor a bels nem egyeztetett megvalsts akadlya lehet a kzs, mdostott paramter rendszernek. Elnyre vlik a megoldsnak, hogy nem kvn egyeztetst a tbbi modul megvalstjval, bels gy maradhat, a mdosts a tbbieket nem felttlenl rinti. A msodik mdszer mindenkppen szimpatikusabb, ugyanis a mdostsok kzkinccs vlsa sorn az esetleges ms ltal kezdemnyezett mdostsok is tgondoltabb vlnak. Az egyeztets nha persze lehetetlen s mindenesetre tbb tgondolst kvn, de akkor ksbb kisebb a feltteltkzsek lehetsge, az egyes modulok kapcsoldsi pontjai tovbbra is szabvnyosak maradhatnak, a teljestmny az elvrhat optimlis kzelben mozog. A Top-Down mdszer lnyege, hogy a megfogalmazott rszfeladatokat tovbbi rszfeladatokra osztjuk, amelyeket tovbbi rszfeladatokra s gy tovbb. A megoldand problmt sszer hatrig bontjuk egyre alacsonyabb szint. Meddig folytassuk a rszekre bontst? ltalnos recept nincsen, addig, amg a modult mr programozi szinten tltjuk. Elfordulhat, hogy egyes modulokat lebontunk, mg ms modulokat kszen kapunk kidolgozva. A rszekre bonts folyamatban figyelni kell az egyenslyra. Trekedni kell arra, hogy a megoldand feladat minden rszn egyenletesen haladjunk elre a rszekre bonts folyamatban. Ezt az prhuzamos finomts elvnek hvjuk. Az elv alkalmazsnl a finomtssal egytt finomodik az adatstruktra is. Teht az adatmodell s az eljrsmodell egytt kzeledik a vgs cl fel. 79

Hogyan lehet kdolsnl a mdszert alkalmazni? Az elkszl program vzt ptjk fel, a bejelentkez ment rjuk meg, a f funkcikat megjelentjk a kpernyn. Ha pldul a program elejn megjelenik egy men, akkor megrjuk azokat a modulokat, amelyek a legfontosabbak, pl. fjl megnyits, keress, bezrs, a tbbi modult berjuk a programba, de csak res eljrsknt, azaz a nevt adjuk meg s az eljrs tveszi az esetleges paramtereket. Ha szksges, akkor elre megadott teszteredmnyeket ad vissza. A kdolsnl is figyelni kell arra, hogy a modulok megrst is lehetleg egyenletesen vgezzk. Ne fordulhasson olyan eset el, hogy a program egyes rszei kivlan mkdnek, mg ms rszek esetleg alig vannak megrva.
Megjegyzs: A Top- Down mdszer rvid kis programoknl nem igazn hatkony, mivel a vgeredmny csak viszonylag sok fejleszti befektets utn jelenik meg. Nagy projektek megalkotsnl viszont a kezdeti hosszabb elkszt munka meghozza a gymlcst. Kevesebb lesz a logikai, adatszerkezeti hiba, a nyelvi fggs s az improvizatv megolds a programban. ttekinthetbb lesz a program kd is. Knnyebb kialaktani a kvetkezetes nvmegadsi konvencikat is. A legtbb programozsi nyelven meg lehet valstani az ilyen fejlesztst, st a 4GL nyelvek egyenesen tmogatjk az ilyen fejlesztst azltal, hogy a megfelel objektumok megalkotsnl felknlnak elre megrt programmodul vzakat, amelyeket ksbb csak ki kell tlteni a megfelel tartalommal.

7.5 Down-Up kompozcis mdszer Ez a programfejlesztsnek egy msik sokat alkalmazott mdszere. Elssorban rvid, specilis programoknl clszer hasznlni. Lnyege, hogy alulrl felfel ptjk fel a programokat. Megrjuk az elemi ptkveket, algoritmusokat, majd azokbl ptjk ssze a magasabb szint struktrkat, majd a programot sszelltjuk. Ennl a mdszernl a programoznak teljes rltssal kell rendelkeznie a megoldand problmra. A rszletek megoldsnl gyelnie kell az esetleges kapcsolatokra is. Elssorban hardverkzeli programozsnl lehet hasznlni a mdszert, ahol is a legfontosabb a hardverhez illeszked programrszek megrsa, s ezek a programrszek esetleg alapveten befolysoljk a program tbbi rsznek mkdst is. A hardverrel kapcsolatos fejlesztseknl az is fontos, hogy a programoz viszonylag gyorsan meggyzdjn elgondolsai helyessgrl, ezrt olyankor nem is szokott, nem is akar komplett felhasznli felletet adni a programjnak, hiszen a egyszerbb paramterezs a programok funkciinak ellenrzsre ppen elegend. A hardverek programozsnl eleve lteznek olyan mdszerek, amelyek a strukturlt programozs szablyait felrgjk, n. trkkket alkalmaznak.

80

Megjegyzs: Illusztrciknt lljon itt egy plda: Assembly nyelven rt programok esetn tipikus, hogy a rvidebb kd rdekben egy RETURN parancsot lehagynak. Az albbi pldban egy meghvott rutin meghv egy msik eljrst: Szablyos plda Trkks plda

;belpsi pont .. .. JSR Msik_Eljaras_cm RETURN

;belpsi pont . JMP Masik_Eljaras_cim

A fenti pldban a RETURN utastst megsproltk, mivel a Masik_Eljaras_Cim-en kezdd rutin vgn feltehetleg van egy RETURN, ami majd visszaviszi a programunkat az eredeti hvsi helyre. Ez a trkk 1 byte megtakartst s ami mg fontosabb egy RETURN vgrehajtsnak megtakartst eredmnyezte. A RETURN parancs sorn tbb bels mvelet zajlik le, ami a program sebessge szempontjbl nem lnyegtelen, hogy hnyszor zajlik le.

A Down - Top mdszer igazbl nem alkalmas nagyobb rendszerek tervezsre, mivel a fejleszt elszr a rszletekkel trdik, majd abbl ptene egysges egszet, ami ltalban nehezen sikerl neki. 7.6 Vegyes mdszer A fent emltett kt mdszer tisztn a gyakorlatban csak nagyon ritkn jelenik meg. A leggyakoribb eset az, hogy a program fejlesztse sorn a program vzt a Top Down mdszerrel tervezik meg, s finomtjk ameddig a hardver-kzeli, rendszer-kzeli rszekhez nem rnek, ugyanakkor bizonyos sebessg- vagy memriakritikus rszeket a Down - Top mdszerrel oldjk meg. Az gy kialakult rszeket, gy illesztik ssze, hogy mind a Top Down mdszer sorn megalkotott egysges felletekbe beilleszkedjenek a Down Top mdszer konkrt megoldsai. 7.7 Tovbbi programozsi elvek A tovbbiakban olyan programozsi elveket fogalmazunk meg, amelyek akr a program algoritmusnak elksztse, akr a kdols sorn jl hasznlhat elvek.

7.7.1

Taktikai elvek

Niklaus Wirth egy cikkben az albbi elveket fogalmazta meg a programok modulokra val bontsrl: A prhuzamos finomts elvt. Korbban mr emltettk Visszatrs az skhz A programok fejlesztsnek brmely szintjn vilgoss vlhat, hogy az ltalunk vlasztott megolds nem vezet clhoz. Ekkor olyan pontra kell visszatrni a programozs brmelyik szakaszban, ahonnan lnyeges vltoztatst tudunk vgrehajtani az eredeti megoldshoz kpest. A dntsek elhalasztsnak elve A programozsi feladatok gyakran annyira sszetettek, hogy a programoz nem lthatja t a megolds minden aspektust. Ekkor kell felhasznlni az elvet. Mindig gy programozzunk, hogy egy idben csak egy problmt oldjunk meg.

81

Dntsek nyilvntartsnak elve Ha a program fejlesztse kzben egy ponton szktjk a tovbbiakban egy adat rtelmezsi tartomnyt, vagy a program tbbi rszre is kihatssal lev dntst hozunk, akkor azt a dnts pillanatban dokumentlni kell s a tovbbiakban az illet adatokra val minden hivatkozs sorn figyelembe kell venni az rtelmezsi tartomny szktst. Pldul, ha egy adatbevitel sorn csak a pozitv egsz szmok jhetnek szba, akkor az algoritmusban s a kdolsnl is a bevitel helyn kell a bevihet adatok krt szkteni. Az adatok elszigetelsnek elve Egy program fejlesztse sorn a programot egymssal kapcsolatot tart struktrkkal valstjuk meg. A program futsa kzben felhasznlt adatok kztt vannak olyanok, amelyek a teljes programra tartoznak, s vannak olyanok, amelyek csak egy rszfeladat megoldsa kzben szksgesek. Azokat az adatokat, amelyeket a program brmely rszben fel akarunk hasznlni globlis adatoknak kell definilni s azokat, amelyeket csak egy programmodul belsejben hasznlunk, loklisaknak kell definilni. A ciklusokban, megszmllsokban s egyb hasonl helyeken ignybe vett vltozkat munkavltozknak hvjuk s a programozs minden szintjn ragaszkodni kell az azonos elnevezsekhez s termszetesen mindig loklis vltozknak kell ket definilni. Nylt architektra elve Egy programozsi feladatot igyekezni kell mindig a lehet legltalnosabban megfogalmazni. Ez a ksbbiekben a program mdostsnak, karbantartsnak knnytst eredmnyezheti. A dnts elrejtsnek elve Mindig csak olyan finomtst hozzunk, amelynek a kihatsa minl kisebb terletre korltozdik, loklis. Ha vltoztatnom kell valamit a programomban, akkor annak minl kisebb kihatsa legyen.

7.7.2

Taktikai elvek

A technolgiai elveket az algoritmusok rsnl s a kdolsnl is jl hasznlhatjuk. Bekezdses struktrk hasznlata Akr algoritmust runk, akr kdolunk az elkszl programszveg olvashatsga elsrend felttel. A ciklusok, elgazsok, eljrsok magjt mindig clszer egy tabultorral beljebb rni s a struktra azonos szintjn levket azonos oszlopban elkezdeni. Bartsgos programok rsa A programoknak a felhasznl fel olyan kpet kell mutatniuk, amely a felhasznl kegyeit keresi. A programnak magrl mindig el kell mondania azt a szksges informcit, ami elegend a kezd felhasznlnak is a program hasznlathoz. A kpernyn keresztli adatbevitelnl megfelel tjkoztat szvegnek kell megjelennie, tovbb a kpernyre kirt adatoknak is a megfelel kontextusban kell megjelennie. Megjegyzsek hasznlata A programszvegek algoritmusok rsa kzben szksges a szvegbe olyan rszel bersa, amely a nehezebben kvethet programrszek mkdst szavakkal is megmagyarzza. Ez elengedhetetlen, mivel ltalban a programok fejleszti sem emlkeznek a program minden rszre megfelelen pr hnappal a fejleszts utn. A komment szmukra is megknnyti a javtsokat, illetve azok szmra is, akik korbban nem foglalkoztak az adott feladattal. Mentechnika hasznlata Azt hiszem ma mr minden kisebb feladatot vgrehajt programnak is lehet menje vagy menrendszere. A felhasznl dolgt megknnytjk vele.

82

Bolondbiztossg Minden jl megrt program az adatok bevitelekor leellenrzi, hogy a bevitt adat megfelel-e a programban elrt rtktartomnyoknak, s ha nem, akkor megfelel zenet utn jra bekri az adatokat. A j program oly mdon kezeli a programokat, hogy hibs adatbevitel esetn se szll el. Azt szoktk mondani, hogy ha egy 6-8 ves gyerek egy programot nem tud hibs lellsra brni, akkor tekinthet a program bolond-biztosnak. A modulris programozs felhasznlsval a programoz jl mkd programokat rhat de ezt semmi sem garantlja.

83

Strukturlt programozs mdszere

8.1 A modulris programozs elnyei A modulris programozssal rt programok elnyei nyilvnvalak Rszprogramok knnyen ttekinthetk Knnyebben megrhat Knnyebben tesztelhet Tbb modul rhat egy idben (prhuzamos problmamegolds) Knnyebben javthat A modulok szabvnyosthatk Modulknyvtrakban trolhatk jrafelhasznlhatk A fenti elvek alkalmazsval mr hasznlhat programokat lehetett rni, de nem lehetett bizonythatan helyes programokhoz jutni. A 70-es vek elejn prhuzamosan, de egymstl fggetlenl tbb programozsi irnyzat alakult ki, amelyek a strukturlt programozs kialakulshoz vezettek 8.2 Dijkstra: Hierarchikus programozs A strukturlt mdszertan legabsztraktabb vltozatt Dijkstrk dolgoztk ki. Hierarchikus programozsnak hvtk ezt a mdszert. A strukturlt programozs tveszi a modulris programozs top-down mdszert. A megoldand feladathoz a program egy absztrakt programsorozat hatrrtkeknt alakul ki. Ebben a sorozatban egy ksbbi absztrakt program egy t megelz program egy vltoztatsval ll el gy, hogy tekintjk valamely tevkenysgt, s fokozatosan finomtjuk. A megelz program valamely tevkenysgt kifejtjk (rszfeladat). A sorozat minden absztrakt programja mellett ott van egy absztrakt szmtgp, amelynek utastskszlete megegyezik a programban hasznlt utastsokkal. Vgl egy konkrt gp konkrt utastskszletre kszl el a program. 8.3 Mills: Funkcionlis programozs Ugyanaz az elve, mint a Dijkstra fle programozsnak, csak itt az eljrsmodell az elsdleges, az adatmodell msodlagos. Tevkenysg mellett osztja szt a problmt rszproblmkra. A feladat hatrozza meg a program szerkezett. 8.4 Wirth: A Programok rszekre val bontsnak elvei Niklaus Wirth a programozs modulokra val bontsnl hasznlt elveket fogalmazott meg 8.5 Jackson s Warnier: Adatorientlt programozsi mdszertan A top-down mdszert vallja, de az adatmodell az elsdleges. Ha van egy problma, fel kell dertenem az ltala rintett adatok szerkezett. A program szerkezett az adatok szerkezete hatrozza meg. Htrnya: csak adatfeldolgozsi terleten alkalmazhat. 8.6 Boehm s Jacopini 66-ban publiklnak egy cikket, amelyben lerjk, hogy minden algoritmus felpthet a kvetkez hrom vezrlsi szerkezet segtsgvel: Szekvencia (Soros program) Szelekci (Elgazst tartalmaz program) Iterci (ciklust tartalmaz program) 1968-ban Mills 68-ban bebizonytotta a fenti lltst s az albbiakkal egsztette ki: Egy program akkor j, ha a szerkezete lerhat egy szekvenciaknt, amely szekvencin bell a fenti hrom vezrlsi szerkezet megengedett. Egy szekvenciaelembe a klvilgbl egy ponton lehet belpni s egy ponton kilpni.

84

Ha egy program ilyen, akkor az strukturlt. Kellemesen dokumentlhat, mdosthat. A Jackson fle elv azon alapul, hogy az adatszerkezetek szintn lerhatk e hrom vezrlsi szerkezet segtsgvel, ugyanis egy llomny nem ms, mint rekordok itercija, egy fix rekord pedig mezk szekvencija. Az adatszerkezetek meghatrozzk a program szerkezett. A fenti elvek nem engedik meg a goto utasts hasznlatt, ugyanis a 2. pontot srtik. Ennek ellenre az utasts a legtbb programozsi nyelvben megengedett maradt, br hasznlatt csak specilis esetben engedlyezik s nem ajnljk. A strukturlt programozs mdszertana a 70-es vek elejn analzis mdszertann, rendszerfejlesztsi, tervezsi technolgiv vlik. A 1970 - 1980-as vek uralkod mdszertana. A strukturlt programozs a modulok s az adatstruktrk sszefggst tartja fontosnak a program tervezse sorn.

85

Objektum-orientlt programozs OOP

A felhasznli programok a 70-es vekben egyre bonyolultabbak lettek, s a programfejleszts nll ipargg vlt. A fejlesztk azt vettk szre, hogy a programfejlesztsi projectek tlagosan 70%-kal tovbb tartottak, mint a tervezett s tlagosan csak 30%-uk vlt sikeress. Ez oda vezetett, hogy az abban az idben mr meglv objektum orientlt programozsi lehetsgeket kezdtk kutatni. A jegyzetben korbban mr megismerkedtnk az osztly fogalmval, mint adatszerkezettel s annak pldnyostott formjval az objektummal. Az albbi rvid felsorolssal az OOP elterjedsnek llomsait szeretnnk felvzolni: 1969 Alen Key diplomamunkja sorn egeret hasznlt, ikonokat, ablakokat s menrendszert 1972 konkrt elkpzelsek OOP s SMALTALK programozsi nyelvrl.(Dahl Nygaard) 1981 Eiffel + eljrsorientlt nyelvek egy rszben OOP eszkzrendszert vezettek be 1980-as vek vgn a C programozsi nyelv bvtseknt ltrejtt a C++, majd a Pascalt is kibvtettk OOP elemekkel. Az 1990-es vek kzepn megszletett a Java, teljesen OOP nyelv. 1990-es vek vge. Majdnem minden modern programozsi nyelvnek megszletik az Objektum orientlt kiterjesztse. Az OOP nyelvek nem matematikai elveken, inkbb a bonyolultsg nvekedsnek gyakorlati kezelse cljbl jttek ltre. 9.1 Az OOP alapja Az adat s a funkcionlis modell nem elvlaszthat. Az adatok s a rajtuk vgrehajthat mveletek elvlaszthatatlanok. Ennek a kvetkezmnye az egysgbezrs.

9.1.1

Az Objektum

Az Objektum a vltoz ltalnostsa. Az objektumnak van llapota (attribtum), az llapotot tetszlegesen komplex adatok segtsgvel rjuk le (adatelemek + szerkezet) viselkedse: ezt mdszereknek (metdus) hvjuk (fggvnyek s eljrsok rjk le.) A metdusok az albbi kategrikba soroklhatk az objektumok llapotnak lekrdezsre val metdus (az rtk lekrdezse) egyik llapotbl msik llapotba viv metdus (rtkadsok) Egy objektum csak nmagval azonos s minden mstl klnbz. Felmerl a krds, hogy ha kt objektum azonos llapotban van, milyen a viszonyuk egymssal: Azonos llapot kt objektum-e Ugyanarrl az objektumrl van-e sz

9.1.2

Az osztly

Az Osztly az adatttpus fogalmnak ltalnostsa. Az azonos attribtum s metdus objektumok egyttese. Az objektumok az osztly pldnyai. Amikor egy osztly egy konkrt pldnyt ltrehozzuk a programban, ezt hvjk pldnyostsnak.

9.1.3

Egysgbezrs

Egysgbezrs - A hatskr fogalmnak ltalnostsa. A struktrlt programozsnl a loklis- globlis vltozk krdse volt.

86

Olyan eszkzrendszer, mely segtsgvel megmondhatom, hogy az osztly attribtumaibl s metdusaibl kvlrl mi ltszik. (Igazi OOP-nl attribtumok ltalban nem ltszanak, a metdusok kzl csak a publikusak, s csak a specifikcis rszk ltszik) Absztrakt osztlyrl beszlnk, amikor a specifikcit s az implementcit sztvlasztjuk.

9.1.4

rkls

Az rkls a korbbi programozsi mdszertanokban nem ltezett. Az rkls az jrafelhasznlhatsg kritriumval jelent meg. szuper osztly elsdleges a kapcsolatban, alosztly csak hozz kapcsoldhat. Alosztly egy szuperosztly leszrmazottja rkli a szuperosztly attribtumait s metdusait Az alosztlynak j attribtumokat s metdusokat definilhatunk Elhagyhatunk, tnevezhetnk attribtumokat s metdusokat Megvltoztathatjuk a lthatsgi viszonyokat Fellbrlhatja a metdusok implementciit. Az rklds lehetsgei: Egy alosztlynak egy szuperosztlya lehet (1-szeres rkldst tmogat nyelvek) A hierarchia egy Fval rhat le. Egy alosztlynak tbb szuperosztlya lehet (tbbszrs rkldst tmogat nyelvek) A hierarchia grffal rhat le.

9.1.5

Polimorfizmus

Polimorfizmus (tbbalaksg) Pldny polimorfizmus (egy konkrt hromszg pldnya a hromszg osztlynak is s a poligon osztlynak is.) Metdus polimorfizmus: Az alosztly jraimplementlhat egy metdust krds melyik kd fut le. Ezt a kts mondja meg.

9.1.6

Kts

Korai kts: fordtskor eldl, hogy a meghvott mdszerhez melyik kd tartozik. Ksi kts: futs kzben dl el, hogy a metdusspecifikcihoz melyik kd tartozik. Minden pldny tudja melyik osztly kzvetlen pldnya (aktulis pldny) Minden pldny egy jl definilt pldny aktulis pldnya (elny, pl. Ha egy mdszer (A) hv egy msikat (B) a msikat jraimplementlom s meghvom (A)-t. ez esetben az jraimplementlt fut le az els esetbe az eredeti)

9.1.7

zenet

Az zenet az objektumok kztti kapcsolat ltalnostsa s megoldsa. Egy program fejlesztsekor osztlyokat definilunk, ltrehozzuk az rkldsi hierarchikat. majd az osztlyokbl ltrehozom az objektumokat. A program futsa kzben az objektumok mkdnek, hatnak egymsra, zeneteket kldenek egymsnak, vlaszolnak az zenetekre. Az zenet valjban egy metdus meghvsa (eljrs vagy fggvnyhvs)

9.1.8

Az Objektum orientlt nyelvek fajti

Tiszta OO nyelvek Csak az objektumorientlt eszkzrendszer van Van standard osztlyhiearchia. A programoz mindig ezt a hiearchit bvti, ezekhez fz objektumokat... Minden eszkz objektum (az osztly, a mdszer s az attributum is) 87

Ilyen programozsi nyelvek Smalltalk, Eiffel, Java Hibrid nyelvek Eljrsorientlt nyelvek objektumorientlt eszkzrendszerrel kiegsztve. Rszben vagy teljesen megvalstjk az OOP lehetsgeit C++, PHP, Visual Basic, Borland Pascal, Delphi Objektumon alapul nyelvek

88

10 Nagyobb rendszerek fejlesztsnek lpsei


10.1 A rendszer tervezse

10.1.1 Egy nagyobb rendszer fejlesztsnek megkezdse, elksztse


Nagyobb, tbb hnapos vagy ves munkt is ignyl rendszerek tervezsnl figyelni kell sok olyan szempontra is, amely nem merl fel a rvidebb programok fejlesztsekor. Elszr is a nagy rendszer fejlesztje leggyakrabban nem sajt szrakozsbl ll neki a rendszer kifejlesztsnek. A rendszer fejlesztshez kell egy Megrendel s a Fejleszt. A Megrendel egy bizonyos clt el szeretne rni a fejlesztend szoftverrel, ltalban a munkjt szeretn knnyebb tenni, amire esetleg mg pnzt is hajland ldozni. Itt van az els buktat. Sajnos a szoftverek felhasznli ltalban hozz vannak szokva, hogy az ltaluk hasznlt programok szinte ingyen llnak rendelkezskre, hiszen szerte a vilgon az illeglis szoftverhasznlat elterjedt jelensg. Az illeglis szoftver ingyen van. Azt is tudjk, hogy egy nagyobb ltalnos cl programcsomag, pl. egy Office bizonyos esetekben a CD rnl nem kerl sokkal tbbe, gy azt hiszik, hogy egy szmukra egyszernek tn programrendszer kifejlesztse is kb. ugyanaz a nagysgrend. Nem akarunk most itt gazdasgi szmtsokba bocstkozni, de egy multinacionlis szoftverfejleszt cg azrt adja olyan olcsn a termkt, mivel tbb milli pldnyt ad el. Attl annak a fejlesztse tbb szzezer mrnkrba kerlt! A Fejleszttl az elzetes puhatolzsok sorn rat krnek. A Fejleszt ekkor mg nem tudja megbecslni a munka mennyisgt, ezrt rdemben nem is tud nyilatkozni, nem is szabad nyilatkoznia. A munkjnak rtke a tervezsi folyamat sorn vlik mind a kt fl szmra vilgoss. A fejlesztsi folyamat rtkt tbb fle mdon lehet megkzelteni. A fejlesztshez szksges id alapjn. Ekkor a fejlesztsre fordtott munkaidt beszorozzuk egy egysgnyi radjjal s gy kijn a fejleszts rtke. Ez a dj a Megrendelknek ltalban sok, gy nem jhet ltre a kapcsolat. A megrendels rtknek fels becslsre megfelel. A fejleszts sorn ltrejv megtakarts alapjn. Ez konkrt megrendels s konkrt fejleszts esetn a megrendels eltt nem hatrozhat meg egzaktul. A becsls sorn brmelyik fl rosszul jrhat. Nem clszer hasznlni ezt a mdszert, csak akkor, ha konkrt szmokkal kimutathat az eredmny. Megri-e a fejlesztnek. A fejleszt megbecsli a fejlesztsi erforrsokat s megvizsglja, hogy mennyirt ri meg neki a fejleszts. Alapul azt veheti, hogy ha nem fejlesztene, akkor az alatt az id alatt mekkora rtket tudna termelni. Ez a legbizonytalanabb mdszer s gyakorlatilag alku krdse ezen az alapon rtket mondani. Taln a legjobb mdszer, hogy a fejleszts teljes volumenre a fejleszts elejn nem mondunk semmilyen vgleges rat, hanem a fejleszts adott lpseihez ktnk rtket, gy a megolds els teljes, dokumentlt terve egy sarokpont. Annak az elfogadsra adunk rat. Ekkor mr amgy is elgg krvonalazdnak a feladatok. Az els tesztvltozat tadsra, a javtott vltozat tadsra majd a vgleges vltozat tadsra temezzk a tbbi rtkelst. Minden egyes nagy lpst dokumentlni kell. Szakrt A fejleszts sorn a Megrendel rszrl is sok munkt kell befektetni a kvnt cl elrshez. Az els kvnalom a Megrendelvel szemben, hogy jelljn ki egy szemlyt (vagy tbbet), akik a fejleszts megvalstsa sorn a Megrendel rszrl Szakrtknt mkdhetnek, azaz rltsuk van a megoldand feladatra, a Fejleszt feladatra vonatkoz szakmai krdseire vlaszolni tudnak, s a fejleszts sorn elkszl rszeredmnyeket tesztelni is tudjk (kpesek r). Elvrhat a Szakrttl, hogy szmtstechnikai krdsekben a megfelel szinten otthon legyen, hiszen sokszor olyan technikai jelleg krdseket is el kell tudnia brlni, amelyeknek a konkrt feladathoz nem vagy csak tttelesen van kze. Alapkvetelmny, hogy a Fejleszt technikai krdsekben csak a Szakrtvel konzultl. A megrendel oldaln tbb szemlynek is lehetnek tletei. Ezek az tletek a tervezs s a project elrehaladsa sorn sokszor mr megvalsult rszekkel kerlnek ellenttbe. A Fejleszt ezekre az tletekre csak akkor reaglhat, ha a Megrendel rszrl a Szakrt mr eldnttte, hogy az tlet beleillik-e az addig megvalsult elkpzelsekbe vagy akadlyozza a megvalsulst. A Szakrt a szr, ami szmra nha meglehetsen kellemetlen helyzetet teremthet. 89

A Fejleszt is a Szakrtnek adja t az elkszlt rszeket s a Szakrt dolga, hogy az elkszlt rszeket tvegye s tesztelje. A folyamat vgn a szakrt lesz az a szemly (lesznek azok a szemlyek), aki a rendszert rti s bizonyos hibk esetn javtani is tud. Bizalmas adatkezels Az elkszt megbeszlsek alatt s ksbb is a Fejleszt bizalmas adatok, tesztadatok birtokba juthat. Azokat teljesen megbzhatan, bizalmasan kell kezelnie. Az els megbeszlsek A Fejlesztnek a munka elejn tbb alapos megbeszlst is kell folytatnia a Megrendelvel, annak tisztzs vgett, hogy mi is a pontos feladat. Az els megbeszlsek ltalban csak tapogatz jellegek, amikor is a felek tisztzzk a Megrendels feltteleit, s krvonalazzk a feladatot. Gyakori eset, hogy a Megrendel s a Fejleszt nem rti egymst, mivel az egyik flnek nincs meg az a fajta tudsa, ami msiknak. Az els megbeszlsek idejn le kell tisztzni azokat a fogalmakat, amikrl a fejleszts sorn sz lesz, mindenkinek le kell rni minden olyan informcit, ami a kzs munkt segti. Gyakran a feladat vglegesen csak a msodik, vagy mg ksbbi konzultcikon tisztzdik. gyvitelszervezs Egy gyviteli problma szmtgpes megvalstsa gyakran a Megrendel gyviteli rendszernek az jraszervezst is maga utn vonja. Ha ennek a szksgessge felmerl, akkor a fejlesztnek ragaszkodnia is kell az tszervezshez. Az els terv Ekkor szletik meg az els terv a feladat megoldsra. Ez a terv a Megrendel szmra minl rszletesebb, elssorban vizulis informcikat tartalmaz terv. Abbl kell kiindulni, hogy a Megrendel alapveten a sajt problmit ltja, a sajt elkpzelseit rti. Az els terveknek olyanoknak kell lennik, amit a megrendel megrt, azaz azt a nyelvet kell hasznlni, amit is rt. Termszetesen a fejlesztnek a sajt nyelvezett s fogalomrendszert is a terv mg kell tennie, st azt hasznlnia is kell.

10.1.2 A rendszer tervezse 10.1.2.1 A programspecifikci


Bemen adatok input A tervezs sorn meg kell hatrozni a rendszer bemen adatait. Meg kell llaptani, hogy milyen bizonylatok, milyen adatai szolgltatnak adatokat a fejlesztend rendszer szmra. Meg kell llaptani, hogy ezek az adatok nem tartalmaznak-e ellentmondst, arra figyelmeztetni kell a megrendelt. Meg kell llaptani azt is, hogy nincsen e tbbszrs adatbevitel a rendszerbe. Ezt, ha csak lehet, el kell kerlni. Meg kell llaptani, hogy a bevitt adatok mindig egzaktak maradnak-e. Gyakori, hogy az adatokat a kzi nyilvntartsokban szptik vagy becslik. Az ilyen adatkzls nem eredmnyezhet j vgeredmnyeket sem. Az adatok jsga rdekben clszer szem eltt tartani a kvetkezket: Clszer az adatokat bevitelkor valamilyen egysges formtumra konvertlni, klns tekintettel a keressekben, szrsekben s indexekben szerepl adatokra. Az ilyen adatokat clszer Nagybets formban trolni s a bevitelnl eleve gy konvertlni. Hacsak lehetsges a program az adatokat elre megadott listkbl vrja. Clszer meghatrozni a ktelezen kitltend adatok krt s a programozs sorn a megfelel kddal kell biztostani a mindenkori ktelez bevitelt.

90

Trzsadatok A trzsadatok azok az adatok, amelyek a rendszer hasznlata sorn nem, vagy alig vltoznak. Ennek megfelelen a trzsadatok bevitele a tbbi adatok beviteltl eltr md lehet. Adott esetben clszer meglv adatllomnyokat felhasznlni erre a clra, vagy kln segdprogramokat szerkeszteni erre a clra. A trzsadatok bevitele is a munka rtknek egyik paramtere. A trzsadatokat nem clszer fixen bepteni a vgleges rendszerbe, mert azok az idk folyamn vltozhatnak. Kimen adatok Output A kimen adatok ltalban kpernyk, kpernys- s nyomtatott listk formjban jelennek meg. A kt fle listnak lehetleg azonos, vagy hasonl formban kell megjelennie. A listk formjukban ttekinthetknek s logikusaknak kell lenni.

10.1.2.2 Kpernytervek
Nem hangslyozhat elgg, hogy a majdani felhasznl mennyire mskppen gondolkodik, mint a fejleszt. Ennek megfelelen a legegyszerbb formban a felhasznl a kpernyterveket rti meg. Szmra a program tervezete elssorban a kpernyterveket jelenti. Ha azon a feliratok megfelelen vannak elhelyezve, az adatok pedig a feliratoknak megfelelen jelennek meg, az a felhasznl szmra maga a tkly. ppen ezrt a listkon nem szabad technikai jelleg feliratoknak, utalsoknak megjelenni, hanem a felhasznl fogalmait kell hasznlni. Clszeren a menrendszereket is gy kell megszerkeszteni, hogy azok a felhasznl fogalmainak megfeleljenek. Nem szabad olyan fogalmakat erltetni, amelyek a felhasznlk szmra zavart okozhatnak, de a felhasznlt nem szabad tudatlannak tekinteni. Azokat a fogalmakat, amelyeket a mindennapi letben hasznl, ha azok esetleg szmtgpes fogalmak is, tudottnak lehet tekinteni.

10.1.2.3 Adatszerkezetek tervezse


A fentiek alapjn mr elkszthet a rendszer adatszerkezete. Az adatszerkezetekre ltalnos szably nincsen. Az adatszerkezet az adatok trolsra szolgl keret. Az adatszerkezet tervezsekor ajnlatos a kvetkez elvekre figyelni. Egyszeres adatbevitel, ne kelljen bevinni ugyanazt az adatot tbb helyen vagy tbb fle mdon. Egyszeres adattrols, ne legyen egy adat tbb helyen trolva, s A trzsadatokat gy kell tervezni, hogy lekrdezsekben, listkban jl megjelenthetek legyenek. Ha csak lehet, clszer kdokat hasznlni szvegek helyett. A kdok szerkezett rgzteni kell, esetleg formai elrsokat is be kell vezetni, hogy a kdok mindig megfelel formtumak legyenek. Inkbb szveg s szm keverkt hasznljuk, mint csak szmot. Egy adott mez mretnek meghatrozsakor arra kell figyelni, hogy szvegek esetn a mez mrete elegend legyen a tipikus adatok trolsra a kivtelesen extra mret adatokat lehet rvidteni. Figyelni kell arra is, hogy bizonyos utastsok, adatbzis-kezel parancsok a teljes adattartalmat tolvassk, hogy a megfelel eredmnyt szolgltassk. A tl nagy mezk az adatelrst lasstjk esetenknt jelentsen. A numerikus mezk mrete az elrelthat legnagyobb rtket tudja fogadni, ezen bell numerikus eredmnymezk esetn figyelni kell a nagysgrendek ugrsra, tovbb a megfelel mennyisg tizedes helyre. Megjegyzs tpus mezket ne hasznljunk, ha nem muszj. A megjegyzs majdnem minden nyelven feleslegesen sok helyet foglal el, st sokszor a megjegyzs adatbzis csak n. Megjegyzsben keresni, indexelni, szrni krlmnyes. Logikai mezket lehet hasznlni, de figyelni kell arra, hogy mi is lesz a mez rtelme.

10.1.2.4 sszefggsek az adatok kztt


Gyakori, hogy a klnbz adatok sszevetsbl szmtott j adatok jelennek meg a programban. Kln krds, hogy az gy ltrejv j adatokkal mi legyen, trljk ket, vagy a programra bzzuk az esetleges jraszmolst. Olyan szmtott adatok esetn, ahol az eredmnyt idrendben egy adott llapotban rgzteni kell, mint pldul importru esetn az rfolyamot, a szmtott adatokat rgzteni kell, s naplzni kell azokat a 91

krlmnyeket itt pldul a valutarfolyamot ahogyan a szmtott adat ltrejtt. Ha a kiindulsi adatok s a kiszmts mdja nem vltozik, akkor a szmtott rtk mindig jra elllthat, gy az rtket nem kell rgzteni, elegend csak a kiindulsi rtkeket trolni.

10.1.2.5 Felhasznli fellet user interface


Mivel ma mr a programokat szles krben hasznljk, sokszor nem hozzrt felhasznlk is, ezrt rendkvl fontos a programok felhasznli fellete. Ez indokolja azt, hogy a program tervezsekor klns figyelmet fordtsunk a felhasznli felletre. ltalban egy program indtsra a program egy adott viselkedssel vlaszol. Ez a program alapbelltsa vagy idegen szval default belltsa. A fejlesztnek meg kell hatrozni a default tulajdonsgokat, amelyeket a felhasznl mdosthat. 10.1.2.5.1 Paramteres indts Ekkor a program a parancssorban megadott paramterek hatsra a default viselkedshez kpest ms tulajdonsgokkal kezd mkdni. A paramterek parancssori hasznlata a nagygpes opercis rendszerektl ered. A PC-s vilgban a UNIX opercis rendszeren t a DOS-os programok is tvettk a paramterek hasznlatt, majd a Linux rendszerek alapveten megmaradtak ilyeneknek. Az ilyen programok hasznlatnak megtanulsa felesleges terhet r a felhasznlra, abszolt bartsgtalan a kezelfellet. A hozzrt felhasznl viszont gy tudja a programok legmegfelelbb belltsait hasznlni s gy tudja ms programok ltal meghvva a kvnt viselkedsre brni a legegyszerbben. Ez a fajta felhasznli fellet mg a grafikus rendszerek megjelensvel sem ment ki a divatbl. A paramterek egyike a /?, ?, vagy a /h. Ezek a paramterek szoks szerint a programok hasznlatrl nyjtanak segtsget. A paramteres indts esetn htrny lehet a nem megfelel paramterek feldolgozsa. Mi trtnjen nem megfelel paramterek hasznlata esetn. ltalnos szably nem ltezik. Olyan vlaszt kell adni, amely szveges formban tjkoztatja a felhasznlt a hibrl s annak megoldsi mdjrl. Az ilyen hibazenet nem j: Runtime Error, errorcode 1201 in line 1324. Ha a programoz ezt a mdszert hasznlja, akkor vigyznia kell, hogy: Csak azokat a paramtereket fogadja el a program, amelyek a program viselkedsn vltoztatnak; A paramterek rsmdja tetszleges legyen, azaz kisbet nagybet nem szmthat; A DOS-ban a paramterek eltt szoksosan a - vagy a / jel ll, lehetsg szerint tartani kell ezt a konvencit; A DOS-ban bizonyos jelek nem megengedettek a paramterekben ezeket nem szabad hasznlni; A paramterknt adott karakterek, szavaknak utalnia kell a megadott funkcira, anyanyelven vagy angolul, radsul a nyelv krdsben kvetkezetesen az anyanyelvet vagy az angolt kell vlasztani, keverni nem lehet ket. Clszer fenntartani egy paramtert egy rvidebb vagy hosszabb HELP kiratsra. A HELP-nek akkor is clszer megjelennie, ha hibs paramterezst adtunk a programnak; Ha megoldhat, akkor clszer a paramtereket tetszleges sorrendben bekrni s clszer a paramterek hinyban valamilyen default viselkedst elrni. Ez a akr a prbeszdes adatbekrs is lehet. A paramteres fellet elny, ha az adott opercis rendszerben automatizlni akarunk folyamatokat. Ily mdon a windows rendszerek is meglehetsen sszetett Batch programozsi nyelvvel rendelkeznek. 10.1.2.5.2 Prbeszdes fellet A program az indts utn megkrdezi a beviend paramtereket, majd az eredmnyt kirja kpernyre, ltalban a bevitt adatok al. Ez a fajta prbeszdes, zengets interface a nagygpes vilgbl trkltt, ma is meglv kezeli md. Ezek a programok egyltaln nem tekinthetk bartsgosnak, a felhasznlnak knny rossz vlaszokat adni a feltett krdsre. Csak nehezen tallhatk meg a programban adott lehetsgek. Ha adatbevitelkor hibs tpus adatot visznk be, elfordulhat, hogy a program futs kzbeni hibval elszll s a felhasznl csak tallgathat, hogy mi volt a hiba oka.

92

Kezd programozk ltal gyakran hasznlt mdszer. Tanulskor a legegyszerbben gy lehet adatbevitelt ltrehozni a program rszre. Ha a programoz mgis ezt a felletet vlasztja, akkor vigyznia kell: A adatbevitel sorn a bevitt adatok tpust ellenrizze a program s a bevitelkor figyelmeztessen a tpus-, vagy nagysgrendi hibkra Hibs adatbevitel esetn knlja fel az jraprblkozs vagy a kilps lehetsgt A beviend adatok eltt mindig rja ki pontosan, hogy mit vr a felhasznltl, s egyrtelmen jellje meg az adatbevitel helyt is a kurzorral Ha az adatbevitel sorn eldntend krdst vagy krdseket tesznk fel, akkor mindig ugyanazokat a karaktereket vlasszuk a vlaszadsra lehetleg a vlasz Igen/Nem anyanyelvi esetben I vagy N, angol Yes/No esetben pedig Y/N legyen kisbet, nagybet ne szmtson Az eldntend krds mindig pontosan legyen megfogalmazva s legyen kirva a lehetsges vlasz is; Ne fogadjon el ms karaktereket az eldntsnl A bevitt adatok utn a program valamilyen vlaszt adhat, ez jl elklnlve jelenjen meg a kpernyn, lehetleg a kvetkez sorok egyikben, a sor elejn kezdve Nem clszer szneket hasznlni, csak ha valamirt ki kell emelni egy sort. A sznek a monokrm kpernyn esetleg nem ltszanak elg jl. A fenti kt mdszert nagyon gyakran egytt alkalmazzk DOS-os, Linuxos, Netware krnyezetben. Ha a paramterek nincsenek megadva a parancssorban, akkor krdseket tesznek fel s gy biztostjk a hinyz adatokat. 10.1.2.5.3 Mens Interface Mind alfanumerikus, mind grafikus krnyezetben a mai programok tbbsge elkpzelhetetlen menk nlkl, ennek ellenre vizsgljuk meg, hogy mikor nem szksges menket hasznlni. Alapveten a men vlasztst jelent tbb lehetsg kzl. Ha nincsen vlasztsi knyszer, akkor menre sincsen szksg. Azokban a programokban, amelyeket egy adott clra fejlesztettek ki, felesleges menket alkalmazni, hiszen a program elindtsa eleve a krt funkcit is elindtja. Ha egy programot egy msik programbl indtunk el pl. keretprogrambl egy tmrtt-, akkor a keretprogram hordozza a vlasztsokhoz szksges informcit, teht ekkor sem kell men. Minden egyb esetben van a menknek ltjogosultsga. Hogyan jelenjen meg egy men? A kezd programozk legegyszerbb menje a kvetkez: Egyms al felsoroljuk a menpontokat, mindegyik el egy sorszmot runk, majd feltesszk a krdst, hogy melyiket vlasztja. A vlasztstl fggen egy CASE szerkezettel kivlasztjuk a megfelel menpontot, majd a megfelel eljrst meghvjuk. Az eljrsbl visszatrve a ment jra kirajzoljuk s kezddik minden ellrl. Ennek egy kicsit mdostott vltozata, ha nem sorszmot adunk a menpontnak, hanem karakter, illetve ha a menpont egyik betje kiemelt, akkor azt a billentyt megnyomva indul a krdses funkci. Ennl egy kicsit bonyolultabb megolds, amikor a men nem csak egy egyszer felsorols, hanem a menpontok kztt a megfelel irny kurzormozgat billentykkel is lehet mozogni. Ekkor gondoskodni kell arrl, hogy az aktulisan kijellt menpontnak ms legyen a szne, mint a tbbi menpontnak, illetve monokrm monitoron legyen intenzvebb a megjelense. Az ilyen menkben a nyilakon kvl clszeren a Home s az End a men els illetve utols pontjra ugrik, az ESC jelentse kilps a menbl, az Enter elindtja az aktulis menpontot. Popup men Amikor egy men megjelenik a kperny kzepn esetleg letakarva a mgtte lv kpernyterletet, akkor azt elugr vagy angolul POPUP mennek hvjuk. Ha egy menpont kivlasztsval egy msik men nylik meg, akkor azt almennek hvjk. Az gy ltrejtt menbl s almenkbl ll rendszert menrendszernek hvjuk s ennek a menrendszernek a kezdete a fmen. Egy menrendszer mindig brzolhat egy fa struktrval is, ezrt lersokban a menrendszer egy almenpontjt egyrtelmen meg lehet

93

adni, ha a fmentl kezdve felsorolom azokat az almenpontokat, amelyek elvisznek a megfelel funkcihoz. A bonyolultabb menrendszer programokban a felhasznl elveszhet a sok men kztt, ezrt felmerlt az igny, hogy a menpontokhoz magyarzatot is kell fzni. DOS-os krnyezetben az aktulisan kivlasztott menponthoz tartoz magyarzat ltalban a kperny als sorban jelenik meg, mg Windowsos krnyezetben manapsg alkalmaznak kis keretben megjelen lerst, amikor az egrrel megllunk egy menponton. Ezt angolul tooltip-nek hvjk. Kln feladatot jelent menkezelsnl az egr hasznlata. Az egr pozcijt windowsos parancssorban nem felttlenl lehet feldolgozni, azt a sajt programmal kln le kell programozni. A menrendszerben mindig van egy vrakoz rsz, amely a billentylenyomsra vr. Ezt a grafikus felletek automatikusan biztostjk. Itt lehet beiktatni az egr esemnyek figyelst is, s ha az egr valamelyik billentyjt lenyomjuk, akkor utna le kell krni a pozcijt, meg kell vizsglni, hogy menponton ll-e s ha igen, akkor meg kell hatrozni a menpontot. Innen tbb vlaszts lehetsges. Az egyszerbb esetben a program betlti a billentyzet pufferbe a megfelel billentyt s hagyja a vrakoz ciklust tovbb haladni. A kvetkez krben a ciklus szleli a karakter megrkezst s feldolgozza azt. Bonyolultabb esetben az egrkoordintk alapjn a menponthoz tartoz eljrst rgtn elindtja, azaz a billentyzet s az egr menkezelse prhuzamos lesz. 10.1.2.5.4 Gyorst billentyk A rgebbi DOS-os programoknl a menrendszer utols almenjn keresztl lehetett egy-egy belltsi funkcihoz eljutni. Gyakran az almen szomszdos menpontjnak elrshez pedig ellrl kellett kezdeni a bklszst a menrendszerben. Ez megneheztette a kezelst, ezrt a menket ellttk gyorsbillentykkel, amit angolul SHORT-CUT-nak hvnak. Ezek segtsgvel a menrendszer nlkl lehetett elindtani funkcikat. A gyorst billentyk hasznlata csak sok gyakorls utn vlik termszetess, hiszen ezeket az ALTCTRL-SHIFT-Billenty kombincikat nehz megjegyezni. Illetve minl bonyolultabbak a hasznlt programok, annl jobban kell vigyzni, hogy a short-cut-ok mindig kvetkezetesen ugyanazt jelentsk. A programozsuk is nehezebb, hiszen a menrendszerben biztostani kell azt, hogy brmikor a megfelel shortcut hatsra a megfelel eljrs induljon el. Nem knny feladat. A gyorstbillentyk hasznlata azonban megknnytheti s meggyorsthatja a programok hasznlatt. 10.1.2.5.5 Prbeszdablakok A menrendszerek hasznlatnak knnytsre a prbeszdablakokat is hasznlunk a felhasznli interface szoksos rszeknt. A prbeszd ablakok (angolul DIALOG) olyan a kpernyn keretben megjelen objektumok, amelyek tbb kezelfelletet, gombot, beviteli helyet, kapcsol, vlasztsi lehetsget tartalmaznak. Az egyes kezelszervek belltsai csak akkor vlnak vglegess, ha a prbeszdablakon megjelen elfogad nyomgombot Ok, Rendben vagy valami hasonl felirat megnyomjuk. Ha a szintn ltalnos Mgsem, Mgse vagy Cancel felirat gombot aktivljuk, akkor a belltsok nem vglegestdnek. A prbeszdablak megjelen kezelszervei kztt a TAB s a SHIFT+TAB billentykkel lehet ltalban mozogni. DOS-os krnyezetben elgg krlmnyes megvalstani a prbeszdablakokat, de nem lehetetlen. Objektum orientlt mdszerrel programozva lteznek ilyen knyvtrak a Turbo PASCAL s a Turbo C nyelven is. Minden windowsos programozsi nyelv termszetesen rendelkezik ilyen lehetsggel.

10.1.2.6 Segtsgads a programokban


A felhasznli interface-hez szorosan kapcsold, mde mgis klnll tma a help segtsg krdse. Kezdetben a segtsg a felhasznli kziknyvet, ksbb az egyszerbb programok hasznlatakor a segtsg a /? vagy hasonl paramterrel trtn indtskor egy vagy nhny oldalnyi legrdl szveg megjelenst jelentette. Ma mr a segtsg tbb mindent takar s tbb szintje is lehet. A legegyszerbb valban a megjelen egy oldalnyi informci. Bonyolultabb programok, menrendszerek esetn ez mr nem elg. Ilyenkor jelennek meg a helyzethez alkalmazkod segt rendszerek. A korbban mr emltett menponthoz kapcsold egysoros informci lehet a segt rendszer msodik lpcsfoka, de ekkor mg mindig fennll a tudatlan felhasznl alulinformltsgnak veszlye. A harmadik lehetsg, amikor a kedves felhasznl megnyomja az F1 billentyt s egy ablakban megjelenik egy rszletes szveges, kpes lers, amelyben mindenfle, az adott menponttal kapcsolatos tudnivalt ler a fejleszt. A DOS-os Norton Guide vagy a Windows help rendszere ennl is tovbb megy. Nem elg, hogy megjelenik a szveg, de a szvegben utalsok vannak ms

94

szvegrszekre is, amelyekre egyszer kattintssal lehet tlpni. Az ilyen HELP rendszert HYPERTEXT rendszernek hvjk. Az ilyen rendszerek komoly programozst ignyelhetnek.

10.1.2.7 A tervezs lpsei.


Egy szmtgpes rendszer megtervezse ltalban nem egyszer feladat. A megvalstand rendszer rengeteg sszetevbl llhat. Nem biztos, hogy csak egy egyszer program kifejlesztsrl van sz, hanem gyakran hardverbl, megfelel opercis rendszerbl, kifejlesztett szoftverbl ll sszetett rendszert kell megtervezni s megvalstani, a kvnt feladatok elvgzsre. Az egyes komponenseket a hardvert, az opercis rendszert s a szoftvert - sokszor nem is lehet elvlasztani egymstl. A fejleszts tervezse sorn nagyon fontos a clszoftver kifejlesztshez felhasznland eszkz gondos kivlasztsa. A kvetkezkben az egyes komponenseknl figyelembe veend szempontokat fogjuk megtrgyalni.

10.1.2.8 A megfelel hardverhttr megllaptsa.


A szksges hardver fgg a futtat opercis rendszertl, a hasznlt fejleszteszkztl is. A multitaszkos opercis rendszerek vilgban azt lehet mondani, hogyha egy szmtgp egy adott opercis rendszert lassan futtat, akkor a felhasznli programokat is lassan futtatja majd. Gyakori eset az, hogy a megrendel a meglv hardverparkot alkalmasnak tartja a feladat elvgzsre, ugyanakkor a fejleszt a sajt rendszert hasznlja tesztelsre s a fejlesztnek kompromisszumokat kell ktni.. Ha a fejleszt kompromisszumokat kt, nem veszi figyelembe az alkalmazand opercis rendszer s fejleszteszkz kvnalmait, akkor sajt magnak nehezti meg a helyzett. Az elkszlt rendszer mlyen a kvnt teljestmny alatt fog teljesteni. ltalban figyelembe kell venni a hardver tervezsnl a gp processzort, memriamretet, a szksges httrtr mreteket. Ezen kvl a hlzat megltt vagy szksgessgt, modem s egyb szksges eszkzket is figyelembe kell venni. Szksg esetn el lehet rni megfelel grafikus felbontst is. Akvetkezkben az elterjedt rendszerek alapvet hardverkvetelmnyeit soroljuk fel (2007-et runk) Ma mr gyakorlatilag DOS-os programokat nem fejlesztenek,. A Windows 95, Windows98, Millenium Edition, Windows NT 4, Intel PII-es (Celeron) processzoron 32 MB RAM-mal elfogadhat teljestmnyt nyjtanak. A Windows 2000 kiss elavult mr, de sokfel l rendszerek futnak ilyen opercis rendszeren 64 MB minimum, 256 MB Ram mr elegend, 500 MHZ-es P-II/Celeron. A Windows XP minimum 128 MB RAM-ot hasznl s 256 MB elg j neki. 1-2 GHz-es Celeron/P-III/P4 processzor clszer al. A Linux opercis rendszer, ugyanolyan hardveren jobban teljest mint egy XP, ha nem hasznlkunk grafikus felletet.

10.1.2.9 A megfelel opercis rendszer


Az elz fejezetben felsorolt opercis rendszerek azok, amelyek a leggyakrabban szba jhetnek. Most azt vizsgljuk meg, hogy melyik rendszer milyen alkalmazsok esetn a legalkalmasabb a fejleszts s a futtats szempontjait figyelembe vve. Meglep, de nagyon sok esetben a DOS alkalmas futtat rendszer! Az okok meglehetsen sokrtek. A DOS 25 ve jelent meg! A BIOS s a DOS hvsai abszolt publikltak, a fejleszt rendszerek sokadik genercii ksztenek DOS-os programokat. Az x86-os processzorok real mdjt mr minden fejleszt rendszer kszt oda-vissza kiismerte. A DOS-os programok ltalban stabilak. A szmtgpek gyorsan bebootolnak DOS esetn. A memriakezels gyors, mert kevs informcit kell vltoztatni. A DOS-os driverek kis mretknek ksznheten ltalban assemblyben kszltek, de a szabvnyok mr olyan jl ismertek, hogy akik ilyen programokat ksztenek volt idejk j drivereket rni. A hlzatkezelse tkletesen megoldott. Gyakorlatilag minden PC-s krnyezetben mkd hlzatnak van kliensprogramja hozzjuk. Az MS-DOS 5.0 nagy ttrs volt stabilits szempontjbl is. Ettl a verzitl szmtva a memriakezelse is jnak mondhat. A DOS 640 KB memrijbl 620-630 is szabadd tehet egyes esetekben. A memriamretnek megfelel programok gyorsan betltdnek, gyorsan harcra kszen llnak. Ha egy program mgis lefagy, akkor legfeljebb egy-kt lezratlan llomny marad a lemezen. Akr egy floppyrl is lehet futtatni egy DOS-os rendszert, mg akkor is ha az 95

alkalmazs esetleg overlay technikt hasznl RAMDISK hasznlatval. Hlzati krnyezetben akr a szerverrl is futhatnak az alkalmazsok. Fejleszti szempontbl clszer DOS-os alkalmazst kszteni, mivel nincs multitaszkols, nincsenek az alkalmazs all ms alkalmazsok ltal kihzott programok. Az opercis rendszer erforrsait knny elrni. Az opercis rendszer szolgltatsait megszaktsokkal, a krnyezeti vltozk alkalmazsval, a keressi tvonalak hasznlatval knnyen felhasznlhatjuk. Htrnyok. A grafikus gyakorlatilag nincsen. Bizonyos fejlesztrendszerek olyan programokat fordtanak, amelyek memriaignye kzelt a 640 KB-hoz, azaz krnikus memriahinyban kezdenek szenvedni az alkalmazsok. Ezt SWAP s overlay technikval kszblik ki, illetve egyes linker programok alkalmass teszik az ltalunk rt kdot a DOS n. protected zemmdjban val alkalmazsra. Ekkor a program rszre nem csak a 640 KB memria ll rendelkezsre, hanem a gpben lv sszes XMS memrit fel tudja hasznlni a program. Generlisan nem megoldott problma a magyar nyelv kezetes zenetek megfelel kirsa a kpernyre s a nyomtatra. A Windows 3.1/3.11-es shell instabil a Windows kooperatv multitask koncepcija miatt. Ha a rendszerben lv egyik program kisajttja magnak a processzort, azaz nem adja t a vezrlst a tbbi programnak, akkor a rendszer menthetetlenl sszeomlik. Kiment a divatbl. A Windows hasznlata kzben sok olyan dolog felmerl, ami a DOS-os programok hasznlit nem rinti. A multitask miatt a rendszerben elindtott programok krt okozhatnak ms futtatott alkalmazs fjljaiban futs kzben, esetleg megmagyarzhatatlan hibkat elidzve. A kezels sorn az egr hasznlata bizonyos esetekben komoly problmk forrsa lehet. A fejlesztk is nha akarva-akaratlanul az egr hasznlatt rjk el mg akkor is, ha nem a legclszerbb. Mindazonltal el kell mondani, hogy olyan munkahelyen, ahol a gpet office-szer programok futtatsra is hasznljk, ott a Windows kezelse nem jelent ltalban problmt. A grafikus programok nagyobbak, mint a karakteres fellet programok, ezltal lassabbak. Ezt tudomsul kell venni. A nyomtats s a kpernykpek a Windows-ban egyszeren tervezhetk. A grafikus programok fellete megfelel programokkal gyorsan tervezhetk. A nyomtats tekintetben is egyszer a helyzet. A nyomtatk rendszerszinten definiltak, azaz a windowsos programok tervezinek nyomtatskor a nyomtat fajtjtl fggetlenl, a Windows szolgltatsait felhasznlva nyomtathatnak. A modern 4GL rendszerek eleve kpesek a kdot a kpernyn megjelen objektumokhoz igaztani, gy forrsszinten ttekinthetbb programok kszthetk. A Windowsos programok futtatsa esetn felmerl egy problma. A klnbz Windows rendszerek nem felttlenl kompatibilisek egymssal. Bizonyos llomnyaik nyelvi jellemzkkel rendelkeznek, amelyeket nem mindig lehet figyelmen kvl hagyni. Azonos nev knyvtri fjlokat tartalmazhat a Windows s a fejleszti program is. Az egyes knyvtri fjlok viszont a fejleszts klnbz stdiumaiban vannak, teht nem ugyanarra kpesek. A Windows egy fjl betltsekor megnzi, hogy a memriban ltezik-e s ha igen, akkor mg egyszer nem tlti be. Ez futs kzben potencilis s nehezen felderthet hibaforrs lehet. Clszer stratgia mindig az azonos nev s azonos funkcij fjlok kzl a legjabb dtum vagy legjabb verziszm hasznlata. Ha a rendszerben eredetileg lvnl rgebbit helyeznk a rendszerbe, akkor az esetlegesen kijavtott hibkat visszacsempsszk a rendszerbe s elre nem lthat hibk jelentkezhetnek. Ezt a problmt hvjk DLL Hell -nek (= dll pokol). Egy programfejleszt bartom egyszer azt mondta, hogy azrt nem szeret Windowsban programozni, mert akkor nem tudja, hogy a httrben mi trtnik. Erre n azt feleltem, hogy ha a program jl mkdik, akkor nem is kell. A problma csak az, hogy a programok nem mindig a szabvny szerint mkdnek. A Linux rendszereken is felmerl a parancssori (=konzol) illetve a grafikus fellet program krdse. Mindig amire szksg van.

96

10.1.2.10 A felhasznlhat fejleszteszkzk kivlasztsi szempontjai.


Nyilvnvalan az elzekkel szorosan sszefgg a fejlesztsre hasznlhat rendszer, vagy rendszerek kivlasztsa. Hogy melyik rendszert vlasszuk ki, arra nzve a kvetkez elveket rdemes figyelembe venni. Nzzk meg, hogy mennyire alacsony szint rendszer kzeli a feladat! Rendszer kzeli alkalmazsok fejlesztshez Assembly, C, C++, esetleg a Pascal nyelv ajnlhat. A ltrejv program a fenti sorrendnek megfelel mret lesz, a futsi sebessge fordtott lesz, a fejlesztshez szksges id egyenl tudsszinteket felttelezve Pascal esetn a leggyorsabb, s Assemblyben a leglassabb. Kisebb segdprogramok fejlesztsekor az Assembly-t rdemes kihagyni, de a C s a Pascal tovbbra is j vlaszts. Ezek ltalnos cl nyelvek, minden elvgezhet velk, amire ltalban egy programban szksges lehet. Clszeren script nyelvet is lehet hasznlni! sszetettebb alkalmazsok fejlesztsre clszer olyan fejlesztrendszert keresni, amely az adott terletre kihegyezett. Ekkor a harmadik genercis programozsi nyelvek C, Pascal mr nem elg hatkonyak. Vizulis, grafikus programok esetn hasznlhatjuk a Microsoft Visual Stdi (Basic, C, C#) a Sun fle Java, Borland C-Builder, Delphi, s mg sok fejleszt rendszer programjait. Nzzk meg a feladat bonyolultsgt! Gyakran elfordul, hogy egyszerbb feladat megoldsra mr ltezik az adott szoftver. A kisebb adatbziskezel clrendszereknek, s utility programoknak se szeri, se szma a vilg szoftvertermsben. Clszer elszr tjkozdni, hogy ltezik-e az adott feladatra ksz program, majd ha nem tallunk, akkor lljunk neki a fejlesztsnek. Egyszerbb adatbzis-kezelsi feladatok megoldsra olyan fejlesztrendszert clszer vlasztani, amelyben egyszer sablonok adatainak kitltsvel lehet a megfelel clszoftvert sszelltani. Ilyenek pl. a Microsoft Access, dBase, a Database Manager. Egyszerbb alkalmazsok sszelltsa 2-3 rai munkval mr megoldhatk. Tbb adattblt tartalmaz programok fejlesztsekor mr tbb varici is szba jhet, hogy csak a legismertebbeket emltsk, Microsoft Access, CA-Visual Object, Delphi, Microsoft Foxpro/Visual Foxpro, Visual Dbase, stb A felsorolt rendszerek mindegyike 4GL rendszer. Nzzk meg a futtatsi platformot! DOS-os alkalmazst Windows all futtatni nem ajnlatos. A DOS-os programok slyos korltja a DOS memriakezelse. A nagyobb DOS programok 500-600 kb-ot is lefoglalnnak maguknak, ezrt esetleg bizonyos memriakezelsi kompromisszumokat is szksges ktni. A felhasznli fellet a grafikus rendszereken sokkal bartsgosabb lesz, gyorsabban ki is fejleszthet. A megfelel hardvert, azonban biztostani kell, azaz processzorral, memrival s szabad winchester hellyel nem szabad takarkoskodni. Clszer, ha lehetsges kliens-szerver alkalmazsokat rni, mivel ilyenkor a szmtsi feladatok egy rszt a szerver tvllalja a munkallomsoktl.

10.1.2.11 Fizets, Shareware, Freeware programok. OEM, Multi licensz.


A szerzi jog gy rendelkezik, hogy a szoftverek jogvdettek, azaz a fejlesztk szellemi termkei. A vsrl a program megvsrlsakor csak a program felhasznlsi jogt vsrolja meg, nem kerl tulajdonba maga a szoftver. Ennek megfelelen nem rendelkezhet korltlanul a szoftvere felett. ltalnos szably, hogy a fizets alkalmazsok megvsrlsakor egy teleptkszlet, tovbb valamifle sorozatszm, vagy egyb azonost kerl a felhasznl birtokba. Gyakori megolds, hogy a teleptkszlet az internetrl letlthet s csak a sorozatszm rkezik a vsrls kapcsn. Mikor jogtiszta s mikor illeglis a szoftver felhasznlsa? Ha a felhasznl rendelkezik a hasznlatot lehetv tev sorozatszmmal, azonostkkal, tovbb bizonytani tudja, hogy a szoftvert vsrolta vagy brmifle hivatalos ton jutott hozz. Ilyen hivatalos t lehet ajndkozs is pldul. A szoftver tulajdonosa gyakran elrja a megvsrolt szoftver elidegentsnek lehetsgeit 97

is. ltalban igaz, hogy egy megvsrolt szoftvert csak akkor lehet tovbbadni, ha a szoftvert minden tartozkval egytt telept kszlettel, felhasznli kziknyvekkel, sorozatszmokkal, igazol dokumentumokkal stb... egytt adjk t a vsrlnak. OEM szoftverek (=Original Equipment Manufacturer). Ez olyan konstrukci, amikor a szoftvert egy sszeszerelt szmtgppel vagy valamilyen meghatrozott alkatrsszel egytt kell eladni. Ez elssorban az opercis rendszerek nmelyiknl szoks. Mennyisgi licensz Gyakori, hogy egy cg egy bizonyos szoftverbl tbbet vsrol. Ekkor mennyisgi kedvezmny alapjn a cg alacsonyabb ron juthat hozz a szoftver hasznlathoz. Gyakori ilyenkor, hogy az elad csak egy adathordozt biztost a felhasznlnak, vagy csak az internetrl val letlts lehetsgt biztostja. A megvsrolt szoftverek licenszelst gyakran ktik felhasznlhoz s/vagy szmtgphez. ltalban az igaz, hogy a megvsrolt szoftvert egy idben csak egy gpre szabad feltelepteni. Shareware programok Olyan szoftverek, amelyek bizonyos, a szerz ltal meghatrozott krlmnyek kztt teljes kren, vagy bizonyos meghatrozott megszortsokkal hasznlhatk. A megszortsok sokrtek lehetnek. Lehetsges, hogy a program egyfolytban csak egy megadott ideig mkdik, vagy az indulsakor valamilyen figyelmeztets jelenik meg, de egybknt akrmeddig, teljes kren hasznlhat. A lehetsgek szma nagy. A jogtiszta hasznlat akkor valsul meg, ha a licenszben lert felttelekkel hasznlja a programot s amint megsznt a licensz ltal biztostott felttel, akkor letrli. ltalban a shareware programok szerzi elrjk, hogy a megadott id utn kteles megvsrolni a termket a felhasznl. Prbavltozat Gyakori, hogy az interneten elrhetk egyes szoftverek prbavltozatai, amelyek meghatrozott ideig s meghatrozott felttelek mellett mkdnek, majd a felttelek lejrta utn automatikusan megsznnek mkdni s kiknyszertik a megvsrlst vagy trlst. Ezek egyfajta shareware programok Freeware programok Ez a programkategria azt jelenti, hogy a programot szabadon, megktttsgek nlkl lehet hasznlni. Ez nem jelenti azt, hogy a programhoz ingyen lehet hozzjutni, lehetsges, hogy pnzrt kell megvsrolnia. Ha a felhasznl a programhoz hozzjutott, akkor azt szabadon terjesztheti, felhasznlhatja tetszleges szm gpen s formban, akr ms alkalmazsok rszeknt is. Nylt forrskd Ha a program fejlesztje a programok forrskdjt is kzzteszi, akkor nylt forrskd programrl beszlnk. A nylt forrskd azt jelenti, hogy brki a forrskdot mdosthatja szabadon. ltalban a fejleszt elvrja, ha valaki mdostja a forrskdot, akkor arrl rtestse t. Azt gondoln a naiv ember, hogy a nylt forrskddal a fejlesztk lemondanak anyagi elnykrl s gy a munkjuk rtkt veszti. Gyakorlatban a nylt forrskd rendszerek komoly alternatvt jelentenek az zleti rendszereknek, mivel a nyltsg miatt gyakran a vilg sszes rszbl dolgoznak emberek a kdon, ezltal nagyon stabil kirlelt kdok jnnek ltre. A XX. Sz vgn a Linux opercis rendszer pldja mutatja, hogy igenis lehet akr zleti alap mkds is a nylt forrskd szoftverekkel.

10.1.2.12 A terv dokumentlsa


A rendszerfejleszts megkezdse eltt nagyon fontos feladat az elksztend rendszer paramtereinek rgztse, azaz a terv dokumentlsa. Ebben a dokumentumban minden olyan alapvet paramtert rgzteni kell, amelyek a ksbbiekben meghatrozzk az elksztend rendszert. A terv dokumentcija vdi a megrendelt s a fejlesztt is. A megrendel ebben a dokumentumban tudhatja meg vglegesen, hogy mit is fog kapni a fejlesztsi folyamat vgn, mg a fejleszt ebben a dokumentumban rgzti le, hogy mit is kell neki nyjtania a fejleszts sorn. A dokumentcinak tartalmaznia kell a kvetkezket: A megkvnt rendszer bemen s kimen paramterei. 98

Milyen forrsadatok alapjn, milyen listk, nyomtatsi kpek jelennek meg. A rendszer sszes funkcijnak lerst A fejleszts sorn elre el kell tervezni, hogy milyen funkcikra akarjuk alkalmazni a rendszert. A fejleszts folyamata kzben az utlagos ignyek kivdsnek ez a legmegfelelbb helye. Az adatszerkezeteket. A felhasznlt adatszerkezetek eleve meghatrozzk, hogy milyen adatok nyerhetk ki egyszeren a rendszerbl. Az adatszerkezetek megtervezse a rendszer ksbbi hasznlhatsgnak alappillre. Ha nem kellen tgondolt a rendszer, vagy kevs adat nyerhet ki belle vagy tlsgosan bonyolult vagy nem kellen rugalmas. A rendszerhez s a vele tmasztott kvetelmnyekhez illeszteni kell az adatszerkezeteket. Arra is gondolni kell, hogy ha a rendszernek tovbbi fejlesztsi irnyai is lehetnek, akkor azokra a fejlesztsekre is gondolni kell, azaz biztostani kell az adatszerkezetek olyan kiterjesztst, amelyeket a jelenleg kifejlesztett rendszerek tovbbra is hasznlhatnak, de a ksbb kifejlesztett rendszer is felhasznlhatja a jelenlegi adatszerkezetek adatait. Az esetlegesen elrelthat tovbbi fejlesztsek valamifle kereteit. A tesztadatok s az les adatok felvitelnek mdjt. A tesztels mdjt, a helyessg megllaptsainak kritriumait. A felhasznlt fejleszteszkzt, s a fejleszteszkz hardvert A futtatrendszer hardver s szoftverkritriumait. A szksges hardverkonfigurcit, ami a processzor tpusa, memria, szksges terlet a HDD-n, kell-e floppy vagy nem, s ha igen, akkor milyen, a megjelent minimlis felbontst, egyb kiegszt eszkzket. A szoftvernl a szksges opercis rendszert, s minden egyb kiegszt szoftvert, ami a futtatshoz szksges. Clszer megjellni a minimlis s az optimlis konfigurcit is. Hlzati alkalmazsoknl, a szksges hlzati feltteleket, (Hlzati opercis rendszer tpusa, kapcsolds tpusa, stb) A tervben indokolni kell, a fenti szoftver-, s hardvervlasztsokat. A tervnek tartalmaznia kell a megvalsts temezst, szakaszokra bontva, hatridkkel, felelskkel. Mindenkppen kell tartalmaznia a kapcsolattart nevt. A tervben le kell fektetni, hogy a fejleszts sorn elre nem lthat mdostsokat a felek hogyan kezelik, azaz ki a felels, ki dnti el, hogy az esetleges mdosts mennyiben elfogadhat s hogy annak a kltsgeit hogyan viselik. Azt is clszer lerni, hogy nem teljesen a lersok szerinti mkds vagy a fejleszts csszsa hogyan befolysolja az egsz tervezetet.

10.1.3 Megvalsts
Egy program fejlesztse programozi munka. A programoznak a fejleszts megkezdsekor szksge van minden keretfelttelre, amely a munka vgzst segti. A tervezs sorn mr mindent tud, ami a rendszer bemeneteit, kimeneteit illeti. A tervben megadott eszkzkkel, minl gyorsabban, minl hatkonyabban el kell ksztenie a kvnt rendszert. Egy zleti cllal kifejlesztett programban nagyon fontos, hogy a program szerkezete jl strukturlt legyen, azaz clszer a rendszert a tervezetben meghatrozott mdon, logikus sorrendben fejleszteni. A fejleszts sorrendisgt tbb dolog meghatrozhatja, zls krdse, hogy ki milyen mdszert kvet. A harmadik genercis rendszerekben a fejleszts kzponti rsze egy j editor, debugger s profiler rendszer. Ezeket a modulokat az integrlt IDE rendszerek tartalmazzk. Az ilyen rendszerek nem tmogatjk kzvetlenl a strukturlt programtervezst, br esetleg maga a nyelv knlja a struktrkat. Az ilyen fejleszteszkzk esetn a programoznak magnak kell gondoskodnia a fejleszts sorn a hatkonysgrl, azaz az adatszerkezetek logikus ltrehozsrl, a vltoznevek kvetkezetes s ttekinthet hasznlatrl, az eljrsok s fggvnyek kvetkezetes hasznlatrl. Clszer az ilyen fejleszteszkzk hasznlatakor gondoskodni a klnbz programrszek kln modulokba szervezsrl, az egyes modulok kztti interface-ek szabvnyos egyttmkdsrl. A fejlesztst pldul clszer gy szervezni, hogy: Az adatszerkezetek ltrehozsa, az adatokat kzvetlenl kezel programrszek ltrehozshoz kapcsoldjon. 99

jrafelhasznlhat kdot rjunk. Ez nem egyszer, meglehetsen sok ltalnostst tartalmazhat, ami plusz munkt jelent, de az elejn befektetett munka ksbb sokszorosan megtrl. Ha lteznek mr elre elksztett standardizlt modulok, akkor azokat megfelelen ssze kell gyjteni, a konkrt feladat szerint esetleg mdostani. Ha az ilyen rendszereket mdostjuk, akkor figyelni kell az esetleges ms programokban lv kapcsolatokra is. A visszafel rvnyes kompatibilits nagyon fontos szempont. Clszer mr az elejn kidolgozni azokat az eljrsokat, amelyek az adatok tesztelsvel kapcsolatosak. A kvetkez lpsben pldul el lehet kszteni a program f menpontjait A modern 4GL fejleszteszkzk knljk a Top-Down mdszer alkalmazst, gyakorlatilag mskppen nem is lehet ket hatkonyan hasznlni. Ezekben az esetekben a fejleszts sorrendjnek clszeren a kperny, a listaformtumok, a menk megtervezsvel kell kezdeni, majd a mdszert kvetve kialaktani az egyre alacsonyabb szint programrszeket, az egyes kpernyobjektumok tulajdonsgainak meghatrozsval (prototpus ksztse). Az egyre jobban kidolgozott rszletek termszetesen lland kontrollt ignyelnek. Minden egyes elkszlt programmodult a lehetsgekhez kpest azonnal ki kell prblni, tesztelni kell. A felmerl hibkat ki kell javtani. Ebben a szakaszban nagy hasznt veszi a fejleszt, ha a tervezs sorn s a f modulokban megfelelen strukturlta a programjt, azaz csak a megfelel interface-eken keresztl kommuniklnak az egyes programrszek. A hibakeress is knnyebb gy. A munka sorn clszer a legkritikusabb rszeket megrni elszr. Azokat lehet ezeknek tekinteni, amelyek az adatok bevitelt, az adatok kezelst, az adatok helyessgt biztostjk. A ksbbiekben az adatok megjelentsrt felels rszek kerlhetnek sorra. Ezek a rszek ltalban nem hatnak vissza az adatokra, azokat nem mdosthatjk, teht elrontani sem tudjk. A fejleszts sorn gyakran j szolglatot tesznek az res eljrsok, procedrk. Ezek olyan meghvhat eljrsok, amelyek a program ksbbi szerkezetben benne lesznek, funkcijuk lesz, de a fejlesztsnek a korai szakaszaiban mg nem kell ket kidolgozni. ltalban egy megjegyzst meg lehet jelenteni bennk, esetleg a ksbb feldolgozand paramtereket is t lehet adni nekik, de a kidolgozsukra majd csak ksbb kerl sor. A felhasznlt folyamatosan tjkoztatni kell a fejleszts eredmnyeirl, akr gy is, hogy tesztvltozatokat hagyunk nla. A legvgn a knyelemmel kapcsolatos mg ki nem elgtett ignyeket clszer sorra venni. Itt gondolunk elssorban a Help, a gyorshelp, a gombok megfelel felirataira. Meg kell jegyezni, hogy a 4GL nyelvek ezekben is igen nagy szolglatot tesznek, mivel az adatok tervezse sorn meg kell adni az adat tpusn, mretn kvl elnevezst, magyarzatot stb Amikor gy gondoljuk, hogy szen vagyunk a programunkkal, akkor egy mdszeres teszten kell tesnie a programnak, amely minden funkcijt mdszeresen vgigteszteli. Ebben a szakaszban ltalban fny derl korbban szre nem vett hibkra is. Vannak hibakeressi, tesztelsi mdszerek, amelyeket a ksbbiekben fogunk trgyalni. Segtsgkkel meg lehet tallni a hibk nagy rszt. A megtallt hibkat ki kell javtani, majd a javts utn jra tesztelni a megfelel rszeket. A helyesen megtervezett programok egyes moduljai fggetlenek, gy az egyik rszben keletkezett hibk javtsa nem hat a ms rszekre. A nem elgg meggondoltan tervezett programokban elfordul az, ahogy az egyik rsz hibjnak kijavtsa ms rszekben okoz hibt. Az ilyen programok hibamentesek soha nem is lehetnek. Minl ksbb derlnek ki az ilyen fggsgek, annl nehezebb a programot normlis llapotba hozni. Ha nem talltunk hibt, akkor sor kerlhet egy elsdleges hatkonysgvizsglatra. Itt vizsglni kell, hogy az les adatok mennyisghez mrhet adatok esetn a futtat gpeken milyen teljestmnyt produkl a rendszernk. A hatkonysgi problmk oka akr az algoritmusok, akr az adatszerkezetek szintjn is kereshetk. Meg kell keresni a nem megfelel hatkonysg okt, s a megfelel beavatkozssal meg kell megszntetni. Termszetesen utna jabb tesztperidus kvetkezik. Elbb utbb a fejleszt nem tall tbb hibt. Ez nem azt jelenti, hogy nincs is. Ennek pszicholgiai okai vannak. Hiba trekszik valaki mdszeresen dolgozni, de a fejleszts sorn a figyelmt elkerl rszletek ltalban ksbb is elkerlik a figyelmt. Ilyenkor a kls tesztelk tallhatjk meg a hibt. A felhasznl megkapja a program tesztvltozatt.

100

A szakzsargonban Alfa vltozatnak hvjk a mg alig tesztelt vltozatokat, illetve azokat, amelyeket csak maga a fejleszt tesztelt s mg fejleszteni akar rajta. Bta vltozatnak nevezik azt a programot, amelyben a fejleszt mr nem tall hibt s kiadja klssknek tesztelsre. Ezekben a programokban a f funkcik mr elgg megbzhatan mkdnek, de korntsem tekinthet befejezettnek a program semmilyen szempontbl. (lltlag a COREL cg vezette be a nemzetkzi szoftveres kztudatba a Btatesztels fogalmt, mert volt id, amikor a szoftverei az elads utn fl vvel kezdtek csak hasznlhatkk vlni, sok javtkszlet, s patch olyan kisebb terjedelm javts, amely egy-kt modult lecserl, esetleg a program binris formjban kicserl nhny gpi kd utastst - kiadsa utn.)

10.1.4 Javtott vltozat


A felhasznl tesztelse kzben elksztjk a felhasznli dokumentcikat, majd a hibalista kzhezvtele utn megkezdjk a hibajavtst, majd jabb hibakeressi, tesztelsi, esetleg hatkonysg-vizsglati eljrs kvetkezik. Az gy tesztelt programot jra tadjuk a Felhasznlnak tesztelsre. A fenti ciklusok addig folytatdnak, amg a felhasznl ki nem jelenti, hogy a program a tesztadatokkal jl fut. Ekkor kell kiprblni az les adatokkal, majd ha azokkal is hibtlanul fut, akkor a programot tadhatnak lehet tekinteni, s a Fejleszt tadja, a Felhasznl pedig tveszi.

10.1.5 Vgleges vltozat, s tovbbfejleszts


A vgleges vltozatot a Felhasznl zemszeren hasznlja, majd egy id mlva csak azt hasznlja. A program hasznlata kzben persze kiderlhetnek jabb hibk is, amelyek slyuktl fggen hibs mkdst is eredmnyezhetnek vagy csak szpsghibnak tekinthetk. ltalban fl v zemszer hasznlat kell ahhoz, hogy egy komolyabb fejlesztsrl kiderljn, hogy mindenben megfelel s hibtlan. Gyakran fl-egy v hasznlat sorn derlnek ki azok a hinyossgok, amelyek a programok tovbbfejlesztst indokoltt teszik. A tovbbfejleszts sorn biztostani kell az addigi verzi zemszer mkdst, illetve egy korbbi stabil vltozathoz val visszatrs lehetsgt. Ennek megfelelen az adatszerkezeteket mdostani csak nagyon indokolt esetekben szabad. A tovbbfejlesztst azonban gy kell tekinteni, mint egy j projectet, igaz a feladat ltalban nem olyan mrtk, mint korbban, s a krlmnyek is tisztbbak.

10.1.6 Verzikezels
A verzik elnevezse sorn nincsen egysgesen elfogadott gyakorlat, de az albbiak jl hasznlhatk. A programnak van f verziszma, s al-verziszmai. A f verziszm akkor vltozik, hogyha a program egszre kihat lnyeges vltozst ptettek be a programba. Ilyenkor gyakran a program kls kinzete is vltozik. Az al-verziszmot akkor vltoztatjk, ha kisebb mdostsokat hajtottak vgre a programban, amely egyes tulajdonsgokat mdostott. Ha csak hibajavtsokat tartalmaz az j verzi, akkor gyakran az al-verziszm tovbbi rsze vltozik vagy egy fordtsi sorszm vltozik, vagy egy dtum vltozik, amely a verziszm rszt kpezi. Ezt ltalban patch-nek (=folt) hvjk. Ha egy szoftverben az alapvet tulajdonsgokat generlisan mdostjk, akkor az gyakran nem hibajavtsnak, hanem gynevezett Service Pack-nak hvjk. Nhny plda Manapsg a nagyobb szoftvergyrtk egsz egyszeren egy vszmmal jellik szoftvereiket (Microsoft Office 2007), de gyakran mg az elz vben jeleni meg a kvetkez vi azonostval elltott szoftver . A Linux rendszereken a kernel verziszmban a pratlan verzi mindig ksrleti llapotot jelent, mg a pros al-verzi a stabil kernelt jelenti. 2.3a Jelenti, hogy egy szoftver 2 verzijnak 3 vltozata, amiben valami kis javtst mg vgeztek Gyakran mellkelnek a szoftverekhez mellkelnek egy history jelleg lerst (klnsen a netrl letlthetk esetn), amely lerja, hogy az egyes verzikban mit javtottak, mdostottak. Ekkor a felhasznl eldntheti, hogy a mdostott verzit rdemes-e, kell-e neki letlteni s feltelepteni.

101

10.2 A megvalsts gyakorlati eszkzei Az algoritmusok ltalban mg nem elgg egzaktak, hogy valamilyen automatizmus feldolgozza ket, ezrt azokat t kell ltetni egy programozsi nyelv kereteibe. A programozsi nyelveknek elre lefoglalt szavai vannak. A lefoglalt szavak listjt utastskszletnek hvjuk. Az utastsokat csak bizonyos formai szablyok betartsval hasznlhatjuk, ezeknek a formai szablyoknak az sszessgt hvjuk a nyelv szintaktikjnak neveznek. A szvegeket ezek alapjn rtelmezi s fordtja le a fordtprogram, gynevezett gpi kdra. A gpi kd az a szmsorozat, amelyet a szmtgp processzora rtelmezni tud s vgre tud hajtani. Pldul: MOV AX,134 ADD AX,75 vagy Gotoxy(11,13); Writeln('dvzlm nket!');

A bal oldali oszlop kt sora a szmtgp memrijban 8 byte-nyi helyet foglal el, sszead kt egsz szmot, s egy memriahelyre leteszi ket. Az egyszerbb felhasznli programok is minimum nhny ezer byte hosszak, azaz ilyen utastsokbl j nhny szz kell. Ezt hvjk assembly programozsnak. Lass s nehzkes, de a gp erforrsait gy lehet a legjobban kihasznlni. A jobb oldali oszlop kt utastsa kirja a kperny 13. sornak 11. oszloptl kezdden, hogy dvzlm nt. Ez is kt soros program, de valami rtelmeset is vgrehajt.

10.2.1 Compiler, Interpreter, P-kd, Virtual Machine


Egy tetszleges nyelven megrt program lehetsges, hogy szintaktikailag helyes utastsokat tartalmaz, de nem biztos, hogy a program rtelmes dolgokat mvel. A program gondolatmenetnek hibtlansgt gynevezett szemantikai szablyokkal ellenrzik. ltalban a rendszerek nem nagyon figyelnek oda a szemantikai szablyokra, de vannak olyan rendszerek, amelyek felismerik, ha a fejleszt szintaktikailag helyes, de szemantikailag rtelmetlen utastsokat r le.

10.2.1.1 Compilerek
A compilerek a futs eltt ellenrzik a programkdot szintaktika s szemantika szempontjbl, majd gpi kdra fordtjk a programot. Ha hibt szlel kijelzi a fejlesztnek, megjellve a megfelel helyet a programszvegben. A szemantikai szablyoknak val megfeleltetst ltalban nem jelzi kritikus hibknak a fordt (Warning), azaz a program ezektl mg lefordthat. Gyakran elre kifejlesztett mdszerek segtsgvel a program kpes a vgs futtathat vltozatot optimalizlni is. A forrsszveget a compiler gynevezett object formtumba fordtja le, vagy ms nven object kdba. Az object kd az Intel ltal szabvnyostott kztes llapot a forrsszveg s a gpi kd kztt. Az gy keletkezett fjl a DOS - Windows rendszerekben a .OBJ kiterjesztst kapjk. Ebben az llapotban az gynevezett linker szerkeszt programok veszik t a tovbbi irnytst s az egyes programrszek .OBJ fjljaibl, tovbb az elre elksztett LIB fjlokbl sszeszerkeszti a vgleges futtathat programot. A LIB fjlok szabvnyosan tartalmaznak tbb OBJ fjlt egysgbe csomagolva. A LIB fjlok szerkesztst a Microsoft rendszerek esetn a LIB.EXE a Borland eszkzknl a TLIB.EXE vgzi. A grafikus alkalmazsok esetn mg egy lps zajlik le, a programokhoz hozz kell szerkeszteni a kpernyn megjelen objektumok forrst is. Ezt a Resource Compiler programok vgzik el. A compileres rendszerek tagadhatatlan elnyei a kvetkezk: Mint lthat, a compileres rendszerek a fejleszts sorn fordtjk le s tesztelik a forrsszveget. Mivel ezek a rendszerek a fordts sorn ttekintik az egsz rendszert is, ezrt a szintaktikai, szemantikai hibk tbbsgt kpesek kiszrni az ilyen rendszerek. A keletkezett gpi kd a processzor tpusra optimalizlt lehet. A fordtnak meg lehet adni, hogy az elkszlt gpi kd milyen ellenrzseket vgezzen a futs kzben. Memria verem ellenrzs, memriatlcsorduls ellenrzse, tmbhatrok ellenrzse, adattpus megfeleltets, stb ilyen tpus ellenrzsek jhetnek szba, ezeket a fejleszt kvnsga szerint befordtja a compiler a programba. Amikor a program mr vgs tesztelt, hibtlan llapotba kerl, akkor a fordtsi opcikat tlltva a program a lehet legkisebb s leggyorsabb lehet. 102

Htrnyok is vannak persze: A compileres rendszerekben a szerkeszts, fordts, tesztels fejlesztsi ciklus akr nagyon hossz is lehet, hiszen a fordtskor a rendszer ttekinti a teljes fordtani valt. Persze lteznek olyan eljrsok, amelyek az egyes modulok lefordtsnak, a forrsszvegek idpontjnak elemzsbl meg tudjk hatrozni, hogy mit kell jrafordtani s mit nem. Az jraszerkesztst, azonban ltalban nem lehet megsprolni. Lassabb gpeken egy teljes fejlesztsi ciklus sok idt vehet ignybe. Nem lehet prbeszdes zemben mkdtetni ezeket a rendszereket. A program futst megszaktva ltalban nem lehet folytatni a programot ugyanattl a ponttl, ha kzben megvltoztattuk a program llapott. Br vannak hibakeres programok, de nem felttlenl hasznlhatk minden krlmnyek kztt. A Microsoft Visual programok, C#, Borland Pascal, Borland C++, Delphi compileres rendszerek.

10.2.1.2 Interpreteres rendszerek:


Klasszikus ilyen rendszer a BASIC programozsi krnyezet s nyelv. A rendszer lnyege, hogy a program bevitelekor a rendszer egy szintaktikai ellenrzst vgez a bevitt utastson. A program vgrehajtsa sorn a rendszer utastsonknt elvgzi a kvetkezket: Beolvassa a kvetkez utastst, s eldnti, hogy az utastskszlet melyik utastsa. Ellenrzi, hogy az adott utasts szintaktikailag helyes-e, az tadott paramterek tpusa, esetleg mrete megfelel-e az utasts kvnalmainak Ha hibtlan, akkor meghvja az utastshoz tartoz elre elksztett kdrszletet. Figyeli, hogy a vgrehajts sorn nem jn-e ltre valamilyen hiba. Ha hibra fut a rendszer, akkor hibakdot kell generlnia. Ha hibtlan a vgrehajts, akkor veszi a kvetkez utastst. Htrnyok: A fejleszt dolga annak megllaptsa, hogy szemantikailag helyes-e a program. A program optimalizlsa automatikusan semmilyen formban nem jn ltre. Az gy futtatott program sokkal lassabb, mint a megfelel compilerrel lefordtott gpi kd program. A program futtatshoz specilis futtatkrnyezet szksges, amelynek tartalmaznia kell minden olyan segdllomnyt, amely az esetleg elfordul sszes utasts megfelel gpi kdjt tartalmazza. Ez a program mrett feleslegesen megnveli, mivel olyan modulok is bent vannak a memriban, amelyekhez tartoz utastst nem is hajt vgre a program. A programok mrete nagyobb, mint a megfelel compilerrel fordtott programok. Az ilyen programok memriaszervezse bonyolultabb, mint a compileres trsaik. Elnyk: Az interpreteres rendszerekben a fejlesztsi ciklus lervidl, gyorsan lehet dolgozni. Az elkszlt programrszleteket gyorsan ki lehet prblni, tesztelni. Kisebb teljestmny gpeken is ugyanolyan gyors a program, mint a nagyobbakon (azaz ugyanolyan lass) Basic, Javascript, PHP, Minden script alap nyelv...

10.2.1.3 P-kd s Virtual Machine alap nyelvek


Ez egy szvr megolds. A fejleszt rendszer compilere s linkere futtathat programot fordt, de a program bizonyos rszei un. P-kdd fodtdnak, ami tmenet a gpi kd s a programszveg kztt. Ezt a kdot futs kzben rtkeli ki a rendszer. nllan futtathat EXE fjl az eredmny, de nem optimlis a program sebessg s mret szempontjbl. Az ilyen rendszerek igyekeznek a korbbi kt rendszer elnyeit tvzni. Ilyen a Clipper. A multiplatformos programozs eltrbe kerlse miatt alakultak ki a Virtual Machine alap nyelvek. (Java)

103

Ebben az esetben a fordtprogram olyan kdot generl, amelyet minden platformon a megvalstott megfelel futtatkrnyezet dolgoz fel s fordt le az adott platform ltal hasznlt gpi kdra. Compileres megoldsrl van sz. A kulcsmomentum a hordozhatsg!

10.2.1.4 Mikor melyiket


A gyakorlatban a gpek teljestmnynek nvekedsvel a compileres rendszerek eltrbe kerltek. Vannak olyan feladatok, amelyeket nem lehet interpreterrel megoldani, mg ms feladatok megoldsa csakis azzal kpzelhet el. A Pascal, a C, C++ nyelvek s ms harmadik genercis nyelvek compileres rendszerekknt valsulnak meg, mg a BASIC, Visual BASIC rgebbi vltozatai, illetve a Microsoft Office termkcsaldjnak mindegyik darabja interpreteres rendszer. A Word az Excel vagy az Access programozsa interpreter kzremkdsvel jn ltre. A Clipper P-kdot hoz ltre. A rendszer ezt a kztes kdot nem ellenrzi futs kzben szintaktikai s szemantikai szempontbl. Csak a memriakezels, a vltozk rtkhatrait ellenrzi. Az gy keletkezett program vgrehajtsi sebessge valahol a compiler s interpreter nyelvek kztt van, mrete is, mivel a p-kdra fordtskor csak azok a modulok kerlnek be a futtathat file-ba, amelyek benne vannak a fordtott rendszerben. A Java pedig a hordozhatsg miatt VM-et hasznl. A script nyelvek Action Script, Javascript, PHP mind egy futtatkrnyezetet ignyelnek, amelyek vagy az opercis rendszerre plnek, vagy esetleg egy bngszhz kapcsoldnak.

10.2.2 A programozsi nyelvek szintjei


Alacsonyszint nyelvek - assembly Ebben a nyelvben egy gpi kd utasts egy assembly utastsnak felel meg. A programok fejlesztse nehzkes, viszont a gp erforrsait maximlisan ki lehet hasznlni, a program a lehet leggyorsabb s a legkisebb helyet foglalja el. A mikroprocesszor tpustl fggen ms gpfajtn ms a nyelv is! Kzpszint nyelvek C, C++ Egy utastshoz nha egy gpi utasts, nha tbb tartozik. Viszonylag jl lehet kihasznlni a gp adta lehetsgeket, de furcsa mdon a C programok ltalban gpfggetlenek. Van olyan program, amit a klnbz gpfajtkra elksztettek, mgis az eredeti programszvegk 70-80 %-ban azonos, mert C-ben rtk ket. Ez assembly nyelven nem lehetne. Gyors a fejleszts, a programok rvidek, gyorsak. Magas szint nyelvek - Pascal, dBase, Clipper, Fortran, BASIC Ezeknek a nyelveknek az utastsai egszen sszetett tevkenysgeket hajtanak vgre. A programok fejlesztse gyors, a gp tulajdonsgait is ki lehet hasznlni, mivel a nyelvekhez elre megrt programknyvtrak llnak rendelkezsre. A programok mrete nagy, legalbb nhnyszor tz kilobyte. Nagyon magas szint fejleszteszkzk Az utbbi vekben elterjedtek olyan fejleszteszkzk, amelyek segtsgvel gyorsan sszetett alkalmazsokat lehet ltrehozni, akr programozi tuds nlkl is. Ezeket 4GL (4. Generation Language - Negyedik genercis) nyelveknek hvjk. Visual Basic, Clarion, ReMind, Magic, Borland Delphi, Borland C Builder, Visual FoxPro, CA Visual Object stb. Az elkszlt alkalmazs termszetesen nem a leggyorsabb s legkisebb lesz, amit csak ki lehet tallni, de gyorsan elkszl s knnyen, egysgesen felhasznlhat, mivel nem a programoz tudsn mlik ez a tulajdonsga.

104

Megjegyzsek: A robot vezrlse alkalmas arra, hogy segtsgvel elsajttsa valaki az algoritmikus gondolkods elemeit. Az algoritmusok minden eleme felfedezhet a robot tevkenysgben. Amikor a robot egyms utni lpseket tesz meg a vezrl programban utastsok sorozatt kell kiadni. Amikor figyelni kell egy trgyat vagy kpet s ssze kell hasonltani dolgokkal, akkor az elgazs vezrlsi szerkezetet hasznljuk. Amikor oda-vissza jrkl, akkor ciklus vezrlsi szerkezetet kell hasznlni. Az egyre bonyolultabb tevkenysgeket rszegysgekre bontva eljrsokat runk. A lts, informci bevitelvel egyenl, a beszd pedig informci kivitel, azaz input-output mveleteket is hasznlunk. A C nyelvet B. Kernighan tervezte, mikor egy opercis rendszer kifejlesztsre kapott megbzst. Az assembly helyett rt hozz egy fordtt, majd segtsgvel megrta a UNIX opercis rendszer egy vltozatt. A nyelv a professzionlis fejlesztk kztt npszer lett. Ennek tovbbfejlesztse az objektum orientlt nyelv a C++. Vegyes nyelv programozs esetn az assembly-n kvl C-t szoktak hasznlni. ltalban ms nyelvek elfogadjk trsnak, amikor vegyes nyelven rnak egy programot. A Pascal nyelvet eredetileg N. Wirth a Zrich Mszaki Egyetem tanra oktatsi clra tervezte. A Borland cg Turbo Pascal-jval lett vilghr a nyelv, ami a szabvny Pascal-nak a kiterjesztse. Mra ltalnos cl nyelvknt tetszleges programozsi feladatra hasznljk. A BASIC nyelv a hetvenes vekben lett npszer a jtkgpek miatt. Knny vele mkd programot rni, ezrt a kezdk elszeretettel hasznljk. Soha nem szabvnyostottk. A Microsoft ltal tovbbfejlesztett Visual Basic az egyik leggyakrabban hasznlt windowsos fejleszteszkz. A DOS is tartalmaz egy QBASIC nev vltozatot. A DBASE programozsi nyelve kifejezetten adatbzis-kezelsi feladatok megoldsra val s a DBASE adatbziskezel rendszerben lehet vele programokat rni s a rendszer segtsgvel futtathatk. Eredetileg ennek a fordtprogramjaknt szletett meg a CLIPPER programozsi nyelv, ami mra nll letet l s hatkonyabb mint az eredeti. Segtsgvel az alkalmazsok nll .EXE fjlknt futtathatk. Professzionlis nyelv.

10.2.3 A programozsi nyelvek msik fle osztlyozsa 10.2.3.1 Procedurlis nyelvek


A programozsi nyelveket szoks ms mdon is osztlyozni. A legelterjedtebb s leggyakrabban hasznlatos nyelvekben Pascal, C, C++, Basic, stb. van egy kzs momentum. Ezek gynevezett procedurlis-, vagy ms nven Neumann elv programozsi nyelvek. Kzs bennk, hogy a programot egyfajta tevkenysgek sorozataknt kpzelik el, ami mellesleg a leggyakrabban valban a leghasznosabb is. Tulajdonsgaik: Vannak vltozik, vannak adatszerkezeteik. A program s a memria fizikailag kzs memriban helyezkedik el, azaz a program llapott a memria llapota egyrtelmen meghatrozza. (Ha kimentjk a memriatartalmat, majd kikapcsoljuk a gpet s bekapcsols utn visszatltjk a memriatartalmat, akkor a program ugyanonnan fut tovbb) Az adatok beolvassa s kirsa a memriban trtn adatmsols eredmnye. Vannak vezrlsi szerkezeteik. A programnak mindig van eleje, a programoz ltal megszabottan a program minden pillanatban ismert helyen fut, s a megadott eljrsok lefutsa utn a program vget r. Sajnos ezek a nyelvek bizonyos feladattpusok megoldsra nem mindig clravezetk.

10.2.3.2 Automata elv programozsi nyelvek


Kpzeljnk el egy olyan esetet, amikor egy ipari robotot kell vezrelni egy szmtgppel. A robot llapota, helye, sebessge s mg nhny paramtere a fontos. Az ilyen robotokat vezrl szmtgpek ltalban nem nagy teljestmny PC-k, hanem a gp kpessgeihez tervezett fedlzeti szmtgpek, a megfelel clorien105

tlt nyelvvel. Az ilyen programozsi nyelveket automata elv programozsi nyelveknek hvjk. Tulajdonsgaik: A program s a vezrlshez szksges adatok elklnlten vannak a szmtgp klnbz cl memriaterletein. Az ilyen nyelveken nincsen vltoz, nincsen rtkads. Az ipari berendezs llapota egyttal a program llapott is jellemzi. A program vltoztatja a robot llapott. A klvilg fell a program paramtereken keresztl kapja meg az indtshoz szksges adatokat. Mivel csak bizonyos clok vgrehajtsra hozzk ltre a robotot, ltalban az ilyen rendszer csak adott tpus adatokkal tud dolgozni. Ennek a programozsi nyelvnek a tipikus pldja a LOGO programozsi nyelv.

10.2.3.3 Fggvnyelv programozsi nyelvek


A harmadik nagy nyelvcsaldot a fggvnyelv programozsi nyelvek alkotjk. Az ilyen nyelveken a programot fggvnyknt kpzelik el. A program futtatsa sorn a programot alkot fggvnyt rtkeljk ki. Ezeknek a nyelveknek a tulajdonsgai: Nincsenek vltozk, de a fggvnyeknek vannak paramtereik s van visszatrsi rtkk. Van feltteles elgazs, hiszen egy fggvnyt lehet gy definilni, hogy egy felttel esetn egyfajta defincija legyen, mg ha a felttel nem igaz, akkor ms definci legyen rtelmes. Van rekurzi, de nincsen ciklus, hiszen mint majd ksbb ltjuk minden ciklikus eljrst t lehet fogalmazni rekurzv eljrss. Az adatbevitel egy fggvny paramtertadsval valsul meg, az adatok kirsa a fggvnyek eredmnye.

10.2.3.4 Logikai nyelvek


A programozsi nyelvek egy specilis fajtjt jelentik a logikai nyelvek. A logikai nyelvek szerint a program egy kirtkelend logikai formula. A program vgrehajtsa a formula kirtkelst jelenti. Tulajdonsgai hasonlak a fggvnyelv programozsi nyelvekhez, csak egy lnyeges klnbsg van. Ltezik bennk a visszalpses keress, a backtrack eljrson alapul kirtkelsi rendszer. Ennek hatsra az ilyen nyelveken olyan krdseket lehet feltenni, hogy bizonyos alapadat halmazra feltesznk krdseket, s a program megadja a vlaszt, hogy a krdsre adott vlasz igaz vagy hamis. Ezt oly mdon teszi meg, hogy vgigprblja az adathalmaz sszes lehetsges llapott, megvizsglja, hogy a krds milyen vlaszt ad, s ha igaz a vlasz, akkor az adathalmaz pillanatnyi llapott adja vissza eredmnynek. A logikai nyelvek csaldjnak legelterjedtebb tagja a Prolog programozsi nyelv. Ha egy logikai nyelven meg lehet oldani, hogy a program a feltett krdsekre adott vlaszokat megjegyezze, akkor a program j adatok birtokba jut, az bvl azoknak az adatoknak a kre, amelyekre j krdseket lehet feltenni. Az ilyen nyelven megvalstott programok teht egyre bvl tudsbzis programok tanul programok. Valjban ezek a programok a feltett krdseket s a rjuk adott vlaszt programkd formjban elmentik, s az jabb futtatskor az j krdsre adott vlasz mr a rendszer adatai kztt van. A LISP programozsi nyelv alkalmas az ilyen feladatok megoldsra. Egyetlen hibja, hogy nem compileres, hanem interpreteres nyelv, ennek megfelelen igazn nagy mret programok nem futnak rajtuk elfogadhat sebessggel. A Magyar Tudomnyos Akadmia mestersges intelligencia kutatsval foglalkoz kutati hasznljk a fent felsorolt logikai tpus programozsi nyelveket. 10.3 Programkdols A programozsi feladatok megoldsa sorn eddig nem vettk figyelembe az egyes programozsi nyelvek specilis tulajdonsgait. Sajnos az algoritmus-ler nyelveken elksztett programokat mg a kivlasztott programozsi nyelveken kdolni kell. A kdols sorn szembetallkozunk az egyes programozsi nyelvek eltr tulajdonsgaival, nem csak a szintaktikus szablyok, hanem a szemantikai szablyok tern is. Eleve az algoritmus-ler nyelvek igazbl procedurlis nyelveknek tekinthetk, azaz az algoritmus kdolsa egy valdi programozsi nyelvre legknnyebben ilyen tpus nyelvekre megy.

106

10.3.1 Programozsi ttelek hasznlata


A programozsi ttelek a felhasznlt nyelvtl fggen ms s ms alakot lthetnek, amikor egy konkrt nyelven megvalstjuk ket. Ennek megfelelen a programozsi nyelvek lersnl kerltk a nyelvfgg rszek hasznlatt. A programozsi ttelek ismerete elsegti, hogy bizonyos tpusfeladatok megoldsnl felismerve a megfelel programozsi ttelt, a programoz sokkal gyorsabban kdolja le az algoritmust. Szkebb memria vagy httrtr esetn a programozsi tteleket nem lehet teljes mrtkben hasznlni. Ebben az esetben ragaszkodva a ttelek lelkhez, kerl utakat kell keresni. Pldul, ha tl nagy annak a tmbnek a mrete, amin munkt akarunk vgezni, akkor a tmbt helyettesthetjk egy vletlen elrs fjllal is, ahol a fjl rekordjai helyettestik a tmb elemeit. Termszetesen a program vgrehajtsi sebessge mr jval lassabb lesz, mintha az adat csak a memriban foglalna helyet, s a kd is bonyolultabb lesz, de megfelelen hajtja vgig a nagyobb adathalmazra is a kell mveleteket. Ha egy programozsi nyelv nem tmogatja a rekurzit, akkor a tanult mdon a rekurzv algoritmusokat t kell s lehet rni ciklusokat tartalmaz formba.

10.3.2 Egyes programozsi nyelvek eltr kdolsi lehetsgei, mdszerei


A klnbz programozsi nyelvek rendkvl sokfle lehetsget biztostanak arra, hogy ugyanazt az algoritmust hny flekppen lehessen kdolni. A tovbbiakban a programozsi nyelvek olyan eltr tulajdonsgaira szeretnnk felhvni a figyelmet, amelyek az algoritmus-ler nyelven megrt programok kdolsnl problmkat okozhatnak. Nvadsi szablyok Az algoritmusok rsakor egy alapvet szably, hogy beszdes azonostkat hasznljunk. Az eltr nyelvek az azonostk szmra eltr elrsokat adhatnak. Gyakori a nv hossznak maximalizlsa. A BASIC programozsi nyelv rgebbi kiadsai, de a Standard Pascal, Assembly s a C rgebbi implementcii maximalizltk a nv hosszt. A BASIC esetn ez kt karakter volt, a Pascal s a C esetn nyolc karakter. A Clipper programozsi nyelv tz karakterben maximalizlja az azonostk hosszt. Manapsg a Visual Basic, a Borland Pascal, s a C is legalbb 20 karaktert engedlyez az azonostk hasznlatra. Kisbet nagybet. A Pascal, a BASIC, a Clipper kzmbs a bet rsnak mdjra, nagybetre konvertlja belsleg az sszes azonostt, mg a C/C++, Assembly, Java, Javascript, PHP s Visual Basic kvetkezetesen elklnti a kisbets s a nagybetvel rott azonostkat. Ez sokszor igen nehezen megtallhat hibaforrs, ha a programoz sokat hasznlta a Pascal nyelvet. A BASIC nyelv korbban a vltozk definilsakor a vltoz nevvel megadta annak tpust is. Nem volt arra lehetsg, hogy tetszleges nevet adhassunk a vltoznak. Kdolskor sok hibt okozhatott. Beszdes azonostkat kell hasznlni. Ha a nyelv engedlyezi, akkor az algoritmusban hasznlt hossz neveket clszer hasznlni kivve, ha interpreteres nyelvrl van sz. Ez esetben valamilyen sszer kompromisszumot kell ktni a nv rthetsge s vgrehajtsi idejnek optimalizlsa kztt. Clszer betartani nhny jl bevlt szokst: Nhny jl bevlt szoks a vltoznevek nvadsaira az abc els betit paramtereknek hasznljuk, az i,j,k,l betket index, illetve segdvltozknak hasznljuk, az x,y,z.. koordinta kijellsre alkalmas vagy segdvltozknak. a min, max azonostkat, illetve ezeknek az sszetteleit mindig valamilyen maximlis vagy minimlis rtk kijellsre clszer hasznlni. a nagybets azonostkat konstansokra hasznljuk.

Kezdrtk adsnak szablya Az egyes programozsi nyelvek j vltozk ltrejttekor nem egyforma mdon kezelik a vltozk kezdrtkeit. Klnsen igaz ez az alacsony szint nyelveken. Ha egy tmb kezdrtkeit kiolvassuk C nyelven, valsznleg nagy meglepetsben lesz rsznk. A tmb memriaszemetet fog tartalmazni. A Pascal, a Basic, a Clipper s mg sok ms nyelv a ltrejtt vltoz kezdrtknek az aktulis tpusnak megfelel 0-t, res sztringet vagy hasonlt ad, de ebben nem lehetnk 100%-ig biztosak. Ennek megfelelen mindig kell kezdrtket adni egy jonnan ltrejtt vltoznak, akr loklis, akr globlis vltozrl van sz. 107

Nem minden programozsi nyelv tmogat minden tpus adatot A klnbz nyelvek ms s ms mrtkben tmogatjk az eltr adattpusokat. A kdolsnl ezt figyelembe kell venni. A lista adatszerkezetet kzvetlenl nagyon kevs nyelv tmogatja. Az Assembly nyelvnek termszetesen csak a byte illetve az integer, illetve a mutat adattpus ltezik. Semmilyen bonyolultabb adatszerkezet definilsra nincsen a nyelvben lehetsg. A BASIC pldul a rekordokat, a halmazokat illetve egyb sszetettebb adattpusokat nem tmogat,, mg a Pascal, C igen. A mutatkbl felptett adatszerkezetek olyan szerkezetek, amelyek nem minden nyelvben tmogatottak (Cben). A numerikus tpusokra a Pascalnak, a C-nek tbb, de a Basic-nek csak egy lebegpontos tpusa van. Az egsz numerikus tpusok esetn a legtbb nyelv ad egy clszeren hasznlhat alaprtelmezst, a ktbjtos, integer tpust. Ha az rtelmezsi tartomnyba nem fr be az rtk, akkor az adott nyelv lehetsgei kztt keresni kell egy ilyen tpust. A C s a Pascal knl hosszabb egsz tpusokat, de BASIC nem. A pointereket a Clipper, a BASIC, illetve a Visual Basic nem tmogatja. Ennek megfelelen dinamikus adatfoglals sem lehetsges a Visual Basic-ben. A Pointerek hasznlhatk s hasznlandk a C, C++, Pascal nyelvekben. Nincsenek pointerek a Java, s a Basicben. j adattpusok ltrehozsra nincsen lehetsg tbb nyelvben, mint pldul a BASIC, Javascript, PHP vagy a Clipper nyelveken, ms esetekben azonban igen. Csak az objektum-orientlt nyelvek tmogatjk az objektumok hasznlatt. Ennek megfelelen a Borland Pascal, Borland C++, a Microsoft C++, Visual Basic, Java, Javascript nyelvek objektum-orientltak. A Clippernek van objektum-orientlt kiterjesztse (Fivewin), azaz definilhatk s felhasznlhat benne objektumok. A tmbk kezelse A tmbk kezelse sem minden nyelvben egyforma. A Basic, Pascal, C, C++ nyelvekben elre kell definilni egy tmb mrett, mg a Visual Basic, Clipper nyelvekben lehetsg van a futs kzbeni tmbdefinilsra, st a tmb mretnek vltoztatsra is. A Java, Javascript, PHP s Clipperben pldul j adatot lehet a tmb rszv tenni, rgi adatot ki lehet venni, ekzben a tmb tbbi adata megmarad, s a tmb mrete megfelelen vltozik. A Clipperben s PHP-ban a tmbben nem csak azonos tpus adatok lehetnek. Menet kzben is tudunk egy tmb rszv tenni ms tmbket. Assemblyben nincsen tmb. Sztringek mrete A legtbb nyelven a stringeknek a mrete korltos, de nem egyformn. A BASIC, Visual Basic s a Pascal nyelvek csak a maximlisan 255 karakter hossz stringeket tmogatjk. A C s a Clipper, PHP stringjeinek mrete korltlan. Eltr lthatsgi szablyok A vltozk lthatsga nagyon fontos krds. A Pascal, a C, a Clipper s a Visual Basic, Javascript, Java, PHP jabb verzii nagyon kifinomult lthatsgi rendszerrel rendelkeznek, azonban ezek sem teljesen egyformk. Lnyegben azonban az algoritmus-ler nyelv szablyaihoz nagyon kzel llnak Eltr felttelvizsglat. Az egyes programozsi nyelvek a kifejezsek kirtkelsekor tbb fle elvet kvetnek. Egyes nyelvek a kifejezsben szerepl minden mveletet, fggvnyt kirtkelnek, mg msok egy kifejezs kirtkelsekor csak addig vizsgljk a kifejezst, amg az eredmny nem vlik egyrtelmv. Az aritmetikai kifejezseket ltalban mindig kirtkelik a nyelvek. Sajnos ilyenkor jnnek el a nullval val oszts, illetve a lehetetlen fggvnyargumentumok esetei is. Ezekben az esetekben gyakran a programoznak kell olyan kdot rnia, amely kizrja az ilyen eseteket.

108

A logikai kifejezsek kirtkelsnl a nyelvek ltalban berik azzal, hogy mihelyt biztos vgeredmny, a kifejezs tbbi elemt mr nem vizsgljk. A kifejezsek precedencija (ersorrend melyik lesz az elszr kirtkelt rsz-kifejezs egy sszetett kifejezsben) is hasonl. Ha egyenl egy kifejezsben tbb rsz precedencija, akkor clszeren zrjelezssel lehet megvltoztatni a kirtkelsi sorrendet. Ha nem vagyunk biztosak egy sszetett kifejezs kirtkelsi sorrendjvel kapcsolatban, akkor clszer hasznlni a zrjeleket, inkbb tbbet, mint kevesebbet. A kifejezseket ltalban a rendszerek balrl jobbra rtkelik ki. A fordtskor meg lehet adni olyan opcit, hogyha egy logikai kifejezs rtke eldl a teljes kirtkels vge eltt, akkor ne folytassa a kirtkelst. Assemblyben az sszetett kifejezsek kirtkelsre meg kell rni az arra alkalmas kirtkel kdot. Tmbhatrok vizsglata A programozsi nyelvek msknt viselkednek, ha az indexvltozk tmbhatron tlra mutatnak. A legtbb nyelv ilyenkor futs kzbeni hibt generl s a program lell, vagy hibakezel gra fut. A lells termszetesen hiba, amit korriglni kell. Van olyan eset, hogy az index tlfut a hatron, de mgsem okoz a programban valdi hibt, mert a tlmutats sorn kapott adat soha sem lesz kirtkelve, s azt az adatot sohasem mdostjk. Ebben az esetben a hibazenetnek nem clszer megjelennie. A Pascal s a C nyelvben van olyan lehetsg, hogy a rendszer olyankdot generljon, amely ellenrzi a hatrokat, de ezt az ellenrzst ki is lehet kapcsolni. A legtbb egyb nyelv szigoran rzi a tmbk hatrait. Ha bonyolult a kd s nem tudjuk pontosan megllaptani, hogy milyen krlmnyek kztt lpi tl a megadott terletet a program, akkor a legegyszerbb megolds, hogy megnveljk a tmb mrett annyival, amennyi a tllps. Ciklus tpusok A klnbz nyelvek nem hasznljk ugyanazokat a ciklus fajtkat. A kdolsnl erre figyelni kell. Az elltesztel ciklusokat a (Ciklus amg) a legtbb nyelv gy ismeri, s ugyangy hasznlja. A htulesztels ciklusoknl a Pascalnak a felttel kirtkelse pont az ellentte, mint a tbbi nyelvnek,
Ciklus Amg felttel igaz ciklus vge repeat Until nem felttel

A megszmllsos ciklusnl a legtbb nyelvben megvan a lpskz vltoztatsnak a lehetsge, kivve a Pascalt. Itt a for ciklus lpskze csak +1 vagy 1 lehet. Rekurzi lte Nem minden programozsi nyelv szereti hasznlni a rekurzit, de a legtbb nyelven azrt meg lehet oldani. A Pascal, a C, a Clipper vagy a Visual Basic, PHP, Javascript, Java kzvetlen rekurzival is elboldogul, de az egyes nyelvek knyesek a rekurzi mlysgre. A C, a Pascal esetn lehet lltani a verem mrett, gy a rekurzi mlysgt megbecslve knnyen tudjuk alkalmazni azt. A BASIC nyelv nem tartalmaz rekurzit, illetve a vltozk elhelyezsre nem ad semmifle mdszert. Az algoritmusok s a programozsi nyelvek kapcsolata Az eddigiek alapjn nyilvnval, hogy az algoritmusok br nyelvfggetlenek, a programkdolsnl nem mindig vihetk t egy az egyben az adott programozsi nyelvre, st esetenknt az adott nyelven elnysebb ms, az eredeti algoritmussal egyenrtk kdot kszteni. Termszetesen ez nem mindig szerencss, figyelembe vve a ksbbi javtsok, hibakeressek tnyt, de a programok hatkonysgnak javtsnl nagymrtkben segthet, ha a kdolsnl kihasznljuk a nyelv sajtossgait. Ha ilyen eltrseket visznk be a kdba, azt megfelelen dokumentlni kell.

109

A programszveg strukturltsga A legtbb esetben kzmbs, hogy a program szvege egy szveges fjl vagy tbb, de ha tbb fjl, akkor azok gyakran kln fordtsi egysget is alkothatnak. A Pascal, a C, PHP, Java, Javascript s Clipper esetn alkalmazhatk az gynevezett include fjlok, amelyek olyan kdot tartalmaznak, amelyet fordts kzben a fordt beemel a szvegbe s egytt fordtja le ket. Ms esetekben a fordt tbb klnll fordtsi egysget hoz ltre, amely a program fordtsnak klnbz fzisban, de a szerkeszts eltti fzisban szerkesztdik ssze. A C, s a Clipper nyelvek ignylik gynevezett header fjlok hasznlatt, amelyben a rendszer elre lefordtott programjai tallhatk. A Windows alatti programozs nagy elnye, hogy a Windows egysges bels programfelptsnek ksznheten lehet olyan programot alkotni, amelynek bizonyos rszei ms s ms programozsi nyelven kszlnek, s a kapcsolat kzttk csak a futtatskor jn ltre. Ez az jrafelhasznlhat programkomponensek hasznlatt nagyban elsegti. Memriamret Az egyes nyelvek a fejlds sorn klnbz stratgikat alkalmaztak a memriakezelsre s ezzel kapcsolatban az egyes program- s adatmodulok mretre vonatkozan. Ezek a stratgik mindig az optimlis sebessg kd megalkotst cloztk. Tudvalev, hogy ha egy programkd mrete nagyobb, mint 64 kb, akkor a memriacmzsre nem elg kt bjtot hasznlni. Ebben az esetben a kd lassabb lesz. A Pascal, a BASIC s a Visual Basic azt vlasztotta, hogy az egy fggvnybe, eljrsba tartoz programkd mrete nem lpheti tl a 64 kilobjtot. Rgebben a Pascal kd nem lehetett nagyobb ennl a mretnl. Az adatszegmensnl is volt hasonl korlt. Az egy struktrba tartoz adatok mrete nem lehet nagyobb 64 kilobjtnl. A C nyelv memriamodelleket lltott fel. A klnbz memriamodellek a kdra s az adatok mretre adnak fels korltokat egymstl fggetlenl, illetve adnak korlt nlkli memriakezelst. Egy tblzatot adunk meg: Adatok mrete < 64 k Kdmret < 64 k Kdmret > 64 k Small modell Medium modell Adatok mrete > 64 k Compact modell Large modell

Tiny esetn az adat + kd mrete < 64 K Huge esetn minden modul statikus adatai kln 64 k-ban troldik, mg a Large modell esetn az sszes statikus adat 64 K lehet csak A Clipper a C nyelv Large modelljt rklte (C-ben fejlesztettk). A Clipper hasznlja az n. overlay technikt, amikor a memria egy rszt a winchesteren trolva mindig a megfelel kd s adatrszletet tlti be a memriba, ezzel DOS alatt nagyobb programokat tud futtatni, mint a rendelkezsre ll DOS memria. Alprogramok hvsa Az egyes programozsi nyelvek ms mdot hasznlnak a programok eljrsainak meghvsra. Ez fleg a paramtertadst tekintve klnbzik. Ez alapveten a Pascal s a C nyelv paramtertadsra vezethet vissza. A Pascal esetn mindig ugyanannyi s ugyanolyan tpus vltoznak kell lennie a hvs helyn s a hvott eljrs fejlcben, mg a C esetn nem baj, ha nem egyeznek meg a szmok, a megfelel vltoz rtke vagy elveszik, vagy ha nem kap rtket, akkor vletlenszer rtkkel tltdik fel. Ha egy tvett paramter nem kap rtket, akkor csak arra kell vigyzni, hogy a nem meglv rtkt ne hasznljuk fel. A fentiekkel szemben a Pascal paramtertadsa gyorsabb, ezrt a Windows alap programozsi nyelvekben klnsen, ha ms nyelv fejlesztseket is akarunk hasznlni, akkor kln deklarlni kell minden nyelven a Pascal rendszer paramtertadst. Mivel a C nyelv ANSI fle szabvnyostsa nem a Pascal paramtertadsi konvencit hasznlja, ezrt a Windows al rt C nyelv programok tbbek kztt ezrt sem vihetk t egyszeren ms rendszerek al

110

10.4 A programok tesztelse, hibakeress A programok tesztelsnek clja, hogy a program vajon a bemenetekre a specifikci alapjn megfelel kimenetet szolgltatja-e. A specifikcinak megfelel programot helyes programnak hvjk. A programok tesztelse s a hibakeress sorn arra treksznk, hogy az eredeti specifikcinak minl jobban megfelel, illetve megfelel programot lltsunk el. Olyan tesztmdszereket kell hasznlni s olyan hibakeres eszkzket, amelyek a hibk nagy rszt kiszrik. Nhny tapasztalati tnybe, azonban bele kell nyugodni: A program hibinak szma s slyossga exponencilisan n a mrettel A hibajavts utn az sszes tesztelst clszer lefolytatni A hibt megszntet okokat kell megtallni s kijavtani Gyakran egy hiba megszntetse tbb msik hiba megjelenst vonja maga utn A program ksztje a legrosszabb tesztel. A fejlesztn kvl mssal is teszteltetni kell a programot. A fenti tnyeken kvl mg egy tovbbirl is kell szt ejteni. Nagyobb mret programok esetn 100%-osan hibtlan programrl nem lehet beszlni. A vilgon a legszleskrbb tesztelsnek a Windows95-t vetettk al. A program kiadsa tbbek kztt ezrt csszott majdnem egy vet. Mgsem lett hiba nlkli. A tapasztalat azt mutatja, hogy ha a kd 95 99%-a hibtlannak bizonyul, akkor a programot ksznek kell nyilvntani. A maradk hibk kijavtsnak kltsge ugyanis minden tekintetben olyan nagy, hogy nem ri meg az sszes hibt kijavtani. A fentiek alapjn a tesztels kritriumai A j tesztels nagy valsznsggel felfedi a hibkat A j tesztelsi eljrsoknak megismtelhetknek kell lenni rvnyes s rvnytelen adatokra is kell tesztelni Minden tesztesetet maximlisan ki kell hasznlni, azaz a legtbb hibt fel kell derteni Fel kell tenni a krdst, hogy mirt nem azt teszi a program, amit kellene volna s mirt azt teszi, amit nem kellett volna.

10.4.1 Statikus tesztelsi mdszerek


A statikus tesztelsi mdszerek a programkd vizsglatn alapulnak. Ekkor nem futtatjuk a programot. Br sokan azt gondoljk, hogy a ami hardvereknl nincs nagy jelentsge ezeknek a mdszereknek, hiszen a fordtk s interpreterek olyan jk, hogy mindenre vlaszt adnak, minden hibt megtallnak. Sajnos gyakori, hogy a fordtk nem tallnak meg minden hibt, amint az albbiakban ltszik is. Tovbbi problma, hogy egyes rendszerek s fejlesztsek esetn a fordts folyamata olyan hossz, hogy mindenkppen mr a kdot is tesztelni kell. (Gyakori, hogy a fejlesztk olyan gpen dolgoznak pnzhiny miatt, amelyek az adott fejleszt rendszer kvetelmnyeit ppen csak kielgtik. Ilyenkor egy fordts 5 15 perc, de akr tbb ra hossz is lehet.) Kdellenrzs A legegyszerbb lehetsg. Kinyomtatjuk, vagy a kpernyn tnzzk a kdot, miutn begpeltk. Clszer olyan editort hasznlni, amely kiemeli az adott nyelv kulcsszavait, esetleg sznnel vagy ms mdon elklnti az adatokat, az rtkad utastsokat. Ha lehet az program bevitelekor hasznlni kell a strukturlt rsmdot, ha akkor nem tettk meg, akkor utlag javtani kell a kdon. Figyelni kell, hogy az egyes programozsi egysgek kezdet s vge (begin End, {}, Procedure . Return, stb) megvan-e? Szintaktikai ellenrzs A legtbb fejleszt eszkz ma mr szintaktikailag ellenrzi a program kdjt s a megfelel sorban ki is rja a hibazeneteket. Az interpreteres nyelvek gyakran mr a programsor bevitelekor elvgzik az ellenrzst, mg a compileres nyelvek csak a fordts sorn. Szemantikai ellenrzs Lehetsges, hogy egy szintaktikailag helyes program valjban nem azt teszi, ami a dolga lenne. Az interpreteres rendszerek szemantikailag nem ellenrizhetik a bevitt kdot, hiszen ltalban nincsen a teljes rendszerre rltsuk. Ekkor csak a programoz tudja vgiggondolni, hogy programja valban logikailag megfelel, az alkalmazott algoritmusok valban a kell vgeredmnyt adjk, s a kdols megfelel az algoritmusnak.

111

A compileres rendszerek esetn elfordul, hogy a fordt figyelmeztet bizonyos utastsok szemantikai problmira. Gyakran tallnak az ilyen rendszerek felesleges vltozkat, olyan kdrszleteket, amelyek sohasem futnak le, mindig biztosan azonos rtket felvev vltozkat, stb. Az ilyen rendszerek hasznlata sem teszi nlklzhetv a kzzel trtn kdellenrzst. Azok a compileres rendszerek, amelyek kdoptimalizlst vgeznek, gyakran olyan assembly kdot hoznak ltre az optimalizls sorn, amely logikailag nem felelnek meg az algoritmusnak. Ekkor ki kell kapcsolni az optimalizlst. Inicializlatlan vltozk Meg kell keresni a kdban az inicializlatlan vltozkat, s kezdrtket kell nekik adni. Sok vratlan hiba ilyen okokra vezethet vissza. Egyes rendszerek csak lefoglaljk a vltozk szmra a memriaterletet, de nem adnak automatikusan nekik rtket. Ilyenkor az adott terleten lv vletlenszer memriaszemt lesz a kezdrtk. Felesleges utastsok kiszrse Gyakran kdolskor az algoritmusnak megfelel kdot runk, holott az adott nyelv ugyanazt a funkcit esetleg gyorsabban is meg tudja oldani. Az is elfordul, hogy pldul egy for ciklus ciklusvltozjnak egy eljrsba val belpskor kln rtket adunk. Ezekben az esetekben felesleges utastsokat helyeznk el, amelyek biztosan lasstjk a programunkat. Keresztreferencia tblzat Ha a programunkban lv vltozk rtkeinek vltozst nem tudjuk kvetni, akkor clszer keresztreferencia tblzatot kszteni. Erre a legtbb fordt kpes. Ez egy olyan tblzat, amely felsorolja, hogy az adott vltoz hol kap rtket, illetve hol trtnik hivatkozs r a program sorn. Ennek alapjn megllapthatjuk, hogy mely vltozkat hasznljuk a leggyakrabban. Az interpreteres nyelvek egy rsznl BASIC nem mindegy, hogy milyen sorrendben definiljuk a vltozkat, a korbban definilt vltozkat a rendszer gyorsabban ri el. Tpuskevereds Egyes interpreteres nyelvek a bevitelkor nem ellenrzik, hogy az rtkad utastsok kt oldaln ugyanolyan tpus rtkek szerepelnek-e. Ms rendszerek, mint pldul a Clipper fordtsi idben nem is tudja elvileg sem meghatrozni egy vltoz tpust. Ezeknek a rendszereknek ltalban ez erssgk, hiszen futskor dlhet el, hogy az adott vltoz milyen rtket kap, szabadabb kdot lehet ltrehozni, de egyttal a tesztelsnl s hibakeressnl htrnyuk, hiszen csak futs kzben derlhetnek ki az esetleges problmk.

10.4.2 Dinamikus tesztelsi mdszerek


A programok hibinak egy rszt a statikus tesztelsi mdszerekkel ki lehet szrni, de vannak olyan helyzetek, hogy csak a futs kzbeni ellenrzs segt. Hogy egy-egy teszt minl tbb tulajdonsgot ruljon el a programrl az albbi mdszereket lehet alkalmazni:

10.4.2.1 Fehr doboz mdszerek


Az utastsok lefedsnek elve A program minden utastst legalbb egyszer vgre kell hajtani. (Sajnos tapasztaltam mr olyan esetet, amikor egy fejleszt eszkz nem volt hibamentes s a lersok szerint j program nem azt hajtotta vgre, amit kellett.) Dntsek lefedsnek elve A programban lv dntsek minden kvetkezmnyt vgig kell prblni. A dntseket igaz s hamis esetben is vgig kell prblni. A felttelek lefedsnek elve A programban lv feltteles elgazsokat minden felttelre ki kell prblni, illetve az logikai sszekt mveleteket minden lehetsges helyzetre ki kell prblni.

112

10.4.2.2 Fekete doboz mdszerek


Ekvivalencia osztlyok ksztse A lehetsges bemen adatokat oly mdon kell csoportostani, hogy milyen kimen adatot vrunk tlk. Ezeket ekvivalencia osztlyoknak hvjuk. Nyilvn ha egy ekvivalencia osztly egy elemre a helyes kimenetet kapjuk, akkor az osztly tbbi elemre is helyes eredmnyt kell kapnunk. Minden ekvivalencia osztlyra tesztelni kell a programot. Hatreset analzis Ha a lehetsges bemen adatok ekvivalencia osztlyait helyesen is llaptottuk meg, s gy talljuk, hogy az osztlyokra megfelel vlaszt ad a program, mg mindig meg kell vizsglni, hogy az ekvivalencia osztlyok hatreseteit hogyan kezeli le a program. Gyakran az ilyen helyzetben adott hibs eredmny helytelen algoritmusra, gondolatmenetre vagy tlzott egyszerstsre vezethet vissza Stressz teszt A programokat biztosan rossz bemen adatokkal is tesztelni kell. A programok fejlesztse sorn a fejleszt ltalban felttelezi, hogy a felhasznl csak helyes dolgokat mvel, pedig ez nem gy van. A felhasznl sokkal gyakrabban tved, hibzik, mint azt a legtbb fejleszt kpzeln.

10.4.2.3 Specilis tesztek


Hatkonysgi tesztek A programok tesztelsnek utols fzisa, annak megllaptsa, hogy milyen hatkony a program, illetve mennyire jl felhasznlhat. A tesztelsek sorn meg kell llaptani, hogy a program a meghatrozott hardveren egyltaln fut-e, megfelel sebessggel fut-e. Ha nem fut, vagy a sebessge nem megfelel, akkor meg kell keresni azokat az okokat, amelyek a megfelel futst megakadlyozzk, s annak megfelelen kell mdostani a programot, akr az algoritmusok szintjre is visszamenve. Biztonsgi teszt A programoknak stabilaknak kellene lennik, nem szabadna elre lthat okok miatt lefagyniuk. Ezekre valk a biztonsgi tesztek. A programot nagyon kevs s tl sok adattal is tesztelni kell, hogy nincsenek-e memriakezelsi problmi, szndkosan a legelfogadhatatlanabb adatokat kell bevinni, szablytalanul lelltani, hogy kiderljn, vajon a program kpes-e helyrelltani az ilyen esetekben is a mkdst. Pldul adatbzis-kezel rendszerek esetn fontos, hogy szablytalan lells utn az adatok ne srljenek meg, s az jraindts utn folytathat legyen a munka)

10.4.3 Hibakeressi mdszerek


A kvetkezkben nhny ltalnos jelleg mdszert adunk a hibk megkeressre. Indukcis mdszer Az indukcis mdszer lnyege az, hogy keresnk egy olyan bemeneti adathalmazt, amire a program jl mkdik, majd ennek az adathalmaznak megkeressk azt a hatrt, amelyre szerintnk szintn mkdik a program. A kiterjesztsen bell mg prblkozunk. Ha mindent rendben tallunk, akkor tovbb tgtjuk a bemen adatok krt s tovbbra is vizsgljuk, hogy az adatokra a program helyesen vlaszol-e. Ha brmilyen ponton gy talljuk, hogy a program a bemeneti adatokra hibs vlaszt ad, akkor megprbljuk leszkteni a bemeneti adatoknak azt a halmazt, amelyre hibs vlaszt ad a program. Egy pldn keresztl szeretnm illusztrlni az indukcis mdszert. Ha egy program bizonyos bemeneti paramterek hatsra jl mkdik, pl 100, 101, 102 adatokra jl mkdik, akkor felttelezzk, hogy legalbb ezerig jl fog mkdni. Megprbljuk ebben a nagysgrendben. Tegyk fel, hogy nincs problma. Ekkor feltesszk, hogy a program az 1000-es nagysgrendbeli adatokkal is jl mkdik. Ha pldul 1000, 1001, 1002-re nem jl mkdik a program, akkor keresnk mg ugyanabban a nagysgrendben, j adatokat, pldul 1099-et, amelyre feltevsnk szerint jl kellene mkdnie. Ha arra az adatra jl mkdik, akkor a hiba az ezer krnyki tesztadatokra jellemz, ha hibzik, akkor nyilvnvalan a nagyobb adatokra is hibsan reagl. 113

Dedukcis mdszer Ha a programunk bizonyos bemeneti adatokra hibsan, ms adatokra jl reagl, akkor megvizsgljuk, hogy a bemeneti adatokban mi az a kzs tulajdonsg, ami szerint a vgeredmny osztlyozdik. Ha talltunk ilyen tulajdonsgot, akkor jsolunk, s a jslat alapjn j tesztadatokat lltunk el, majd teszteljk a programot. Ha a tesztadatokra a vrt eredmnyek szlettek, akkor felttelezsnk j volt, a hiba valban a bemen adatok kzs tulajdonsgai alapjn kereshet meg. Ha nem a felttelezseknek megfelel eredmnyek szletnek, akkor nem sikerlt megtallni az eredeti bemeneti adatokban a csoportkpz faktort, teht j tulajdonsgot kell keresni rajtuk. Pldul: Egy program a 3, 5, 7, 11 adatokra j, a 10, 12 adatokra hibs eredmnyt ad. Felttelezzk, hogy a j bemeneti adatokban a kzs az, hogy a szmok prmszmok vagy pratlan szmok. Kiprblunk olyan rtkeket, amelyek prmek, pldul a 17 s kiprbljuk a 2-t is. Az egyik felttelezsnket ki fogja ejteni a kt prba. Visszalpses mdszer Ennek a mdszernek az a lnyege, hogy a program vgeredmnyt vizsglom, hasonltom ssze a specifikciban megjelltekkel s a programban visszafel lpkedve keresem meg a hibs lpst. Tesztesetek felhasznlsa A program specifikcija alapjn teljes kr, krltekinten sszelltott teszthalmazt ksztnk s a tesztesetek felhasznlsval, valamint a kapott vgeredmny felhasznlsval kvetkeztetnk a hiba okra.

10.4.4 Hibakeressi eszkzk


A modern fejleszt rendszerek majd mindegyike rendelkezik mr valamilyen hibakeres szolgltatssal. A rgebbi rendszerek a program futsa kzben bell hibra gyakran egy memriacm, esetleg a stack, kirsval reagltak s ltalban az opercis rendszer nem tl szleskr szolgltatsait hasznltk erre a clra. Ksbb megjelentek az olyan fejleszt rendszerek, amelyek a hiba megjelensekor kirtk, hogy a forrsszveg melyik sorban, milyen jelleg hiba trtnt, akr egy hibakddal, akr szvegesen is. A mai integrlt fejleszteszkzk nmelyike kpes arra, hogy a hibnl kijelezze a hibs utastst, adjon tippet a hiba okra, rja ki a verem llapott, a vltozk pillanatnyi rtkt. A tovbbiakban tnzzk, hogy melyek azok az eszkzk, amelyeket a fejleszt felhasznlhat hibakeressre. Nyomkvets A program vgrehajtsa sorn a nyomkvet eszkz kirja, hogy melyik utastsnl, melyik sorban fut ppen a program. A Borland Pascal vagy Borland C/C++ esetn a program a kperny egyik ablakban megjelenti a program kimenett, a msik ablakban pedig megjelenti a forrsszveget s jelzi, hogy ppen hol tart a program. A legtbb komolyabb hibakeres rendszer kpes arra, hogy az gy fut programot brmelyik pillanatban lelltsa. Debugging A debugger eredetileg a futtathat programok gpi kd visszafejtsre alkalmas eszkzt s a debugging magt a visszafejts folyamatt jelentette. Manapsg mr nem mindig az assembly nyelv kd vizsglata a clszer. Vannak olyan eszkzk, amelyek alkalmasak arra, hogy ha egy program fejlesztsi nyelvt ismerjk, akkor kpes legyen visszalltani az eredeti forrskdot tbb-kevesebb sikerrel. Ilyen eszkz ltezik assembly, Pascal, C, Clipper nyelvekre tudomsom szerint. Trspontok elhelyezse Ha egy nagyobb program mkdst vizsgljuk, a nyomkvets alkalmazsa esetleg annyira lelassthatja a program mkdst, hogy elviselhet idn bell nem jutunk el a vizsglat al vont helyre. Ilyenkor segt az, hogy trspontokat helyeznk el a programban. Ezeken a pontokon a program megll s megvizsglhat az llapota. A hibakeres rendszer tulajdonsgaitl fggen azutn a trspontoktl kezdve a program folytathat vagy flbeszakad. A nagyobb tuds rendszerek a kpernytartalmat elmentik a trspont eltt, majd visszalltjk a trspont utn.

114

Rszeredmnyek, llapot kiratsa Gyakori hibakeressi lehetsg. A program bizonyos vizsglt rszeire kir utastsokat tesznk, amelyek tjkoztatnak a program, vagy csak bizonyos vltozk pillanatnyi llapotrl. Az llapot kiratsa sorn clszer megvizsglni az adott programozsi egysgben szerepl vltozk rtkt, az adott eljrsnak tadott paramterek s a visszaadott paramterek rtkt. A kirats sszekapcsolhat trspontok elhelyezsvel is. Lpsenknti vgrehajts A trspontok utn a programot egy ideig lpsenknt is vgrehajtathatjuk. Ilyenkor a programkdban lpnk egyet majd figyeljk a program j llapott. Figyelnk a kpernytartalomra, a vltozk s paramterek rtkre, a fjlok llapotra. A lpsenknti vgrehajts sorn gyakran eljrst vagy fggvnyt hvunk meg a forrskdban. Ilyenkor ltalban kt vlasztsunk van. Vagy a meghvott eljrst, fggvnyt is lpsenknt hajtatjuk vgre, vagy a krdses rszt a program teljes sebessggel vgzi el. Nyilvn, ha biztosak vagyunk az adott fggvny, vagy eljrs hibtlansgban, akkor az utbbit vlasztjuk. A lpsenknti vgrehajtst a program teljes sebessg tovbbi futtatsval is lehet ltalban kombinlni. Tervezs fzisba val visszalps Ha vgkppen nem talljuk meg a hibkat az eddigi nagygykkal, akkor bizony vissza kell lpni a tervezs fzisba s vagy algoritmus szinten, vagy kdolsi szinten jra kell gondolni a hibs rszt, htha valami elemi szemantikai hiba okozza a hibs mkdst. Ciklusok befejezdsnek vizsglata Sok hiba feldertsnek mdja, a ciklusok befejezdsnek vizsglata. A programkdok legalbb 30% ciklusokbl ll, s a ciklusokba helytelen kilpsi felttelei, vagy a megszmllsos ciklusoknl a ciklusvltoz kezd s vgrtknek helytelen meghatrozsa az oka az olyan fajta hibknak, amelyek nem minden esetben fordulnak el. Ezt a vizsglatot a hatreset analzissel is clszer sszektni. Vltozk rtknek menet kzbeni kiratsa llapotdefinci Egy gyakran hasznlhat mdszer. A programoz a programkd vagy algoritmus alapjn meghatrozza, hogy bizonyos kezdrtkek alapjn a programnak egy adott helyen milyen llapotba kell kerlnie. Ha eltrst tapasztal a megkvnt s a tapasztalt llapot kztt, akkor a hiba okt nyilvn a kett kztt kell keresni s nyilvn a klnbsget kell tzetesen megvizsglni.

10.4.5 A tesztelk szemlye, szervezett tesztek


Mr korbban is emltettk, de most rszletesebben szlunk a tesztelk szemlyrl. Kztudott, hogy egy program fejlesztje egy id mlva a trivilis hibkat sem veszi szre. Ennek knnyen belthat okai vannak. Egy problma megoldsnak sorn a fejleszt gyakran elgondol bizonyos algoritmusokat, amelyeknek nem minden rszlett tisztzza le, majd ha a megvalsts sorn az algoritmus hibi nem lesznek nyilvnvalak, akkor gondolatban az algoritmus krdses rszt jnak fogadja el. Megknnyebbl attl a gondolattl, hogy az algoritmusnak az a rsze j. Ettl az llapottl csak keservesen tud megszabadulni s csak gy, ha jra elemzi, s jra megalkotja a krdses rszt. Sajnos az embernek a hiba felismersig, megtallsig nehz eljutnia. A programozs sorn szinte elkerlhetetlen, hogy a programoz kisebb nagyobb mrtkben ne trjen el az eredeti elgondolsoktl. Ekkor az algoritmus s a kd mr nem fog teljesen megfelelni egymsnak. Ez is okozhat olyan hibkat, amelyeket ksbb a fejleszt nem vesz szre. A fejleszts sorn gyakori, hogy a rszletkrdsekbe annyira belessa magt a fejleszt, hogy nagyobb sszefggseket nem fedez fel. Milyen mdon lehet kikerlni ezeket a csapdkat, hogyan lehet a tesztelst, a hibakeresst hatkonyabb tenni. A tesztek s a hibakeress sorn nem elg a kpernyn vizsglni a forrsszveget, ki is kell nyomtatni. A hagyomnyos papr alap vizsglds sok olyan sszefggst feltr, ami a kpernyn nem vlik nyilvnvalv.

115

Mindig kell olyan tesztel szemlyeket tallni, akik az adott fejlesztsi fzisban nem vettek rszt, az adott kdrszletet nem ismerik. A fejlesztnek hagyni kell a msik szemlyt, hogy amennyire lehet, egyedl rtse meg az adott rszletet, s egyedl keresse meg a krdses hibt. A tesztel szemlyek kztt kell lennie olyannak, aki szmtstechnikai, fejleszti szempontbl vizsglja a programot s kell lennie olyannak is, aki a felhasznl szakmai szempontjbl nzi a programot. A fejleszt s a majdani felhasznl nem egyforma mdon kzelti meg az adott problmt, ennek megfelelen nem ugyanazok a dolgok fontosak egyik szmra, mint a msik szmra. A legjobb tesztels az les adatokon, les helyzetben trtn tesztels. Egy program elkszlte utn az igazi felhasznlk visszajelzsei lesznek igazn a felhasznli teszt szempontjbl lnyegesek. 10.5 Hatkonysgvizsglat, optimalizls A programok hatkonysgt tbb mrszm tudja csak lerni. A program hatkonysgnak legfontosabb kritriumai, A program futsnak sebessge, A program mrete A program bonyolultsga. Manapsg a szoftverek szleskr elterjedtsgnek ksznheten a programok hatkonysghoz mg hozzjn a programok felhasznlhatsgnak, bartsgossgnak szempontja is. E fenti kritriumok kzl sajnos az albbi sszefggsek llnak fent: A programok futsnak sebessge s a program bonyolultsga ltalban egymsnak ellentmond fogalmak. A program mrete arnyos a program bonyolultsgval. A program mrete fordtottan arnyos a program futsnak sebessgvel.

10.5.1 Rendszerek hatkonysgnak megllaptsa


A programok hatkonysgnak megllaptsnl a legjobban mrhet fogalom a futsi id megllaptsa. A futsi id megllaptsnl mindig tbb mrst kell vgezni, s figyelni kell az egyes futsi idket. Csak gy lehet megbzhatan kiszrni a szmtgpen fut alkalmazsok, az opercis rendszer s a hardver egyb paramternek vltozsait. Azt is clszer megllaptani, hogy klnbz konfigurcikon hogyan mkdik a program, melyek azok a paramterek, amelyek a program maximlis hatkonysgt, sebessgt biztostjk. A mrsek sorn fel kell jegyezni az tlagos, a maximlis s a minimlis futsi idt. Termszetesen az tlagos id lesz a legjellemzbb a program sebessgre. Korbban jeleztk az algoritmusok hatkonysgnak jellemzit (O(1), O(N), stb...) ltalban a szoftverek hatkonysga is hasonlkppen jellemezhet.

10.5.1.1 Egzakt mdszerek


A program sebessgt gy tudjuk megllaptani, hogy a mrend rsz elejn s vgn megmrjk a gp bels rjnak idpontjt, majd a kt idt kivonjuk egymsbl. Vannak olyan szoftverek, amelyek segtsgvel a futsi idket egzakt mdon mrni lehet. Ezek a profilernek nevezett programok. Segtsgkkel a program optimlis futsa szempontjbl sok klnbz mrst lehet elvgezni. A Borland Pascal rsze egy ilyen profiler program. Specilis opercis rendszer szolgltatsok hvsbl mgis megllapthat a program futs kzbeni mrete. Egy program bartsgossga nem mrhet egzakt mdon.

10.5.1.2 Kzi mdszerek


A programok sebessgt sokszor a forrsszveg hinyban nem tudjuk mrni egzaktul. Ekkor stopperrel egy batch llomnybl indtva lehet lefuttatni a programot s mrni a sebessget. Ha a program futsa tl gyors, akkor a batch fjlba egy olyan ciklust kell beiktatni, amely kellen sokszor fut le ahhoz, hogy a program sebessge mrhet legyen. Ha megmrtk a program sebessgt, akkor meg kell mrni a batch file futsnak sebessgt is, gy kaphatjuk meg a program futsnak sebessgt. A program memriban elfoglalt mrett gyakran nem tudjuk megllaptani, de a httrtron elfoglalt mretbl, az adatllomnyok mretbl, esetleg kvetkeztethetnk r. 116

A program bonyolultsga nem egzakt fogalom, ezrt mrse nem is lehet egzakt. Viszonytani kell a feldolgozand adatok bonyolultsgt a programkd sszetettsghez. Ha a kett kztt kiugr arnytalansgot tallunk, akkor a kd tl bonyolult. Egy program bartsgossgnak mrse csak tbb, klnbz kpzettsg tesztel tesztelse utn llapthat meg. Clszer a programot egymstl fggetlen szemlyekkel teszteltetni, s elre lerni azokat a szempontokat, amelyeket pontozniuk kell egy elre megadott skla szerint. Elre el kell dntennk, hogy az egyes kategrikat a vgs rtkelsnl milyen sllyal vesszk figyelembe. A tbb szemly az egyni zlsbeli klnbsgeket, mg a klnbz kpzettsg a kpzettsgbl fakad hibkon val tsiklst kszbli ki. Ha van hasonl feladatokat ellt msik program, akkor clszer a kt program sszehasonlt tesztelse is.

10.5.2 Globlis optimalizls


A tesztelsek sorn kiderlnek a program gyenge pontjai, elssorban a mret s a sebessgbeli hinyossgok. A program sebessgre s mretre tbb mdszer lehetsges. A programban legfontosabb, hogy a program egsze mkdjn optimlisan, ezrt elssorban globlisan kell megtallni azokat a tnyezket, amikkel javtani lehet a program sebessgt. Meg kell rteni a program sorn alkalmazott algoritmus s annak megfelelen, esetleg gyorsabbra cserlni azt. Cskkentsk a ciklusok vgrehajtsi szmt (Pldul, ha N egsz szm kzl keressk a prmeket, akkor N/2 helyett elegend csak ngyzetgyk N-ig keresni a prmeket) A ciklusok vgrehajtsi idejt cskkentsk Fel kell hasznlni a feladat specilis tulajdonsgait, (pl. ha a keress rendezett halmazon trtnik, akkor a gyorskeress log2N lps alatt zajlik le tlagosan, mg lineris keressnl csak N/2 lps alatt. Matematikai elvek, ismeretek, defincik hasznlata. Kisebb mret, gyorsabban feldolgozhat adattpusok hasznlata. Ne hasznljunk klnbz tpusokat egy kifejezsben Fggvnyek ismtelt kirtkelse helyett ha nem vltozik a fggvny rtke menet kzben temporary vltozban troljuk a fggvny rtkt. A feltteleinket egyszerstsk Az adattpusokat gondosan vlogassuk meg, a helykihasznls s a feldolgozs sebessgnek figyelembevtelvel. Bekapcsoljuk a fordtkba beptett kdoptimalizl opcikat. Ennek az a veszlye, hogy bizonyos esetekben a rendszer nem azt a gpi kd programot hozza ltre, amit mi elterveztnk.

10.5.3 Loklis optimalizls


Ha mr kifogytunk a globlis optimalizls tleteibl, akkor j szolglatot tehet, ha megvizsgljuk, melyek azok a programok, amelyekben a legtbbet tartzkodik a program. Ezeket az eljrsokat kell gyorsabb tenni, ekkor az egsz program futsa felgyorsul. Milyen mdon? tvizsgljuk az algoritmust s megnzzk, hogy nincsen-e gyorsabb, helyettest algoritmus. A specilis esetek kiszrse. Az eljrsban konkrt rtkadssal vagy egyb mdon kizrjuk a specilis eseteket, a szls rtkeket kln kezeljk le, nem prblunk ltalnos megoldst adni ezekre az esetekre. Hatkonyabb programkdolsi technikt alkalmazunk. A tapasztalat azt mutatja, hogy a hatkonyabb programkdok egyttal nehezebben kvethetk is. Elssorban C nyelven van annak jelentsge, hogy milyen kdot r le a programoz, mivel a lert kdtl nagymrtkben fgg a gpi kd vgeredmny. Egyes fordtk a fordts sorn keletkezett kdot optimalizljk, a programoz ltal lert kdhoz kpest gyorsabb assembly kdot hoznak ltre. Sajnos egyes esetekben a kdoptimalizls vratlan eredmnyeket is hozhat, ezrt kell krltekintssel kell alkalmazni. Rendszerkzeli betteket alkalmazunk (Assembly csnjn kell bnni vele!) Trkkket alkalmazunk, amely kihasznlja a processzor, az opercis rendszer vagy a nyelv egyes specilis tulajdonsgait. (Vigyzni kell vele, knnyen rthetetlenn s visszafejthetetlenn tehetjk a programunkat) 117

Kisebb mret, gyorsabban feldolgozhat adattpusok hasznlata. Megjegyzend, hogy a PC-ken az Integer adatokat dolgozza fel leggyorsabban az opercis rendszer. Ha mr leteszteltk a programot, akkor kikapcsoljuk a fordtprogram hibaellenrz kapcsoljt, ami gyorsabb s kisebb programkdot hoz ltre.

10.5.4 Hatkonysg transzformcik


Legyenek az albbi definicik: F Felttel U1, U2, U3, ... utastsok Ha F akkor U1;U2 klnben U1;U3 U1 Ha klnben U3 F akkor U2

Ha az F-et nem mdostja az U1. Ha F akkor U2 klnben U3 U1 Ha az utastsok sorrendje nem szmt.

Ha F klnben U2;U3

akkor

U1;U3 Ha F akkor U1 klnben U2 U3 Mindig megcsinlhatjuk.

Ha F1 s F2 akkor U

Ha F1 akkor Ha F2 akkor U Akkor, ha F1 rvid, F2 bonyolult. (A Pascalban bellthat, hogy ne rtkelje ki F2-t, ha F1 hamis.)

Ha F1 akkor U1 klnben Ha F2 akkor U2

Ha F1 akkor U1 klnben U2 Ha F1= NOT F2.

Ha F akkor U1 Ha F akkor U2

Ha F akkor U1;U2 Ha U1-nek nincs hatsa F-re.

Ciklus amg CF U1;U3 Cvge Ciklus amg CF U2;U3 Cvge

Ciklus amg CF U1;U2;U3 Cvge Ha U1 s U2 fggetlenek egymstl, s nincsenek hatssal CFre, legfeljebb U3-ra.

118

U Ciklus amg Cf U Cvge

Ciklus U amg CF Mindig megcsinlhatjuk, de van, hogy nem clszer.

Ciklus amg CF Ha F akkor U Cvge

Ha F akkor Ciklus U Cvge Ha F nem vltozik a ciklus futsa alatt. amg CF

Ciklus amg CF U1;U2 Cvge

U1 Ciklus amg CF U2 Cvge Ha az U1 vgrehajtsa fggetlen a ciklustl s sajt maga korbbi vgrehajtstl.

10.6 Dokumentci

10.6.1 A dokumentci formja


Fel lehet tenni a krdst, hogy a dokumentci milyen formban jelenjen meg, papron vagy elektronikus ton. Mind a kt megoldsnak vannak elnyei s htrnyai. A papron lv dokumentci ttekinthetbb, jobban lehet benne bngszni, ismersebb a hasznlata egy kezd felhasznlnak vagy a rendszerrel most ismerkednek, de bizonyos specilis informcikat nehezebb megtallni benne, mg akkor is, ha tartalomjegyzk, s trgymutat van benne. Nem utolssorban egy tbb szz oldalas knyv papr- s nyomtatsi kltsge tetemes lehet. Az elektronikus dokumentciban knnyebb szavakra, kifejezsekre keresni, az elfoglalt trterlet minimlis, tartalomjegyzk trgymutat alapjn lehet keresni benne, s paprkltsg sincsen, ugyanakkor a problmakrrel frissen ismerkedk nehezebben tudjk megtenni az els lpseket, mivel nincs olyan ttekintsk a dolgokrl. A clszersg azt diktlja, hogy ltalban legyen elektronikus s papr alap dokumentci is egy rendszerhez, figyelve arra, hogy a rendszer felhasznlsnak klnbz fzisaiban ms s ms a clszer formtum. Ha a dokumentci terjedelme nem tl nagy, akkor mindenkppen mind a kt formban clszer kzreadni, ha a mret indokolja, akkor pedig meg kell teremteni annak a lehetsgt, hogy az elektronikus dokumentcit megfelel formban ki lehessen nyomtatni. A nagy szoftveres cgek, mint a Microsoft, Novell, Lotus stb a felhasznli s a fejleszti dokumentcikat manapsg csak elektronikus ton mellkelik a szoftverez, de olyan formban, hogy azt brki kinyomtathatja. Ezekez nha kln is meg lehet vsrolni, slyos tzezrekrt.

10.6.1.1 Az elektronikus dokumentci szoksos eszkzei


Szvegszerkeszt Brmilyen dokumentci is kszl, egy szvegszerkeszt alapvett alapveten hasznlni kell. Nha clszer egyszer ASCII editort hasznlni, de figyelni kell a kdlapokra. DOS-os 437-es kdlapot hasznl editor a Windowsban nehezen olvashat fjlokat eredmnyez, mg 852-es kdlapot hasznlva a 437-es kdlapban 119

nem lehet olvasni az llomnyokat s ekkor mg nyomtatsrl nem is beszltnk. Clszeren hasznlhat windows platformon egy Microsoft Office vagy egy Open Office is. Szoftverek formlis lersra hasznlhat a Microsoft Visio, amely UML eszkzkkel, s egyb alkalmazsler vizulis eszkzkkel rendelkezik. Adobe Acrobat formtum Az Adobe cg rgta piacon van a PDF (=Portable Document Format) formtummal. A fjlok szerkesztshez az Acrobat Composer-t vagy ms PDF nyomtatt ( Primo PDF printer driver) lehet hasznlni, vagy ms eszkzket. A PDF llomnyok ellltsnak elterjedt mdszere, hogy a rendszerbe egy PDF nyomtatt teleptnk, ami a kimenetet PDF llomnyknt generlja. Az Acrobat Reader (ACROREAD.EXE) program olvassa, jelenti meg az ilyen fjlokat. A fjlokat kinyomtatva, a papron ugyangy jelenik meg a tartalom, mint a kpernyn. Az Acrobat Reader freeware-knt is hozzfrhet. Az olvasshoz lehet hasznlni a kevesebbet tud s free Foxit Reader-t is. HTML formtum Az Internet elterjedsvel egyre gyakrabban adjk a programok dokumentcijnak egy rszt HTML formtumban. Az ilyen fjlok szerkesztshez vgs soron egy tetszleges editor, no meg egy j HTML kziknyv is elg. Ha komolyabb oldalakat akarunk tervezni, akkor clszer lehet valamilyen erre a tmra kihegyezett programot hasznlni, pldul a Netscape Composer, Microsoft Frontpage, Adobe PageMill, Macromedia Dreamweaver, stb. programokat vagy ms az internetrl letlthet free programokat is. A HTML oldalak megjelentshez csak egy bngsz program kell, ami ltezik akr DOS-os krnyezetben is.

10.6.1.2 A papr alap dokumentci


Nyilvn a papr alap dokumentci elksztse eltt ltrejn egy elektronikus formtum is. Ehhez mindenkppen a korbbiakban felvzolt eszkzk kellenek. A kinyomtats sorn azonban vigyzni kell, hogy a nyomtatk alaprtelmezsnek belltott A/4-es (amerikai nyomtatknl a Letter) paprmrettel kinyomtatott dokumentci nem hasznlhat jl, tlsgosan nagy. Elterjedt formtum a B/5-s, amely az A/5-nl s az A/4 kztt van. Nem tartja meg az aranymetszs szablyait, annl kicsit szlesebb. A dokumentciban lv brkat, fnykpeket megfelel minsgben csakis lzernyomtatk kpesek kinyomtatni, de csak fekete-fehrben. A sznes festkszrs elven mkd nyomtatk csak specilis papr felhasznlsval produklnak megfelel minsget.

10.6.2 Felhasznli dokumentci


A felhasznl a program hasznlata sorn tbb klnbz fzison megy keresztl. A program teleptse utn csak ismerkedik a szmra kialaktott rendszerrel, ekkor sok alapvet ismeretre van szksge. A hasznlat sorn egyre tbb aspektust ismeri a rendszernek. Ekkor mr inkbb rvid, emlkeztet segtsgre van csak szksge. A felhasznli dokumentci ksztsnek clja, hogy a programrendszer felhasznlja el tudjon igazodni a telepts, a hasznlatbavtel, az zemszer hasznlat s az esetlegesen felmerl hibk sorn. Ennek megfelelen a felhasznli dokumentcinak is tbb rszbl kell llnia. Az egyes rszeknek elektronikus vagy papr alapon clszer ltezni, esetleg mind a kt formban. A felhasznli dokumentcinak a kvetkez rszeket kell tartalmaznia: ltalnos lers a rendszerrl, amiben a rendszer clja, a kpessgei le vannak rva. A rendszer hardverfelttelei: (minimlis, ajnlott) processzor, memria, megjelent fajtja, szksges hely a httrtron, nyomtat kell-e, egr kell-e, egyb specilis hardver kell-e. A rendszer szoftverfelttelei: opercis rendszer fajtja, verziszma, esetlegesen szksges kiegszt, egyttmkd programok, mint pl. megjelentk, szvegszerkesztk, stb Hlzati alkalmazs esetn, a hlzati opercis rendszer fajtjt, egyb ismrveit. A rendszer teleptsnek mdja, lehetleg lpsrl-lpsre lerva. A rendszer indtsa A felhasznli Interface ltalnos lersa (menrendszernek, prbeszdablakok) Az zemszer mkdshez szksges rszek lersa pontonknt. A karbantartsi feladatok elvgzshez szksges rszek lersa pontonknt. 120

A kpernyn megjelen listk, beviteli helyek, nyomtatsi listk lersa. Elfordul hibazenetek magyarzata, s azok javtsnak mdja. GYFK Gyakran Feltett Krdsek. A programok mkdse sorn a felhasznlk ltalban ugyanazokba a problmkba botlanak bele, s ugyanazokat a krdseket teszik fel. A krdseket s a rjuk adott vlaszokat is clszer befoglalni a dokumentciba A felhasznli segtsgkrs s a vlasz mdja. Tovbbi fejlesztsi tervek, irnyok.

10.6.3 Fejleszti dokumentci


A programok ksztse sorn a fejleszt elbb-utbb szembetallja magt azzal a helyzettel, hogy a rgebben rt programok mkdsre, programrszletekre mr nem emlkszik tisztn. Gyakori az is, klnsen hoszszabb fejleszts alatt, hogy a tervezs sorn mr jl megtervezett rszleteken nem igazodik ki. A ksbbi tovbbfejlesztseket, hibajavtsokat sem felttlenl ugyanazok a szemlyek vgzik, akik annak idejn a rendszert fejlesztettk. Mindezek az okok igazoljk a program ksztse sorn a fejleszti dokumentci ltrehozst. A fejleszti dokumentci clja, hogy a rendszer fejlesztse, a ksbbi hibakeress, illetve a tovbbfejlesztsek sorn a rendszerrl rszletes, brki hozzrt ltal felhasznlhat dokumentci legyen. A dokumentcinak minden olyan szksges informcit tartalmaznia kell, ami alapjn egy teljesen idegen fejleszt is sikeresen elvgezhesse a szksges beavatkozsokat. A fejleszti dokumentcit nem szoks tadni a megrendelnek. Ennek kt oka van. ltalban a megrendel nem is tudja hasznlni a fejleszti dokumentcit. A msik ok pedig az, hogy ha tadjuk a fejleszti dokumentcit, akkor evvel szabad utat adunk msoknak is a rendszer tovbbfejlesztsre. A fejleszti dokumentcinl nem elsrend fontossg, hogy papron is meglegyen a dokumentci, de mindenkppen olyan formban legyen, hogy vekkel ksbb is felhasznlhat legyen. A fejleszti dokumentcinak tartalmaznia kell a kvetkezket: A rendszer tervezse sorn ltrejtt minden dokumentcit, azaz A rendszer cljt, (specifikci) a tervezsnek alapelveit, Kpernyterveket, Nyomtatsi listkat, Az adatszerkezeteket, Algoritmusokat (Az algoritmusokat magyarzatokkal kell elltni) A fejleszts hardverfeltteleit: (minimlis, ajnlott) processzor, memria, megjelent fajtja, szksges hely a httrtron, nyomtat kell-e, egr kell-e, egyb specilis hardver kell-e. A fejleszts szoftverfeltteleit: opercis rendszer fajtja, verziszma, esetlegesen szksges kiegszt, egyttmkd programok, mint pl. kpszerkesztk, megjelentk, szvegszerkesztk, egyb editorok stb Hlzati alkalmazs esetn, a hlzati opercis rendszer fajtjt, egyb ismrveit. A felhasznlt fejleszt eszkzk lerst: A fejleszt eszkz elnevezse, verziszma, Esetleges kiegszt library-k neve, verziszma, Esetleg maga a kiegszt rendszer elektronikusan. Az elkszlt szoftver teljes forrsszvegt, megfelel megjegyzsekkel elltva Az esetleges javtsok, fejlesztsek verziit A javtsok s fejlesztsek kvetsnek llomsait, mit javtottak, hogyan javtottk, mit fejlesztettek A tovbbfejlesztssel kapcsolatos terveket, lehetsgeket.

Mivel egy nagyobb rendszer esetn a fejlesztsek sorn egytt vltozik a felhasznli dokumentci is a rendszerrel, ezrt a felhasznli dokumentcit is trolni kell a fejleszti dokumentci mellett s adott esetben visszamenleg meg kell rizni azt, tbb verziban is. 10.7 Betants, oktats Egy nagyobb rendszer bevezetse esetn a felhasznlknak gyakran gondot okoz az ttrs a korbban hasznlt rendszerekrl az jonnan kifejlesztett rendszerre. A felhasznlk - teljesen jogosan a munkjukat akarjk csak vgezni. ket alapveten nem rdekli, hogy milyen mdon vgzik a munkjukat, csak hatko121

nyan vgezhessk. Egy tlls a hatkony munkavgzsben mindenkppen gtolja ket, ugyanis az tlls sorn egy ideig egytt kell vgeznik a munkt a rgi mdon s az jonnan bevezetett rendszerben is, hiszen nem biztostja semmi azt, hogy az j rendszer hibamentes s tkletes. Gyakran a munka szmtgpestst csak a fnk akarja, mivel gy nagyobb intenzits munkra tudja az alkalmazottakat rvenni. Gyakran az alkalmazottak nem is rtik, hogy mire j nekik a szmtgpes rendszer. Mg manapsg is benne van a munkt vgzkben a flelem a szmtgpes rendszerektl, hiszen a mai 40-es korosztly mg nem hasznlt fiatalabb korban gpet. Br a helyzet vltozik, mivel a mai fiatalok az oktatsban kapcsolatba kerlnek gpekkel, de azt is figyelembe kell venni, hogy az emberek kpessgei nem egyformk, s adott esetben olyannak kell hasznlni egy szoftvert, aki esetleg a betvetssel is hadilbon ll. A felhasznlkban sok eltlet l a szmtgpes rendszerekkel kapcsolatban. Jobban megjegyzik azokat az eseteket, amikor egy szmtgpes rendszer nem a megfelel mdon mkdtt s bosszsgot okozott nekik. (Mellesleg sokszor a szmtgppel segtett gyintzs tovbb tart, mint a kzzel vgzett) A fenti problmk megoldst a megfelel teljestmny hardver s a megfelelen elksztett szoftveren kvl csakis a betants s oktats jelentheti. A korbbiakban beszltnk arrl, hogyan lehet megfelel szoftvert kszteni, a hardver pedig ltalban pnzkrds Az oktats sorn kt fle oktatst lehet elkpzelni. ltalnos jellegt, ami sorn a gp kezelst sajttjk el a dolgozk, illetve a konkrt rendszerhez tartoz oktatst. A dolgozknak rendelkeznik kell ltalnos felhasznli ismereteikkel is egy szoftverrendszer hasznlatakor, hiszen vannak olyan helyzetek, amikor nem csak az adott szoftverhez tartoz problmkat kell megoldani. Gyakran egy alkalmazott szmtgpn tbb klnbz fejlesztsbl szrmaz, klnbz cl programok foglalnak helyet, az alkalmazott pedig felvltva vagy akr prhuzamosan is hasznlja ket.

10.7.1 ltalnos informatikai jelleg oktats


Az ltalnos jelleg informatikai oktatst a cgek nem szeretik, hiszen llspontjuk szerint ne k fizessk meg az alkalmazottak oktatst, hanem azok mr okosan jjjenek hozzjuk dolgozni. Sajnos egy munkahelyen az alkalmazottak tudsszintje korntsem egysges a szmtgpek hasznlata tern. Azok az alkalmazottak, akik valamilyen kpzsben korbban rszt vettek, gyakran nem hasznlvn a tanultakat, el is felejtik azokat. Egy programrendszer ksztjnek meg kell becslnie a majdani felhasznlk oktatsnak optimlis mrtkt. Egy ilyen oktatsnak az a clja, hogy a fejlesztett rendszer hasznli a jvben nagyjbl egy ktelezen minimlis szinten lljanak. Ennek a szintnek elegendnek kell lennie az ltalnos szmtgp-kezelsi eljrsok elvgzshez, az opercis rendszer mkdtetshez, fjlkezelsi mveletek vgzshez, jogosultsgok, belpsek s kilpsek, nyomtatsi feladatok elvgzshez. Ha multitaszk opercis rendszert hasznlnak, akkor az ebbl add sajtossgokat is ismerni kell a felhasznlknak. Clszer oktatni ket a dokumentumok s szoftverek elvlasztsnak szksgessgre. Clszer olyan gyakorlati tudnivalkat tadni, amelyeket ksbb mankknak hasznlhatnak. Termszetesen nem cl, hogy professzionlis felhasznlk legyenek az ltalunk betantottak. Tudatostani kell a majdani dikokban, hogy ha a tanfolyam utn hamarosan nem hasznostjk a friss ismereteiket, akkor azok holt ismeretek lesznek, majd hamarosan el is felejtdnek. Nhny szempont az oktatshoz: A felhasznlk tbbnyire munka mellett vagy munka utn rszeslnek az oktatsban, ennek megfelelen nem mindig llnak szellemi kpessgeik legmagasabb fokn. A tantand anyagot gy kell megtervezni, hogy minden szksges gyakorlati tudnival benne legyen, amit a felhasznlnak a ksbbiekben hasznlnia kell. Inkbb tervezznk kicsivel tbb anyagot a felhasznlknak, mint a felttlenl szksges. A tlzsoktl tartzkodjunk. Ha nem kell, ne akarjunk elmleti ismereteket tadni, hiszen ltalban ilyenkor bonyolult fogalmakat, elveket kell magyarznunk, amiket az tlagos felhasznl elsre nem is rt meg. A tananyag tervezsnl kvessnk egyfajta gondolatmenetet. Arra fzzk fel mondanivalnk lnyegt. Ez lehet a gp hasznlatbavtelnek sorrendje (bekapcsols, az elindul opercis rendszer kezelfellete, segdprogramok, elindtsa stb), vagy lehet feladatkzpont is (Hogyan lehet egy feladatot elvgeznem?). Clszeren lehet keverni a kt mdszert is. 122

Az anyagban kell kell idt tartalkolni a gyakorlsra. Legalbb annyit kell gyakorlssal tlteni, mint amennyit az j ismeret tadsra fordtottunk. Nem szabad az anyagnak nagyon srnek lenni. Ha oktats kzben szrevesszk, hogy a kedves felhasznl nem rt egy kukkot sem, akkor meg kell llni, s jra el kell magyarzni a meg nem rtett rszeket. Ennek megfelelen esetleg az idbl kifutunk, de az nem olyan nagy baj. Az idbeosztst gondosan meg kell tervezni. Nem clszer egy ht alatt lezavarni napi ngy rban egy tanfolyamot, mert a rsztvevkre zdul hatalmas informcimennyisget nem tudjk feldolgozni. A heti egy alkalom azt eredmnyezi, hogy az eltelt id miatt a rsztvevk tbbsge nem emlkszik a korbban elhangzottakra. Clszer legalbb heti kt alkalmat adni az oktatsra, lehetleg nem egyms utni napokon. A napi raszm a 2-4 tantsi rban jellhet meg, kt tantsi rt egyben tartva. 1,5 ra utn mindenkppen sznetet kell tartani. Hagyni kell a tervezs sorn egy vagy tbb alkalmat a felmerl krdsek megvlaszolsra. Clszer valamilyen vizsgt szervezni az utols alkalomra. Mivel a kezdeti tuds sok fle lehet, ezrt a tanfolyam hatkonysgt gy lehet megmrni, hogy ugyanazokbl a krdsekbl egy felmrst vgznk a tanfolyam elejn s a vgn rendezett felmrs eredmnyt sszevetjk az elejn elvgzett teszttel. Egy szmtgpes tanfolyam clszeren gy mkdik, hogy minden hallgat egyedl l egy megfelel gp eltt ez alapfelttel. A tanfolyam anyagnak rvid tmr jegyzetrl is clszer gondoskodni, akr tmavzlat formjban is.

10.7.2 Rendszer betantshoz szksges oktats


Az ltalunk fejlesztett rendszer betantsa csak az utn kpzelhet el, hogy meggyzdtnk, hogy ltalban a jvend felhasznlk a megfelel minimlis szinten kpesek kezelni a szmtgpet. Az oktats sorn azt a sorrendet clszer kvetni, ahogy a dolgozk a rendszert hasznlni fogjk. Az anyag nagyjbl a kvetkez legyen. A rendszer clja, tudsa. A rendszer kpessgei s a jelenlegi valsg kapcsolata. A rendszer teleptse (azoknak, akiket ez rint) A rendszer indtsa, hardver s szoftverfelttelei A program menpontjainak, ttekintse elszr, ltalnos tudnivalk a program mkdsrl, kapcsolatok ms programokkal. A program ttekintse a munkafolyamatok sorrendjben. A kpernyk magyarzata, listk megtekintse, nyomtatsi kpek megtekintse. Egyes feladatok begyakoroltatsa. Mire kell vigyzni Mit kell tenni, ha hiba van. Az idbeosztsra, a keretfelttelekre (gpek szma stb) vonatkoz korbban elmondottak most is rvnyesek. Nyilvn lesz a felhasznlk kztt, akik a fejleszts sorn egyttmkdtek a fejlesztvel, azaz tbbet tudnak a rendszerrl. Hagyni kell ket az oktats sorn rvnyeslni, hogy ezltal is elmlytsk tudsukat. Meg kell kvnni azt, hogy az els tantsi szakasz utn a felhasznlknak legyen lehetsgk a tanultak begyakorlsra, azaz legyen r id s hely. 10.8 Garancia, az elkszlt rendszerek tovbbi gondozsa A jelenlegi magyarorszgi trvnyek szerint minden eladott j termkre ktelez egy vig jtllst adni az eladnak. A szoftverek tern a jtlls kiss sszetett problma. Ha valaki bemegy a boltba s megvesz egy dobozos termket, akkor tulajdonkppen nem a szoftvert veszi meg, hanem a szoftver felhasznlsi jogt! A szoftver tulajdonosa tovbbra is az eredeti fejleszt. Ebbl kvetkezen nem kteles semmifle garancit adni az eladnak a szoftver mkdkpessgre vonatkozan! Az gynevezett dobozos termkeken vagy a belsejkben ltalban tallhat egy licensz szerzdsnek nevezett papr, amely azt mondja ki tbbek kztt, hogy a program hasznlati jogt abban az llapotban vsroltk meg, ahogyan azt a dobozba csomagoltk. Ha a program nem mkdik az elvrsoknak megfelelen, akkor sincsen semmifle jogi kvetkezmnye az eladra nzve. Az elad nem vllal garancit a 123

program mkdsrt. Ugyangy a fejleszt se vllal garancit. Ha a szoftver krt okoz, akkor egyes szerzdsek a dobozos termk rig vllalnak garancit, de ez alapveten nem jellemz. Ms a helyzet akkor, amikor egy konkrt megrendelsre kell konkrt programot fejleszteni. Ekkor elvrhat, hogy a program ne mkdjn hibsan. Azrt nem hibtlant rok, mert a korbban megtrgyaltuk, hogy hibtlan program nem ltezik. ltalban a Megrendel s a Fejleszt kztti alku trgya, hogy a program mkdsre vonatkoz garancia milyen s hogyan lehet rvnyesteni, illetve mire terjed ki. A fejlesztnek ktelezen el kell rni olyan procedrkat, amelyek megvdik a program ltal hasznlt adatokat a megsemmislstl. Ezek lehetnek a programba beptett mentsi, illetve backup eljrsok, de lehetnek a rendszergazda szmra elrt napi, heti, havi mentsek. Ha ezeket nem futtatjk rendszeresen, akkor termszetesen nem lehetnek biztosak abban, hogy egy ramsznet vagy egy hardver meghibsodsa nem teszi e tnkre hossz id munkjt. A program mkdsnek helyessgnek a tesztelsi idszak alatt kell kiderlnie. A tesztelst pedig a majdani felhasznlnak is el kell vgeznie. Ezek ellenre a jzan Fejleszti dnts az, hogy a vgleges vltozat tadsa utn mg legalbb egy vig minden javtst, a szoftver tudst nem jelentsen nvel mdostst ingyen s brmentve vagy valamilyen talnydjat felszmtva kell elvgezni. El kell dnteni minden hibajavtsnl, hogy kinek a hibjbl fordult el, mi a hiba oka. Ha a fejlesztett szoftver a ludas, akkor a javtsrt nem szabad krni semmit. Ha a futtat hardver vagy opercis rendszer hibs, akkor vis maior esete van, blcs dnts, ha a hibt kijavtja a fejleszt, s semmifle ellenszolgltatst nem kr, ha azonban a felhasznl hibja vagy vrusfertzs okozta a program hibs mkdst, akkor megfontols trgya egyfajta kiszllsi dj krse. Az egy ven tli gondozs, illetve a tovbbfejleszts lehetsge kln megllapods trgya a megrendel s a fejleszt kztt. Ms a helyzet akkor, ha egy szoftvert tbb tucat megrendelnek is rtkestettnk. Felteheten ez a szoftver kellen stabil ahhoz, hogy maga programhibkat ne okozzon. Ilyen helyzetben a fenti garancia kiszllunk s megjavtjuk nem mkdik megfelelen. Ekkor meg kell szervezni egy helpdesk lehetsget, egy telefonszmot, levl vagy E-mail cmet, ahol feltehetik a hibval kapcsolatos krdseiket a felhasznlk s arra rvid idn bell vlaszt is kapnak. Ha nem voltunk kellen krltekintek s a programunk hibktl hemzseg, akkor ktelessgnk a hibk kijavtsa utn mindenkinek elkldeni a javtott programvltozatot vagy rtesteni ket arrl, hogy hogyan kaphatjk meg a javtst. Ez felvet mg egy krdst. Mi van azokkal, akik a programot jogtalanul hasznljk. k is krhetek javtst, szupportot? Termszetesen nekik nem jr, de a jogossgot neknk egy konkrt hvs esetn le kell ellenriznnk. Ha kis eladott darabszmrl van sz, akkor knny ezt ellenrizni, de dobozos termkek esetn a visszakldtt regisztrcis krtya a jogossg elismersnek az alapja. A nagy fejleszt cgek ltalban tadjk a szupportot a kereskedknek, mondvn k vannak kzelebb a vsrlhoz, legyen ez az kltsgk. Azt szoktk mondani, hogy egy program letciklusa ltalban nem hosszabb 3-5 vnl. Ennek megfelelen neknk szoftverfejlesztknek csak maximum 5 vre kell munkt szereznnk, mert legksbb 5 v mlva gyis megkeresnek a korbbi megrendelk s krik a tovbbfejlesztst.

124

11 Modern alkalmazsfejlesztsi mdszerek


11.1 A problma A programozsi nyelvek fejldsvel a megoldand feladatok is egyre bonyolultabbakk vltak, gy hiba lettek egyre hatkonyabb eszkzk a programozk kezben a megoldand feladatok az eszkzket elgtelenn tettk. Megfigyelhet a programozs-mdszertanok fejldsben az albbi irny: Egyszer feladatok strukturlatlan programok gpkzeli programozsi nyelv A feladatok bonyoldnak modulris programok kzpszint programozsi nyelv A feladatok tbbrtek, a felhasznli fellet fontoss vlik strukturlt programozsi mdszer magas szint nyelvek. Grafikus rendszerek, elsdleges a felhasznli fellet Mdszer? - Objektum orientlt programozsi nyelvek. A fenti lista alapjn vilgoss vlt, hogy j mdszerre is szksg van. Az OOP programok megjelensekor nem volt mdszer, amivel igazbl kihasznlhattk az OOP elnyeit. Jellemzv vlt, hogy a programok mrete bonyolultsga s ezzel prhuzamosan az egyttdolgoz fejlesztk szma is ntt. Az OOP-hoz tartoz mdszerek a 90-es vekben fejldtek ki s a 90-es vek vgre vltak szabvnyosakk s a 2000-ik v utn terjedtek el szles krben. A programozs mindig is a valsg egy szeletnek modellezst tzte ki cljul. A programnyelvek s mdszerek a valsg kiszemelt rszt egyre inkbb lemodellezik. A modellezs sorn azonban mindig lezajlik a valsg egyszerstse ezt hvjk absztrakcinak, s az ltalnos esetek megkeresse ezt hvjk ltalnostsnak. Minl sszetettebb egy feladat, a megoldshoz annl bonyolultabb modellt kell alkotni, azonban a bonyolultsg tcsap az ttekinthetetlensgbe, ha nem vigyzunk. Az OOP megjelensvel olyan programtervezsi mdszereket kellett tallni, amelyek illettek a bonyolultabb feladatok megoldshoz, de kellen egyszeren s ttekintheten s megfelelen pontos lerst adtak a valsgra.

11.1.1 A modellalkots hrmas szintje


Az OOP megjelensvel megjelent a szoftverek tervezsnek, azaz a modellalkots hrmas szintjrl: Koncepcionlis szint A valsg elemzse s fogalmak kivlasztsa, amelyek lerjk a valsgos folyamatok szmunkra szksges rszt. Ezen a szinten a valsg objektumainak s a kzttk lv kapcsolatoknak a szintjn alkothatunk fogalmakat s absztrakt modelleket. Technikai szint Ezen a szinten megalkotjuk azokat a technolgiai elveket, amelyekkel tltetjk a modellnket a konkrt szmtgpes megvalstsba. Implementcis szint Megalkotjuk a szmtgpes programot. A fenti szintek esetn mindig beszlhetnk vzlatosabb/elvi s konkrt/technikai nzetrl. Az elvi nzet a feladatot mindig ltalnosan fogalmazza meg, a konkrt megfogalmazs figyelembe veszi a sajtossgokat is. Amikor egy magasabb szinten megfogalmazunk egy elvi elemet, az egyttal meghatroz alacsonyabb szinten lv lehetsges megoldsi mdokat, azaz absztrakt megoldsi mdot jell ki. Amikor a modellt elksztjk, teht megrjuk a konkrt programot, akkor az absztrakt megoldsokat konkretizljuk, azaz a modellt lekpezzk. A modellek ksztsekor ltezik egy absztrakcis szint, ami a jellsrendszerhez kapcsolhat. AZ OOP-nak szksge van j jellsrendszerre, hiszen az algoritmusler nyelv, a folyamatbra s a struktogram nem elegend. 11.2 Fejlesztsi filozfik Az albbi fejlesztsi elvek jellemzen a struktrlt mdszertanokra jellemzk:

125

11.2.1 Folyamatorientlt mdszer 11.2.2 Adatfolyam orientlt mdszer 11.2.3 Strukturlt mdszertan 11.2.4 Objektum-orientlt mdszertan
11.3 Modellek

11.3.1 Vzess modell


A fzisok szigoran egymst kvetik, klnllak. Egy tevkenysg akkor kezddik, ha az elz vgetrt. Javtott vltozat: Az egyes lpsek utn validls s visszalpsi lehetsg, A fzisok utn mrfldkvek (milestones), s elrsos dokumentci Kiterjeszts a rendszerfelgyeletre Logikai s fizikai tervezs sztvlasztsa

Szoftvertervezs, szoftverprojektek
Vzess modell zes
Bevezets Defincik Fzisok Mdszertanok
Vzess Prototpus Extreme

Inspekci Kezdemnyezs Inspekci Tervezs Inspekci Megvalsts tads Lezrs

2007.02.20.

Gajer Pter, Siemens PSE

21

Prototpus modell

126

Szoftvertervezs, szoftverprojektek
Prototpus modell Protot
Bevezets Defincik Fzisok Mdszertanok
Vzess Prototpus Extreme

Inspekci Kezdemnyezs Inspekci Tervezs

Iterci

Inspekci Megvalsts tads Lezrs

2007.02.20.

Gajer Pter, Siemens PSE

22

Spirlmodell 11.4 Mdszertanok A programfejleszts bizonyos mrtkig zskutcba kerlt a 70-es vektl kezdden. A szoftverek komplexitsnak nvekedsvel s az objektumorientlt nyelvek megjelensvel, terjedsvel egyre srgetbb lett j, mindenki ltal hasznlhat tervezsi, elemzsi mdszerek s egysges nyelvek, jellsrendszerek kidolgozsa. A 90-es vek elejig tbb javaslat is szletett, ezek tbbsge azonban nem felelt meg az elbb felsorolt ignyeknek (legalbbis nem mindegyiknek), illetve a fejlesztend rendszer bonyolultsgnak, az egyre nvekv problmatr nagysgnak kezelse is kvnalmakat hagyott maga utn. Ekkor azonban jtt a Nagy ttrs: olyan j mdszertanok jelentek meg, amelyek sikeresen megfeleltek a kihvsnak, s killtk a fejlesztk prbjt. Ilyen eszkzk voltak pldul: Coad-Yourdon, Fusion, MartinOdell, OMT, OOSE, Shlaer-Mellor, stb. [1] Elszr is gondoljuk vgig, hogy egy tlagos, htkznapi fejlesztnek (persze ha ltezik ilyen) milyen ignyei lehetnek egy tervezsi mdszerrel kapcsolatban: jl elklnthet, szemlyekre s csoportokra egyrtelmen felbonthat, pontosan definilt feladatokat hatrozzon meg, elsegtve a hatkony csapatmunkt; pontosan definilja a fejlesztend termket; a termk minsgnek mrshez (s elrshez) egyrtelm mrsi szempontokat llaptson meg; a felhasznli ignyeket teljes mrtkben vegye figyelembe, a fejlesztk s a megrendelk kztt magasfok egyttmkdst tegyen lehetv; az egyni s csoportos feladatok egysges kezelst is tegye lehetv, ugyanakkor ne jelentsen tl szigor megktseket sem, ezltal biztostson teret az egyni fejleszti kreativitsnak.

Termszetes igny, hogy mindezen kvetelmnyeknek egy szemlletes, sokatmond brzolsmdot feleltessnk meg, amely rthet mindenki szmra. Ezltal a fejlesztk kztti bels, s a kereskedk, megrendelk, felhasznlk fel irnyul kls kommunikci is egyszerbb, egyrtelmbb vlhat. A szoftverek komplexitsnak nvekedsvel s az objektumorientlt nyelvek megjelensvel, terjedsvel egyre srgetbb lett j, mindenki ltal hasznlhat tervezsi, elemzsi mdszerek s egysges nyelvek, jellsrendszerek kidolgozsa. A 90-es vek elejig tbb javaslat is szletett, ezek tbbsge azonban nem felelt Hrom lvonalbeli fejleszt (Grady Booch, Ivar Jacobson s James Rumabugh) felismerte az ignyt egy egysges mdszertan kidolgozsra, gy sszefogtak, hogy az addig megszletett metodikk elnys tulajdonsgait kiemeljk, s azok alapjn egy kzs koncepcit dolgozzanak ki. Az munkssguknak ksznheten, tbb ms szerz mdszertannak s tapasztalatainak felhasznlsval szletett meg 1997-ben az

127

UML (Unified Modeling Language) modelleznyelv, illetve 1998-ban a RUP (Rational Unified Process) mdszertan (ksbb tbb, UML-re pt mdszertant is kidolgoztak a szoftvercgek).

11.4.1 Inkrementlis fejlesztsi mdszertan


Mindekzben alakult ki az a fejlesztsi metodika is, amelyet inkrementlis fejlesztsnek neveznk. Ezt az a felismers hvta letre, hogy a gyakorlatban a legtbb szoftver letnek nagyobbik rszt teszi ki (s a kltsgek nagyobb rszt is ignyli) az jabb s jabb verzik ellltsa, a klnbz mdostsok vgrehajtsa, korbbi hibk kijavtsa, hinyossgok ptlsa. Ebben a folyamatban az j szoftver mindssze az els vltozat ellltst kpviseli. A semmibl ltrehozott verzi utn az jabbakat mindig a meglv vltozatok mdostsval, kiegsztsvel hozzuk ltre. Egy-egy verzi megvalstsa azonban hossz ideig (akr vekig is) elhzdhat, kzben a fejlesztk egyre tbb dolgok megtanulnak, tapasztalnak, gy az j ismeretek fnyben szksg lehet a kvetelmnyek mdostsra (ugye ismers a helyzet?). Ezrt clszer lehet egy verzi ksztst tbb kisebb lpsben, alvltozatok egymsutnjaknt ellltani. Ezt a folyamatot nevezzk a fejleszts inkrementlis modelljnek. Ennek sorn lehetsg van arra, hogy a rendszer problematikus rszeit fejlesszk ki elszr, majd ehhez hozzfejlesztjk az jabb s jabb rszleteket. (Elszr tbbnyire a rendszer viselkedst s kezelsi stlust rzkeltetjk, vagyis a felhasznli felleteket ksztjk el.) A rendszer teht nem egyenletesen fejldik, hanem bizonyos rszeivel egszen a megvalstsig elreszaladunk, tapasztalatokat gyjtnk, s az elkszlt rszekhez rakjuk hozz a mg hinyzkat. Architektra szemllet fejleszts A msik, meghatroz paradigma az architektraszemllet fejleszts. Ez azt jelenti, hogy a rendszer architektrjt klnbz nzetekben kpzeljk el, gy a modellt sokkal jobban le lehet rni, mintha egyetlen diagramba szeretnnk mindent besrteni. 11.5 Eszkzk UML - Unified Modelling Language Ez a jellsrendszer az OOP elterjedse kapcsn alakult ki, de maga nem mdszer. A rendszer neve UML Unified Modelling Language Egysgestett Modellez Nyelv. Az UML egy szabvnyos, egysgestett modelleznyelv, amelynek segtsgvel a fenti lersok, fejlesztsi modellek rendkvl jl szemlltethetek; a tervezs, a specifikci, a dokumentls mind grafikus formban, beszdes brk, diagramok, tblzatok segtsgvel vgezhet. A legtbb vezet szoftvervllalat felismerte mr az UML-ben rejtz lehetsgeket, foglalkozik a szabvny tovbbfejlesztsvel, gy ma mr az UMLeszkzk knlata szerfelett szles, mindenki megtallhatja a szmra legmegfelelbbet. Az UML hasznlatra elterjedt eszkzk: Microsoft Visio, ArgoUML ingyenes, Umbrello UNIX alap, ingyenes, Poseidon for UML, Dia - ingyenes A szoftverfejlesztk egyms kztti, s a felhasznlk fel irnyul kommunikcit csak egy kzsen elfogadott, mindenki ltal ismert modelleznyelv teszi lehetv. A legtbb fejlesztsi mdszertan ajnl valamifle jellsrendszert, viszont a nyelv s a tervezsi mdszer lesen elklnthet (ha ksz a terv, s azt valamilyen mdon ismertetni tudjuk a tbbiekkel, akkor mr mindegy, hogy hogyan, milyen mdon jutottunk el a ksz tervig). Ezt ismertk fel az UML kszti, s fejlesztettk ki a jellsrendszert. A grafikus szemlltets rendkvl hatkony mdszer, azonban szem eltt kell tartanunk, hogy a fejlesztsben rszt vev klnbz szakemberek mind klnbz szemszgbl szemllik a rendszert, illetve ugyanaz a szakember is lthatja mskpp ugyanazt a rendszert a fejleszts ms s ms szakaszaiban. Ezrt olyan mdszert kell alkalmazni, amely kpes kezelni ezt a sokrtsget, viszont kellen egyszer ahhoz, hogy szles krben elterjedjen. 11.6 Az UML nzetei, diagramjai Az UML-ben mindez gy valsul meg, hogy egy rendszerhez tbb klnbz nzetet rendelnk, melyek kiegsztik, s bizonyos rtelemben t is fedik egymst (lsd az brt). A rendszerrl oly mdon kapunk teljes kpet, ha ezekre a nzetekre egytt, egy egszknt tekintnk.

128

Az UML nzetei

A hasznlati eset nzet (use case view) A rendszer viselkedst, funkcionalitst rja le a szereplk s a feladatok megjellsvel, a felhasznl szemszgbl nzve. (A szerepl (actor) olyan szemly vagy elem, amely kapcsolatban ll a rendszerrel, s aktvan kommunikl azzal, funkcikat indt el, vagy hajt vgre.) A hasznlati esetek jl meghatrozott funkcik, amelyek vgrehajtsa zenetvltst kvn. Meghatroz szerepet jtszanak a fejlesztsi folyamatban, hiszen a mkds lersa a tbbi nzetet is jelentsen befolysolja. A komponens/implementcis nzet (component view) A rendszer struktrjt, a programkomponensek, llomnyok kapcsolatt rja le. Elssorban a programfejlesztk hasznljk, hiszen az elemek, kdkomponensek egyetlen mkdkpes rendszerr integrlst valstja meg. A folyamatnzet (process view) A rendszert folyamataira, vgrehajthat egysgeire bontva brzolja. Clja a prhuzamosthat mveletek felismerse, az aszinkron esemnyek megfelel kezelse, ezltal hatkony erforrs-gazdlkods elrse. A teleptsi/mkdsi nzet (deployment view) A rendszer fizikai felptst rgzti, a hardvertopolgit, az adott szoftverkomponensek ltal ignyelt erforrsokat rja le. A logikai/tervezsi nzet (design view) Azokat az elemeket, feltteleket hatrozza meg, amelyek a megfelel mkdshez kellenek. Elssorban a tervezk s fejlesztk szmra fontos, hiszen a rendszer statikus struktrjt, az egyttmkdst, az objektumok kztti kommunikcit rja le. Itt kell pontosan meghatrozni a bels struktrt s interfszeket is. 11.7 Elemek s relcik A rendszer egyes nzeteinek statikus s dinamikus sajtossgait klnbz diagramokkal fejezhetjk ki, amelyek a rendszer elemei kztti relcikat rjk le, tbb klnbz szemszgbl nzve. Az UML ngy relcitpust klnbztet meg: fggsg (dependency) Kt elem kztt akkor ll fenn, ha az egyik (a fggetlen) elem vltozsa hatssal van a msik (a fgg) elemre. Klcsns a fggsg akkor, ha mindegyik elem hatssal van a msikra. Grafikus brzolsban a szaggatott nyl a fggetlen elem fel mutat. asszocici (association) Az objektumok kapcsolatt, ezek struktrjt hatrozza meg. Specilis esete a rsz-egsz viszony, amely ktfle lehet: aggregci vagy kompozci. Aggregci esetn a rsz az egszhez tartozik, de nmagban is ltez entits, mg kompozci esetn a rsz nmagban nem ltezhet, csak az egsz elemeknt. 129

A szemlltet nylon jelljk az asszocici irnyt, multiplicitst. Rsz-egsz viszony esetn az egsznl lv vonalvg egy cscsra lltott, aggregcinl lyukas, kompozcinl tmtt rombusz.

ltalnosts s specializci (generalization/ specification) Az objektumok specilis viszonya, gyermek-szl kapcsolat, amelyben a flrendelt elem az ltalnos, az alrendelt a specializlt. brzolsa egy lyukas nyl, amely a szl fel mutat. megvalsts (realization) Annak kifejezse, hogy egy osztly biztost egy msikat arrl, hogy elvgez szmra egy bizonyos feladatot. Grafikus szimbluma egy szaggatott, lyukas fej nyl.

A relcik UML szimblumai

11.8 Diagramok A diagramok olyan grfok, amelyek csompontjai elemeket, lei az elemek kztti kapcsolatokat kpviselik. A klnbz diagramok kzs elemeket is tartalmazhatnak, hiszen ugyanazt a rendszert brzoljuk tbbfle megkzeltsben. Az UML-ben kt nagy csoportrl, statikus s dinamikus diagramokrl beszlnk. A statikus diagramoknak t fajtjt klnbztetjk meg: Osztly-diagram (class diagram) Az osztlyok, interfszek, ezek egyttmkdsnek s kapcsolataiknak brzolsra szolgl. Egy tipikus osztlydiagramot mutat a kvetkez bra, melyet Orwell: llatfarmja alapjn rajzolhatunk fel. (Bizonyra mindenki ismeri a nagysiker regnyt.) Az albbi brrl jl lthat, hogy az osztlyokat olyan tglalapokkal jelljk, amelyek hrom rszbl llnak: fels harmadban az osztly neve, kzpen az osztly attribtumai, alul pedig az osztlyhoz tartoz metdusok szerepelnek.

Osztlydiagram (Minden llat egyenl, de egyes llatok egyenlbbek a tbbinl)

130

A nyilak mentn rvnyesek az rklsi szablyok, azaz minden gyermek-osztly rendelkezik egy bool tpus egyenlk attribtummal, mg a Disznk osztlynak mg egy egyenlbbek nev attribtuma is van. A Lovak dolgoznak, a Tykok kapirglnak s bizonyos szm tojst tojnak (pldul ves szinten). Az attribtumok eltt szerepl apr jelek a kvetkezket jelenthetik: + : public - : private # : protected attribtumrl van sz. Objektum-diagram (object diagram) Az osztly-diagram elemeinek pillanatnyilag ltez pldnyait, azok kapcsolatait szemlleti.

Objektumdiagram (A tants s a szervezs munkja termszetszeren a disznkra hrult, mert ltalnosan elismertk, hogy k a legokosabbak az llatok kztt Leghsgesebb tantvnyuk a kt igsl lett, Bandi s Rzsi) Az objektumokat kt rszbl ll tglalapok reprezentljk, amelyek fels felben az objektum nevt s osztlyt, als felben attribtumait troljuk (aktulis rtkket is feltntetve). Komponens-diagram (component diagram) A komponensek egymshoz val viszonyt fejezi ki. Ha egy komponens osztlyok, interfszek s kztk lv kapcsolatok egyttese, ez az brzolsmd szoros kapcsolatban ll az osztly-diagrammal.

131

Komponens-diagram (Nem tudtk, hogy az rnagy megjsolta Forradalomra mikor kerl sor, s j okkal nem is gondolhattak arra, hogy az letkben bekvetkezik, de vilgosan lttk, hogy ktelessgk felkszlni r. a rendszernek az llatizmus nevet adtk.) A komponenseket a fent lthat mdon tglalapokkal jelljk, bal oldalukon kt kis fogacskval. A szaggatott nyilak az mutatjk, hogy mely komponens melyiknek szolgltat valamilyen informcit, eljrst, stb. Teleptsi/mkdsi diagram (deployment diagram) A futs kzben ignyelt erforrsignyt, s a csompontokon mkd komponenseket brzolja.

Teleptsi diagram (Ezt a Htparancsolatot most fel fogjk rni a falra, ezek vltoztathatatlan trvnyek lesznek, s az llatfarm valamennyi llatnak mindrkk ezek szerint kell lnie.) Az erforrsokat tglatestek brzoljk, ezek kztti kapcsolatot, illetve a szoftverkomponensek hovatartozst szemllteti a fenti bra. Hasznlati eset (use case) diagram A vals rendszer szereplit, ezek kapcsolatt s tevkenysgeit mutatja be. A rendszer szervezse, viselkedsnek lersa s ellenrzse szempontjbl ltfontossg!

132

Hasznlati eset diagram (Mennyit grcltek, izzadtak, hogy begyjtsk a sznt!... De a disznk olyan okosak voltak, hogy minden nehzsget le tudtak gyzni.) Az UML diagramok msik csoportja, a dinamikus (ms nven viselkeds-) diagramok az objektumok egymsra hatst, kommunikcijt, zenetvltsait mutatjk be. Ngy tpus sorolhat ide: Szekvenciadiagram (sequence diagram) Az zenetek kldsnek s fogadsnak idrendi sorrendjt hatrozza meg, a hasznlati esetekbl kiindulva.

Szekvenciadiagram (Az llatok ebben az vben gy dolgoztak, mint a rabszolgk.) Itt az zenetvlts szereplit nagy tglalapokkal jelljk az bra tetejn. Az id mlst a fggleges tengely szemllteti, a cselekvseket a szaggatott vonal tengelyeken lv hossz tglalapok (ezek hossza a cselekvs idtartamval arnyos). Az zenetek a kldtl a fogadig hzott nyllal szerepelnek az brn. Egyttmkdsi diagram (collaboration diagram) Az zeneteket vlt objektumok kapcsolatt, s az zenetvlts szekvenciadiagrambl egyszer algoritmus alapjn megkaphat. struktrjt brzolja. A

133

Egyttmkdsi diagram a szekvenciadiagram alapjn Az zenetkldket s fogadkat itt egyszer ellipszisek jelkpezik, az zenetek itt is a fentihez hasonl nyilak, rajtuk az zenet kldsnek relatv idpontja (az zenet sorszma) s az zenet neve. llapot- vagy llapottmeneti diagram (state-chart) A diagram csompontjai llapotok, az irnytott lek az llapotok kztti tmeneteket reprezentljk. Rendkvl fontos az esemnyorientlt viselkeds vizsglatnl.

llapottmenet-diagram (Ez a munka szigoran nkntes volt, de aki kihzta magt belle, annak felre cskkentettk a fejadagjt.) Aktivits- vagy tevkenysg-diagram (activity diagram) Specilis llapotdiagram, amely a vgrehajtand tevkenysgek folyamatt mutatja. Jelentsge az objektumok vezrlsi folyamatainak tervezsnl a legnagyobb.

Aktivits-diagram

134

Amint ezekbl az egyszer pldkbl is ltszik, az UML rendkvl sokoldal modelleznyelv. Remlem, sikerlt mindenkit meggyznm arrl, hogy a vals (vagy valsnak vlt) folyamatok tbb oldalrl, tbb szempontbl trtn vizsglata mennyire fontos. Az UML alkalmas arra is, hogy mindennapi munknkban alkalmazzuk. Az UML elnye, hogy a jellsre koncentrl, nem a konkrt tervezsi mdszerekre vagy megvalstsokra, gy brmit le lehet rni vele. Egy UML-lel megtervezett rendszer pedig megvalsthat C++-ban, Javaban, C#-ban, VB.NET-ben, PHP-ban ...

11.8.1 Prototpus (prototype) 11.8.2 Az eXtrm Programozs- egy j programfejlesztsi paradigma (mdszer)
Az eXtrm Programozs az albbikppen foglalhat ssze: Az embersgessg s a hatkonysg sszeegyeztetsre tett ksrlet Trsadalmi jelleg vltozsokra irnyul mechanizmus A fejlds egyik tja Fejlesztsi stlus Szoftverfejlesztsi diszciplna Az XP f clja, hogy cskkentse a vltozsok kltsgvonzatt. A hagyomnyos rendszerfejlesztsi mdszertanokban (pl. SSADM), a rendszerrel szemben tmasztott kvetelmnyek adottak a projekt elejn, s gyakran nem is vltoznak meg. Ez azzal jr, hogy minl ksbb kell vltoztatni a kvetelmnyeken, ami pedig szoftverfejlesztsi projektekben a legvgn sem szokatlan, annl magasabbak lesznek a kltsgek. Az XP arra trekszik, hogy ezeket a kltsgeket cskkentse azltal, hogy ms alapvet rtkeket, elveket, s gyakorlatot vezet be. Egy XP-t hasznl rendszerfejlesztsi projekt sokkal rugalmasabb lesz a rptben bekvetkez vltozsokkal szemben. Az XP rtkei Nem sokkal ezelttig csak 4 rtk volt fontos az XP-ben, de a msodik kiadsban bevezettek egy tdiket is. Ez az t rtk: Kommunikci Egyszersg Visszajelzs Btorsg Tisztelet

Kommunikci Az egyik alapvet fontossg feladat a szoftverrendszer-kszts sorn, hogy valaki megmondja a fejlesztknek, hogy mi a feladat. A korbbi mdszertanok sorn ez fknt dokumentumok gyrtsval trtnt meg. Az XP technikkat tekinthetjk gyors informcirendszerez s -terjeszt technikknak is, amelyeknek clja, hogy a fejlesztcsapat minl gyorsabban szerezze meg a szksges tudst. A cl az, hogy minden fejleszt ugyangy lssa a rendszert, ahogy a majdani felhasznlk is ltni fogjk. Ezrt az XP szereti az egyszer terveket, metaforkat, a majdani felhasznlk s a mostani fejlesztk egyttmkdst, a gyakori szbeli kommunikcit, s a visszajelzseket. Egyszersg Az XP azt a megkzeltst tmogatja, hogy kezdjk el a lehet legegyszerbben, s folyamatosan dolgozzuk t a programot, hogy egyre jobb s jobb legyen. A klnbsg ekztt a megkzelts kztt, s a hagyomnyos megkzeltsek kztt, hogy a mai ignyeknek megfelel programot terveznk s runk, nem pedig a holnapi, a jv heti, vagy a jv hnapi ignyeknek megfelelt. Az XP ellenzi ezt htrnyknt fogjk fel, mondvn, hogy gy megeshet, hogy a kvetkez hnapban tbb munkba fog kerlni tdolgozni a rendszert, ha nem kszltnk fel elre j kvetelmnyekre, s azt lltjk, hogy ez az idvesztesg kitesz annyit, mint a megvalstott, de ksbb szksgtelennek bizonyul feature-kre fordtott id. Az egyszersg elve viszont pontosan azt mondja, hogy a program tlbonyoldik, ha tele lesz mindenfle feature-rel, amirl mr rg min135

denki elfelejtette, hogy mire val, s a bonyolultsg okozta tbbletmunka viszont sokszorosan meghaladja a folyamatos tdolgozs ltal generlt munkt. Az elz rtkhez, a kommunikcihoz kapcsoldan, az egyszersg megknnyti s elsegti a kommunikcit, mert egy egyszer tervet s a hozztartoz egyszer kdot a csapat minden programozja knnyen megrt. Visszajelzs Az XP-ben a visszajelzs a fejleszts tbb terletre is vonatkozik: Visszajelzs a rendszertl: a rszegysg-tesztek ksztsvel a programozk kzvetlen visszajelzst kapnak arrl, hogy milyen llapotban van a rendszer egy-egy mdosts utn. Visszajelzs az gyfltl: a funkcionlis teszteket a programozk egytt ksztik az gyfllel, gy mindketten konkrt visszajelzst kapnak arrl, hogy milyen llapotban van a rendszer funkcionalitsa. Ilyenfajta kzs tesztelst 2-3 hetente clszer vgezni, gy az gyflnek megvan a lehetsge a fejleszts irnytsra. Visszajelzs a csapattl: amikor az gyfl j ignyekkel ll el, a csapat rgtn tud r reaglni, s visszajelzst tud adni, hogy mennyi ideig fog tartani a dolog, s mennyibe fog kerlni. A visszajelzs szorosan sszefgg az egyszersggel s a kommunikcival. A rendszerhibkat knny jelenteni, hiszen egy rszegysg-teszt megrsa simn megmutatja, hogy mi nem j a rendszerben, gy a rendszer maga mutatja meg a javtsra szorul rszeket. Az gyfl is rendszeresen tudja tesztelni a rendszert, a sajt ignyeinek megfelelen, amiket az XP-ben 'felhasznli trtnet'-nek hvnak. Hogy Kent Becket idzzk, 'Az optimizmus szakmai rtalom a programozknl, s a visszajelzs r a gygyr.' Btorsg Az XP btorsgra buzdt doktrnjt a legjobban gyakorlati pldkkal lehet megvilgtani. Az egyik, hogy mindig a mai ignyek kielgtsre kell a programot tervezni s megrni. Ez az erfeszts azrt szksges, hogy ne gabalyodjunk bele a tervezsbe, s neheztsk meg sajt magunknak a hossztv munkt. (rtelemszeren a 'mai ignyek' az sszes olyan ignyt jelentik, amiket ma ismernk.) Btorsg kell ahhoz is, hogy ne ijedjnk meg attl, hogy a kdot folyton t kell dolgozni. Az tdolgozs azt jelenti, hogy tnzzk a kdot, s olyan vltoztatsokat eszkzlnk rajta, amik egyszerbb s tlthatbb teszik. Btorsg kell ahhoz is, hogy eldobjunk mr megrt kdot. Ahhoz is kell btorsg, hogy felismerjk, hogy nincs tovbb rtelme krbe-krbe jrni egy adott problmn, mert valsznleg ha msnap visszajvnk s jrakezdjk, egy perc alatt meglesz a megolds, csak ki kell zkkennie az agynak a rossz kerkvgsbl. Tisztelet Az XP-ben a tiszteletnek is tbbfle aspektusa van. Tiszteljk a tbbi csapattagot, mert dacra a folyamatos vltozsoknak s integrcinak, sosem csekkelnk be olyan kdot, ami nem fordul le, vagy hibs abban az rtelemben, hogy a rszegysg-teszt elhasal rajta. gy ltalban semmit nem tesznk, ami a tbbiek munkjt htrltatja. Magunkat is tiszteljk annyira, hogy csak j minsg munkt adunk ki a keznk kzl, s mindig a legjobb tervet igyeksznk kitallni, s az tdolgozsokat is lehet legjobban megtervezni. Elvek Az elvek, amelyek az XP alapjt kpezik, kvetkeznek a fent lert rtkekbl, s arra valk, hogy segtsenek dntseket meghozni. Az elvek konkrtabbak, mint az rtkek, s jobban hasznlhatk irnytknt konkrt helyzetekben. Gyors visszajelzs A visszajelzs akkor a leghasznosabb, ha hamar megrkezik. A konkrt esemny s a rla rkez visszajelzs kztt eltelt id kritikus fontossg a tanulsg levonsnak s az esetleges vltoztatsok tekintetben. Az XP-ben, a hagyomnyos mdszertanokkal ellenttben, az gyfllel val kapcsolattarts sok pici esetben fordul el, hogy az gyflnek tiszta kpe legyen arrl, hogy mi trtnik a fejlesztsben. gy a visszajelzsei alapjn lehet a projektet irnytgatni. A rszegysg-tesztek is fontosak a gyors visszajelzs rdekben. Amikor az ember a kdot rja, a rszegysgteszt a leggyorsabb kzvetlen visszajelzs arra, hogy milyen hatsa lett az j kdnak. Tovbb, ha a vltozs olyan funkcionalitst rint, ami nincs a programoz ltterben, s lmban sem gondolja, hogy arra hatsa

136

lehet az kdjnak, a rszegysg-tesztek ezeket is szre fogja venni, s a bug nem akkor derl ki, amikor a rendszer mr lesben zemel. Inkrementlis vltoztatsok Az XP fklyavivi azt mondjk, hogy Rmt sem egy nap alatt ptettk. Nem lehet egyszerre nagy vltoztatsokat kszteni egy rendszeren. Az XP fokozatos vltoztatsokat javasol. Megeshet, hogy ettl egy rendszernek hrom hetente lesz j kiadsa, mindig csak apr vltozsokkal. A sok kis lpssel az gyfl is jobban ltja, hogy merre halad a projekt. rmmel fogadott vltozsok Tuti, hogy semmi sem tuti. Ez az elv azt mondja ki, hogy nem elg, hogy ne tegynk semmit a vltozsok ellen, pont ellenkezleg, rljnk nekik. Ha az egyik szoksos napi tallkoz sorn kiderl, hogy az gyfl ignyei drmaian megvltoztak, akkor a programozk rljenek neki, s kezdjk el tervezgetni az j itercihoz szksges terveket. Tevkenysgek Az XP-ben alapveten ngyfle tevkenysg van. Kdols Az XP mr emlegetett fklyavivi szerint a rendszerfejleszts egyetlen igazn hasznos vgtermke a kd, br a 'kd' kifejezst szlesebb rtelemben hasznljk, mint a hagyomnyos szemllet hvei. Kdols nlkl nincs semmi. A kdols jelentheti diagramok megrajzolst is, amikbl aztn program lesz, vagy scriptek rst egy webalap rendszerhez, vagy egy C#-ban kszl objektum megrst, amit majd aztn le kell fordtani. A kdols nha ahhoz is kell, hogy a legjobb megoldst megtalljuk. Az XP szerint elfordulhat az, hogy ha egy problmnak tbb, ltszlag ugyanolyan j megoldsa van, akkor mindet meg kell rni, s automatizlt tesztekkel kell eldnteni, melyik a legjobb. A kdols az egyik eszkz a gondolatok kifejezsre, konkrtan a programozsi problmkrl keletkez gondolatok kifejezsre. Egy programoz, aki egy bonyolult programozsi problmval kszkdik, lehet, hogy nem tudja elmagyarzni rendesen a megolds lnyegt a kollginak, de meg tudja rni, s meg tudja nekik mutatni a ksz kdot. (akr pszeudokd formban is.) A kd, mondjk eme llspont hvei, mindig tiszta s egyrtelm, s nem lehet tbbflekppen rtelmezni, csak gy, ahogy a szmtgp. A tbbi programoz pedig gy fejezheti ki a vlemnyt a tmval kapcsolatban, hogy belernak a kdba, vagy hozztesznek. Tesztels Semmiben sem lehetsz biztos, amg nem prbltad ki. A tesztels ltalban nem az gyfl krse, st nem is jl felfogott rdeke. Rengeteg szoftvert adnak ki rendes tesztels nlkl, ami mkdik, tbb-kevsb. Az XP azt mondja, hogy nem lehetsz biztos a kdod mkdkpessgben, amg alaposan ki nem prbltad. Ez felveti azt a krdst, hogy pontosan mi is az, amiben nem lehetsz biztos. Nem biztos, hogy azt kdoltad le, amire gondoltl. Ennek a bizonytalansgnak az eloszlatsra vannak a rszegysg-tesztek. Ezek automatizlt tesztek, amik a kdot tesztelik. A programoznak annyi tesztet kell rnia, amennyit csak tud, hogy lehetleg minden gt letesztelje a kdnak. Ha minden teszt sikeresen lefut, akkor a kdols kszen van. Nem biztos, hogy amire gondoltl, az tnyleg az, amit az gyfl akar. Ezrt kellenek az elfogadsi tesztek, amiket az gyfllel kell elvgezni, a release-tervezs felfedez fzisban. Meghallgats A programozk nem felttlenl tudnak az zleti oldalrl annak a projektnek, amin dolgoznak, noha a rendszerrel tmasztott kvetelmnyeknek az zleti oldalrl kell rkeznik. Annak rdekben, hogy a programozk megrtsk, hogy mire akarjk a programjukat hasznlni, meg kell hallgatniuk az zleti oldal mondanivaljt is. Azt kell belle meghallaniuk, hogy mire van szksge az gyflnek. Ezenfell j, ha azt is megrtik, hogy mirt van r szksge az gyflnek, hogy visszajelzst tudjanak adni az gyflnek a sajt problmjrl, s ezltal maga is jobban rtse, hogy mi kell neki. 137

Az gyfl s a programozk kztti kommunikci a Tervezsi Jtkban van kifejtve, amit az XP leend s jdonslt hvei a vonatkoz szakirodalomban tallnak kifejtve. Tervezs Csupn az egyszersget vve alapul, mondhatnnk, hogy a rendszert nem is kell tervezni, elg, ha kdolunk, tesztelnk, s odafigyelnk az gyflre. Ha ezeket jl csinljuk, a vgeredmny egy tutira mkd rendszer lesz. A gyakorlatban ez nagyon nincs gy. Messzire el lehet jutni tervezs nlkl, de a vgn biztos, hogy zskutcba fogsz kerlni. A rendszer tl bonyolultt vlik, s a bels fggsgek tlthatatlann vlnak. Ezt gy lehet elkerlni, hogy logikus rszekre kell a rendszert bontani. Ha logikus, s jl elklnl rszekre sikerl a rendszert sztszedni, akkor a fggsgek nem fognak gondot okozni, vagyis a rendszer egy rsznek megvltoztatsa nem teszi tnkre a rendszert, s az egyes rszegysgek bonyolultsga sosem fogja tllpni a kritikus kszbt. Gyakorlat Ezt rszletesebben nem fejtem ki, mert sok dokumentci tallhat az Interneten errl. Alapveten 12 gyakorlati mdszer van, 4 csoportra osztva: Visszajelzs rszletezve: Prban programozs Tervezsi Jtk Tesztelsen Alapul Fejleszts Egsz Csapat Folyamatos feldolgozs Folyamatos integrci Tervek fejlesztse Kicsi release-ek Kzs nzpont Kdolsi Szabvny Kzs Tulajdon Kd Egyszer terv Rendszer-metafora Programozi jlt Fenntarthat temp

Az XP ellentmondsos rszei A legellentmondsosabb, legproblmsabb rsze a dolognak a vltozs-menedzsment. Mivel az gyfl kzvetlenl kommunikl a programozkkal, leginkbb szban, gy kt rossz dolog trtnhet. Az egyik, hogy az sszevissza csapong vltozsai kltsges tdolgozsokhoz vezetnek, a msik az n. 'becssz featuritis', vagyis hogy az gyfl szp lassan egyre tbbet s tbbet kvetel. Az XP azrt nem szereti lepaprozni az gyfl krseit, mert azt mondjk, hogy ez a rugalmassg krra megy, s az esetek tlnyom rszben tovbb tart a paprozs, mint maga a munka. (Clszer az gyfllel lepaproztatni a krdst!) Nincsenek kvetelmny-listk, s specifikcik, teht nehz szmonkrni brmit is. rtelemszeren ennek kvetkezmnyeknt olyankor rdemes XP-t hasznlni, amikor vagy eleve szba sem kerl a szmonkrs, mert pl. bels az gyfl, vagy olyankor, amikor az elszmolsnak kizrlag az eltlttt id az alapja, s lehet hlye a t. gyfl, csak fizesse ki. Nincs Kzponti Nagy Terv, ergo megeshet, hogy egy hzsabb vltozs teljes jratervezssel jr. Ebbl kvetkezik az, hogy csak rutinos programozknak val, mert minl rutinosabb egy programoz, annl nagyobb vltozs fog kelleni ahhoz, hogy tnyleg totl jra kelljen tervezni mindent. Ha meg kiderl, hogy fogpiszkl, hanem rrakta, akkor jra kell mindent tervezni. Az gyfl kpviselje szerves rsze a projektnek. Ezt sokaknak stresszt okoz, hiszen minden hiba s tveds azonnal nyilvnval az gyfl szmra is. Ugyanakkor ha az gyfl kpviselje rosszul vgzi a munkjt, akkor azon az egsz projekt megbukhat. Ha az gyfl nincs jelen, ltalban mgis mindenki azt kvnja, hogy brcsak jelen lenne...

138

2003-ban megjelent egy knyv, amelyik mindenfle javtsokat javasolt az XP-be. A vita arrl, hogy mi j ebbl, s mi nem, a mai napig folyik az interneten. A knyv kzponti gondolata az, hogy az XP elemei fggenek egymstl, de igen kevs olyan projekt van, ami egyszerre az sszes elemet t tudn venni, viszont ha nem veszi t valaki az sszes elemet, akkor nem r semmit az egsz. Egy msik gondolat a knyvbl, hogy a 'kollektv tulajdon' fogalma mr a szocializmusban is ismert volt, s inkbb az lett belle, hogy ami mindenki, az tutira nem az enym, teht hagyjanak vele bkn. A vitbl valami olyasmi szrdik ki, hogy az XP elemei kztt valban van egy fggsgi fa, s valban vannak kulcsfontossg elemek, amelyek hinya sszeomlshoz vezet, de ez minden mdszertanra igaz, s ahol valamelyik ilyen kulcsfontossg elem hinyzik, ott ltalban mr az elejn ltszik, hogy nem j tlet XP-vel prblkozni. Az XP nem csodaszer a trsadalom minden problmjra. Az XP ezenfell viszonylag kis ltszm fejlesztcsoportokra lett kitallva, s a kzs tulajdon gondolata ilyen lptkben mg mkdhet, ha a motivci megvan hozz. Az nem az XP feladata, hogy motivljon.

139

12 Szervezsi ismeretek
12.1 Rendszerelmleti alapok Rendszer A rendszer egy tbb alkotelembl ll, egymssal kapcsolatban ll s egymssal egyttmkd elemek halmaza. Rszrendszer Egy rendszer jl elklnthet rsze, amely a tbbi rszrendszerrel jl definilhat kapcsolatokon keresztl kommunikl. Alrendszer Egy rendszer jl definilhat feladatokat vgz rsze. Jl definilhat felleteken kapcsoldik a tbbi rszrendszerrel. Elem Egy rendszer alkotrsze Krnyezet Egy rendszerrel kapcsolatot tart viszonyok sszessge. A krnyezet hatrozza meg a rendszer bemen paramtereit, az kapja vissza a kimen eredmnyeket, az hatrozza meg a mkdsi krlmnyeket. Input A rendszerbe bemen adatok halmaza Output a rendszer ltal visszaadott eredmnyek halmaza. Egy rendszer outputja lehet ms rendszer inputja is.

12.1.1 Elemzs
A

12.1.2 Modellezs 12.1.3 Szervezet elemzs


Cl Folyamat Minden szervezet valamilyen cllal jn ltre s a mkdsnek menete a kvetend cl elrst szolgljk. Cljnak elrst egymssal kapcsolatban ll, egymssal prhuzamosan mkd vagy esetleg egymssal konkurl folyamatok alkotjk. A folyamatok lehetnek egyms mellrendelt vagy alrendelt viszonyban egymssal. Szervezet kapcsolati rendszere Semmifle szervezet nem mkdhet nmagban. Mindegyik szervezetnek vannak kls kapcsolatai, amelyek szintn sszefgghetnek egymssal, illetve lehetnek fggetlenek is egymstl. A kapcsolatok lehetnek alrendelt, mellrendelt kapcsolatok a szervezettel. Feladatkr A szervezetnek minden esetben a cljaibl levezethet feladati vannak. Ezeknek a feladatoknak a halmaza a feladatkr. A feladatok elvgzsvel a szervezet cljai is megvalsulhatnak. Hatskr Azon dolgok halmaza, amelyeke a szervezet mkdse sorn befolyst tudja rvnyesteni. 140

Felelssgi kr Egy szervezet mkdse sorn tevkenysge sorn hat a krnyezetre s ezeknek a hatsoknak kvetkezmnyei lehetnek. Azok a jelensgek, amelyek kizrlag a szervezet mkdsnek eredmnyei, a szervezet helyes, clnak megfelel mkdse sorn elre tervezetten keletkezhetnek. Ebben az esetben a szervezet felelssget vllalhat a tevkenysgrt, amelyben azt vllalja, hogy a mkdse sorn csak bizoynos esemnyek az elre megadott mdon kvetkeznek be.

12.1.4 Szervezet - szervezeti felpts


szervezeti felptsi formk s mkdsk fbb jellemzi lineris, funkcionlis mtrix szervezeti formk

12.1.5 Gazdasgi rendszerszervezs


szervezs fogalma, fajti, szakterletei (cl, irnyultsg) alap vagy fejleszt folyamat, szervezet, munka informci

12.1.6 Ismeretelmleti alapfogalmak


Adat, informci, hr
Ezekrl a tmkrl volt sz az adatbzis-kezels cm jegyzetben, tovbb az Informatika kezdknek jegyzetben.

informci mrtke s hasznossga


A Shannon fle elmletben az informci mrtke a bit, byte, kbyte, stb... Hasznossgt nem tudjuk mrni, azaz szemantikai szempontbl nem mrhet az informci egzakt mdon.

hr
Olyan adat, amely informci s amely valdi dntseket induklhat.

hrforrs
A hrforrs az adatszolgltat, de nem az adat fizikai ellltsval foglalkozik, hanem az informciv alaktsval

Ad
Az amely az adatot fizikai valjban szolgltatja

Kdol
Az adatokat egyik megjelensi formjbl talaktja ms formba.

Csatorna
Olyan adattviteli szabvnyok s eljrsok sorozata, amely az ad s a vev kztt felplve alkalmas az adatok folyamatos, de legalbbis hossz tv tvitelre. Az adattviteli csatorna mkdse sorn zajok lehetnek, amelyek az tvitt adatok deformldst, hibjt okozhatjk. Az adattviteli csatornk egyik rtkmrje a sebessgk, mg msik rtkmrje a hibtlansguk, zajtalansguk. Megjegyzend, hogy a zaj nem minden esetben kros az tvitt adatokra. Fleg abban az esetben nem, ha kell redundancival rendelkezik az tviend adat. A vevhz megrkezve az adatot visszaalaktjuk eredeti formjra, akkor dekdol egysgrl beszlnk. Az informatika fogalma Az informatika az ismeretek megismersnek, azok clszer elrendezsnek s kezelsnek tudomnya. Az informatikus az a szakember, aki ebben a tudomnyban jrtas.

141

A informatika trgykre Az informatika a valsggal, a rla alkotott kppel, a rendelkezsre ll technikai erforrsokkal foglalkozik. Az informatika kapcsolata a szervezssel Az informatika a megoldand feladatok s a rendelkezsre ll erforrsok megszervezst vgzi, azaz a szervezs az informatikai folyamatok egy rsze. Irnyts A folyamatok irnytsa egy visszacsatolsos folyamat. A folyamat mkdst irnytja, megfelel pontokon visszajelzseket kap az irnyt folyamat, s a visszajelzsek alapjn az irnyt eszkz (irnyt folyamat, team stb..) mdostja a folyamat paramtereit.

12.1.7 Rendszerfejlesztsi projekt


A projekt fogalma A projekt hosszabb idn keresztl zajl, tbb ember sszehangolt munkjt ignyl fejlesztsi feladat! (Nem programozsi, vagy szervezsi s programozsi) Az informcirendszer (IR) fejlesztsi projekt feladata Az ilyen projektek azt a clt szolgljk, hogy egy informcis rendszert alkosson a csapat, amelyben a vilg valamelyik rsznek megknnytik az lett. Egy cgen bell egyszerre tbb prhuzamosan fut s esetleg egymsnak nem teljesen megfelel projekt is haladhat, ami kellemetlen ellentmondsokhoz, erforrs pazarlshoz s egyb gondokhoz vezethet, ezrt ilyen esetben meg kell alkotni a projektek koordinl vagy kormnyz bizottsgt. Ennek a bizottsgnak a feladat, hogy a felmerl ellentmondsokat elsimtsa. E bizottsg tagjainak nem adminisztratv vagy fels vezetknek kell lennik, hanem esetleg a projekt teamek vezetinek, hiszen az erforrsok elosztsa s az ellenttek elsimtsa, az egyttmkds megszervezsnek feladata amgy is rjuk hrul.. Ezzel el is mondtuk, hogy minden projktnek szksges egy vezetjnek lennie. Ez az ember az, aki sszefogja a csapatot s amennyiben brmifle kls kapcsolatot is kell tallni, a projektvezet az, aki a kls kapcsolatokat megszervezi, stb... A projektek ltalban nem lergztett s bebetonozott fejleszti csapatok, hanem ktfle mdon is vltozik a csapat sszettele: az egyes projektek kztt van tjrs s egyik projektben egyik ember programoz, mg a msik projektben vezet lehet s fordtva. A projektben rsztvevk a munka egyes fzisaiban tbben vagy kevesebben vannak, attl fggen, hogy mennyi s milyen fajta munkra van szksgre a projektnek. Ezt a munkamegoszts nevezzk projekt szervezsnek. A helyes megkzeltsben egy fejleszt cgnl pldul az emberek br, munkagyi stb.. szempontbl tartozhatnak valahov, de a projektekkel kapcsolatban mindig mshol tallhatk meg. Azt a folyamatot, amikor megtervezzk, hogy a dolgozk milyen esetekben hol s mit dolgozzanak mtrix szervezsnek hvjk. A projektvezets felttelei A projetek megfelel szint vezetshez szksges, a megfelel szervezeti keretek biztostsa, a humn erforrsok biztostsa s a megfelel adminisztrcis erforrs biztostsa.

142

A projekt vezetje tltja a folyamat minden rszlett s vezeti le a projektet a kialakulstl a vgs tadsig. A projektvezets folyamata sorn a vezetsg feladata a tervezs (durva becsls, projekt szint szablyok) kialaktsa, A projekt temezse, azaz az egyes lpcsfokok elrsnek az ellenrzse s teszteltetse! A projekt temezsnek mindenkori korriglsa, A projektben rsztvev szemlyekre kiosztand feladat kiosztsa A projekt vgs fzisban az elre megllaptott pontokon s mdszerekkel a teljestmnyek figyelse, rtkelse

12.2 Az informcirendszer fejleszts letciklusa

12.2.1 Rendszerelemzs
Elzetes helyzetfelmrs Az informcis rendszer letnek els fzisa a rendszerelemzs. Meg kell vizsglni, hogy a jelenlegi rendszernek melyek a korltai, milyen egysgekbl (egyed, egyedtpusbl plnek fel) s mirt szksges a vltoztats. A rendszer felmrse sorn nem trekednk az azonnali, tfog rendszerelemzsre, hanem inkbb iteratv mdon fokozatosan kzeltjk meg a megoldand feladatot. Rendszertanulmny ksztse Az elemzsek eredmnye egy rendszertanulmny, aminek segtsgvel hozz lehet fogni a konkrt feladatok megoldshoz. Ez a tanulmny kiindulpontja a ksbbi munknak. A rendszerterv elssorban a laikusok, illetve a rendszer jelenlegi zemelteti szmra ksztett tanulmny.

12.2.2 Rendszertervezs
tfog helyzetfelmrs A rendszertanulmny alapjn, az informatikus elvgez egy tfog felmrst, amelyben a folymatoka minden aspektusbl megvizsgl s fokozatosan felderti a kvetelmnyeket, a rszleteket, stb.. Ehhez interjkon vesz rszt, amelyekben a megrendel oldalrl szakrtk vesznek rszt, mg a rendszer tervezje a szakrtk segtsgvel pontostja a feladatokat. A helyzetfelmrs alapjn a szksgeshez egyre jobban kzelt rendszertervet kszt az informatikus. A rendszerterv tartalmazza a szksges adatszerkezeteket, a hasznland eszkzket, a szksges erforrsokat, a kritikus algoritmusokat s ltalban szakmai szempontbl elkszti a rendszerfejleszts tovbbi lpseit,

12.2.3 Kivitelezs
Programtervezs A kvetkez lpcs a program megtervezse. A programtervezs sorn mr a figyelembe vett nyelvi elemekkel egytt a rendszertervben lv adatszerkezeteket s eljrsi szablyokat figyelembe vve tervezzk meg a szoftvert. Ez az a szint, ahol mg az alap algoritmusok segtsgvel elindulhat a Down-Top, vagy a Top Down mdszer segtsgvel a rendszer rszletezse. Programozs A kvetkez lps a a programozs maga. A programtervezs sorn rszletekre bontott programot a programozk modulonknt leprogramozzk, majd az elkszlt modulokat sszeptik.

12.2.4 Tesztels, a rendszer bevezetse


A tesztels folyamatt tervezni kell. A tesztelsnek az albbi elvek szerint s mdszerek szerint kell lezajlania. (A Mdszeres programozs c. jegyzet megfelel rszei elolvasandk)

143

12.2.4.1 A programok tesztelsnek clja


A programok tesztelsnek clja, hogy a program vajon a bemenetekre a specifikci alapjn megfelel kimenetet szolgltatja-e. A specifikcinak megfelel programot helyes programnak hvjk. A programok tesztelse s a hibakeress sorn arra treksznk, hogy az eredeti specifikcinak minl jobban megfelel, illetve megfelel programot lltsunk el. Olyan tesztmdszereket kell hasznlni s olyan hibakeres eszkzket, amelyek a hibk nagy rszt kiszrik. Nhny tapasztalati tnybe, azonban bele kell nyugodni: A program hibinak szma s slyossga exponencilisan n a mrettel A hibajavts utn az sszes tesztelst clszer lefolytatni A hibt megszntet okokat kell megtallni s kijavtani Gyakran egy hiba megszntetse tbb msik hiba megjelenst vonja maga utn A program ksztje a legrosszabb tesztel. A fejlesztn kvl mssal is teszteltetni kell a programot. A fenti tnyeken kvl mg egy tovbbirl is kell szt ejteni. Nagyobb mret programok esetn 100%-osan hibtlan programrl nem lehet beszlni.

12.2.4.2 A tesztels kritriumai


A j tesztels nagy valsznsggel felfedi a hibkat A j tesztelsi eljrsoknak megismtelhetknek kell lenni rvnyes s rvnytelen adatokra is kell tesztelni Minden tesztesetet maximlisan ki kell hasznlni, azaz a legtbb hibt fel kell derteni Fel kell tenni a krdst, hogy mirt nem azt teszi a program, amit kellene volna s mirt azt teszi, amit nem kellett volna.

12.2.4.3 Statikus tesztelsi mdszerek


A statikus tesztelsi mdszerek a programkd vizsglatn alapulnak. Ekkor nem futtatjuk a programot. Kdellenrzs A legegyszerbb lehetsg. Kinyomtatjuk, vagy a kpernyn tnzzk a kdot, miutn begpeltk. Clszer olyan editort hasznlni, amely kiemeli az adott nyelv kulcsszavait, esetleg sznnel vagy ms mdon elklnti az adatokat, az rtkad utastsokat. Ha lehet az program bevitelekor hasznlni kell a strukturlt rsmdot, ha akkor nem tettk meg, akkor utlag javtani kell a kdon. Szintaktikai ellenrzs A legtbb fejleszt eszkz ma mr szintaktikailag ellenrzi a program kdjt s a megfelel sorban ki is rja a hibazeneteket. Az interpreteres nyelvek gyakran mr a programsor bevitelekor elvgzik az ellenrzst, mg a compileres nyelvek csak a fordts sorn. Szemantikai ellenrzs Az interpreteres nyelvek esetn csak a programoz tudja vgiggondolni, hogy programja valban logikailag megfelel, az alkalmazott algoritmusok valban a kell vgeredmnyt adjk, s a kdols megfelel az algoritmusnak. A compileres rendszerek esetn elfordul, hogy a fordt figyelmeztet bizonyos utastsok szemantikai problmira. Gyakran tallnak az ilyen rendszerek felesleges vltozkat, olyan kdrszleteket, amelyek sohasem futnak le, mindig biztosan azonos rtket felvev vltozkat, stb. Azok a compileres rendszerek, amelyek kdoptimalizlst vgeznek, gyakran olyan kdot hoznak ltre az optimalizls sorn, amely logikailag nem felelnek meg az algoritmusnak. Ekkor ki kell kapcsolni az optimalizlst.

144

Inicializlatlan vltozk Meg kell keresni a kdban az inicializlatlan vltozkat, s kezdrtket kell nekik adni. Felesleges utastsok kiszrse Gyakran kdolskor az algoritmusnak megfelel kdot runk, holott az adott nyelv ugyanazt a funkcit esetleg gyorsabban is meg tudja oldani. Keresztreferencia tblzat Ha a programunkban lv vltozk rtkeinek vltozst nem tudjuk kvetni, akkor clszer keresztreferencia tblzatot kszteni. Erre a legtbb fordt kpes. Ez egy olyan tblzat, amely felsorolja, hogy az adott vltoz hol kap rtket, illetve hol trtnik hivatkozs r a program sorn. Ennek alapjn megllapthatjuk, hogy mely vltozkat hasznljuk a leggyakrabban. Tpuskevereds Egyes interpreteres nyelvek a bevitelkor nem ellenrzik, hogy az rtkad utastsok kt oldaln ugyanolyan tpus rtkek szerepelnek-e.

12.2.4.4 Dinamikus tesztelsi mdszerek


A programok hibinak egy rszt a statikus tesztelsi mdszerekkel ki lehet szrni, de vannak olyan helyzetek, hogy csak a futs kzbeni ellenrzs segt. Hogy egy-egy teszt minl tbb tulajdonsgot ruljon el a programrl az albbi mdszereket lehet alkalmazni:

12.2.4.5 Fehr doboz mdszerek


Az utastsok lefedsnek elve A program minden utastst legalbb egyszer vgre kell hajtani. Dntsek lefedsnek elve A programban lv dntsek minden kvetkezmnyt vgig kell prblni. A dntseket igaz s hamis esetben is vgig kell prblni. A felttelek lefedsnek elve A programban lv feltteles elgazsokat minden felttelre ki kell prblni, illetve az logikai sszekt mveleteket minden lehetsges helyzetre ki kell prblni.

12.2.5 Fekete doboz mdszerek


Ekvivalencia osztlyok ksztse A lehetsges bemen adatokat oly mdon kell csoportostani, hogy milyen kimen adatot vrunk tlk. Ezeket ekvivalencia osztlyoknak hvjuk. Minden ekvivalencia osztlyra tesztelni kell a programot. Hatreset analzis Ha a lehetsges bemen adatok ekvivalencia osztlyait helyesen is llaptottuk meg, s gy talljuk, hogy az osztlyokra megfelel vlaszt ad a program, mg mindig meg kell vizsglni, hogy az ekvivalencia osztlyok hatreseteit hogyan kezeli le a program. Gyakran az ilyen helyzetben adott hibs eredmny helytelen algoritmusra, gondolatmenetre vagy tlzott egyszerstsre vezethet vissza Stressz teszt A programokat biztosan rossz bemen adatokkal is tesztelni kell. A programok fejlesztse sorn a fejleszt ltalban felttelezi, hogy a felhasznl csak helyes dolgokat mvel, pedig ez nem gy van. A felhasznl sokkal gyakrabban tved, hibzik, mint azt a legtbb fejleszt kpzeln.

145

12.2.6 Specilis tesztek


Hatkonysgi tesztek A programok tesztelsnek utols fzisa, annak megllaptsa, hogy milyen hatkony a program, illetve mennyire jl felhasznlhat. Ha nem fut, vagy a sebessge nem megfelel, akkor meg kell keresni azokat az okokat, amelyek a megfelel futst megakadlyozzk, s annak megfelelen kell mdostani a programot, akr az algoritmusok szintjre is visszamenve. Biztonsgi teszt A programoknak stabilaknak kellene lennik, nem szabadna elre lthat okok miatt lefagyniuk. Ezekre valk a biztonsgi tesztek.

12.2.6.1 Tesztllapotok
Az elkszlt program a tesztels fzisain vgigmenve klnbz llapotokba kerl. A fejlesztk bels tesztelst alfa tesztnek hvjuk. Az ilyen llapotban lv programra azt mondjuk, hogy teszt vltozat. Ha a programot mr a jvend felhasznlk egy kisebb csoportja tesztelheti, akkor ezt az llapotot llapotnak hvjuk, a tesztelket bta tesztelknek. Gyakori, hogy egy program elkszltnek fokt a kvetkez vagy ehhez hasonl mdon jelezzk: 0.01, 0. 11, stb... Ekkor az elkszlt, letesztelt program verziszmnak az 1.0-t szoks rni. A tesztels folyamatt a fenti mdszerek figyelembevtelvel meg kell tervezni s a tesztek tapasztalatait, a bemen adatokat s az eredmnyeket jegyzknyvben rgzteni kell. Ezt hvjk tesztelsi dokumentcinak, amely a fejleszti dokumentci rsze.

12.2.7 Program dokumentlsa 12.2.8 Rendszer felhasznli kziknyve


Egy rendszer felhasznli kziknyve (dokumentcija) az albbiakat kell hogy tartalmazza: A felhasznli dokumentcinak a kvetkez rszeket kell tartalmaznia: ltalnos lers a rendszerrl, amiben a rendszer clja, a kpessgei le vannak rva. A rendszer hardverfelttelei: (minimlis, ajnlott) processzor, memria, megjelent fajtja, szksges hely a httrtron, nyomtat kell-e, egr kell-e, egyb specilis hardver kell-e. A rendszer szoftverfelttelei: opercis rendszer fajtja, verziszma, esetlegesen szksges kiegszt, egyttmkd programok, mint pl. megjelentk, szvegszerkesztk, stb Hlzati alkalmazs esetn, a hlzati opercis rendszer fajtjt, egyb ismrveit. A rendszer teleptsnek mdja, lehetleg lpsrl-lpsre lerva. A rendszer indtsa A felhasznli interface ltalnos lersa (menrendszernek, prbeszdablakok) Az zemszer mkdshez szksges rszek lersa pontonknt. A karbantartsi feladatok elvgzshez szksges rszek lersa pontonknt. A kpernyn megjelen listk, beviteli helyek, nyomtatsi listk lersa. Elfordul hibazenetek magyarzata, s azok javtsnak mdja. GYFK Gyakran Feltett Krdsek. A programok mkdse sorn a felhasznlk ltalban ugyanazokba a problmkba botlanak bele, s ugyanazokat a krdseket teszik fel. A krdseket s a rjuk adott vlaszokat is clszer befoglalni a dokumentciba

146

A felhasznli segtsgkrs s a vlasz mdja. Tovbbi fejlesztsi tervek, irnyok.

12.3 A fejlesztst segt egyb rendszerek

12.3.1 Verzikezel szoftverek


A programfejlesztsben gyakran dolgoznak egytt tbben egy projekten. Fontos szempont, hogy az egyik fejleszt ltal vgzett munkt a msik fejleszt ne rhassa fell, ezrt megjelentek az gynevezett verzikvet rendszerek. Ezeknek a rendszereknek a hasznlata azon alapul, hogy a fejlesztk egy kzponti repositorynak nevezett adatbzisbl krik ki az ppen mdostani vagy fejleszteni kvnt forrskdot. Ekkor a verzikvet szoftver lezrja msok ell a fjlhoz val hozzfrst, azaz ms nem tudja mdostani a fjlt, csak akkor, ha a fejleszt visszatlti a repository-ba a mdostott forrsfjlt. HA e kzben s is lekrte a krdses fjlt s a mdostst feltlti a szerverre, akkor az ne m fogja fellrni a korbbi verzit, hanem megjelenik egy verzitkzs. Ilyenkor a munkacsoport megfelel jogosultsggal elltott szemlye lekri a fjl klnbz vltozatait s vizulisan is megtekintve sszefslheti a kt vltoztatst, egy verzit ltrehozva gy. A program fejlesztse sorn meg lehet hatrozni gakat (Branch), amelyek egymstl elvlhatnak. Erre akkor van szksg, amikor egy szoftver klnbz verzii prhuzamosan lnek egyms mellett. Pldul egy kifejlesztett 1.x-es verzit elkezdik tovbbfejleszteni 2.0-ra, de a munka sorn kiderlnek olyan kdrszletek, amelyek alapjn mg az rvnyes 1.0 verzit is frissteni akarjk. A fejlesztk munkjuk sorn lekrhetik brmelyik g fjljait s felvltva dolgozhatnak rajta. A verzikvet szoftverek ltalban szerver-kliens felptsek. A szerver kezeli a a reporitory-t. A kliensek vltozatos protokollokon keresztl (FTP://, WebDAV://, http://, https:// svn://, svn+ssl, loklis hlzat, loklis fjlrendszer, stb...) rik el s kezelis azt. A fejleszt szmtgpn pedig van egy megfelel kliens program. Ilyen szoftverek: CVS ingyenes Linux-on terjedt el, ltezik Windows alatti portolsa is. TortoiseCVS az egyik legjobb windows alatti kliens. (http://cvs.sourceforge.net ) Subversion (SVN) A CVS nehzkes hasznlatt kikszbl vltozat. Ltezik Linux s Windowsos szerver is. TortoiseSVN az egyik legjobb Windows alatti kliens. (http://tortoisesvn.sourceforge.net) SourceSafe A Microsoft megoldsa a problmra. Nem ingyenes. 12.4 Forrskd generl szoftverek Ezek olyan szoftverek, amelyek kpesek egy grafikus fellet segtsgvel forrskdot generlni. ltalban a felhasznli interfsz alapjn. A programok a felletet sablonok alapjn lltjk ssze. A sablonok milyensgtl fgg a forrskd minsge. Az gy elksztett felhasznli felletek gyakran lefordthatk, futtathatk. Az gy elkszlt alkalmazst prototpusnak hvjuk. A prototpus teht zleti logika s adatbzis httr nlkli futtathat felhasznli fellet. A forrskd generl szoftverek gyakran Objektum-orientlt technolgival lltjk el a kdot. Ilyen szoftverek: Delphi Pascalra alapul Objektum orientlt rendszer. (Borland cg termke) C-Builder (Borland Cg termke) Visual Basic, Visual C++, Visual C# Eclipse egyes pluginokkal kiegsztve (Java) NetBeans (JAVA) CodeCharge (PHP) s mg sokan msok...

147

12.5 CASE eszkzk szerepe a programozsban


CASE eszkz definilsa Computer Adided system Engineering Szmtgppel segtett rendszer tervezs Olyan eszkzk, amelyek segtsgvel informatikai rendszerek egyes tervezsi s megvalstsi lpseit szmtgppel vgezhetnk el. CASE szoftverek csoportostsa A CASE eszkzk nem helyettestik a megfelel tervezst, hanem csak segtik azt. Milyen mdon segtenek a CASE eszkzk s milyen CASE eszkzk lteznek? Adatsztrak definilsnak lehetsge rlapok definilsa s azok alapjn az adatstruktrk meghatrozsnak eszkzei A logikai tervezs eszkzei (adatszerkezetek, logikai kapcsolatok, stbb...) A dokumentls eszkzei (a modellekbl automatikusan llt el megfelel mdon dokumentcit) Alkalmazsi vzlat, amellyel gyorstani lehet a fejlesztsi folymatot. Adatbeviteli s kimeneti formtumok gyors tervezse s megvalstsa (Riport writer, dialogus ablak kszt) Tesztelsi lehetsgek beptse Hibakeres rendszer beintegrlva A CASE eszkzk az informcifejlesztsi folymat majdnem minden lpsben szerepelhetnek, de nem tipikusan nem szerepelhetnek a rendszer elemz fzisokban. Azt semmifle CASE eszkz nem tudja helyettesteni. A CASE krnyezet jellemzi kz tartozik a grafikus fellet, ltvnyos, clszeren kialaktott menrendszerek, ablakoz felletek, diagrammok. CASE eszkzk s 4GL nyelvek kapcsolata A 4GL rendszerek alapveten szorosan sszefggnek a CASE eszkzkkel. A 4GL rendszerek az alapjai sokszor egy CASE eszkznek, illetve egy CASE eszkz alkalmas valamilyen 4GL rendszer nyelvi elemeit generlni. Pl. C-Buildr, Delphi, Visual Basic, Access, Visual DBASE, CA-Visual Object, stb...

12.6 A programoz, szervez s felhasznl informlis kapcsolata Az Informatikai rendszer fejlesztse sorn az egyttmkd partnerek szerei az albbiak. A rendszerszervez, vagy ms nven szervez az, aki a rendszert mintegy fellrl tudja szemllni, annak ltja sszes fontos tulajdonsgt, szakmai s informatikai szempontbl is. Ismeri az alkalmazott mdszereket, a rendszer alkotelemeit, de nem feladata a program legelemibb rszeinek ismerete, a hibalehetsgek minden rsznek ismerete. A programoz az a szemly, aki a rendszerterv utastsai alapjn elkszti az egyes programmodulokat, majd azt sszepti magasabb szint modulokk. Ha a rendszer fejlesztsn tbben is dolgoznak programozknt, akkor kell kzttk lenni egy vezetprogramoznak, akinek szerepe az, hogy vits helyzetekben eldntse, hogy az adott program megfelel-e a rendszertervnek, tanccsal lssa el a modulok programozit, segtsen az egyes modulokon dolgoz programozk munkjnak sszehangolsban, tovbb ellenrizze azt, hogy az egyes modulok valban megfelelnek-e minden szempontbl a rendszerterv elrsainak, belertve a tesztelst s a teszteredmnyek dokumentlst is. A felhasznl az a szemly, aki vgs soron hasznlja majd az informcis rendszert. Ezek kzl a fejleszts sorn clszer kinevezni egy un. Szakrtt, aki a megrendel, azaz a majdani felhasznlk oldalrl kzremkdik a rendszer fejlesztsben. A vits krdsek sorn ennek a szemlynek a dolga, hogy klnsen a rendszerelkszts, majd a bezemels, tesztelsi fzisban eldntse, hogy egy adott megolds vajon megfelel-e, mit kell mdostani az informatikai rendszeren s mi felel meg. 148

rdekes e hrmas kapcsolata. Ugyanis a hivatalos megrendel szllt kapcsolaton kvl e szemlyek gyakran a kzs munka miatt olyan viszonyba kerlnek, ami sorn tbb informci ramlik a fejleszthz, mint amennyi minimlisan szksges lenne. Ez nem baj, st j dolog, ugyanis ennek nyomn hasznlhatbb rendszertervek s hasznlhatbb rendszerek kszlhetnek el, mint ha csak formlis kapcsolat lenne a szemlyek kztt. (Gyakran egy rendszer minsgt nem az ltalnostott szablyok hatrozzk meg, hanem a kivtelkezelsek egyszer s a szoksokhoz igazod volta)

149

13 Zrsz
A fenti jegyzet termszetesen nem lehet teljes, hiszen az informatika s azon bell a programozs annyira szakosodott, hogy a teljes palettt egy knyvbe nem is lehetne sszefoglalni. Azok szmra, akik tovbbi elmleti jelleg tanulmnyokat szeretnnek nllan elvgezni vagy a jegyzetben lv egyes rszek irnt rdekldnek, az albbi irodalmakat ajnlom. A knyvek egy rszt meg lehet vsrolni a nagyobb knyvesboltokban, esetleg antikvriumokban. Benk Benk Kernighan - Richie Programozzunk C nyelven Programozzunk Pascal nyelven A C programozsi nyelv ComputerBooks, 1997 ComputerBooks, 1997 Mszaki Knyvkiad, 1985

Bevezets a PHP5 programozsba Panem Kiad (UML, OOP, PHP) JAVA 2 tikalauz programozknak ELTE TTK Hallgati alaptvny 1.3 I-II-III (JAVA, OOP, Vg Csaba Simon Harris, James Ross Alkalmazsfejleszts a Unified Mo- Logos 2000 Bt. 1999 delling Language jellsrendszervel Kezdknyv az algoritmusokrl SZAK kiad Kiskapu - Addison Wesley

Erich Gamma, Richard HHelm, Programtervezsi Mintk Ralph Johnson, John Vlissides Titkostsi algoritmusok Programozsi paradigma Absztrakt osztly Tervezsi minta (design pattern) Prototpus Verifikcis teszt, komponens teszt UML (aktivits, szekvencia, llapot, osztly diagramm, hasznlati eset) Szimmetrikus titkosts, nyilvnos kd titkosts, hash kd kpzse WSDL, SOAP. UDDI, Service broker, service provider OOp, esemnyorientlt nyelv Procedurlis programozs, OOP, generikus programozs Logikai programozs Klasszikus (vzess) modell Prototpus modell Inkrementlis modell Spirl modell ----------------------------Algoritmusok, algoritmus lersi mdszerek OOP

150

You might also like