Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv...

73
Programozás alapjai, programtervezés Mûszertechnika Oktatás Kft. Összállította: Kertész György tanfolyami jegyzete alapján Kovalcsik Géza 1107 Budapest Szállás u. 21 Telefon: 260-87-14 Tel/Fax: 260-43-48 Levélcím: 1475 Budapest Pf. 167

Transcript of Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv...

Page 1: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

Programozás alapjai, programtervezés

Mûszertechnika Oktatás Kft.Összállította:

Kertész György tanfolyami jegyzete alapjánKovalcsik Géza

1107 Budapest Szállás u. 21Telefon: 260-87-14Tel/Fax: 260-43-48

Levélcím: 1475 Budapest Pf. 167

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:26

p

Page 2: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

Ezúton is szeretném megköszönni Kertész Györgynek a segítségét, melyben hozzájá-rult ahhoz, hogy az Excel programozása könyv CD mellékletében közreadjam az általakészített Programozás alapjai, programtervezés címû jegyzet kivonatát.

Ugyanitt szeretném köszönetemet nyilvánítani a Mûszertechnika Oktatás Kft-nek is.A jegyzet a Mûszertechnika Oktatás Kft tulajdona. Ennek megfelelõen bármilyen módonfelhasználni akár az egészet, akár egyes részleteit csak az Õ hozzájárulásukkal lehet.

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:26

p

Page 3: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

Bevezetés

Elsõként gondoljuk át, hogy mi is valójában egy program? Egyáltalán mit jelent a prog-ram szó? Használjuk ezt a szót a napi társalgásban is. Például így: ez, vagy az a rendez-vény egy jó program volt. Vagy máskor így: mi lesz a vasárnapi program? Mi volt a közösebben a két mondatban? Az, hogy az esemény, ami adott helyen történik és meghatáro-zott ideig tart, programnak neveztünk. Persze ez még nem elegendõ ahhoz, hogy vala-mit programnak tekintsünk. Mindkét esetben sok külsõ tényezõtõl függött az, hogy a„program” hogyan zajlott. Nevezzük tehát programnak azt az adott helyen és idõbenmeghatározott eseményt vagy eseménysorozatot, ami a külsõ tényezõket figyelembe vé-ve, esetenként más-más módon folyhat le.

A számítógép egy programozható eszköz, ami a megfelelõ programok nélkül nem ké-pes mûködni. A számítógép programja is egy adott helyen – a számítógépünkön –, adottidõben – a program indításától kezdve –, a környezeti változásokat a megfelelõ pillanat-ban kiértékelve – a körülmények figyelembevételével –, alkalmanként máshogy folyik.

A számítógép programok a számítógépet, annak központi egységét vezérlik. A vezér-lés eszközei csak olyanok lehetnek, amiket a számítógép ki tud értékelni. A körülmé-nyek kiértékelésének, bár más-más programnyelvrõl legyen is szó, azonos módjai van-nak, hiszen a kiértékelést minden esetben a számítógép végzi. Ez teszi lehetõvé azt,

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:26

p

Page 4: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

hogy egy programot úgy tervezhessünk meg, hogy elõbb elkészítjük a program tervét, ésutána választunk programnyelvet. Egy jó tervnek bármelyik programnyelven megvaló-síthatónak kell lennie.

Az egyes programnyelveket egy-egy feladatkör megoldására tervezték. A nyelv meg-választása így nem teljesen mindegy. Ez a gondolat nem az elõzõ állítás tagadása, csakegyszerûen azt jelenti, hogy a szerszámokat arra használjuk, amire kitalálták. Olyanez, mint amikor egy szöget a csavarhúzó fejével szeretnénk a falba verni. Ha elég nagy acsavarhúzó, akkor a mûvelet valószínûleg sikerülni fog, de gondolom mindenki inkábbkalapácsot fog használni. A mi esetünkben nem kérdés a nyelv megválasztása – VisualBasic for Application –, de a tervezés során nem a nyelv ismerete lesz a legfontosabbtudnivalónk.

A könyvben már láttunk egy lehetséges utat a program megtervezésére és megvalósí-tására. Ha komolyan foglalkozunk programok készítésével, akkor minden esetben a fel-adat megfogalmazása és megtervezése fogja meghatározni munkánk eredményét. Ez amelléklet elsõsorban azoknak szól, akiknek még nincs gyakorlatuk összetett programokkészítésében, de a könyv olvasása felkeltette érdeklõdésüket ez iránt a szép alkotó mun-ka iránt.

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:26

p

Page 5: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

Feladatmegoldás

A megvalósításra szánt programozási feladatok során találkozunk gyorsan, egyszerûenátlátható feladatokkal, és olyanokkal, melyeknél már a megoldandó probléma megértéseis nehéz. Az elsõ esetben csak akkor gondolunk programozásra, ha valamilyen mûvelet-sort gyakran hajtunk végre. Ilyenek a statisztikai feldolgozások és az adminisztratív fel-adatok többsége. A második esetben a feladat bonyolultabb, megoldása sok külsõ feltétel-tõl függhet. E körbe tartoznak a tudományos, az ipari tervezési és irányítási feladatok.

A valóságban elõforduló esetek mindegyikére nem lehet példát adni. Mit kezdhetünkaz egyszerû adatokkal dolgozó, de sok és sokféle eredményt adó alkalmazásokkal, me-lyek adminisztratív területen is sûrûn elõfordulnak, vagy a másik oldalról azokkal, me-lyek bonyolult adathalmazokból egyszerû következtetéseket vonnak le?

Be kell látnunk, hogy a feladatokat nem válogathatjuk a fenti egyszerûséggel. Észre-vehetünk azonban egy fontos szempontot: minden esetben adatokról és eredményekrõl

beszéltünk. Szerencsésebb megközelítés, ha ezek alapján gondolkodunk.Egy program tervezése során a feladatot két kérdéssel közelítjük meg: „Mit szeretnék

eredményként kapni?” és „Milyen adatokból állítható elõ a kívánt eredmény?” A számí-tástechnika fogalmaival: a program a bemeneti (input) adatokból egy meghatározott utasí-

tássor végrehajtásával (procedure) létrehozza a kimeneti (output) adatokat. Az adatok be-adásától az eredmény megjelenéséig nekünk kell meghatároznunk a megfelelõ lépéseket.

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:27

p

Page 6: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

Azt a lépéssorozatot, ami a bemeneti adatokból létrehozza az eredményt, algoritmusnak

nevezzük.A programozási feladatokat minden esetben felbonthatjuk az adatbeolvasás, feldol-

gozás és eredmény megjelenítése részekre. Erre a felbontásra gyakorlatilag mindig le-hetõségünk van. Még olyan elsõ látásra nehezen ide sorolható esetekben is, mint példá-ul egy ébresztõóra program, melyben a bemeneti adat egyrészt az idõ múlása, másrészta beállított ébresztési idõ, s ahol a kimenet az eltelt idõ jelzése, és az ébresztés.

Arra a kérdésre, hogy mitõl lesz egy feladat egyszerû, vagy bonyolult, szintén nem le-het rávágni a nyilvánvalónak tûnõ választ. Sok rosszálmú programozó köszönheti kínja-it a tervezéskori hibás megközelítésnek. Az egyszerû feladat (ahol a bemenetbõl egysze-rûen alakítható ki a kimenet) is lehet nehezen megoldható, ha akár a „kapok”; akár az„adok” kérdésre nem tudjuk a megfelelõ választ meghatározni.

Régi tapasztalat, hogy a számítógépes programtól várt kimeneti eredménynél csak abemeneten rendelkezésre álló adatokról tudunk nehezebben információt szerezni. Nemis az a baj, hogy a majdani felhasználó ne mondaná el készségesen a válaszokat, hanemaz, hogy nehéz kiválogatni a kívánt kimenethez szükséges bemeneti adatokat. Sokfélebemeneti adat állhat rendelkezésre, de nem feltétlenül szükséges mindegyik, illetveegyik származhat a másikból. Nagyon fontos, hogy meg tudjuk határozni a szükséges éselégséges bemeneti adatok körét. Erre csak a kimeneti igények ismeretében van lehetõ-ségünk. Tudnunk kell jól megfogalmazni a kérdéseket, és jól kiértékelni a válaszokat.

A fenti probléma megoldása általában – papíron – a szervezõ gondja. Az életben per-sze ez sem ilyen egyszerû. Mindenképpen ismernünk kell a feladatmegoldás ilyen értel-

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:27

p

Page 7: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

mû elõkészítését, hiszen másképp nem tudnánk értelmezni a szervezõ által megadottadatokat. Nem is beszélve azokról az esetekrõl, amikor a szervezési feladatok is a prog-ramozóra hárulnak.

Foglaljuk össze, a fentiek alapján mit is nevezhetünk feladatmegoldásnak: a szüksé-ges kimeneti adatok megfogalmazása után meghatározzuk az ezek elõállításához szük-séges bemeneti adatokat, majd ezek alapján leírjuk, hogy a bemenetbõl milyen átalakí-tással kapjuk meg a kimenetet. Ezt a tervezési módszert az angol nyelvû szakirodalomaz Input, Procedure és a Output szavak kezdõbetûinek az összeolvasásával IPO mód-szernek nevezi.

A programkészítés lépései

