A programírást olyan tevékenységnek tekintjük, amely célja egy programnak mint terméknek a létrehozása. Az alábbi táblázatban összefoglaljuk, hogy milyen lépéseket tesz a programfejlesztő a kezdetektől (a feladat felvetődésétől) a programtermék elkészültéig. Megadjuk, hogy az egyes lépések milyen „konkrétum” létrehozását vállalják föl, és hogy ezáltal milyen lényegesebb részcél elérését segítik.
lépés |
konkrét eredménye |
célja |
Feladatmegfogalmazás |
specifikáció (Sp) |
|
|
|
A (körültekintően megvizsgált, s így
garantáltan) megértett[1] feladat + |
Algoritmizálás |
adatleírás
+ algoritmus v0.0[2] |
|
1. Helyességvizsgálat – |
levezetések |
|
Algoritmuskorrekció |
korrigált
adatleírás + algoritmus v+x.y[3] |
|
|
|
helyes
absztrakt program (HAP) = |
Kódolás |
kód v0.0[4] (K) |
|
2. Helyességvizsgálat – |
tesztesetek
|
|
Hibakeresés |
hibaesetek |
|
Hibajavítás |
javított kód v+x.y |
|
|
|
helyes (konkrét) program
(HP)= |
Hatékonyságvizsgálat |
hatékonysági esetek |
|
Hatékonyítás – |
módosított,
kiegészített kód v+x.y |
|
|
|
jó program (JP) = |
Dokumentálás |
dokumentációk |
|
|
|
használható program = |
Karbantartás |
paraméterek,
környezet változásának követése a programban |
|
|
|
időtálló
program |
Láttuk, az algoritmust miként határozza meg az elkészült specifikáció. (Programozási tételek szerepe a gyakorlati programozásban.) Nagyobb feladatok esetében azonban ez a mechanikusan alkalmazható módszer nem bizonyul elegendőnek. Emiatt kell az e fejezetben felsorolt elveket ismernünk és követnünk.
Az
elvek a szerint, hogy mire vonatkoznak csoportosíthatók. A „mindent” meghatározó
elveinket „stratégiaiként”
aposztrofáljuk. Azok, amelyek az algoritmus (és adatok) logikájára gyakorolnak
hatást és így közvetlenül a stratégiai elvekhez kapcsolódnak, azok „aprópénzre”
válásait jelentik: a taktikai elvek. A technológiai
elvek közé azokat soroltuk, amelyek az
algoritmus „papírra vetéséhez” szolgálnak útmutatóul. (Ezen egyike-másika
persze rányomja bélyegét a kódra is.) A kódolásnál kamatoztathatók az ún. technikai elvek.
Végezetül azokat az elveinket, amelyek a haladó programok jellegzetes
tulajdonságaiért felelősek, de az előző elvek folyamánya, mondhatjuk: magasabb
szintű alkalmazásaik, azokat esztétikai-ergonómiai elveknek nevezzük.
’piramis elv’ – egyre terebélyesedő program (értsd: algoritmus)…
Dijkstra-féle ’gyöngysor’ metafora az „absztrakt gép–absztrakt program” kettősről…
A piramis „tégláinak” ideális méretére igyekszik utalni: 5-7 részre bontás…
Egyszerre a teljes szinten…
A szint domináns fogalmára (egy input vagy output adat, egy meglévő vagy éppen hiányzó feltételre) kell kihegyezni a döntést, amelyre alkalmazva a ’struktúra szerinti feldolgozás’ elvét, vagy valamely illeszkedő programozási tételt… Az a jó döntés, amely nem túl sok rész problémára szedi szét a finomítás alatt álló tevékenységet…
A kódhoz közeli döntéseket minél későbbre kell halogatni…
Ha nem lehet, vagy aránytalanul nehéznek tűnik a továbblépés, akkor az előző (ős) finomítási szint egészét elvetni, s más finomítási szerkezetet találva folytatni… (L. az ábrát.)
Addig „általánosítani” a feladatot, amíg az hatékonyságcsökkenés nélkül azonos módon megoldható… s a feladatbeli konkrét értékeket általános paraméterekkel helyettesíteni… Pl. nem 10 elemre, hanem MaxN elemre…
Tudatában kell lennünk, hogy milyen lépés hátterében milyen döntésünk (feltételezésünk) húzódik meg; sőt legjobb ezt lejegyezni, kinyilvánítani… (pl. ha a sorozat rendezett, akkor … vagy ha annyi adatunk van, hogy az a memóriában tartható… vagy az adatok egy tömbben tárolhatók…)
Az egyes programegységek csak ellenőrzött „csatornákon” kommunikálhatnak (paraméterek, globális változók).
Ciklusváltozó mindig egyedi a programegységre nézve, sohasem lehet globálissá tenni.
Ezen interface-eket célszerű csoportosítva lejegyezni az ún. kereszthivatkozási táblában: input/output/input-output; paraméter/ globális/lokális/saját…:
Objektum |
előfordulási
hely |
hatáskör |
információ-irány |
N |
program |
globális |
input-output |
N |
Beolvas |
paraméter |
output |
N |
Feldolgoz |
paraméter |
input |
i |
Feldolgoz |
lokális/saját |
(input-output) |
Van |
program |
globális |
input-output |
Van |
Feldolgoz |
paraméter |
output |
… |
… |
… |
… |
Az adott szinten „absztrahált” résztevékenységeket specifikációjukkal (ef/uf) együtt illesztjük helyükre: így a szint mindig teljesen definiált, s lehetővé válik a helyességbizonyítás…
(L. az ábrát.)
Legyen minden algoritmikus és szabványos adatszerkezetnek könnyen megjegyezhető kulcs-szava. Legyen nyitott a bővítésre…
A sorokra tördelés szabadsága szolgálja a megértést.
Az algoritmus struktúrája tükrözze vissza a felülről-lefelé tervezés menetét és az algoritmikus szerkezetek egymás alárendeltségi viszonyait.
Eleje-vége egyértelműsítés kulcs-szavakkal megerősítése…
Nagyban csökkenti a programbonyolultságát, ha az adatok/programegységek neve utal a funkciójára. (Gondoljunk egy „visszafordító” sematikus neveire, vagy a Word Doc®Html konverzióbeli tartalomjegyzék automatikus linkneveire.)
Tájékoztató… inputnál kérdőszöveg…
Előfeltétel ellenőrzése, hibajelzés és a hibajavítás felkínálása…
Milyen intervallumból választhat a felhasználó? Az input mindig mértékegységgel együtt értendő, amit jelezni (nem beolvasni) kell!
Származtatható adatokat tilos bekérni…
Kell-e lezárni az inputot (gondoljunk a Read vagy ReadKey Pascal-beli utasításpárra). Az egyes billentyűkhöz –ha lehet– mindig ugyanaz a funkció társuljon…
Kommentált forrás szöveg:
· meghatározó adatoknál (típus, konstans, változó)
· programegységeknél (eljárás/függvény/operátor) előfeltétel, utófeltétel (nem feltétlenül formálisan, de célra törően)
· bonyolultabb tevékenységeknél az egyes részek funkciójának, módszerének leírása (pl. tételre utalás)
Ha csak előre meghatározott, kevés számú érték közül választható ki a paraméterérték, akkor csak ezek közül lehessen valahogyan választani (sorszámmal, adott hozzárendelt billentyűvel, lenyíló listából …)
A monitoron megjelenő szöveg nagyobb, egyben tartandó, tartható egységeit egy-egy lapra tördelve jelenítjük meg, s felhasználói beavatkozásig várakoztatjuk a programot…
A nyomtatón kiíratandó adatokat is lapozott egységekre tördeljük. Minden lapnak azonos szerkezet legyen: fejléc + törzs + lábléc. Adminisztratív információkat (programnév, dátum, lapsorszám stb.) a fej vagy lábsorba helyezzük.
(L. a példát, és futás közben.)
A párbeszéd elegáns, hibaelkerülő módja, amely gyakorta építhető az ablakkezelés rutinjaira.
(L. a példát, és futás közben.)
Egy jól eltalált ikon (mini kép) gyorsíthatja a felhasználást.
A megjelenítést támogathatja a színek (betű- és papírszín) és más kiemelési (keretbefoglalás, villogtatás) technikák, valamint a csoportosított megjelenítés…
A nem csak lineáris haladás egy szövegolvasásban gyorsíthatja, könnyebbé teheti a felhasználó dolgát a program használatban (linkek).
Ahol a hiba keletkezik, ott kell jelezni. Ha lehet, legyen visszavonható az utolsó input.
Egy –nem feltétlenül publikus– file-ban följegyezni a program haladás útjelzőit, az akkor és ott érvényes státuszváltozók értékeivel (esetleg időpontjával). Ez rendszerint egy TEXT állomány könnyen olvasható sorokkal…
A menük mellett (!) a gyakori funkciók egyetlen billentyű(kombináció)val történő elérhetősége. Érdemes tudni és alkalmazkodni bizonyos billentyű-szokásokhoz (szabványokhoz).
Általános és helyzetérzékeny súgó…
A kódolás a már elkészült algoritmusból kiindulva készítjük kész kódolási szabályok vezényletével.
A kódban alkalmazott azonosítók célszerűen megegyeznek –ha nyelvi korlát nincsen– az algoritmusbelivel.
Ügyeljünk a kód „öndokumentálásra”, azaz kommentárok elhelyezésére. (L. példaprogramok.)
Ha hatékonysági indok (nagy méret, hosszú paraméterlista) és lehetőség (az adat egyértelmű, s globálisan elérhető) van arra, hogy egyik-másik paramétert elhagyjuk az eljárás/ függvény fejsorából, akkor tegyük, de alaposan meg kell vizsgálni, hogy interferenciát nem okozhat.
A programfejlesztés közben érdemes gondolni arra, hogy mik azok a funkciók, amik várhatólag később is felhasználhatók lesznek. Ezeket külön file-ba elkülönítve tároljuk (kellően kommentálva a file elején). A legtöbb programozási nyelv lehetőséget biztosít ilyen file-ok könnyű beillesztésére. (L. Pascal include-direktíva.)
A program termék, amelyet kiválasztani kell tudni, használni, javítani–karbantartani–továbbfejleszteni.
Mindehhez különfajta dokumentációk adnak segítséget.
· Programismertető
· Fejlesztői
· Felhasználói
· Installálási kézikönyv
Illeszkedjen a megcélzott olvasóhoz, a betöltendő célhoz. Legyen a
· szerkezete – világos, célratörő …
· formája – … tartalomjegyzék, fogalomindex
· stílusa –
o Ismertető: reklámízű…
o Felhasználói: jobbára szöveges, nem formális, képszerű...
o Fejlesztői: pontos, formálisabb, definitívebb
o Installálási: praktikus kérdésekre koncentráló, algoritmikusabb szemléletű (mikor mi történik, mi érdekében mi teendő)
A jól felhasználható segédprogramokat letöltheti: http://izzo.inf.elte.hu/szlaviPrM1felev/DoksiKellekek könyvtárból.
A Programírási folyamat elemei
1.1.1
Felülről lefelé tervezés
1.2.4.
A nyílt rendszerfelépítése
1.2.5.
A döntések kinyilvánítása
1.2.6.
Az adatok elszigetelése
1.2.7.
Szintenkénti teljes kifejtés
1.3.1.
Kifejező és elégséges algoritmus leíró nyelv
1.3.4.
Összetett szerkezetek „zárójelezése”
1.3.5.
Beszédes azonosítók alkalmazása
1.4.3.
Érvényességi halmaz kijelzése
1.4.5.
Következetes kezelési szokások
1.5.
Esztétikai-ergonómiai elvek
1.5.5.
Fontos információk kiemelése, strukturálása
1.5.6.
Kapcsolat-logikájú haladás lehetővététele
1.5.7.
Hibajelzés – hibajavítás
1.5.9.
Gyorsbillentyűs vezérelhetőség
A
fejlesztői dokumentáció részei
A
felhasználói dokumentáció részei
[1] Ennek hangsúlyozása azért fontos, mert többnyire nem ugyanaz a személy, aki a feladatot kitűzi, mint az aki(k) a megoldást elkészíti(k).
[2] Játékos utalás, hogy ez a 0.0. verziója az adatleírás+algoritmusnak.
[3] Játékos utalás, hogy a verziók száma ezen lépés során növekszik.
[4] A választott célnyelvtől függően valamilyen kódolási szabályoknak megfelelően.
[5] Hatékonyítás a tárra és végrehajtási időre; a humanizálás az „emberi oldalának” (User Interface) a milyenségére vonatkozik.
[6] Help-állomány, kódtáblák (kódrövidítés: kódÞfile, adattömörítés: ismétlődő adatÞhelyettesítő kód)…
[7] Célszerű ezt a „magasabb szintet” képviselő ergonómiaiak közül áthelyezni a technikai elvek közé.