Programozás Alapjai I. Számítógép felépítése, Logikai és matematikai alapok, programnyelvek, alapfogalmak, programozási technikák Kis Balázs
A számítógép felépítése A számítógép alapvető felépítése, részegységei. Kis Balázs 2
Számítógép felépítése I. A mai számítógép, felépítését tekintve 3 fő elemre épít, mely elengedhetetlen a működéséhez: Alaplap Processzor Memória Ezek az alapelemek minden számítógépben megtalálhatóak. Természetesen a számítógép használatához még szükség van más eszközökre is, illetve a multimédiás PC ezen felül sok más eszközt is tartalmaz. Kis Balázs 3
Számítógép felépítése II. Az alaplap elsődleges feladata, hogy a processzor és a memória között fenntartsa az úgynevezett sínt, vagy buszt mely összeköti a processzort a memóriával, illetve egyéb eszközökkel. Maga a sín vagy busz egy adatvezeték köteg. Régebben a processzor órajelét és a memória címzését is az alaplap oldotta meg. Természetesen egy multimédiás PC alaplapja nagyon sok más feladatot is ellát. Kis Balázs 4
Számítógép felépítése III. A memória feladata, hogy a futtatandó programokat, és az éppen futó programokhoz tartozó szükséges adatokat tárolja a futás idejére. A memória mérete tehát nagyban befolyásolja a számítógép teljesítményét, hiszen, amennyiben kevés áll rendelkezésre belőle, sokkal többször kell a háttértárakról információt betölteni, amik viszont nagyon lassúak. Kis Balázs 5
Számítógép felépítése IV. A processzor feladata, hogy aritmetikai és logikai számításokat hajtson végre megadott operandusokon. A számítás elvégzése után a processzor a buszra küldi az eredményt, melyet már újra az alaplap feladata a megfelelő helyre eljuttatni (képernyőre, memóriába, stb.). Amennyiben az eredménnyel még további számításokat kell végezni, nem kell kiküldeni a processzorból. Kis Balázs 6
Logika és Számrendszerek Fontos megállapítások a logikában és a számrendszerek felépítése. Kis Balázs 7
Programozás logikai alapjai A programozás alapvetően a matematikai logikára épül, így az ott alkalmazott szabályok érvényesülnek a programozásban is. Az informatika és így a programozás egyik legfontosabb logikai alaptétele, mely megalapozza a mai elektronikai eszközök működési elvét, George Boole megállapítása volt. Kis Balázs 8
George Boole megállapítása Az 1800-as években leírt két munkája alapján, minden komplex művelet levezethető igazak és hamisak sorozatából. Ami alapján bármilyen matematikai művelet, komplexitásától függetlenül levezethető kettes számrendszerben is. E matematikai bizonyítás alapján Neumann János ajánlotta a kettes számrendszer használatát. Kis Balázs 9
Továbbvezetés I. Az elmélet természetesen alapjában nem alkalmas a mai informatika problémáinak megoldására. Komplex logikát kell felépíteni az elmélet alapján, melyben értelmezettek a matematikai és logikai műveletek. Kis Balázs 10
Számrendszerek I. Az informatika története során a fejlesztők több számrendszer alapján is elindultak a fejlesztéssel, így például: 2-es számrendszer 3-mas számrendszer 10-es számrendszer Természetesen a projektek nagy része sikertelen volt, így a 2-es számrendszer az alapja a mai informatikának. Kis Balázs 11
Számrendszerek II. A 2-es számrendszer az alapja ugyan a mai informatikának, de emellett használnak segédszámrendszereket is: 10-es számrendszer A felhasználókkal való eredményközlésre 16-os számrendszer Minden olyan kettes számrendszerbeli számot melyet már túl sok lenne leírni, ebbe a számrendszerbe konvertálják Kis Balázs 12
Számrendszerek III. A segéd számrendszerek természetesen szoftveres szinten jelennek meg, tehát maga a számítógép továbbra is csak 2- es számrendszer segítségével dolgozik. Ugyanakkor a segéd számrendszerek ismerete is elengedhetetlen, hiszen manapság hardver közeli fejlesztést is szoftver közeli szinten oldják meg, a 2-es számrendszer pedig egyre inkább csak a logika alapjaként jelenik meg a programozásban. Kis Balázs 13
Számrendszerek IV. A az egyes számrendszerekre a következő állítások igazak: Minden esetben 0-tól, a számrendszer 1-ig tartó értékek szerepelnek az adott számrendszerben, mivel a számrendszer száma, már egy következő hatványt jelöl. Minden egyes leírt szám, jobbról-balra, 0-tól egyesével emelkedő hatványértékeket takar. Kis Balázs 14
A tízes számrendszer I. A tízes számrendszer az a számrendszer melyet mi magunk is a hétköznapokban alkalmazunk. Az informatikában, mint segéd számrendszer jelenik meg, hiszen az embernek ezzel a számrendszerrel a legegyszerűbb dolgoznia. Az informatikában a szabályok melyeket a matematika felállított a 10-es számrendszeren belül ugyancsak érvényesek. Kis Balázs 15
A tízes számrendszer II. A tízes számrendszerben a 0-9-ig terjedő számok szerepelnek. És ily módon, minden egyes hatványérték ezeket a számokat veheti fel: 9 5 3 5 4 10 4 10 3 10 2 10 1 10 0 9*10000 5*1000 3*100 5*10 4*1 Így látható, hogy ha 10-et felvenné bármelyik szám, az pont a következő hatvány érték lenne Kis Balázs 16
A tizenhatos számrendszer I. Más néven hexadecimális számrendszer. Ez a számrendszer is segéd számrendszerként szerepel az informatikában. Felhasználása nagy jelentőséggel bír a következő területeken: Memória címek jelölésében. Színek keverésében. Az IPv6 címekben. MAC address címekben. Kis Balázs 17
A tizenhatos számrendszer II. A 16-os számrendszer felépítését tekintve a számokat 0-9-ig illetve a betűket A-F-ig tartalmazza. Az A-F betűk sorrendben 10-15-ig jelölik a számokat, ezzel elkerülve, hogy egy-egy tag akár 2 szám is lehessen. A számrendszer azért is oly kedvelt mint segédszámrendszer, mert a kettes számrendszer egyes hatványaival megegyezik a 16-os számrendszer össze hatványa. Kis Balázs 18
A tizenhatos számrendszer III. A tizenhatos számrendszerben tehát egy szám ábrázolása így néz ki: f 2 9 b a 16 4 16 3 16 2 16 1 16 0 15*65536 2*4096 9*256 11*16 10*1 Mint látható a 10-es számrendszerhez hasonlóan a 16-os számrendszerben az egyes tagok, a 16, 0-tól induló hatványait jelölik. Kis Balázs 19
A kettes számrendszer I. A kettes számrendszer valójában az informatika alapja. A számrendszerben mindösszesen 2 szám található 0 és 1. A számrendszer azért a legalkalmasabb elektronikai eszközökön való számítások végzésére, és működtetésére, mivel az elektronikában könnyen reprodukálható a számrendszer. Kis Balázs 20
A kettes számrendszer II. Hiszen a számrendszer elektronikai eszközökön a feszültség van/nincs segítségével felépíthető. A magas, azaz igaz jel mindig az 1-es, az alacsony, azaz hamis jel a 0-ás értéket jelöli. A programozásban is nagy szerepet játszik a kettes számrendszer, hiszen a matematikai logika, mely erre a számrendszerre alapoz, a programozás alapja. Kis Balázs 21
A kettes számrendszer III. A kettes számrendszer felépítése tehát a következők szerint alakul: 1 0 1 1 0 2 4 2 3 2 2 2 1 2 0 1*16 0*8 1*4 1*2 0*1 A kettes számrendszer is ugyan azon elveken épül fel mint az előzőekben látott két számrendszer. Kis Balázs 22
Logika I. A kettes számrendszer mint azt George Bool megállapításai alapján is láthattunk a logika alapjának is tekinthető, hiszen az 1 mint igaz, a 0 mint hamis érték tekinthető. Ezáltal a matematikai logika (kijelentés logika és következtetés logika, illetve bool algebra) alapvető megállapításokat, axiómákat tart rajta értelmezve. Kis Balázs 23
Logika II. A kettes számrendszerben, a logikai kapcsolatok a követkőképpen alakulnak: És kapcsolat (AND) A végeredmény akkor igaz, ha minden érték igaz. Vagy kapcsolat (OR) A végeredmény akkor igaz, ha bármely érték igaz. Kizáró vagy kapcsolat (XOR) A végeredmény akkor igaz, ha bármely érték igaz, azonban az összes érték egyszerre nem igaz. Kis Balázs 24
Logika III. És kapcsolat igazságtáblája: Vagy kapcsolat igazságtáblája: A B A ÉS B 0 0 0 0 1 0 1 0 0 1 1 1 A B A VAGY B 0 0 0 0 1 1 1 0 1 1 1 1 Kis Balázs 25
Logika IV. Kizáró vagy kapcsolat igazságtáblája: A B A XOR B 0 0 0 0 1 1 1 0 1 1 1 0 A programozásban is a matematikában felírt szabályok érvényesek. Kis Balázs 26
Logika V. Az eddigiekben átvett logikai műveletek mindegyike két operandusos művelet volt, ami azt jelenti, hogy a művelet két logikai érték között hajt végre műveletet. A formátum: A @ B Azonban létezik olyan művelet is, ami egy operanduson hajt végre műveletet: A Nem A Negáló művelet (NOT): 0 1 Negálja egy megadott operandus értékét. 1 0 Kis Balázs 27
Logika VI. A logikában további nagyon fontos törvényszerűség, a De Morgan azonosság: Nem(A ÉS B) = Nem A VAGY Nem B Nem(A VAGY B) = Nem A ÉS Nem B Így tehát a két formula megegyezik tehát konvertálható az egyik a másikba. Kis Balázs 28
Feladat I. Határozzuk meg a következő számok 10-es számrendszerbeli értékét: 01101001001 11001011010 1D3F Írjuk fel a 234 számot kettes számrendszerbeli alakjában! Kis Balázs 29
A Program és generációi Program fogalma és Programnyelvek generációi. Kis Balázs 30
A program avagy alkalmazás Programnak vagy alkalmazásnak nevezzük azokat a speciális adatállományokat, amelyek futtathatók bizonyos célkörnyezetben és valamilyen célfaladat érdekében utasítások sorát hajtatják végre a céleszközzel. A program, futása során különböző erőforrásokat használhat, illetve beavatkozásokra reagálhat, melyek módosíthatják működését. Kis Balázs 31
Programnyelv generációk A programnyelveket csak úgy mint a számítógépeket generációkba oszthatjuk, melyek egyfajta fejlettségi szintet jelölnek: 1. Gépi kódú programozás 2. Assembly 3. Procedurális nyelvek 4. OOP 5. Specializált nyelvek 6. Mesterséges intelligencia Kis Balázs 32
Gépi kódú programozás A számítógépek hőskorszakában használatos programozási módszer, mely teljesen hardver közeli programozást valósít meg. Semmilyen mai programozásban megszokott elem nincs benne, kizárólagosan processzor utasítások sora binárisan, mely így igen nagy programkódot eredményezett. Lyukkártyán és lyukszalagon láthattunk ilyet élőben utoljára. Kis Balázs 33
Assembly Olyan programnyelv, mely még mindig processzor közeli, azonban itt már rövidítések, illetve értelmes utasítások is megjelennek, így a megjegyzése, tanulása lényegesen egyszerűbb. Ilyen nyelveket manapság még mikroprocesszoros áramkörök vezérlésére használnak. Minden program amit megírunk végül assembly-re fordul le. Kis Balázs 34
Procedurális nyelvek Olyan programnyelvek, melyek már különböző parancsokkal rendelkeznek, melyek valójában mini alprogramok. Ezekben a nyelvekben lehetőségünk van magunknak is létrehozni új alprogramokat. Ezekben a nyelvekben jelentek meg először a manapság ismeretes szerkezetek. Ilyen például a Pascal nyelv. Kis Balázs 35
OOP Objektum-Orientált programozásnak nevezzük a procedurális programozás egyfajta továbbfejlesztését. Az OOP alapú nyelvekben elsődleges eltérés a Procedurális nyelvekhez képest, hogy nagy hangsúly van azon, hogy a kezelendő adat, és az azon értelmezett feladatok, alprogramok egymás mellé legyenek zárva, így adat egységeket képezve. További fontos átalakulás, hogy nagyobb hangsúly lett fektetve a program továbbfejleszthetőségre, illetve a csapatmunkára. Kis Balázs 36
Specializált nyelvek Olyan programozási nyelvek, melyek egy bizonyos specifikus feladatra lettek kifejlesztve. Ezeket a nyelveket, globális feladatok megoldására nem lehet, vagy nem érdemes alkalmazni, azonban a célterületen amire kifejlesztették sokkal optimálisabbak mint más programnyelvek az adott területen. Ilyen például az SQL. (Standard Query Language) Kis Balázs 37
Mesterséges Intelligencia A mesterséges intelligencia is egyfajta programozási generáció. Itt olyan nyelvek jönnek szóba, amik különböző, géptől megszokott intelligencián túlmutató, képességekkel rendelkező programok fejlesztésében használatosak. Ilyenek jelenleg főként az adathalász, adatbányászatban használatos rendszerek. Kis Balázs 38
Programnyelvek Programnyelvek típusai, csoportosítása. Kis Balázs 39
Programnyelvek I. A programnyelveket több csoportosítási rendszer szerint is csoportosíthatjuk. Elsődleges csoportosítási elv a programnyelv programozási elve alapján történik: Funkcionális programozás Strukturált programozás Kis Balázs 40
Funkcionális programnyelvek Ezek a programnyelvek alapvetően a Specializált nyelvek alapjait adják. Ezen nyelveknek az elsődleges feladata, hogy a matematikai logika alapján felépített program készüljön el, mely nem kifejezetten felhasználói rendszert alkot, hanem egyes programok kiszolgálását végzik el. Ilyen nyelv például az Microsoft Visual F# Kis Balázs 41
Strukturált programnyelvek Ezek azok a programnyelvek, melyek a köztudatban mint programozási nyelvek élnek. Ezek a nyelvek szolgálnak különböző felhasználói, webes, szerverkiszolgáló programok összerakására. A tanfolyamon mi ezeknek a programozási nyelveknek alapjaival fogunk megismerkedni. Kis Balázs 42
Programnyelvek II. A programnyelvek további csoportosítási elve lehet a felhasználás területe is. Ebben az esetben ugyancsak két nagy csoportra bonthatjuk őket: Webfejlesztő programnyelvek. Lokális fejlesztést lehetővé tevő nyelvek. Természetesen ez a csoportosítás egyre jobban összemosódik. Kis Balázs 43
Programnyelvek III. Lokális fejlesztés Pascal C# (nem minden része) Java (nem minden része) C / C++ Delphi Objective C Webfejlesztés Java script (Ecma script) PHP ASP Java Flash (Action Script) Silverlight Kis Balázs 44
Webprogramozási nyelvek I. Ezek a nyelvek, melyeket előzőekben már láthattunk, az webre szánt programok fejlesztésében használatosak. Ez nem feltétlenül jelenti azt, hogy másra nem alkalmasak, azonban erre optimalizáltak. Ezek a nyelvek általában script nyelvek, mely azt jelenti, hogy a program végrehajtja a kívánt feladatokat, visszaadja az eredményt és kilép. Kis Balázs 45
Webprogramozási nyelvek II. Természetesen a weben ezek a programnyelvek tökéletesen megfelelnek, hiszen egy HTML alapú kimenetet adnak vissza legtöbbször (kivéve ha külön program értelmezi a visszaadott kódot). A weben jelenleg üzemelő weboldalak legnagyobb része már nem statikus, hanem egy program generálja a kimenetet. Kis Balázs 46
Lokális programozási nyelvek I. Ezek a programnyelvek régebben hasonlóak voltak mint a manapság már csak weben alkalmazott nyelvek. Mára már szinte kivétel nélkül mindegyik lokális programozásra szánt, legalább 4. generációs, nyelv rendelkezik GUI-val (Graphical User Interface) is, melynek segítségével a program vizuálisan jelenik meg. Kis Balázs 47
Lokális programozási nyelvek II. A vizuálisan megjelenő programok, azonban már nem lehetnek lefutás alapúak, hiszen a program működése a különböző vezérlőkön (gomb, címke, beviteli mező, stb.) keresztül történik, mely így nem egy bizonyos vonalat követve fut. Természetesen a programnyelvek nagy részének továbbra is megmaradt script nyelvekhez hasonló változata is. Kis Balázs 48
Programnyelvek IV. További lehetőség a csoportosításra, az ősök alapján való csoportosítás. Kis Balázs 49
Programnyelvek konklúzió A program nyelveket nagyon sok szempont szerint lehet csoportosítani. Alapvetően mi a működési célterület szerinti csoportosítást fogjuk alkalmazni, mivel eszerint lehet megkülönböztetni azt is, hogy milyen követelményei vannak az adott programnyelvnek. Kis Balázs 50
Programozási alapismeretek Programozási alapfogalmak, alapvető elemek Kis Balázs 51
Alapfogalmak I. Szintaktika Az a séma, melyet az adott programozási nyelv előír számunkra. Ezt a sémát kell követnünk ahhoz, hogy hibátlanul tudjuk futtatni a programunkat. Szintaktikai hiba: ha eltérünk ettől a sémától, pl.: for helyett fro-t írunk. Szemantika Az a séma, melyet a matematika és logika szab meg. Szemantikailag hibás program például egy végtelenségig futó program, vagy egy 0-val való osztás. Kis Balázs 52
Alapfogalmak II. Interpreter Lexikális értelmező, mely a fordítókörnyezetek, illetve manapság egyre inkább az IDE-k (Integrated Development Environment) részét képezi. Feladata, hogy a programozó által leírt programkódot értelmezze. Compiler Fordító egység, melynek feladata, hogy az Interpreter által feldolgozott kódot, a megadott helyre, az adott nyelvben értelmezett célkódban előállítsa. Kis Balázs 53
Alapfogalmak III. Konstans: Olyan név érték páros, mely a program futásához elengedhetetlen, de megváltoztatni a program futása közben nem lehet. Változó: Olyan név érték páros, mely a program futása alatt megváltozhat, ha a programban mi utasítást adunk rá. Ezek az értékek a memóriában tárolódnak, és onnan tudjuk őket feldolgozni. Kis Balázs 54
Változó és Konstans I. A változókat és konstansokat azért érjük el nevük szerint a memóriából, mert azt, hogy adott futásnál pontosan a memória melyik részén vagyunk nem tudjuk, mivel az Operációsrendszer dönti el, hova kerülünk minden induláskor. A memóriában az adatok és a programok egymás mellett szerepelnek (Neumann elv), így nehéz lenne kitalálni hol van adat, és hol van program. Kis Balázs 55
Alapfogalmak IV. Deklaráció: Az a folyamat, melynek során létrehozunk valamilyen változót, vagy konstanst. Egy definiálási folyamat, melyben megadjuk az értelmezőnek, hogy innentől valamilyen új adattárolót szeretnénk használni. Kezdőérték: A deklarációs folyamat részeként, az adott tároló létrejön ugyan, de ekkor még semmi nem szerepel benne. Az érték amit először töltünk az adott tárolóba. Kis Balázs 56
Alapfogalmak V. Adatszerkezet Olyan szerkezet, mely adatok, valamilyen rendszer szerinti tárolását, szervezését végzi el oly módon, hogy a szerkezetben lévő adatok valamilyen szempont szerint könnyen feldolgozhatóak legyenek. Az adatszerkezet megszabja a benne tárolt adatok elérhetőségét és tárolási módjukat is, tehát, hogy hogyan lesznek tárolva a memóriában. Kis Balázs 57
Alapfogalmak VI. Tömb (vektor, array) Adatszerkezet, melyben összetartozó, vagy legalább egyforma típusú elemek tárolhatók: 1 2 1 4 8 3 6 9 10 5 A tömb tehát olyan mint összetartozó változók összessége. A tömb mindig egy irányú kiterjedéssel rendelkezik. A tömb indexelhető adatszerkezet, tehát az egyes elemeit közvetlen elérhetjük. Kis Balázs 58
Mátrix (multidimensional array) Többdimenziós tömb Alapfogalmak VII. 1 5 4 8 3 9 2 5 8 43 5 2 8 5 2 8 4 99 5 3 Ugyan azok a szabályok érvényesek rá mint a tömbre, tehát ugyancsak összetartozó vagy legalább egyforma típusú értékek találhatók benne. A mátrix, kiterjedését tekintve akármekkora lehet, tehát akárhány dimenziós kiterjedése lehet. Kis Balázs 59
Tömb adatszerkezet I. A tömb és a mátrix felépítését tekintve azonos adatszerkezetnek tekinthető Működésük arra épül, hogy az elemek nem csak használati szempontból következnek egymás után, hanem fizikailag is egymás után kell következzenek a memóriában. Ezért lehetséges index rendszer szerinti bejárásuk, hiszen ha ismerjük a típust, és tudjuk, hogy hányadik elemet keressük, egyszerűen kezdőcím + típusfoglalás * hányadik címre kell ugranunk. Kis Balázs 60
Tömb adatszerkezet II. Ez az elrendezés igen gyorssá teszi az adatszerkezet bejárását, használatát, de egyúttal helypazarlást is eredményez: X X X = Foglalt terület X X X X X X Az első, sematikus memóriában, nem tudunk egy 5 elemű tömböt létrehozni, habár lenne rá elegendő hely. A másodikban már lehetséges lenne. Kis Balázs 61
Alapfogalmak VIII. Elágazás: Olyan programrész, ahol a program futása szétágazik két, vagy több ágra. Iszik, vagy vezet Egyszerre mindig csak egy ágon folytathatja a program a futását. Az egyik legfontosabb program vezérlő elem, hiszen segítségével a program nem egyirányú, hanem megfelelő esetben más úton is folytathatja futását. Kis Balázs 62
Alapfogalmak IX. Az elágazásokhoz minden esetben szükség van egy feltételre, melynek igaz, hamis kimenetűnek kell lennie. Kivételt képez ez alól a többszörös elágazás. A logikai feltétel bonyolultságát tekintve korlátlan, és természetesen az előzőekben tanult logikai operátorok alkalmazhatók benne. Kis Balázs 63
Alapfogalmak X. Ciklus Olyan programrész, amely egy bizonyos logikai feltétel teljesüléséig ciklikusan lefut. Addig szárítom a hajam, amíg meg nem szárad Addig mosogatok, míg el nem mostam az összes edényt A ciklus feltételét nagyon figyelmesen kell megírni, mivel ha a feltétel mindig teljesül, pl.: 1<2, akkor a program végtelen ciklusba kerül. Kis Balázs 64
Alapfogalmak XI. A ciklusoknak nyelvtől függően 3-4 típusa létezik: Elöl tesztelős ciklus A feltételt a ciklus belépésekor teszteli, ezáltal, ha a feltétel elve nem teljesül, le sem fut. Minden esetben bennmaradási feltételt kell megadni, tehát, amíg teljesül a feltétel, addig fut le újra a ciklus. Hátul tesztelős ciklus A feltételt a ciklus végén teszteli, így ha a feltétel nem teljesül, akkor is minimum egyszer lefut a ciklus. C nyelvekben bennmaradási feltételt kell ide is megadni, Pascal alapú nyelvekben kilépési feltételt vár a nyelv. Kis Balázs 65
Alapfogalmak XII. Számlálós ciklus: Egy bizonyos szám szor fut le a ciklusmag. Valójában egy speciális elöl tesztelős ciklus, azonban ebben az esetben a feltétel az, hogy már elértük-e a kívánt lefutást. Bejáró ciklus: Egy speciális ciklusfajta, mely nem minden nyelvben található meg. Feladata, hogy tömböket, szekvenciálisan bejárható adatszerkezeteket a lehető legegyszerűbben lehessen bejárni. Kis Balázs 66
Alapfogalmak XIII. A változónál és konstansnál tudjuk, hogy névhez kötötten van egy memória címünk, amin keresztül elérjük az adatunkat. De a memóriában a legkisebb címezhető egység a Bájt, tehát 8 Bitnél kisebb egységet nem érünk el, és minden egyes bájtnak címe van. Azonban nem biztos, hogy csak 1 bájtnyi adatot akarunk tárolni 1 változóban lásd tömb Megoldás: Meg kell adni, hogy a változó pontosan mekkora területet foglal a memóriában, így ha tudjuk a kezdő címét, már tudjuk, hogy onnan még hány bájt tartozik hozzá. Kis Balázs 67
Alapfogalmak XIV. Típus: Az a jellemzője, egy változónak, konstansnak, tömbnek, mátrixnak, bármely adattárnak, mely azt szabja meg, hogy az adott tárolóban milyen érték / értékek tárolhatók el. Megszabja az értéktartományt, az értékkészletet, és az adaton értelmezhető műveleteket. Megadása azért fontos, mivel a memóriában nem mindegy, hogy mekkora helyet kell a számára fenntartani. A típus megadása manuálisan egyes nyelveken nem lehetséges, vagy nem kötelező. Kis Balázs 68
Alapfogalmak XV. Gyakori típusok: Egész számokat tárolni képes típusok: Egész 2^32 bit szélességű értékmező. Azaz ~4000000000-ig a számokat tárolni képes típus lenne, amennyiben nem tárolnánk benne negatív számokat, így ~-2000000000 - ~2000000000-ig a számokat tárolni képes típus. Bájt 2^8 bit szélességű értékmező 0-255-ig a számokat képes tárolni. Logikai érték tárolására képes típus Logikai Igaz/hamis értékeket tud tárolni. Kis Balázs 69
Alapfogalmak XVI. Tört számokat tárolni képes típusok Valós 7-8 szám pontossággal a tört számokat tárolni képes típus. A Karakterisztika 32 bites egész szám (integer) A Mantissza 10-7/8 -ig terjedő szám Szöveges típusok: Karakter Egy karakter tárolására alkalmas típus. Szöveg Karakter lánc tárolására alkalmas típus. Kis Balázs 70
Operátorok I. Operátoroknak nevezzük azokat a matematikai, logikai jelölőket, melyek egyfajta műveletet jelölnek. A programozásban, sok egyedi operátor mellett, a matematikában használatos operátorok ugyancsak szerepelnek. Az operátorok jelölése, az egyes nyelvcsoportokban eltérő lehet. Alapvetően két nyelvcsoport operátorai az elterjedtek: Pascal alapú jelölés (verbose kifejtett, bő leírású) C alapú jelölés (terse tömör, jelölt leírású) Kis Balázs 71
Operátorok II. Operátorok: Értékadás: := Egy változó értéket kap, melyet ezután a memóriában fog tárolni a program végéig. Pl.: c := 2 Összeadás/Kivonás/Szorzás/Osztás + - * / Használata ugyan úgy működik mint a matematikában. Pl.: c := 2 + d e * 2 Kis Balázs 72
Operátorok III. Logikai operátorok: = Egyenlő-e a két érték. Pl.: b := a = c <> Nem egyenlő-e a két érték. Pl.: b := a <> c < > Kisebb, vagy nagyobb az adott érték mint az utána jövő Pl.: b := a < c <= >= Kisebb, vagy egyenlő, vagy nagyobb, vagy egyenlő az adott érték mint a következő. Pl.: b := a <= c Kis Balázs 73
Operátorok IV. AND OR XOR Olyan operátorok, melyek két logikai formula közti kapcsolatot jelenti. Pl.: b := a<c AND c<d OR e Példa: a := 2 c := a + 2 e := igaz b := a < c OR e Kis Balázs 74
Algoritmus Algoritmizálási technikák, algoritmusok típusai. Kis Balázs 75
Az algoritmus Olyan leíróeszköz, mely egy programot, vagy annak egy részét, tudja modellezni. Az algoritmus célja, hogy egy programnyelv független programunk legyen, melyet a megtervezés és leírás után akármelyik programnyelvbe lehet implementálni. Hasznos lehet, nagyobb projektek kisebb részeinek megtervezéséhez, illetve akkor, ha nekünk csak egy ötletünk van egy programra, de a célnyelvben nem tudjuk magunktól megírni azt. Kis Balázs 76
Algoritmus típusok Alapvetően 3 féle algoritmusról beszélhetünk: Szöveges (Pszeudó kód) Folyamatábrás Struktogrammos Mindhárom algoritmus alkalmas egy program megtervezésére. A legtöbbek által ismert a folyamatábrás, ám a szöveges áll a legközelebb a programozáshoz. Kis Balázs 77
Pszeudó kód I. A Pszeudó kód, egy programozás közeli algoritmus típus. Előnye ugyan az mint a hátránya, hogy szöveges, és valójában, ahogy mondjuk, úgy írjuk technológia, vagyis mindenki a saját nyelvén írja le Mégis ez a legelterjedtebb algoritmus típus, mivel könnyen, gyorsan értelmezhető, és gyorsan fordítható programnyelvre. Kis Balázs 78
Pszeudó kód II. Első példa: a, b : egész be a be b Ha a<b akkor ki b-a Különben ki a-b Elágazás vége Második példa: (Optimális?) a, i : egész be a i:=0 Ha a>0 akkor Ciklus amíg i<a ki i i:=i+1 Ciklus vége Elágazás vége Kis Balázs 79
Feladat II. Írjunk algoritmust, mely bekéri egy osztály jegyeit, majd kiszámolja az átlagukat. Kis Balázs 80
Folyamatábra I. Egy merőben vizuális algoritmizáló lehetőség. Ábrákkal szimbolizálja az egyes egységeket a programban. Előnye, hogy könnyű szerkeszteni. Hátránya, hogy bonyolult program esetén hatalmas ábrát igényel. Kis Balázs 81
Folyamatábra II. Első példa: Második példa: Kis Balázs 82
Feladat III. Írjunk folyamatábrás algoritmust egy összeadó, kivonó gépre, mely a felhasználó döntésétől függően összead vagy kivon. Kis Balázs 83
Struktogram I. Egy blokkosított kinézetű algoritmus. Egyetlen nagy négyzetbe írjuk meg az egész programot Előnye, hogy könnyen áttekinthető elkészülte után. Hátránya, hogy ha bővíteni kell a kódot, már igen nehézkesen férünk el benne. Kis Balázs 84
Struktogram II. Első példa: Második példa: Kis Balázs 85
Feladat IV. Készítsünk algoritmust egy olyan programra, amely bekér két számot és a két szám között lévő összes szám négyzetét kiírja! Kis Balázs 86
Algoritmus feltételei Egy algoritmus esetén nagyon fontos definiálni, hogy milyen elő és milyen utófeltétele van az algoritmusban foglalt programnak. Előfeltétel Meghatározza, hogy minek kell teljesülni a futás előtt. Utófeltétel Meghatározza, hogy mi fog történni az algoritmus futása után. Kis Balázs 87
Programozási technikák Programfejlesztési technikák fejlődése, fejlődésük oka, tulajdonságaik Kis Balázs 88
Programozási technikák Alapvetően 4 fajta programozási technikát különböztetünk meg: Monolitikus programozás Moduláris programozás Strukturált/Procedurális programozás Objektum Orientált Programozás Kis Balázs 89
Monolitikus Programozás Ez a technika manapság már szinte teljesen kihalt technika, még ritkán a script nyelvekben fordul elő. Line by Line programozás. Lényege, hogy valójában a parancsokat egymás után felsoroljuk, mindenfajta strukturálás nélkül. Hátrányai: Hosszú, átláthatatlan programkód. Újrahasznosíthatóság nincs. Továbbfejlesztés problémás. Kis Balázs 90
Moduláris Programozás A programozás a kezdetektől fogva hatalmas kódot eredményezett, azonban az ember képtelen hatalmas kódot áttekinteni, pláne módosítani, javítani. A moduláris programozás ebben segít, hiszen a programkódot nem egyben kezeljük, hanem modulonként (egy-egy modul, egy-egy funkcionális rész), így könnyen átlátható marad a program. A program továbbra is monolitikus. Előnye: A program személyiség független. Hátrányai: Nem strukturált felosztás. Integrációs bumm. Kis Balázs 91
Procedurális Programozás Procedurális programozás alatt azt értjük, mikor a programot, már nem egyszerű parancsok sokaságára építjük, hanem az elvégzendő feladatokat csoportosítjuk és alprogramokba szervezzük, majd ezeket a alprogramokat hívjuk meg egymás után. Valójában sok kisebb alprogramunk lesz, melyek egymástól függetlenül állnak. De egymástól nem függetlenül futnak. Előnyei: A kód átláthatóbb lesz, könnyen végigvezethető. A program könnyebben továbbfejleszthető. Hátránya: Túl sok alprogram esetén nehézkes az újrafelhasználhatóság. Kis Balázs 92
Objektum Orientált Programozás Jelenleg a legelterjedtebb programozási technika. OOP esetén már osztályokról és objektumokról beszélünk, melyek különféle kapcsolatokban állhatnak egymással. Előnyei: Kategorizált részegységek. Könnyű újrafelhasználhatóság. Valós világ könnyebb implementálása. Hátránya: Nagyobb memória igény. Kis Balázs 93
Programozás a gyakorlatban Szoftverfejlesztés lépései. Kis Balázs 94
Szoftverfejlesztés lépései A szoftverek fejlesztése a gyakorlatban 4 + 1 lépésből áll: Analízis A probléma feltárása, elemzése. Tervezés A probléma körbejárása, a megoldás megtervezése. Fejlesztés A tervek alapján való lefejlesztés. Tesztelés A végtermék tesztelése. Követés Folyamatos bővítés, hibajavítás a szoftver használata során. Kis Balázs 95
Analízis Az analízis fázisban feltárjuk a probléma részleteit, illetve meghatározzuk, hogy a probléma megoldása egyáltalán megvalósítható-e Erre azért van szükség, mivel annak már a legelején ki kell derülnie, ha a projekt megvalósíthatatlan. Az elemzés során a megvalósíthatóságnál fontos a gazdasági kivitelezhetőség is, tehát, hogy anyagilag kivitelezhető-e a projekt. Kis Balázs 96
Tervezés I. A program tervezése alatt azt értjük, hogy a program egyes részeit specifikáljuk. Leírjuk, hogy mire lesz képes, és az hogy illeszkedik a végleges programba. Majd egységben véve végiggondoljuk, hogy az elgondolt terv, valóban életképes-e. Szükség esetén módosítjuk. Kis Balázs 97
Tervezés II. A gyakorlatban, a szoftverfejlesztő cégek, komoly előmunkálatok árán specifikálják a szoftverterméket. Ez szükséges a projekt biztosításához. A projekt lefutását is itt kell megtervezni, amit általánosan valamilyen modell alapján építenek fel. Pl.: Waterfall, Cleanroom, Scrum, RUP, stb. Kis Balázs 98
Fejlesztés Az elkészült tervezet alapján készülhet el maga a szoftver. A szoftvernek pontosan tükröznie kell terveket, mivel ezzel biztosítható, hogy a megtervezett szoftver is készül el. Az elkészült szoftver ezután verifikáción és validáción (V&V) esik át. Verifikáció: A szoftver megfelel a tervezetnek. Validáció: A szoftver megfelel a megrendelőnek. Optimális esetben a program sikeres verifikációja egyben a sikeres validációt is biztosítja. Kis Balázs 99
Tesztelés Az elkészült szoftvert teszteljük, hiszen a szemantikai hibákat csak tesztelés segítségével lehet feltárni. A tesztelésnek több típusa is létezik: Manuális tesztelés: A szoftvert manuálisan, valós felhasználókkal teszteltetjük. Automatikus tesztelés: A szoftvert egy szoftver segítségével teszteljük, mely megadott pontokon szándékosan próbál helytelen műveleteket véghezvinni és azt jegyzi, hogy mire mit reagált a program. Kis Balázs 100
Követés Miután a tesztek lementek, a szoftver éles környezetben lesz felhasználva, azonban a tesztelés sem szűrhet ki minden hibát, illetve a felhasználás során felmerülő újabb igényeket is implementálni kell a szoftverbe. A követés során a fejlesztő a már megírt és kiadott szoftvert javítja, fejleszti tovább a felhasználói igényeknek megfelelően. Kis Balázs 101