A feladat meghatározása, specifikáció

A specifikáció egy olyan leírás, amely rögzíti a feladattal szemben támasztott igényeket,követelményeket. Ebben meg kell határozni azt, hogy mi a feladat, azt milyen környe-zetben kell megvalósítani, milyen bemenettel rendelkezünk és milyen kimenetet, ered-ményt várunk el a programtól. A specifikáció minõsége, korrektsége alapvetõen megha-tározza a további munka sikerét. A hiányos feladat-meghatározás alapján készített

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:28

p

Page 8: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

programról általában csak a program tesztelése során – az ellenõrzéskor –, vagy a prog-ram használatbavételekor derül ki, hogy nem azt teszi, amit vártunk tõle.

A feladat meghatározását a programozó általában készen kapja. Ez elsõ hallásra aztjelenthetné, hogy a programozó nem felelõs annak hibáiért. Lehet így gondolkozni, denem célravezetõ. A programozónak rendelkeznie kell annyi rálátással az adott terület-re, hogy a nem kellõen pontos, vagy feltételezhetõen hiányos részekre, rá tudjon kérdez-ni. Sokszor arra is szükség lehet, hogy egyes részleteket önállóan dolgozzon ki. Vagyis afeladat meghatározásának egy párbeszédnek kell lennie a megrendelõ és a program író-ja között.

A feladat meghatározása w A feladatok meghatározása során körültekintõen kelleljárnunk. Fel kell becsülni a célokat és lehetõségeket. Itt még azt is el kell döntenünk,hogy a feladat egyáltalán megvalósítható vagy nem. A feladatot a következõ szempontokszerint fogalmazzuk meg:

A megfogalmazás legyen– teljes,– érthetõ,– egyértelmû,– pontos,– tömör,– szemléletes,

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:28

p

Page 9: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

– elõrelátó,– jól felépített, tagolt.

Ha az input, procedure, output tervezési módszert követjük, akkor a bemeneti és ki-meneti adatokkal kapcsolatban a következõ szempontokat vegyük figyelembe:

Input adatok:– Mik az input adatok?– Milyen a beviteli formájuk (adattípus) ?– Mik a bevihetõ értékek?– Az adatbevitelt hogyan kell befejezni?– Milyen speciális megszorítások vannak?– Milyen kapcsolatok állnak fenn a beviendõ adatok között?

Output adatok:– Milyen adatokat kell megõrizni?– Milyen formában kell megõrizni az adatokat?– Mennyi adatról van szó?– Melyik adatokat kell megjeleníteni?– Hogyan állíthatjuk elõ ezeket az adatokat?

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:28

p

Page 10: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

Tervezés

A program egy idõben zajló folyamat leírása. Azt várjuk el tõle, hogy a feladatot oldjameg, illetve a feladatban kitûzött célokat valósítsa meg.

A specifikációból, vagy más szóval a feladat-meghatározásából, a forrásprogram,mint a fordítás alapjául szolgáló szöveg, nem egyszerû begépeléssel jön létre. A feladatotmeg kell értenünk, el kell képzelnünk a megoldás menetét, majd részletesen ki kell dol-goznunk. E folyamatban helyezkedik el a tervezés, mint olyan lépés, mely leegyszerûsítiés pontossá, hatékonnyá teszi a programkészítés folyamatát.

A tervezés során arra törekszünk, hogy az emberi gondolkodással, emberi nyelvenelképzelt megoldást olyan világos egyszerû szerkezetekkel fogalmazzuk meg melyekkönnyen megfeleltethetõk lesznek a majdani programlépéseknek. A jó programtervnem kötõdik programnyelvhez, számítógéptípushoz, általános fogalmakkal dolgozik.Az egyes feladatok megoldásához meg kell határoznunk a megfelelõ algoritmust.

A megoldandó feladatot bontsuk kisebb részekre. Kevés ember van, aki egy nagyobbfeladatot egy lépésben meg tud oldani. Egy almát sem eszünk meg egyetlen harapással. Afeladat megoldása szempontjából így kisebb jobban áttekinthetõ részekkel kell dolgoz-nunk. Hogyan bontsuk részekre a programozási feladatainkat? Arra kell törekednünk,hogy a részek minél kevésbé függjenek egymástól. Tehát az egyes részek önállóan is hasz-

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:28

p

Page 11: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

nálhatóak legyenek. Ez a fejlesztési szemlélet nem csak a tervezés során teszi érthetõvé aprogramot, hanem késõbb könnyebb lesz a programot karbantartani is.

Kódolás

A kódolás az a lépés, melyet a kívülálló általában programozási tevékenységnek tart, hi-szen azt látja, hogy megszállott emberek püfölik a számítógép billentyûzetét és nem fi-gyelnek a külvilágra. Itt készül el a terv alapján a forrásprogram, az adott nyelv szabá-lyai szerinti és annak eszközkészletére hivatkozó kód, melyet lefordítva jutunk a gépikódú programhoz.

Abban, hogy ez a fázis milyen sokáig tart, mennyire hatékony, nagy szerepe van azelõzõ lépések jó megoldásának. A rossz tervbõl szinte soha nem lesz jó program, míg a jóterv alapján hibátlan, jószerével csak elírásokat tartalmazó program készülhet. Sikerél-ményt nem az okoz, ha több napi fúrás-faragás után rájövünk a hibára, hanem az, ami-kor a kódolás gyors, egyszerû, a begépelt program a fordítás után úgy mûködik, ahogyelképzeltük.

Régi mondás, hogy csak az lehet jó, ami szép is. Ha ezt gondolatmenetünk tisztaságá-ra, megoldásaink egyszerûségére, követhetõségére, átláthatóságára értjük, elhihetjük:minél többet fúrjuk-faragjuk a programot, annál több rejtett hibát fog tartalmazni, annálnehezebb lesz igazán kijavítani. Murphy szerint: az elsõ hibátlan programot még írják.

A kódolás eredménye a program maga. Ezt forráslistának nevezzük.

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:29

p

Page 12: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

A forráslista akkor jó, ha:– pontosan a programterv alapján készült,– áttekinthetõ, olvasható,– tömör és egyértelmû magyarázó megjegyzéseket tartalmaz.

Tesztelés

A munka során rendszeresen ellenõrizzük megoldásaink helyességét. Ilyen ellenõrzése-ket nemcsak a kódolás során végzünk, hanem már a terv lépéseit is tesztelhetjük.

Nyilvánvaló, hogy a terv elolvasásával is megállapítható, mi fog történni. Az ilyen el-lenõrzéseket asztali- vagy száraztesztnek nevezzük. A programot természetesen mûkö-dés közben is ki kell próbálnunk. Az ellenõrzés körülményeit gondosan meg kell hatá-roznunk. Nem elég a mûködésnek megfelelõ (rendeltetésszerû) használatnak kiten-nünk.

Gyakori hiba, például, ha a program egy számra vár, de a programban nem ellenõriz-zük, hogy a felhasználó valóban számot írt-e be? A programozónak nem szabad csak aztellenõrizni, hogy programja a számokra hogyan reagál, hiszen a felhasználó szöveget isbeírhat, amitõl a programnak nem szabad „megbolondulnia”.

Különös gondosságot igényel, hogy a programban elõforduló döntéseket minden szél-sõ helyzetre megvizsgáljuk.

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:29

p

Page 13: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

A fejlesztés lezáró ellenõrzése lehet az úgynevezett béta-teszt, ami azt jelenti, hogy akész programot kipróbálásra átadjuk egy vagy több majdani felhasználónak, akik ta-pasztalataikat, a felfedezett hiányosságokat elmondják nekünk. Ilyen teszt csak a na-gyobb méretû és felhasználói körû programoknál szokásos.

A tesztelés eszköze a nyomkövetés. A korszerû fejlesztõrendszerek, – így a Visual Basicfor Application is –, lehetõvé teszik a program speciális, lépésenkénti futtatását, és köz-ben az egyes adatok, változók értékeinek a figyelését. A figyelmetlenségbõl, átgondolat-lanságból eredõ hibák nagy része kiszûrhetõ így. Gyakran használjuk e lépés megnevezé-sére az angol „debugging“ szót, ami szó szerint „poloskátlanítást“ jelent.

A tesztelés tulajdonképpen nem más, mint egy próbafuttatás. A próbafuttatás alattsok hibáját fedezhetjük fel a megírt programnak. A tesztadatokat úgy kell összeállítani,hogy minden lehetséges értéket felvegyenek. A program tesztelésekor a következõkrekell figyelemmel lennünk:

– A program pontosan úgy mûködik-e mint azt a feladat meghatározásában leír-tuk?

– Ne lehessen a programot elrontani.– Elég hatékony-e?– Biztonságos-e a használata?– Felhasználóbarát-e?– Mennyire szolgálja ki a felhasználó igényeit?– A külsõ megjelenése elég esztétikus?

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:29

p

Page 14: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

– Sehol nem idegesítõ?– Mennyire illeszkedik a szabványokhoz, szokásokhoz?

Dokumentáció

