A szoftver és a program kifejezéseket gyakran szinonimaként használjuk; általában ez nem is okoz problémát, a hétköznapi beszédben rendszerint nincs szükségünk a két fogalom közti különbség figyelembe vételére. Most azonban különítsük el őket: szoftver alatt a programot és a program által felhasznált, illetve előállított adatokat értjük. Ezt a megkülönböztetést azért tettük, mert a program és az adatok természete különböző: a program írja le azt, hogy mit csináljon a számítógép, az adatok pedig azt, hogy mivel. A program tehát a cselekvést, a folyamatot definiálja; az adatok pedig azt, hogy ez a folyamat mivel dolgozik, mire vonatkozik. Feladat megoldása: algoritmus A program valamilyen feladat végrehajtására szolgál a végrehajtásnak mindig van valamilyen módja, menete: ezt nevezzük a feladat megoldási algoritmusának. Az algoritmus mindig logikai szintű megoldást ír le, vagyis nem kötődik a végrehajtó személyéhez az lehet ember is, gép is (az már más kérdés, hogy melyik milyen sebességgel, pontossággal végezné el a feladatot). Példa Amikor a matematikában feladatként jelentkezett a másodfokú egyenletek megoldása, megalkották az ismert képletet: x 1, b ± = b 4ac Hogyan állapítjuk meg ennek segítségével a gyökök értékét? A megoldás ugyanis nem csak a képlet automatikus alkalmazását jelenti több buktató is felmerülhet. Ezek elkerülése érdekében, a feladatmegoldás általános szabályai szerint, először elemezzük a szituációt, vagyis: 1. Az a együttható nem 0? Mert ha igen, akkor nem másodfokú az egyenlet, és nem alkalmazzuk a képletet.. A gyökjel alatti b 4ac nem negatív? Mert ha igen, nincs valós megoldás. Ha nem negatív, akkor 0? Ha igen, akkor módosított képletet fogunk használni, és a két gyök értéke megegyezik: x 1, b = Mivel a feladat a gyökök értékének megállapítása, ezért a tetszőleges, másodfokúnak mondott egyenlet megoldásának menete vagyis algoritmusa az alábbiak szerint alakul: Készítette: SZÁMALK Zrt, Szakképzési Igazgatóság 1
HA a ÉS b ÉS c számok HA a > 0 HA b 4ac < 0 Eredmény: Nincs valós megoldás HA b 4ac = 0 b Eredmény: x1 = és x = x1 b + b 4ac b Eredmény: x1 = és x = Eredmény: Az egyenlet nem másodfokú Eredmény: Hibás adatok! b 4ac Ha a fenti algoritmus-leírást odaadjuk bárkinek, aki tud írni-olvasni és számolni (alapvető technikai ismeretek), és mellékeljük hozzá az a, b és c értékeket, akkor az algoritmust követve meg fogja mondani az eredményt függetlenül attól, hogy tudja-e egyáltalán, hogy mit csinál, vagy nem. Ez a lényeg: az ilyen algoritmust ugyanis ember és gép egyaránt végrehajthatja utóbbi azért, mert az algoritmus úgy van megfogalmazva, hogy végrehajtójának nem kell intuícióval, gondolkodási képességgel rendelkeznie (ellentétben az algoritmus írójával!). Vegyük észre azt is, hogy a fenti algoritmus nem csak a képlet alkalmazásából áll: adatokat definiáltunk (a, b és c); a körülmények, adatok elemzéséből adódó következtetéseket feltételek formájában alkalmazva leírtunk egy folyamatot, amely adatok vizsgálatából, a vizsgálat eredményétől függő elágazásokból és számításokból tevődik össze. Az algoritmus kialakításánál semmit nem bízunk sem a véletlenre (az adatok számok-e?), sem a végrehajtó értelmére, belátására (a = 0?). A program A logikai szinten megfogalmazott algoritmust később a végrehajtó személyére kell szabni. Ember és gép esetében ez ugyanazt jelenti: olyan nyelvre és jelrendszerre kell átalakítani, amelyet az megért. A számítógépek esetében ez a processzor által értelmezhető gépi kódú program. A program tehát gépi kódban tartalmazza azokat az utasításokat, műveleteket, amelyeket a processzornak el kell végeznie. A program tehát a számítógép számára érthető utasítások sorozata. Ezek az utasítások, általában adatok felhasználásával, egy feladat végrehajtását célozzák. A program képes (a megfelelő utasítások segítségével) a szükséges adatok bevitelére, a kapott adatok feldolgozására, majd az eredmények ember számára érthető formában való közlésére. Ebben a folyamatban a program a számítógép hardvereszközeit Készítette: SZÁMALK Zrt, Szakképzési Igazgatóság
használja fel: adatbevitelhez pl. a billentyűzetet, adattároláshoz a memóriát vagy lemezeket, eredményközléshez a képernyőt vagy a nyomtatót. Régen a programozók közvetlenül gépi kódba írták át az algoritmusokat. Például Az alábbi gépi nyelvű utasítások egy (az Strg paraméterben megadott) karaktersorozat nagybetűssé alakítását végzik el: ($C4/$BE/Strg/$6/$8A/$0D/$FE/$C1/$FE/$C9/$74/$13/$47/$6/$80/$3D/$61/$7/$F5/$6 /$80/$3D/$7A/$77/$EF/$6/$80/$D/$0/$EB/$E9); Ezek a kódok az ember számára olvashatatlanok, megértésük még a szakembereknek is nehézséget okoz. Ma már az emberi nyelvhez, gondolkodásmódhoz sokkal közelebb álló, ún. magas szintű programozási nyelveket használunk ebben készülnek a forrásprogramok. Az alábbi Pascal nyelvű kód ugyanazt írja le, mint az előző gépi kód de teljesen egyértelmű lehet bárki számára, aki egy kicsit is tud angolul és ismeri a műveleteket: i:=1; {az i számláló legyen 1} while i <= Length(Strg) do begin end; {amíg a számláló kisebb, mint a karakterek száma} Strg[i] := UpCase(Strg[i]); {az i-dik karakter legyen önmaga nagybetűs megfelelője} i:=i+1; {növeljük a számlálót} A magas szintű programozási nyelvek használatával azonban felmerül egy probléma: a számítógép ezt a beszédes kódot nem érti meg tehát ahhoz, hogy a program futhasson, le kell fordítani a gép nyelvére, a gépi kódra. Ezt a fordítást speciális programok, a fordítóprogramok végzik. Például a számítógépünk merevlemezén található.exe,.com vagy.dll (Windows) jelzéssel ellátott állományok ilyen gépi kódra fordított programokat tartalmaznak. Amikor egy programot futtatunk, az operációs rendszer betölti azt a gép memóriájába, majd a processzor elkezdi végrehajtani az abban található utasításokat ezeknek megfelelően vezérelve a kívánt hardvereszközöket. A program rétegei A számítógépes programok általában nem olyan egyszerű feladat megoldására készülnek, mint a másodfokú egyenlet megoldása. A feladatok rendszerint sokkal nagyobbak, összetettebbek annál, mintsem egyetlen algoritmusban megoldhatók lennének. Az összetett feladatokat kisebb, átlátható részfeladatokra bontva oldjuk meg ezt nevezzük feladatmodularizálásnak. Bár a feladatok mindig különböznek egymástól és sok új megoldást tartalmaznak, azért sokszor találunk olyan részeket (modulokat), amelyek több feladat megoldásánál is újra felhasználhatók. Például a másodfokú egyenlet megoldását célzó algoritmusunk általános: bármely programban ismételten felhasználható, amely ilyen számítást igényel. Készítette: SZÁMALK Zrt, Szakképzési Igazgatóság 3
Egészen magas absztrakciós szinten nézve, a programoknak rendszerint három fő feladatkört kell ellátniuk: 1. kommunikáció a felhasználóval,. feldolgozás (számítások), 3. adatkezelés. A fő feladatot először e feladatkörök szerint vizsgáljuk, és az egyes részfeladatokat ezeken belül határozzuk meg. Ezzel kialakítjuk a program rétegeit, amelyek: 1. a felhasználói felület,. az alkalmazáslogika, 3. az adatbázis-logika. Az egyes programokban a rétegek súlya, megléte természetesen függ a program jellegétől; vannak programok (például alapszintű operációs rendszer modulok), amelyeknél a klasszikus felhasználói felület nem létezik; és vannak programok, amelyek nem használnak adatbázist (bár valamilyen adatokat biztosan). Az egyes rétegekbe tervezett megoldások, algoritmusok csak az adott réteg jellegének megfelelő műveleteket végzik: a felhasználói felület elemei nem végeznek adatfeldolgozással kapcsolatos számításokat, és az alkalmazáslogika sem foglalkozik az adatok tárolásának, visszakeresésének problematikájával. Az egyes rétegekben a feladatokat modulok látják el, melyek a gép által végrehajtható műveleteket tartalmaznak. 1. ábra A program alkotóelemeinek hierarchiája A rétegek természetesen kommunikálnak egymással, hiszen például az alkalmazáslogikának a számítások elvégzéséhez az adatbázis-logikától adatokra van szüksége; a felhasználói felület a felhasználó parancsait, esetleges egyedi adatait közvetíti az alkalmazáslogika felé, illetve fogadja és megjeleníti az onnan érkező eredményeket, jelzéseket. Az egyes rétegek ehhez ún. interfészekkel rendelkeznek, amelyek biztosítják a más rétegekkel való érintkezést a rétegek azonban közvetlenül nem avatkoznak be egymás működésébe, nem állít át egyik a másikban adatértékeket, és nem aktivál a másikban olyan műveletet, amely annak belügye. Készítette: SZÁMALK Zrt, Szakképzési Igazgatóság 4
. ábra Program rétegeinek együttműködése Az így felépített program előnyei többek között: A könnyű javíthatóság, mivel a módosítások csak az adott réteg keretein belül okoznak változásokat. A könnyebb továbbfejleszthetőség: az elavult felhasználói felület sokkal könnyebben cserélhető újra, mivel csak a megjelenéssel kapcsolatos kódokat tartalmazza. Ha adatbázis-típust kell váltani a program mögött, akkor ez csak az adatbázislogikai réteget érinti, és nem kell átírni az egész programot. A feldolgozási műveletek, számítási eljárások változásai könnyen átvezethetők, cserélhetők, mert csak az alkalmazáslogika egyes részeit érintik ez fontos szempont például olyan programoknál, amelyek működését pl. jogszabályok határozzák meg. Komponensek A feladat-modularizálás, a részfeladatok algoritmusainak minél általánosabb megfogalmazása lehetővé teszi a komponens szemléletű programépítést: a program bizonyos rétegeinek (jellemzően a felhasználói felület és az adatbázis-logika) kialakításánál sok, már előre legyártott vagy más programban használt, újrafelhasználható alkotóelemet komponenst alkalmazhatunk. Ez a módszer jelentős hatással van a programok elkészítésének időigényére. Készítette: SZÁMALK Zrt, Szakképzési Igazgatóság 5
Az adatok Az operációs rendszer programjai, az alkalmazói programok vagyis minden program, adatokkal dolgozik. A programok működésükhöz az adatokat bekérik (vagy más módon megszerzik), az adatokon műveleteket végeznek, az eredményeket pedig vagy újra hasznosítják, vagy egyszerűen csak közlik a felhasználóval. Adatok és program Ahhoz, hogy programunk feldolgozhassa az adatokat, valamilyen módon a rendelkezésére kell azokat bocsátanunk. Ennek több módja is lehetséges: begépeljük a billentyűzeten; lemezen keresztül tesszük elérhetővé; modemen át töltjük be; szkennerrel (lapolvasó) másoljuk be stb. Bármilyen módszert is választunk, általában az adatok végül is az alábbi utat járják be: Periféria (billentyűzet, lemez, modem stb.) A program az általunk beleírt beviteli utasításokkal kezdeményezi az adatok beolvasását a memória meghatározott részére. Memória A program műveletvégző utasításai a számítógép központi egységénél kezdeményezik az előírt művelet végrehajtását és az eredmény elhelyezését a memória meghatározott részére. Számoló egység (a számítógép központi műveletvégző egysége) Az eredmények visszakerülnek a memóriába. Memória A program az eredményeket a meghatározott perifériára küldi, vagy újra felhasználja. Periféria (képernyő, nyomtató, lemez, modem stb.). A program az adatok számára helyet foglal a memóriában. A számítógép az adatokat bináris formában (kettes számrendszerben) tárolja. A 9-es szám például ebben a formában tárolódik: 00001001. A tárolás alapegysége (a legkisebb táregység) a byte (8 bináris számjegy, 8 bit). Azt, hogy egy adat számára hány byte tárhely szükséges, a programban nekünk kell előírni. Az adatok tárigénye típusuktól és/vagy méretüktől függ: a 9-es szám 1 byte helyet igényel, az 134-as szám (00000100 11010010) byte-ot, a BYTE szó (01000010 01011001 01010100 01000101) annyit, ahány betűből áll. A programokban egy adatra, pontosabban arra a tárhelyre, ahol megtalálható, a tárhely memóriacímével hivatkozunk. A memóriacím egy számkombináció, amely a tárhely memóriabeli sorszámát határozza meg. Az adatokkal, adatfeldolgozással részletesebben a következő fejezetben foglalkozunk. Készítette: SZÁMALK Zrt, Szakképzési Igazgatóság 6
A szoftver mint termék Felhasználóként rendszerint a kész szoftverekkel kerülünk kapcsolatba. A szoftvert (üzemszerű) használata előtt természetesen be kell szerezni a szoftverről ekkor mint termékről beszélünk, és szoftvertermék fogalmába nemcsak a program, hanem egyéb kiegészítők is beletartoznak (dokumentációk, szerződések, licencek, esetleg betanítás stb.). Összefoglalás A számítógépes szoftver programból és a program által használt adatokból áll. A program mindig valamilyen feladatot, feladatokat old meg a feladatok általános megoldását rendszer-, modul- és algoritmustervekben rögzítjük. A megoldásokat valamilyen programozási nyelvbe átültetjük, és ezt fordítóprogram segítségével tesszük a gép számára érthetővé ez lesz a program. A program tehát a számítógép (processzor) által értelmezhető utasítások sorozata. A programok mindig adatokkal dolgoznak. Az adatok a programhoz hasonlóan a feldolgozás során a számítógép memóriájában vannak. A programok számára az adatokat különböző eszközökkel és módon tehetjük elérhetővé. Az adatokkal kapcsolatban fontos fogalmak a jelleg és az értékkészlet ezeket a jellemzőket a típus fogalmában egyesítjük. Az adatok típusának helyes megválasztása döntő jelentőségű mind a saját magunk által készített, mind a kész programok helyes, hibátlan kialakítása, illetve használata szempontjából. További ismeretek: A szoftver A számítógép működési elve (Hardver és szoftver) Készítette: SZÁMALK Zrt, Szakképzési Igazgatóság 7