A program dokumentációja több részbõl áll. Egyik részét képezi a fejlesztéskor létreho-zott írásos anyag: a specifikáció, a terv, a programkód, az abba beírt megjegyzések és atesztek kiinduló adatai, eredményei. Másik része a felhasználáshoz szükséges segéd-anyag: installációs leírás, kezelési utasítás, technikai referencia. A fejlesztési dokumen-táció minõsége (érthetõség, olvashatóság) fontos a kivitel, a hibakeresés és a késõbbi fej-leszthetõség szempontjából is. Célszerû a program forráskódját is öndokumentáló mó-don elkészíteni. Ez azt jelenti, hogy a szöveget ellátjuk magyarázó megjegyzésekkel, il-letve a befoglalt részeket beljebb tabuláljuk, az egyes részeket világosan elhatároljukstb. Összefoglalóan: betartunk olyan szerkesztési konvenciókat, amelyek lehetõvé te-szik, hogy a programkód szövegét bárki elolvasva megérthesse azt (akár magunk is egykésõbbi alkalommal).

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:30

p

Page 15: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

A fejlesztõi dokumentációnak a következõket kell tartalmaznia:

– A feladat meghatározása.– A programterv.– A forrásprogram.– A kész program forrás kódú listája.– Tesztadatok listája.

A felhasználói dokumentációnak más feladatokat kell kielégítenie, mint a fejlesztõidokumentációnak. A felhasználói dokumentációnak a következõ részekbõl kell állnia:

– A feladat leírása, vagyis mire használható a program.– Milyen legkisebb hardver konfiguráción használható.– Milyen legkisebb szoftver környezetben használható.– Hogyan lehet használatba venni. Telepítés.– Hogy lehet elindítani a programot?– A program használatának részletes leírása.– Hibalehetõségek, hibaüzenetek magyarázata, útmutatás, teendõk leírása.

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:30

p

Page 16: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

A programnyelvek elemei

A számítógépes programok adatokkal, vezérlésekkel dolgoznak, így fontos ismernünkezek típusait. Az adat fogalmáról megállapítottuk, hogy a körülöttünk lévõ dolgok bár-mely mérhetõ és nem mérhetõ jellemzõjét így nevezhetjük, ha azt egyértelmûen le tud-juk írni. Az információ fogalmával is találkoztunk: az adatokból levont következtetésekeredménye. Ez utóbbi a számítógép számára ugyanúgy jelenik meg, mint az eredetiadat, ezért most nem fogunk közöttük különbséget tenni, egyszerûen mindkettõt adat-nak nevezzük. A számítógépeken, függetlenül a programnyelvtõl, az adatokat különbö-zõ formában tároljuk. Ahhoz, hogy egy programot megvalósítsunk, ezeket az adatformá-kat ismernünk kell.

Adattípusok

Az adatokat a program futása alatt változókban õrizzük meg az éppen futó program szá-mára. A változó nem más mint a számítógép operatív memóriájában egy névvel ellátotthely, ami alkalmas az adatok tárolására. Az egyes helyfoglalásokat deklarálással való-síthatjuk meg. Az egyes helyfoglalások, deklarálások alkalmával azt is meghatározhat-

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:30

p

Page 17: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

juk, hogy az adatot milyen formában kívánjuk megõrizni. Ezzel annyi helyet fogunk le-foglalni az adataink számára, amennyire szükség van. A jegyzetben a Visual Basic forApplication nyelvben használható változótípusokat mutatjuk be, de a felsorolt típuso-kat más programnyelvekben is meg fogjuk találni.

Numerikus típusok

Számszerû értékek ábrázolására szolgálnak. Megkülönböztetünk egész és valós típuso-kat. Az egész típusok nevükbõl adódóan egész számokat ábrázolhatnak, míg a valós tí-pusok valós, azaz egész és tört számokat. Mindkét esetben beszélhetünk az ábrázolhatószámok intervallumáról (a legkisebb és a legnagyobb érték között). Az egész típusoknála pontosság kérdése nem vetõdik fel, annál inkább érdekes a valós típusoknál. Az egésztípusokat tárolási módjuk és méretük alapján osztályozhatjuk.

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:30

p

Page 18: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

Egészszámok:

adattípus hossza intervallum

Byte 1 byte 0-tól 255-ig

Integer 2 byte -32 768-tól 32 767-ig

Long 4 byte -2 147 483 648-tól 2 147 483 647-ig

Valós számok:

Single 4 byte Negatív számok:-3,402823E38-tól 1,401298E-45

Nulla

Pozitív számok:1,401298E-45-tõl 3,402823E38-ig

Double 8 byte Negatív számok:-1,79769313486231E308-tól-4,9406564584124E-324-ig

Nulla

Pozitív számok:4,9406564584124E-324-tól 1,79769313486231E308-ig

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:31

p

Page 19: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

Currency 8 byte -922 337 203 685 477,5808-tól 922 337 203 685477,5807-ig

Date 8 byte 100-január 1-tõl 9999-december 31-ig

Szöveges típusok

A program a szöveges adatokat éppúgy képes feldolgozni, azokkal mûveleteket vé-gezni, mint a számértékekkel. A Visual Basic for Application programnyelvben kétfé-le String típusú változót deklarálhatunk. Fix hosszúságút és változó hosszúságút. Aváltozó hosszúságú szöveges változó hossza körülbelül 2 milliárd karakter tárolásátteszi lehetõvé. A fix hosszúságú szöveges változók hossza maximum 64 kbyte lehet.Egy tíz karakter hosszúságú szöveg befogadására alkalmas változót a következõ mó-don kell deklarálnunk:

Dim Szoveges As String *10

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:31

p

Page 20: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

Logikai típus

A számítástechnika szinte legfontosabb adattípusa, bár ezt elsõ látásra nem is gondolnánk.Logikai típusú adat, kell minden döntéshez, ami a program mûködését befolyásolja.

A logikai típus tárolásához 1 bit szükséges, hiszen értéke csak kétféle (hamis és igaz)lehet. A kényelem (sebesség, egyszerû programozás) érdekében az IBM PC-re írt prog-ramnyelvek általában egy egész byte-ot elhasználnak egy bit helyett. A VBA két byte-otfoglal le a Boolean típusú változóknak. Az érték True vagy False lehet.

Mutató típus

A mutató típus a memória egy címét tárolja, azaz egy címre mutat, ahol adat, objektumvagy alprogram található. A VBA nyelvben objektumokra hivatkozhatunk mutató típu-sú változóval. Az adattípus deklarálása során az Object kulcsszót használjuk. Mutató tí-pusú változónak a Set paranccsal adhatunk értéket. Erre példa a következõ program-részlet:

Dim Lap As Object

Set Lap = Worksheets(1)

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:31

p

Page 21: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

A Set utasítás segítségével a Worksheets(1) munkalapot elneveztük Lap névvel.A program további részeiben a Lap változóval hivatkozhatunk – rámutathatunk – aWorksheets(1) munkalapra.

Általános adattípus

Ha a program futása során egy változónak úgy adunk értéket, hogy elõre nem tudjukannak az adattípusát, akkor a Variant változótípust használhatjuk.

Adatszerkezetek

Az egyedi tárolású adatok nem elégítenek ki minden igényt, hiszen sokszor fordul elõ,hogy több önálló, esetleg eltérõ típusú adat képez olyan egységet, amit a gépi feldolgozássorán is szeretnénk megõrizni. Az adattípusok adatszerkezetekbe szervezhetõk, s azokújabb szerkezetekbe ágyazódhatnak. Mindig a program igényeihez legjobban alkalmaz-kodó szerkezeteket alakítsunk ki.

A legalapvetõbb esetekre a programnyelvek általában kínálnak megoldást:

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:31

p

Page 22: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

A tömb azonos típusú, méretû adatok ismétlõdése a memóriában, index-szel, az adattömbön belüli sorszámával hivatkozhatunk a egy-egy elemére. Erre a könyvben a válto-zókról szóló részben találunk példákat.

Rekord típusú változóban eltérõ típusú, méretû adatok együttesét tárolhatjuk. Eze-ket a változótípusokat nekünk kell meghatároznunk. A VBA nyelvben erre a TYPE uta-sítást használjuk. Az így meghatározott változók a felhasználó típusú változók.

Type felhaszntípus elemnév As típusnév [ elemnév As típusnév]...

...

változók felsorolása

...

End Type

A Type utasítás argumentumai a következõk:

felhaszntípus A felhasználó által definiált típus neve. Erre az általános változó elneve-zés szabályai érvényesek.

elemnév A felhasználó által definiált típus elemének neve. Erre az általános válto-zó elnevezés szabályok érvényesek

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:32

p

Page 23: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

típusnév Az elõbb felsorolt típusok egyike lehet (típusnév nem lehet objektumadattípus).

Felhasználói változótípust a következõ leírás szerint határozhatunk meg:

Type HelysegAdat

HelysegKod (1 To 100) As Integer

Orszag As String * 30

End Type

A felhasználó által meghatározott változótípust a továbbiakban ugyanúgy hasz-nálhatjuk egy-egy változó típusának a megjelölésére, mintha a VBA beépített adattí-pusa lenne:

Dim Ibafa As Helysegadat

Az elõzõ példában a HelysegAdat tartalmazza a Helysegod statikus tömböt, és az Orszagstringet. Az Ibafa rekordnak ugyanaz a szerkezete, mint a HelysegAdatnak. A következõpéldában a Type utasítással egy 3 elemû, a felhasználó által definiált típust hozunk létre,ennek segítségével megadunk egy ilyen típusú változót, és minden elemhez hozzárende-lünk adatokat.

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:32

p

Page 24: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

Type TesztRekord

VevoSzam As Long

VevoNev As String * 36

Hitel As String * 24

End Type

Dim Vevo As TesztRekord

Vevo.VevoSzám = Val(InputBox$(„Írja be a vevõ számát: “))

Vevo.VevoNév = InputBox$(„Írja be a vevõ nevét: “)

Vevõ.Hitel= InputBox$(„Írjon be hitelezési információt: “)

Utasítások típusai

A programokban használt utasításokat az adott nyelvtõl függetlenül csoportosíthatjuk:

– értékadás– vezérlésátadás– direkt: ugrás, alprogramhívás, visszatérés– feltételes: elágazás, ciklus– egyéb

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:32

p

Page 25: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

Vezérlõszerkezetek

A program mûködését, az utasítások végrehajtási sorrendjét befolyásoló utasításokatösszefoglalóan vezérlésátadó utasításoknak nevezzük. Magyarázzuk meg a kifejezést:

Az utasítások azt mondják meg a processzornak, hogy milyen adatokkal, mit kell ten-nie, azaz vezénylik, vezérlik a processzor mûködését. A processzor az utasításokat sor-ban, egymás után hajtja végre. Vezérlésátadásról akkor beszélünk, amikor ettõl az auto-matizmustól eltérünk. A vezérlésátadó utasítások azt határozzák meg, melyik program-részlet utasításai vezérlik ezentúl a processzort.

Feltételes vezérlésátadó utasításnak azokat az utasításokat nevezzük, melyek vala-milyen feltétel teljesülésétõl függõen hajtják végre a program egyik vagy másik utasí-tássorozatát. A feltétel vizsgálata során egy vagy több változó vagy objektum állapotá-nak pillanatnyi értékét vizsgáljuk. A vizsgálat eredménye minden esetben egy logikaiérték.

A modern – struktúrált – programozásban a feltételes vezérlésátadó utasítás és az ál-tala végrehajtott, vagy éppen kikerült utasítások egymástól elválaszthatatlanok, egy ve-

zérlõszerkezetet alkotnak. A vezérlõszerkezeteket két fõ és több alcsoportba oszthatjuk:

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:32

p

Page 26: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

Elágazások w Szelekciók– egyágú: a vizsgált feltétel igaz értéke esetén a befoglalt utasítás végrehajtódik,

egyébként nem– kétágú: a feltétel igaz és hamis értéke esetén más-más ág hajtódik végre– többágú: egy kifejezés értékétõl függ, hogy melyik ág hajtódik végre, vagy az ágak

külön feltétellel rendelkeznek, közülük csak egy hajtódhat végre

Ciklusok w Iterációk– elõl tesztelõ: a ciklus elején megvizsgálja a meghatározott feltétel teljesülését.

Ha a feltétel igaz, akkor végrehajtja a ciklustestbe írt utasításokat, majd újra afeltételt vizsgálja. Mindaddig ismétli a ciklustestbe írt utasításokat, amíg a fel-tétel igaznak bizonyul.

– hátul tesztelõ: A ciklustestbe írt utasításokat legalább egyszer végrehajtja, mert aciklustest végén vizsgálja a kilépés feltételét. A ciklustestbe írt utasítások végre-hajtását, akkor hagyja abba, ha feltétel igaz.

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:33

p

Page 27: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

Összegezve

A programnyelvek ugyanazokkal az eszközökkel dolgoznak, csak az egyes utasításokszintaktikája, nyelvi megvalósítása más. Vagyis más szabályok szerint kell leírni a kü-lönbözõ programnyelvek utasításait, de az építõkövek megegyeznek. Ez teszi lehetõvé anyelvtõl független programtervezést.

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:33

p

Page 28: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

A program építõelemei

A program tervezése során hasznos az egyes eljárásokatvalamilyen grafikus módszer segítségével ábrázolni. En-nek egy korai változata a folyamatábra. Jegyzetünkbennem ennek a megtanulása a cél, de most az egyes vezérlõ-szerkezetek szemléltetésére ezt használjuk. A programtevékenységeit, szerkezetét ezzel a módszerrel mindenkiszámára olvashatóvá tehetjük. Ezzel a módszerrel a prog-ramnyelvtõl függetlenül írjuk le a program folyamatait.

A folyamatábra elemei

Folyamatábra rajzolásakor két síkidomot és összekötõ vo-nalakat használunk:

A folyamatábrát felülrõl lefelé kell olvasni, az utasítá-sok, feltételek felülrõl lefelé követik egymást. Ha az el-ágazás miatt nem a következõ utasításnál folytatódik a

feltétel 1

utasítás(ok)

Igaz

feltétel 2

utasítás(ok)

Igaz

feltétel n

utasítás(ok)

Igaz

Hamis

Hamis

utasítás(ok)

Hamis

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:33

p

Page 29: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

program, akkor a vonal végére rajzolt nyílhegy után kell haladnunk, ez megkönnyíti azértelmezést. Ugyancsak kitesszük a nyílhegyeket a csomópontokba befutó vonalak vé-gén is.

Szokás jelezni az ábrázolt program vagy eljárás elejét és végét külön, lekerekítettsarkú négyszögbe írt „start“ és „stop“, vagy „begin“ és „end“ szavakkal. A „start“ illetve„begin“ szavakat célszerû helyettesíteni a program vagy eljárás nevével.

A rajztechnika a hosszabb, bonyolultabb eljárások ábrázolására is alkalmas. Elõfor-dulhat, hogy a rajz méretei miatt, átláthatóságának érdekében a nagyon távoli csomó-pontokat összekötõ vonalakat nem rajzoljuk le, hanem végeiket kis körökbe írt számok-kal jelöljük meg.

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:34

p

Page 30: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

Vezérlõszerkezetek

Ebben a fejezetben részletesen megvizsgáljuk a vezérlõszerkezetek fajtáit, azok mûkö-dését. A folyamatábra mellett VBA nyelvû példát is láthatunk.

Szelekciók

Egyágú szelekció w A feltétel igaz – True – értéke esetén az„igaz“ ág (Then ág) utasítását vagy utasításait hajtja végre aprogram, egyébként ezt kihagyva a program a csomópontot kö-vetõ utasításnál folytatódik.

Kétágú szelekció w A feltétel igazértéke esetén az „igaz“ ág (Then ág)utasítása, utasításai, egyébként a „ha-mis“ ág (Else ág) utasítása, utasításai

hajtódik végre, majd a program a csomópontot követõ utasítás-nál folytatódik.

feltétel

utasítás(ok)

Hamis

Igaz

feltétel

utasítás(ok)

igaz

utasítás(ok)

hamis

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:34

p

Page 31: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

Többágú szelekció w A többágú szelekció kétágúelágazások egymásba-ágyazásából épül fel. A vizsgá-lat az 1. feltétel vizsgálatával indul. Ha ez igaz, akkora hozzátartozó utasításokat hajtja végre és a programaz egész szelekciós szerkezet után folytatódik. Ha azelsõ feltétel eredménye hamis, akkor a következõ fel-tétel vizsgálatára kerül sor, ha ez igaz, úgy az ehheztartozó utasítás hajtódik végre, s így tovább.

Bármely feltétel igaz értéke esetén a többit márnem vizsgálja. Ha egyik feltétel sem volt igaz értékû,akkor a vezérlés az utolsó feltétel hamis ágában állóutasításhoz (n+1) kerül. Az ebben az ágban álló utasí-tás el is maradhat, vagyis az utolsó feltétel lehet egy-ágú is.

feltétel 1

utasítás(ok)

Igaz

feltétel 2

utasítás(ok)

Igaz

feltétel n

utasítás(ok)

Igaz

Hamis

Hamis

utasítás(ok)

Hamis

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:35

p

Page 32: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

Elöltesztelõ iterációk

For... Next típus w A For... Next típusú ciklus egy ve-zérlõváltozó értékét rendre megnöveli, s a ciklustestbentalálható utasításokat minden növelés után végrehajtja.A folyamat addig tart, míg a vezérlõváltozó értéke megnem haladja a ciklus elsõ sorában meghatározott végér-téket.

A vezérlõváltozó értékének vizsgálata a ciklustestbe írtutasításokat megelõzi, így abban az esetben, ha a kezdõér-ték eleve nagyobb a végértéknél, akkor a ciklusba zártutasítások egyszer sem kerülnek végrehajtásra.

A vezérlõváltozó növelése akkor következik be, amikora program a Next utasításra lép. Ezután visszaadja a ve-zérlést a For utasítást tartalmazó sornak. Itt ismét a ve-zérlõváltozó ellenõrzésére kerül sor.

A VBA nyelvben két For Next típusú vezérlést is talá-lunk. Az egyik vezérlõváltozója egy számértéket tartal-mazó kifejezés, a másik pedig egy objektum. Az objektumtípusú For Each... Next ciklus egy gyûjtemény elemeit

feltétel

utasítás(ok)

Igaz Hamis

a vezérlõváltozókezdeti értékének

a beállítása

vezérlõváltozónövelése

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:35

p

Page 33: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

veszi sorra. Ebben az esetben a ciklust egy gyûjtemény hivatkozással határozhatjukmeg. A For Each ciklus addig ismétlõdik, amíg a gyûjtemény minden objektumát sorranem veszi. A For... Next típusú ciklusszervezés esetén az ismétlések számát elõremeghatározzuk.

Do... Loop típus w A Do... Loop típusú iterációt felhasz-nálhatjuk mind elöltesztelõ, mind pedig hátultesztelõ cik-lusként. Ez csak az írás módjától függ. Ha ugyanis a Do uta-sítássorba írjuk a feltétel vizsgálatát, akkor elõltesztelõ cik-lust – iterációt – alakíthatunk ki, ha pedig a Loop utasításmellé, akkor hátultesztelõt. Ebben az esetben egy külsõ vál-tozó értékének megváltozásával vezérelhetjük a ciklusokvégrehajtási számát. Természetesen a vizsgált változónakváltoznia kell a ciklustesten belül, különben a ciklus végte-lenszer ismétlõdik meg.

Az iteráció elsõ sorában a feltétel teljesülését vizsgálhat-juk úgy is, hogy akkor lépünk a ciklusba, ha a feltétel igaz(While), és úgy is hogy amíg a feltétel nem igaz (Until).

Mindkét vizsgálatot a ciklus elején hajtjuk végre, így az iterációnk elõl-tesztelõ lesz.

feltétel

utasítás(ok)

Igaz Hamis

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:36

p

Page 34: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

Hátul-tesztelõ iteráció

Erre a vezérlésszerkezetre szintén a Do... Loop utasításpárthasználjuk. Az elõzõ vezérlésszerkezet megvalósításától csakannyiban térünk el, hogy a ciklus végrehajtását vezérlõ vizs-gálatot a Loop utasítás mellé írjuk, így a ciklus egyszer min-denképpen végrehajtódik.

Összefoglalva

A fejezetben felsorolt vezérléseket felhasználhatjuk bármi-lyen programszerkezet felépítésére. Ez a gondolat máskéntmegfogalmazva: minden programot megvalósíthatunk háromelem megfelelõ kombinálásával. Ez a három elem a:

– szekvencia, egyszerû utasítások– szelekció, elágazás vezérlésátadások– iteráció ismétlés, ciklus vezérlések.

Ezek a szerkezeti elemek olyanok, mint egy autóban a csavarok, alkatrészek. A terve-zéskor az algoritmus megfogalmazása során ezeket az alkatrészeket használjuk a teljesprogram felépítésére.

Hamis

utasítás(ok)

feltétel

Igaz

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:36

p

Page 35: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

Struktúrált programtervezés

A programfejlesztés módszerei a számítástechnika hõskorában korántsem fejlõdtekolyan iramban, mint a hardware eszközök. A hatvanas évek végén a programok írására,kijavítására fordított idõ aránytalanul nagy lett a végrehajtási idõhöz és a megnö-vekedett feldolgozási igényekhez képest. Gazdasági szükségszerûséggé vált hatékonytervezési, programozási módszerek kifejlesztése, hiszen a nagy létszámú, de kevéssé ha-tékony fejlesztõ csoportok munkája túlságosan drágává vált.

A nagy számítástechnikai cégek szakemberei és az egyetemi kutatók sok alapvetõ el-méleti fejlesztést végeztek a tervezési, programozás-elméleti szakterületeken. E kutatá-sok eredményei minden más tudományterületnél gyorsabban kerültek át a mindennapigyakorlatba. Ebben az idõben, egészen a hetvenes évek végéig számos új módszer ésprogramnyelv jelent meg, köztük a moduláris és struktúrált programozás.

Próbáljuk meg összegyûjteni és értelmezni a programok hatékonyságát, minõségétbiztosító szempontokat:

−Korrektség: a program a kitûzött célt valósítsa meg

−Megbízhatóság: hibátlan mûködés, illetve a hibák behatárolhatósága, ki-szûrhetõsége

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:37

p

Page 36: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

−Áttekinthetõség: világos, érthetõ szerkezet, jól olvasható terv és program

−Személytõl valófüggetlenség:

megállapodásos módszerek alkalmazásával biztosítható,hogy a munkán párhuzamosan többen dolgozzanak, vagymás személy vegye át a fejlesztést

−Karbantarthatóság,továbbfejleszthetõség:

a késõbb felmerülõ igényekhez könnyen lehessen alakíta-ni, legyen kiegészíthetõ

−Olcsó, gyors fejlesztés: az elõbbi szempontok figyelembevételével a fejlesztésköltségei csökkenthetõk, a tévutak, javítgatások kiküsz-öbölhetõk

Elsõ pillantásra (és a programok minõségérõl szerzett tapasztalataink szerint) afentiek vágyálomnak tûnhetnek. Fordítsuk meg a dolgot: ki mer és akar megbízhatat-lanul fejleszteni? Ki akar állandóan fúrni-faragni anélkül, hogy átlátná amit csinál?Az ilyen munkára mondja Murphy: A számítógépes fejlesztés határidõ-túllépése embe-ri élõmunka hozzáadásával csak fokozódik. Meg kell találnunk a feladatok megoldásá-nak olyan módját, amivel az említett szempontok megvalósíthatók.

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:37

p

Page 37: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

A moduláris programozás

A moduláris programozás kezdetben a nagy méretû programok fizikai tördelését jelen-tette, hiszen sok esetben az egész be sem fért volna egyszerre az operatív tárba, vagy afeladat nagyon áttekinthetetlen volt. A feladat szétbontása modulokra akkor lehet iga-zán hasznos, ha az egyes részek függetleníthetõségének határait jól felismerjük. Biz-tosítanunk kell azt, hogy a modulok jól körülhatárolt, korrekten definiálható feladato-kat valósítsanak meg, így az egyes modulok külön tervezhetõk, kódolhatók, tesztelhe-tõk. Ügyelnünk kell arra, hogy az egymással majdan kommunikáló, adatcserét végzõmodulok értsék egymást. A modulok elkészítése után össze kell õket fûznünk egy prog-rammá.

A moduláris programfejlesztés elsõ lépése a modulok kialakítása. Az egyes moduloktermészetesen további modulokra is oszthatók olyan mélységben, ami az egyszerû fej-lesztés érdekében megfelelõ. Kezdetben az egész feladatot egy egységnek tekintjük, sezt bontjuk részekre. Ezután az egyes modulokat külön-külön vizsgáljuk, s ha szüksé-ges, tovább bontjuk õket. E folyamatot ismételjük addig, míg minden szükséges bontástelvégeztünk. A felbontás tehát felülrõl (az egésztõl) lefelé (az egyre kisebb részekhez)tart, angol kifejezéssel: top-down irányú.

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:37

p

Page 38: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

A kódolás – vagy más szóval a program írása – a legalacsonyabb szintû modulokkalkezdõdik, s ezeket fûzzük össze egyre bonyolultabb egységekké. A kódolás tehát alulrólfelfelé tart, angol kifejezéssel: bottom-up irányú.

A moduláris programozás hiányossága az, hogy a modulok kialakításának mikéntjé-re nem ad módszert. A modulok rossz elhatárolása növeli a bonyolultságot, rontja az át-tekinthetõséget, és ha a kapcsolódások rosszak, akkor sok utólagos, „favágó“ módosítás-ra van szükség. Romlik a megbízhatóság és hatékonyság is.

A struktúrált programozás

A moduláris programozás fejlõdése nyújtott alapot a struktúrált programozás tervezésiés kódolási módszereinek kifejlesztéséhez. A struktúrált programozás a moduláris prog-

ramozás szigorúbb formája, melynek alapkérdése a modulok elhatárolása. E módszer-ben a részfeladatok hierarchikus rendszerben kapcsolódnak egymáshoz, melyben csakalá- és mellérendeltségi viszonyok szerepelnek.

Böhm és Jacopini tétele w 1966-ban Böhm és Jacopini egy cikkben fogalmazta megtételét: Bármely egy bemenetû és egy kimenetû program megfeleltethetõ egy olyanprogramnak, ami csak három vezérlési struktúrát tartalmaz. Visszafelé olvasva: a há-rom vezérlési struktúrából minden egy bemenetû és egy kimenetû program felépíthetõ.

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:38

p

Page 39: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

Fontos értenünk az egy bemenet és egy kimenet fogalmát. Bemenet alatt itt azt apontot értjük, ahol a program elkezdõdik, kimenet alatt pedig azt, ahol véget ér. Sze-rencsésebb ezeket bejáratnak (Entry) és kijáratnak (Exit) nevezni. A késõbbiekben in-kább e kifejezéseket használjuk.

A három alapvetõ struktúra:– Egyszerû utasítássorozat (szekvencia)– Elágazás (szelekció)– Ciklus (iteráció)

A fenti struktúrák felépítésével tulajdonképpen már foglalkoztunk a vezérlõszerke-zetekrõl szóló fejezetben. A tétel szerint ezek mindig ábrázolhatók egy olyan egyszerûszekvenciával, melynek hatása ugyanaz, illetve a tevékenységek (szekvenciák) is fel-bonthatók a három alapstruktúra valamelyikére. Ez egyrészt azt jelenti, hogy bonyolultrészfolyamatok is ábrázolhatók egy tevékenységként ott, ahol részletezésük felesleges,másrészt azt, hogy minden tevékenységként ábrázolt részfolyamat tovább bontható ad-dig, míg az elemi, triviális szintet el nem érjük.

A következõ oldalon a lépésenkénti finomítást igyekszik ábrázolni egy egyszerû pél-da: A program számítsa ki a beírt számok átlagát! Ha nem írtunk be adatot, akkor jelez-zen hibát! Az összegzés akkor ér véget, ha 0-t írunk be.

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:38

p

Page 40: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

Elsõ lépésben ábrázoljuk azt, hogy a feladat elõkészítéssel kezdõdik, majd folytatódikaz adatok gyûjtésével, végül az eredmény képzésével fejezõdik be:

elõkészítés

adatok gyûjtése

eredmény képzése

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:38

p

Page 41: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

Második lépésben az elõkészítést bontsuk fel a gyûjtõ nullázása és a számláló nullá-zása tevékenységekre, az adatok gyûjtését az elsõ adat beolvasása és ciklikus gyûjtés te-vékenységekre, az eredményképzést pedig egy szelekcióra, melynek egyik ágában azosztás és kiírás, másik ágában hibajelzés található aszerint, hogy van-e beolvasott adat,vagy nincs. Elõfordulhat ugyanis, hogy már az elsõ esetben 0 értéket ír be a felhasználó,ami 0-val való osztást eredményezne, ha erre nem figyelnénk:

elõkészítés

adatok gyûjtése

eredmény képzése

számláló > 0

gyûjtõ = 0

számláló = 0

elsõ adat beolvasása

ciklikus gyûjtés

Igaz

osztás és kiírás hibajelzés

Hamis

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:39

p

Page 42: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

Harmadik lépésben a ciklikus gyûjtést bontsuk egy iterációra, melynek feltétele az,hogy a beírt adat nem 0, magjában pedig növeljük a számlálót és a gyûjtõhöz hozzáad-juk a beolvasott értéket, majd újabb számot olvasunk, az osztást és kiírást pedig bont-suk az osztás elvégzésére és az eredmény kiírására:

számláló > 0

elsõ adat beolvasása

ciklikus gyûjtés

adat <> 0

gyûjtõ = gyûjtõ + adat

számláló növelése

adat beolvasása

IgazHamis

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:40

p

Page 43: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

Mills szabályai w

– A legkisebb programozási egység a tevékenység. A legkisebb itt azt jelenti, hogytovább nem bontható, vagy nincs értelme tovább bontani

– Minden tevékenységnek csak egy bejárata és egy kijárata lehet ezt nevezzük Mills

féle kritériumnak.– A tevékenységek (utak) elágazása csak predikátumokon – feltételeken – keresztül

történhet, aminek csak két értéke lehet: hamis és igaz– Több tevékenység (út) csak csomópontokban találkozhat.

A fenti szabályoknak megfelelõ programok felépítéséhez három objektum szükséges:tevékenység, predikátum, csomópont. Ezek ábrázolásához a folyamatábránál megismertrajztechnikai jeleket fogjuk felhasználni.

Ha visszalapozunk a vezérlõszerkezetekrõl szóló fejezethez, akkor felismerhetjük: azott ábrázolt alapszerkezetek mindegyike felépíthetõ ezekbõl, s mindegyikre érvényesekMills szabályai.

A programozó egyik feladata az, hogy a fenti szerkezeteket alkalmazva el tudja vé-gezni a részletes felbontást azokon a pontokon, ahol a szervezéskor nem történt bontás,de technikailag szükséges, és az adott programnyelvben megvalósítsa ezeket.

A fejlett programnyelvek jól alkalmazkodnak a fentiekhez, hiszen definiálásukkor ezekmár ismertek voltak. Van azonban néhány olyan utasítás, amitõl tartózkodnunk kell e té-

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:40

p

Page 44: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

teleket alkalmazva. Szinte minden nyelv tartalmaz olyan utasításokat, melyekkel az egybejárat egy kijáratát elve megtörhetõ. Ilyen a VBA-ban a GOTO (direkt ugrás), vagy aziterációkban az EXIT utasítások. Az ilyen utasítások alkalmazása elsõ pillantásra na-gyon kényelmesnek tûnik, de kis gyakorlattal is belátható, hogy nagyon nehezen követhe-tõ, s nehezen módosítható, javítható programok megírásához vezetnek.

Ha a Mills kritériumot betartjuk, egyre bonyolultabb eljárások építhetõk fel anélkül,hogy az egy kijárat egy bejárat elvét megsértenénk. Az általunk vizsgált nyelvre jellem-zõ, hogy eljárások, függvények (egyszóval szubrutinok) deklarálásánál sem térhetünk ela Mills kritériumtól.

Struktúrált problémalebontás

A korszerû programtervezési eljárások alapja a probléma lebontása, dekompozí- ciója.A lebontás szisztematikusan felülrõl lefelé (top-down) haladó módszer, mely lépésrõl lé-pésre meghatározza az eljárást.

A kiindulásnál a specifikáció szerint megoldandó problémát tekintsük egyetlen funk-ciót tartalmazó egységnek, majd hajtsuk végre az alábbi mûveletsort:

– Döntsük el, hogy a vizsgált funkció az adott programnyelven közvetlenül megold-ható vagy sem.

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:41

p

Page 45: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

– Ha megoldható, akkor kódoljuk, majd ellenõrizzük, hogy a kód valóban megfelel-ea funkciónak (ugyanazt az eredményt adja-e).

– Ha nem oldható meg közvetlenül, akkor bontsuk fel vezérlõfunkciókra a háromalapstruktúra (Böhm-Jacopini) segítségével. Azokat használjuk fel, melyek a leg-jobban leírják a funkciót.

– Ellenõrizzük a felbontás helyességét, s ha megfelelõnek találjuk, akkor a funkciótváltsuk ki az elõzõ lépésben kialakított részfunkciókkal.

A fenti lépéseket addig ismételjük, míg van a struktúrának olyan pontja (tevékenysé-ge), melyet tovább lehet bontani. A felbontás végeztével eljutunk a triviális szintig, melycsak feltételeket és az adott nyelven eleminek tekinthetõ tevékenységeket tartalmaz.

A felbontás során az egésztõl az egyre részletesebb, egyre finomabb felbontás feléhaladunk, s minden szinten csak az ott felmerülõ kérdéseket vesszük figyelembe. Ezazt jelenti, hogy a problémát egyre finomabban körülhatároljuk, mégsem kell – elveszvea részletekben – egyszerre minden szintet látnunk. A lépésenkénti finomítás elvét al-kalmazzuk (angolul: Stepwise Refine- ment), vagyis a funkciót részekre bontjuk,majd minden részt egy lépéssel tovább bontunk, csak ezután megyünk mélyebbre. Astruktúrát emeletenként (szintenként) elemezzük.

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:41

p

Page 46: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

Összegezve

A programozási feladatok megoldását a nagyobb egységektõl a kisebbek felé haladvaoldjuk meg. A nagyobb lépéseket addig bontsuk kisebb részekre, amíg az adott program-nyelvben egy utasítással megoldható lépések szintjéig el nem jutunk.

A kódolást a kisebb részek, eljárások megírásával kezdjük. A kisebb egységek elkészí-tése után azokat fogjuk össze egy eljárásban.

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:41

p

Page 47: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

Jackson módszere

Michael Jackson, amerikai szakember 1975-ben publikálta módszerét, melyet sokévesipari, kereskedelmi és számítástechnikai munkájának tapasztalatai alapoztak meg.

A Jackson módszer az adatszerkezetek vizsgálatából indul ki, a program vezérlõszer-kezeteit az adatok szerkezetébõl vezeti le. Ez az elv magától értetõdõ lehet minden adat-feldolgozási környezetben, hiszen a kimeneten elvárt eredmény és a bemeneten rendel-kezésre álló adat egyértelmûen meghatározza a feldolgozó folyamatot. A korábban meg-beszéltek alapján ez nem más, mint egy átalakítás:

bemenet Ø transzformáció Ø kimenet.

Alapvetõ tervezési lépések

A feladat specifikációjának alapján ábrázolhatjuk a bemenõ és kimenõ adatok struktú-ráját. Itt a már ismert három alapszerkezetet használjuk fel (szekvencia, szelekció, ite-ráció). Az ábrázolt szerkezet nem fizikai, hanem logikai értelmû: az adatok egymáshozvaló viszonyát, megjelenésük, ismétlõdésük feltételeit jelenti a feladat tükrében.

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:41

p

Page 48: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

Az adatszerkezetek képe a feladat környezetét jelenti, általuk készíthetõ el a prog-ram szerkezetének terve. Az így kialakuló struktúra megfelelõ pontjain elhelyezhetjüka programban elõforduló tevékenységeket, melyeket elõbb összegyûjtünk.

A tevékenységek céljuk, hatásuk szerint csoportokba sorolhatók: bemeneti (beolva-só), kimeneti (kiíró) utasítások, számítások, döntéselõkésztések, alprogramhívások. Aprogramban használt utasításokat jegyzékbe szedjük, ami egyrészt az ismétlések elke-rülését biztosítja, másrészt a programszerkezet ábráján elég a jegyzékbeli számokkal je-leznünk õket.

Hasonlóan járunk el a szerkezetben szereplõ feltételekkel is, azaz megszámozzukõket, s az ábrán csak számaikat tüntetjük fel (lásd késõbb a rajztechnikai ismertetés-nél).

Az ábrázolt programszerkezetet a funkcionális leírásban metanyelven is megadjuk. Afunkcionális leírás a programozási nyelvtõl független, mégis közelebb visz a kódoláshozazzal, hogy a majdani kódhoz hasonlóan sorokból áll és tabulációk segítségével tükrözi astruktúrák egymásba-ágyazását. Foglaljuk össze a módszer tervezési lépéseit:

– a specifikáció megértése– az adatszerkezetek ábrázolása– a programszerkezet elkészítése az adatszerkezetek alapján– a tevékenységek elhelyezése a programszerkezetben– funkcionális leírás készítése

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:42

p

Page 49: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

Jelölésrendszer

A Jackson módszer a folyamatábrától eltérõ, rajztechnikailag nagyon egyszerû jelölés-rendszert alkalmaz, ami képes az alapszerkezetek ábrázolására. Elõnye a folyamatáb-rával szemben az, hogy a top-down elv szerinti felbontás minden fázisát egy ábrántükrözi, így a különbözõ szinteken álló tevékenységek alatt láthatjuk részletes tartal-mukat is.

Az ábrákban egyszerû dobozokat látunk, melyeket vonalak kötnek össze egymással.A dobozokban látható jelek határozzák meg, hogy ott melyik alapszerkezetrõl van szó, sa funkciók, tevékenységek nevei is beírhatók.

Az alapszerkezetek ábrái w Az ábrák bal oldalán látható a folyamatábra szerintimegvalósítás is elõbb csak tevékenységként, majd részletezve. Középen látjuk a Jack-son módszer szerinti ábrázolást, ami a két szintet egyszerre jelzi, mellette, a jobb olda-lon pedig a funkcionális leírást.

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:42

p

Page 50: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

Szekvencia w

Jelentése: az A jelû szekvencia tartalma az Al, A2, A3 tevékenységek egymást követõvégrehajtása. A-t azért nevezzük szekvenciának, mert tartalma szekvenciálisan (egy-más után) elvégzendõ tevékenységeket jelez.

A Jackson ábra fentrõl lefelé, azon belül balról jobbra olvasható: az A szekvenciábanaz A1 tevékenység végrehajtását követi az A2, majd ezután az A3 tevékenység.

A3

Folyamatábra Jackson ábra

A seqA1

A2

A3

A end

A

A1

A2

A

A1 A2 A3

Metanyelv

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:42

p

Page 51: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

Szelekció wJelentése: a B jelû szelekcióban az F feltétel igaz értéke esetén a B1 tevékenység, ha-

mis értékénél a B2 tevékenység hajtódik végre. A feltételes ágakat egy-egy körrel jelöl-jük; az igaz ághoz írjuk a feltételt.

B

B1 B2

F

Igaz

Hamis B

B1 B2F

Folyamatábra Jackson ábra Metanyelv

B select felt. FB1

B orB2

B end

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:43

p

Page 52: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

Iteráció wJelentése: a C struktúra tartalma, a C1 mag mindaddig ismétlõdik, míg az F feltétel

igaz. Ez tehát, elõltesztelõ ciklus. Az iteráció magját egy csillaggal jelezzük; s kívülrõlmellé írjuk a feltételt. (A Jackson módszer hátultesztelõ ciklust nem ismer.)

C

C1

F

Igaz

Hamis C

C1F

Folyamatábra Jackson ábra Metanyelv

C iter felt. FC1

C end

*

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:43

p

Page 53: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

Egyágú szelekció wA struktúrában állhatnak olyan ágak, melyeknek igazi tartalma nincsen, ezeket el le-

het hagyni. Ilyen eset az is, amikor egy szelekció egyágú. Itt a hamis ág létezik ugyan,de tevékenységet nem tartalmaz: az ábrát egyszerûsíthetjük.

Jelentése: a D jelû szelekcióban az F feltétel igaz értéke esetén a D, tevékenység haj-tódik végre, míg hamis értéknél nem történik semmi.

D

D1

F

Igaz

Hamis D

D1F

Folyamatábra Jackson ábra Metanyelv

D select felt. FD1

D end

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:44

p

Page 54: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

Többágú szelekció wA többágú szelekciónál koráb-

ban is abból indultunk ki, hogy két-ágú szelekciók egymásba-ágyazá-sából jön létre. Akkor beszélhetünktöbbágú szelekcióról, ha mindenbenne szereplõ szelekció igaz ágá-ban egy tevékenységet, hamis ágá-ban egy újabb szelekciót találunk,egészen az utolsóig, melynek mármindkét ága tevékenység. Az ilyenstruktúrára igaz az, hogy a benneszereplõ feltételek egymás után ér-tékelõdnek ki, s közülük az elsõigaz eredményû feltételhez tartozótevékenység végrehajtódik, majd aszelekció véget ér. Ennek a rajzátláthatjuk a folyamatábrán és aJackson ábrán, ahol az elsõ a teljesa második az egyszerûsítettjelzésû.

F2

S2

Igaz

F3

S3

Igaz

F4

S4

Igaz

Hamis

Hamis

S5

Hamis

F1

S1

Igaz Hamis

S

S1 F1S2 F2

S3 F3S4 F4

S

S1

S2

F1

F2

S3F3

S4 S4F4

S2

S1

S3

Folyamatábra

második Jackson ábra

elsõ Jackson ábra

S5

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:45

p

Page 55: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

Elemi tevékenységek elhelyezése wA további felbontást nem igénylõ (célszerûen nem bontható) tevékenységeket T betû-

vel és a jegyzékben feltüntetett számukkal szerepeltetjük az ábrán.

Tevékenységjegyzék:

1. n beolvasása2. szám beolvasása

3. számláló = 04. összeg = 0

5. összeg = összeg + szám6. átlag = összeg / számláló7. számláló növelése

8. összeg kiírása9. átlag kiírása

beolvasások

számítás-elõkészítés

számítások

kiírások

Program

n halmozás

szám ¶ F

F: számláló <= 1

átlag

1 3 4 2

5 8 7 2

6 9

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:46

p

Page 56: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

A Jackson módszer jelölésrendszerérõl összefoglalóan elmondhatjuk, hogy:

– Az ábra egyszerre tükrözi a feladat felbontásának összes szintjét– Olvasása balról jobbra, azon belül fentrõl lefelé történik– A tevékenységeket „dobozok“ segítségével ábrázoljuk, melyeket vonalak kötnek

össze– A szekvenciát ábrázoló doboz nincs külön jellel ellátva, a szelekciós ágakat körrel,

az iterációk magját csillaggal jelöljük

Adatszerkezetek ábrázolása

Az alábbiakban értelmezni fogjuk az adatszerkezetek ábrázolását. Amint azt korábbanmegállapítottuk: itt a feladat kimenetét és bemenetét alkotó adatok logikai szerkezete ér-dekel minket. Vizsgáljuk meg ezt egy egyszerû példán:

A feladat arra kíván választ adni, hogy egy banknak hány betétes ügyfele van. A ki-meneten itt egyetlen számot várunk, míg a bemeneten megjelenik az összes betétes ada-ta, melyeket meg kell majd számolnunk. A kimenetet szekvenciaként ábrázolhatjuk, hi-szen ott feltétel nélkül áll egy számadat. A bemeneten a betétesek adatai követik egy-mást, azaz addig ismétlõdnek, míg van adat. Az egyes bemeneti adatok között ebben afeladatban semmi különbség nincs, így csak ismétlõdésüket kell ábrázolnunk:

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:46

p

Page 57: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

Változtassuk meg a feladatot úgy, hogy a pozitív és negatív betéttel rendelkezõ ügyfe-lek számát külön mondjuk meg (a 0 betétet is pozitívként értékeljük). A kimeneten mostkét szám áll majd, de továbbra is feltétel nélkül, szekvenciaként. A bemeneten most isminden betétes adata rendre megjelenik, de azt is meg kell állapítanunk róluk, hogymely csoportba esnek (tartoznak, vagy követelnek). A bemeneten azt tudjuk ábrázolni,hogy a betétesek között van pozitív betétû és negatív betétû is. A választás feltétele ismegadható: a tartozók közé kell sorolnunk az ügyfelet, ha betétje kisebb 0-nál illetve apozitív betétesek közé, ha betétje >= 0.

Bemenet

betétes

Kimenet

ügyfélszám* F

F: Van még adat

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:46

p

Page 58: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

A fenti két példából láthatóan a kimeneten és bemeneten azt ábrázoljuk, hogy azadatok milyen viszonyban állnak egymással, ciklikusan követik egymást, vagy eltérnekegymástól valamely feltételnek megfelelõen. A betétesekrõl szóló adat az ábrázoltnálrészletesebb, hiszen egy ügyfélrõl számos információt kell rögzíteni (név, cím, számla-szám, stb.) de itt, ebben a feladatban ezek minket nem érdekelnek.

Bemenet

betétes

Kimenet

követel* F1

F1: Van még adatF2: Betét >=0

pozitív negatívF2

tartozik

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:47

p

Page 59: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

Alapvetõ adatstruktúrák ábrázolása

A Jackson ábrán strukturált adatszerkezeteket is megjeleníthetünk. A programnyelvek-ben használható strukturált adattípusokról korábban már olvashattunk. A programo-zási feladatok bemenetének, kimenetének ábrázolásakor gyakran kell a feldolgozásraváró adatokat ábrázolnunk. A tömböt és az állományt iterációs szerkezettel, míg a re-kordot szekvenciával ábrázoljuk.

A tömb egyforma felépítésû elemek iterációját jelenti. Az elemek addig követik egy-mást, míg el nem érjük a tömb utolsó elemét. Az egy dimenziós tömb vagy vektor ábrá-zolására a következõ Jackson ábrát használjuk.

Tömb (1d)

elem * F

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:47

p

Page 60: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

A két dimenziós tömböt olyan egydimenziós tömbnek kell tekintenünk, melynek ele-mei tömbök, így ez két iterációból épül fel, és a következõképpen ábrázoljuk:

Vonjuk le tehát azt a következtetést, hogy az egyes tömbök dimenziószáma meghatá-rozza az egymásba ágyazott iterációk számát. Az iterációk feltételei az adott dimenzióelemszámára vonatkoznak.

Tömb (2d)

elem (1d) * F1

elem F2*

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:47

p

Page 61: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

A rekord adattípus eltérõ (nem feltétlenül azonos) típusú elemeket, más szóval mezõ-ket fog össze egy szerkezetbe. A mezõk viszonyát nem befolyásolják feltételek, egyszerû-en felsoroljuk õket, így leírásukra szekvenciát használunk:

Az adatszerkezetek egymásba is ágyazhatók. Tipikus példa erre a rekordokból állóállomány:

mezõ 1 mezõ 2 mezõ 3

Rekord

Rekord

mezõ 1 mezõ 2 mezõ 3

Fájl

* F

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:47

p

Page 62: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

A programszerkezet elkészítése

A Jackson módszer a program struktúráját a bemeneti és kimeneti adatszerkezetbõl vezetile a struktúrák összefésülésével. Az összefésülés során megpróbáljuk azonosítani a kétadatszerkezet azonos részleteit. Az azonosítás során három alapvetõ eset fordulhat elõ:

betétek

pozitív negatív

* F1

Program

Számlálás Eredmény

követel tartozik

F2F1 : Van még adatF2 : Betét >=0

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:48

p

Page 63: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

– nincs azonos részlet– van azonos részlet– van azonos részlet, de az egyik struktúra teljes egészében tartalmazza a másikat

Az elsõ esetben egyszerû dolgunk van: a bemeneti és a kimeneti szerkezetet egymásmellé helyezve áll elõ a programszerkezet.

A bemenettõl örökölt „számlálás” ág után a kimenettõl származó „eredmény” ág vég-rehajtása következik. Tehát ebben az esetben nem találtunk összevonható szerkezetet.

Nézzünk egy olyan példát, amikor van azonosítható rész a két struktúra között.Ilyen esetben úgy járunk el, hogy az azonos adatszerkezeteknél fogva „összefésül-jük” õket.

Oldjuk meg a következõ feladatot: Olvassunk be n számot, majd számítsuk ki ezekátlagát! Minden újabb szám beírása után írjuk ki az addigi halmozott összeget, végül je-lenítsük meg az átlag értékét is! A megoldás során válasszuk szét a bemeneti és a kime-neti adatszerkezetet.

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:48

p

Page 64: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

A két szerkezetben jól láthatóan ugyanolyan feltételû iteráció szerepel. A program-struktúrában ezeket összefogjuk „halmozás” néven:

Bemenet

n számok

szám ¶ FF: számláló <= n

Kimenet

összeg átlag

szám ¶ F

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:48

p

Page 65: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

A harmadik esetben az egyik adatstruktúra bõvebb, mint a másik. Ilyenkor aprogramstruktúrát a bõvebb adatszerkezet határozza meg. Oldjunk meg egy ilyenpéldát is. A billentyûzetrõl beírt számok gyökét írjuk ki! Csak pozitív számokat fo-gadjunk el! A program véget ér, ha 0-t írunk be.

Program

n halmozás

szám ¶ FF: számláló <= n

átlag

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:49

p

Page 66: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

A bemeneten a beolvasott számok ismétlõdnek. Az iteráción belül egy szelekció áll,amelyik azt vizsgálja, hogy a szám elõjele milyen. Mivel minket csak a pozitív számokérdekelnek ez a szelekció egyágú. A kimeneten a beolvasott számok gyöke rendre megje-lenik, így ez is egy iteráció, melynek feltétele ugyanaz, mint a bemenetié: a szám <> 0.

Bemenet

szám

pozitív

m

F1

F2

Kimenet

szám ¶ F1

F1: szám <> 0F2: szám > 0

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:49

p

Page 67: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

A bõvebb struktúra ez esetben a bemeneti, így a programszerkezetet ez adja:

Tevékenységek elhelyezése a programszerkezetben

A programszerkezet ábrájának elkészítése után összegyûjtjük, jegyzékbe foglaljukmindazokat az elemi tevékenységeket, melyeket a program a mûködése során végre-hajt. Ezt követõen jegyzékbeli számuk segítségével jelezzük helyüket az ábrán. A ko-rábbi példák közül válasszuk most az átlagszámítást:

Program

szám

pozitív

m

F1

F2

F1: szám <> 0F2: szám > 0

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:49

p

Page 68: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

Az ábrán észrevehetjük, hogy „elõkészítés” nevet adtunk a korábban (elõzõ oldali áb-ra) „n” névvel jelzett ágnak, hiszen itt nem csak az n szám beolvasása, hanem más elõ-készítõ tevékenységek is végrehajtódnak.

A programszerkezet ábráján nem mindig találunk olyan ágat, mely az elõkészítõ jel-legû tevékenységek elhelyezésére alkalmas. Ilyenkor az ábrát szabadon kiegészíthetjükaz „elõkészítés” szekvenciával.

Tevékenységjegyzék:

1. n beolvasása2. szám beolvasása

3. számláló = 04. összeg = 0

5. összeg = összeg + szám6. átlag = összeg / számláló7. számláló növelése

8. összeg kiírása9. átlag kiírása

beolvasások

számítás-elõkészítés

számítások

kiírások

Program

n halmozás

szám ¶ F

F: számláló <= 1

átlag

1 3 4 2

5 8 7 2

6 9

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:50

p

Page 69: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

Struktúrák ütközése, homogenizálás

A programszerkezet ábrájának elkészítésekor vagy a tevékenységek elhelyezésénél elõ-fordulhat az, hogy különbözõ típusú ágak kerülnek egymás mellé. Ilyenkor nem tudjuk

menü

1 a b c d em m m m m

menü

1

a b c d em m m m m

H

1: gomb beolvasása

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:51

p

Page 70: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

megállapítani a befoglaló szerkezet típusát, ezért ezt fel kell oldanunk, az ütközést ho-mogenizálnunk kell. Vizsgáljuk ezt meg néhány példán:

A „gomb beolvasása” tevékenység elhelyezése miatt a „menü” szelekció egy szekven-ciát is tartalmaz, nemcsak szelekciós ágakat. Feloldásához a struktúrában elhelyezünkegy további szekvenciát, amit itt „H” betûvel jelölünk:

A homogenizálás elõtt a „menü” típusa nem volt megadható, hiszen egyaránt tartal-mazott szekvenciát és feltételesen végrehajtódó ágakat. A javítás után a „menü” szek-vencia tartalma az 1 számú tevékenység és a „H” jelû többágú szelekció.

A homogenizálás során mindig csak szekvenciákat illesztünk be, hiszen ezek nembefolyásolják érdemben a szerkezetet (sem a végrehajtás sorrendjét, sem annak fel-tételeit).

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:51

p

Page 71: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

TartalomjegzékBevezetés

Feladatmegoldás

A programkészítés lépései

A feladat meghatározása, specifikáció

Tervezés

Kódolás

Tesztelés

Dokumentáció

A programnyelvek elemei

Adattípusok

Numerikus típusok

Szöveges típusok

Logikai típus

Mutató típus

Általános adattípus

Adatszerkezetek

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:51

p

Page 72: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

Utasítások típusai

Vezérlõszerkezetek

Összegezve

A program építõelemei

A folyamatábra elemei

Vezérlõszerkezetek

Szelekciók

Elöltesztelõ iterációk

Hátul-tesztelõ iteráció

Összefoglalva

Struktúrált programtervezés

A moduláris programozás

A struktúrált programozás

Struktúrált problémalebontás

Összegezve

Jackson módszere

Alapvetõ tervezési lépések

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:51

p

Page 73: Jackson screen2 - Freeweb.hu · kalapÆcsot fog hasznÆlni. A mi esetünkben nem kØrdØs a nyelv megvÆlasztÆsa Œ Visual Basic for Application Œ, de a tervezØs sorÆn nem a nyelv

Jelölésrendszer

Adatszerkezetek ábrázolása

Alapvetõ adatstruktúrák ábrázolása

A programszerkezet elkészítése

Tevékenységek elhelyezése a programszerkezetben

Struktúrák ütközése, homogenizálás

E:\Dokumentumok\Excel makro\Ventura\Jackson screen2.vp1999.januÆr.26. 13:01:51

p