Alkalmazott modul: Programozás 1. fejezet. Szoftverfejlesztés, programozási paradigmák. Giachetta Roberto

Hasonló dokumentumok
Bevezetés a Programozásba II 1. előadás. Szoftverfejlesztés, programozási paradigmák

Programozás. A programkészítés lépései. Program = egy feladat megoldására szolgáló, a számítógép számára értelmezhető utasítássorozat.

Programozás I gyakorlat

ELTE IK, Programtervező BSC Szoftvertechnológia 1. gyakorlat: Programozási paradigmák

Adatok ábrázolása, adattípusok. Összefoglalás

Minta programterv a 1. házi feladathoz

Párhuzamos programozás

Programozás alapjai Bevezetés

A táblázatkezelő felépítése

Osztály szint tagok. Krizsán Zoltán 1 [2012. március 12.] Objektumorientált programozás C# alapokon tananyag

MBLK12: Relációk és műveletek (levelező) (előadásvázlat) Maróti Miklós, Kátai-Urbán Kamilla

MATEMATIKA ÉRETTSÉGI TÍPUSFELADATOK KÖZÉPSZINT Függvények

Dr. Schuster György február 21. Real-time operációs rendszerek RTOS

Prolog 1. Készítette: Szabó Éva

Magas szintű programozási nyelvek 1. Előadás. Bevezetés. Espák Miklós. Juhász István jegyzete alapján

A Hozzárendelési feladat megoldása Magyar-módszerrel

EPER E-KATA integráció

15. Programok fordítása és végrehajtása

Érettségi feladatok Algoritmusok egydimenziós tömbökkel (vektorokkal) 1/6. Alapműveletek

MATEMATIKA ÉRETTSÉGI TÍPUSFELADATOK MEGOLDÁSAI KÖZÉPSZINT Trigonometria

Vektoros elemzés végrehajtása QGIS GRASS moduljával 1.7 dr. Siki Zoltán

A SZÁMFOGALOM KIALAKÍTÁSA

Digitális technika (VIMIAA01) Laboratórium 1

Tanácsok egyszerű programok készítéséhez

Az első lépések. A Start menüből válasszuk ki a Minden program parancsot. A megjelenő listában kattintsunk rá az indítandó program nevére.

4. Programozási nyelvek osztályozása. Amatőr és professzionális

Miért van szükség fordítóprogramokra? Fordítóprogramok célja és szerkezete. Miért van szükség fordítóprogramokra?

Fordítóprogramok Készítette: Nagy Krisztián

Analízis elo adások. Vajda István október 3. Neumann János Informatika Kar Óbudai Egyetem. Vajda István (Óbudai Egyetem)

Mikrokontrollerek. Tihanyi Attila május 8

Algebra es sz amelm elet 3 el oad as Rel aci ok Waldhauser Tam as 2014 oszi f el ev

VHDL szimuláció. Tervezés. Labor II. Dr. Hidvégi Timót

Javítóvizsga témakörei matematika tantárgyból

Jelek tanulmányozása

Alkalmazott modul: Programozás

Analízis elo adások. Vajda István szeptember 24. Neumann János Informatika Kar Óbudai Egyetem. Vajda István (Óbudai Egyetem)

Korszerű geodéziai adatfeldolgozás Kulcsár Attila

Elemi adatszerkezetek

Mesterséges Intelligencia. Csató Lehel. Csató Lehel. Matematika-Informatika Tanszék Babeş Bolyai Tudományegyetem, Kolozsvár 2006/2007

Dr. Kulcsár Gyula. Virtuális vállalat félév. Projektütemezés. Virtuális vállalat félév 5. gyakorlat Dr.

Beszámoló: a kompetenciamérés eredményének javítását célzó intézkedési tervben foglaltak megvalósításáról. Őcsény, november 20.

AWP TELEPÍTÉSE- WINDOWS7 64 OPERÁCIÓS RENDSZEREN

Lineáris algebra gyakorlat

Bevezetés a lágy számítás módszereibe

felsőfokú szakképzések szakirányú továbbképzések informatikai alapszakok informatikai mesterszakok informatikai doktori iskola

Ablakok használata. 1. ábra Programablak

Tantárgyi program. 9. A tantárgy hallgatásának előfeltétele, előképzettségi szint: 10. A tantárgy tartalma:

Bevezetés a Programozásba II 11. előadás. Adatszerkezetek megvalósítása. Adatszerkezetek megvalósítása Adatszerkezetek

Az informatika oktatás téveszméi

Emlékeztető: a fordítás lépései. Szimbólumtábla-kezelés. Információáramlás. Információáramlás. Információáramlás.

1. forduló. MEGOLDÁSOK Pontszerző Matematikaverseny 2015/2016-os tanév

Időzített rendszerek és az UPPAAL

MATEMATIKA ÍRÁSBELI VIZSGA május 3.

ADATBÁZIS-KEZELÉS. Funkcionális függés, normál formák

Vodafone ReadyPay. Használati útmutató

2011. március 9. Dr. Vincze Szilvia

SÜTIK TÖRLÉSE. Készült: Módosítva:

Árverés kezelés ECP WEBSHOP BEÉPÜLŐ MODUL ÁRVERÉS KEZELŐ KIEGÉSZÍTÉS. v ECP WEBSHOP V1.8 WEBÁRUHÁZ MODULHOZ

SW process Feladatok. SW process Feladatok

tetszőleges időpillanatban értelmezhető végtelen sok időpont értéke egy véges tartományban bármilyen értéket felvehet végtelen sok érték

INFORMATIKAI ALAPISMERETEK

Fábián Zoltán Hálózatok elmélet

1. Írja fel prímszámok szorzataként a 420-at! 2. Bontsa fel a et két részre úgy, hogy a részek aránya 5 : 4 legyen!

Számítógépes vírusok

KOVÁCS BÉLA, MATEMATIKA I.

MATLAB. 4. gyakorlat. Lineáris egyenletrendszerek, leképezések

DLookup függvény 1. (5)

Arany Dániel Matematikai Tanulóverseny 2011/2012-es tanév első (iskolai) forduló haladók I. kategória

V. Kétszemélyes játékok

Csoportosított adatok megjelenítése sorhalmaz függvények használatával

Ipari és vasúti szénkefék

Az Európai Szabadalmi Egyezmény végrehajtási szabályainak április 1-étől hatályba lépő lényeges változásai

TELJESKÖRŰ ÜGYFÉLAZONOSÍTÁSI SZOLGÁLTATÁSOK

Vegyes tételek könyvelése felhasználói dokumentum Lezárva:

A döntő feladatai. valós számok!

Prop-Tech. Vázmérő. Telepítési és eltávolítási útmutató

A TÁMOP KIEMELT PROJEKT KERETÉBEN KIALAKÍTOTT INFORMATIKAI RENDSZER

Rendezési algoritmusok belső rendezés külső rendezés

Kivétel kezelés. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

A szerzõrõl... xi Bevezetés... xiii

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

Belépési útmutató a MIAG weboldalra

Gépi forgácsoló Gépi forgácsoló

Programozási technológia II 1. előadás. A szoftverfejlesztési folyamat Giachetta Roberto

2010_MEGF_NYILATK PROXYNET. CORVUS Telecom Kft. [ MEGFELELŐSÉGI NYILATKOZAT ]

OKTATÁSI MINISZTÉRIUM SZÓBELI ÉRETTSÉGI VIZSGATÉTELEK. Szoftvertechnológia

HENYIR felhasználói dokumentáció

KOVÁCS BÉLA, MATEMATIKA I.

Felhasználói Kézikönyv Kisbanki NetBOSS - IVR

Munkaerőpiaci szervező, elemző Munkaerőpiaci szervező, elemző Személyügyi gazdálkodó és fejlesztő

Bár a digitális technológia nagyon sokat fejlődött, van még olyan dolog, amit a digitális fényképezőgépek nem tudnak: minden körülmények között

Kérjük, hogy mielőtt elkezdené használni a Csavarhat webáruházat, gondosan olvassa végig ezt a segédletet.

Áramlástechnikai gépek soros és párhuzamos üzeme, grafikus és numerikus megoldási módszerek (13. fejezet)

Tartalom. Újrafelhasználás alapú tervezés. Újrafelhasználás alapú tervezés Komponens alapú fejlesztés. Példák. Szoftvertechnológia előadás

Épületvillamosság laboratórium. Villámvédelemi felfogó-rendszer hatásosságának vizsgálata

Utasítások. Excel VII. Visual Basic programozás alapok. A Visual Basic-kel megoldható feladatok típusai Objektumok, változók Alprogramok

Dinamikus geometriai programok

Analízis előadások. Vajda István február 10. Neumann János Informatika Kar Óbudai Egyetem

Adattípusok. Szám: pozitív egész, egész, valós, dátum + idő,... Szöveg, Formázott szöveg Kép Hang Mozgókép+Hang

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II / 19

Átírás:

Eötvös Loránd Tudományegyetem Informatikai Kar Alkalmazott modul: Programozás 1. fejezet Szoftverfejlesztés, programozási paradigmák Giachetta Roberto A jegyzet az ELTE Informatikai Karának 2015. évi Jegyzetpályázatának támogatásával készült

A program A program matematikailag: állapotterek (értékek direktszorzata) felett értelmezett reláció informatikailag: utasítások sorozata, amelyek műveleteket hajtanak végre a megadott értékekkel, az adatokkal A programban foglalt utasítássorozatot, vagy programkódot a processzor (CPU, GPU, ) hajtja végre a processzor korlátozott utasításkészlettel rendelkezik, ezért összetett utasításokat nem képes véghezvinni a végrehajtáshoz segédtárakat (regiszterek, gyorsítótárak) használ, és kommunikál a memóriával ELTE IK, Alkalmazott modul: Programozás 1:2

A program háttértár adatok és utasítások adatok adatok 0010 0011 0100 0101 memória utasítások 0010 regiszterek és gyorsítótárak adatok processzor ELTE IK, Alkalmazott modul: Programozás 1:3

Absztrakció a szoftverfejlesztésben A processzor által értelmezhető utasításkészletet és adathalmazt nevezzük gépi kódnak (object code) A programokat ennél magasabb szinten kell elkészíteni, ezért szükségünk van a működés és az adatkezelés absztrakciójára: az utasításabsztrakció (control abstraction) biztosítja, hogy a processzor egyszerű, egymást követő utasításai (összeadás, mozgatás, összehasonlítás) mellett összetett parancsokat és vezérlési módszert fogalmazzunk meg az adatabsztrakció (data abstraction) lehetővé teszi, hogy különböző típusokba soroljuk adatainkat, amelyek meghatározzák az értéktartományt, és az elvégezhető műveleteket ELTE IK, Alkalmazott modul: Programozás 1:4

Absztrakció a szoftverfejlesztésben tr.getperimeter() Triangle tr(2,6,4) utasítás absztrakció pow(2,4) mov 2.6+4i 2.6 adat absztrakció 0010 gépi kód 1010 utasítás adat ELTE IK, Alkalmazott modul: Programozás 1:5

Adatok A adatok kétféle fajtáját tarjuk nyilván: változó (variable): értéke (esetleg típusa is) változtatható a program futása során, mindig a memóriában tároljuk, és megfelelő azonosítóval (változónév) látjuk el pl.: a = 1 (az a változó értéke megváltozott 1-re) a változókat deklarálni (nevét és egyéb tulajdonságait megadni), valamint definiálni kell (megadni a hozzájuk tartozó értéket) konstans (constant): értéke és típusa rögzített, nem változhat a program futása során a konstansokat is elláthatjuk azonosítóval (nevesített konstansok) ELTE IK, Alkalmazott modul: Programozás 1:6

Adatok a memóriában A memória tekinthető egy byte-sorozatnak, ahol minden bytenak sorszáma van, ez a memóriacím ehhez rendeljük az azonosítót, amivel a program futása során hivatkozhatunk rá minden futó program önálló memóriaterületet (szegmenst) kap, amelyen az ő kódja és az ő adatai helyezkednek el memóriaszegmens 1 programkód változók a változó ELTE IK, Alkalmazott modul: Programozás 1:7

Adatok típusa Az adattípus meghatározza a felvehető értékek halmazát (a megvalósításban a memóriában elfoglalt terület mértékét is), valamint az alkalmazható műveletek körét, vagyis adattípus = értékhalmaz + művelethalmaz Minden adat rendelkezik típussal (deklarációkor adjuk meg) A gépi kódon értelmezhető, egyszerű típusokat nevezzük elemi, vagy primitív típusoknak: logikai (LL) egész (Z), természetes (N) és valós (R) számok karakter (Chh) ELTE IK, Alkalmazott modul: Programozás 1:8

Adatok típusa A programozó alkothat saját, összetett típusokat a típuskonstrukciók segítségével: iterált, vagy sorozat (DD nn, vagy DD ) direktszorzat (DD 1 DD 2 ) unió (DD 1 DD 2 ) A primitív típusokból tetszőleges bonyolultságú típust hozhatunk létre, amelyek művelethalmazát is definiálhatjuk a típuskonstrukciókat halmozottan is használhatjuk Pl.: szöveg (SS = Chh ), komplex szám (C = R R), komplex számok vektora (C nn = (R R) nn ) ELTE IK, Alkalmazott modul: Programozás 1:9

Utasítások A programok építőkövei az egyszerű, processzor számára értelmezhető utasítások, az úgynevezett elemi programok: üres program: SKIP hibás program: ABORT értékadás: <változó> := <kifejezés> Az elemi programokból különböző programkonstrukciók segítségével hozunk létre összetett programokat: szekvencia: utasítások egymásutánja utasítás utasítás ELTE IK, Alkalmazott modul: Programozás 1:10

Utasítások elágazás: feltétel függvényében történő végrehajtás, amely lehet kétágú, vagy többágú feltétel feltétel feltétel feltétel utasítás utasítás utasítás utasítás utasítás ciklus: utasítások ismételt végrehajtása, két változata az elöltesztelő és a hátultesztelő feltétel utasítás utasítás feltétel mindkét esetben a feltétel egy logikai kifejezés ELTE IK, Alkalmazott modul: Programozás 1:11

Állapottér, előfeltétel és utófeltétel Állapottérnek (AA) nevezzük a programban előforduló változók összességét (típusukat és elnevezésüket) Egy adott futási ponton a változók aktuális értékeinek összességét nevezzük a program állapotának a program állapotot vált, ha az állapottérben lévő változók közül bármelyik értéke megváltozik a program a kezdőállapotból indul, és a végállapotban terminál, ezekre külön szabhatunk logikai feltételeket, előfeltételt (QQ), illetve utófeltételt (RR) kezdőáll. QQ állapotváltások végáll. RR ELTE IK, Alkalmazott modul: Programozás 1:12

Állapottér, előfeltétel és utófeltétel Pl. adjuk össze egy pozitív számokat tartalmazó vektor elemeit: AA = vv Z nn, ss Z, ii Z QQ = jj 1.. nn : vv jj = vv jj vv jj 1 nn RR = QQ ss = jj=1 vv jj ss 0, ii 1 ii nn ss ss + vv ii ii ii + 1 ELTE IK, Alkalmazott modul: Programozás 1:13

Algoritmusok Algoritmusnak nevezzük azt a műveletsorozatot, amely a feladat megoldásához vezet a program lényegi része, amely nem tartalmazza az adatok beolvasását és kiírását egy programban több algoritmus is szerepelhet, amelyek valamilyen kombinációja oldja meg a feladatot A megoldandó feladatok sokszor hasonlítanak egymásra ennek köszönhetően a megoldó algoritmusuk is hasonló, csupán néhány eltérést fedezhetünk fel közöttük sokszor a megfelelő adatok és feltételek cseréjével megkapjuk az új feladat megoldását a korábbi alapján ELTE IK, Alkalmazott modul: Programozás 1:14

Algoritmusok Az algoritmusokat ezért célszerű általánosan (absztraktan) megfogalmazni, hogy a változtatások (transzformációk) könnyen véghezvihetők legyenek ha a feladathoz találunk megoldó algoritmust, akkor azt mondjuk, hogy a feladatot visszavezettük az algoritmusra Az algoritmust általában két részre szeparáljuk: inicializálás: felhasznált változók kezdőértékeinek megadása feldolgozás (mag): műveletvégzés a bemenő adatokkal és az inicializált változókkal ELTE IK, Alkalmazott modul: Programozás 1:15

Algoritmusok Létező algoritmusokat azért célszerű használni, mert jó, bizonyított megoldását adják a feladatnak már több ezer algoritmus létezik, amelyek mind nevesítettek Az egyszerű, sorozatokra alkalmazható algoritmusokat nevezzük programozási tételeknek, ezek a következők: összegzés, számlálás lineáris keresés, bináris keresés maximum keresés, feltételes maximumkeresés elemenkénti feldolgozás Számos további feladatra adható algoritmus, pl. rendezés, mintaillesztés, adattömörítés, ELTE IK, Alkalmazott modul: Programozás 1:16

Algoritmusok Pl. a lineáris keresés (egy dd adatsorozaton keressük az első olyan elemet, amely teljesíti a ββ: DD LL feltételt, jelölje ll, hogy sikerült-e megtalálni, és iinnnn a helyét a sorozatban): AA = dd DD nn, iiiiii Z, ll: LL QQ = jj 1.. nn : dd jj = dd jj RR = QQ ll = jj 1.. nn : ββ dd jj ll iiiiii 1.. nn ββ dd iiiiii jj 1.. iiiiii 1 : ββ dd jj ll, ii 1 ll ii nn ll ββ dd ii, iiiiii ii ii ii + 1 ELTE IK, Alkalmazott modul: Programozás 1:17

A programozási nyelv Az adat-, illetve utasításabsztrakciót megvalósító eszközt nevezzük programozási nyelvnek egy adott programozási nyelven megírt programkódot nevezünk a program forráskódjának (source code) a programozási nyelv meghatározza az absztrakció szintjét, a használható típusok és utasítások halmazát egy adott nyelvre rögzítettek, ám a legtöbb nyelvben a programozó által kiterjeszthetőek a nyelvet meghatározza a célja, vagyis milyen feladatkörre alkalmazható, továbbá a nyelv rendelkezik egy kifejezőerővel, azaz milyen összetett számításokat képes kifejezni ELTE IK, Alkalmazott modul: Programozás 1:18

A programozási nyelv A programozási nyelvek osztályozása: alacsony szintű (assembly): a gépi kódot egyszerűsíti szövegszerűre, de nem biztosít absztrakciót, pl.: data segment ; adatok number dw -5 ; változó létrehozása data ends code segment ; utasítások mov ax, number ; regiszterbe helyezése cmp ax, 0 ; regiszterérték összehasonlítása jge label1 ; ugrás, amennyiben nem negatív mov cx, 0 sub cx, ax ; pozitívvá alakítás kivonással ELTE IK, Alkalmazott modul: Programozás 1:19

A programozási nyelv magas szintű: a gépi architektúrától független utasításkészlettel, nagyobb kifejező erővel rendelkezik lehetőséget ad az utasítás- és adatabsztrakcióra egy egyszerű reprezentációját adja az alacsony szintű kódnak pl.: int main(){ int number = -5; // változó létrehozása if (number < 0) // ha negatív number = -number; // ellentettre váltás } ELTE IK, Alkalmazott modul: Programozás 1:20

Programkód átalakítás A programozási nyelven megírt kódot át kell alakítani a processzor számára értelmezhetővé, ennek módszerei: fordítás, vagy szerkesztés (compilation): a kódot előzetesen lefordítjuk gépi kódra, és ezt az állományt futtatjuk a program gyorsan futtatható, de gépfüggő (pl. nem indul más operációs rendszeren) a műveletet a fordítóprogram (compiler) végzi pl.: C, C++, Ada, Pascal, Eiffel, Haskell, Visual Basic értelmezés (interpretation): a programkódot a futtatás közben alakítjuk át gépi kóddá a program gépfüggetlen, de lassú a futtatása ELTE IK, Alkalmazott modul: Programozás 1:21

Programkód átalakítás ezt a műveletet az értelmező (interpreter) végzi, amelynek a futtatás helyén rendelkezésre kell állnia pl.: HTML, PHP, JavaScript, Perl, Lisp, MATLAB futásidejű fordítás (just-in-time compilation): a fordítás egy része előre megtörténik egy gépfüggetlen, de alacsony szintű, köztes nyelvre (intermediate language) a futtatásakor kerül értelmezésre a köztes nyelvű kód, ezt az úgynevezett virtuális gép végzi pl.: Smalltalk, Java,.NET (C#, VB.NET, ) ELTE IK, Alkalmazott modul: Programozás 1:22

Programkód átalakítás A programkód átalakítása rendszerint több lépésben történik, magasabb szintű nyelv esetén először alacsonyabb szintű kód, majd abból gépi kód készül A programkód tartalmazhat hibákat, amelyeket két kategóriába sorolunk: szintaktikai, vagy elemzési hibák (syntax error): a programkód szerkezete helytelen, pl. hibás utasításnév, hivatkozás, zárójelezés, szemantikai, vagy értelmezési hibák (semantic error): az érték változásával, a műveletek végrehajtásával bekövetkező hibák, pl. 0-val történő osztás, hibás memóriacím hivatkozás, ELTE IK, Alkalmazott modul: Programozás 1:23

Programkód átalakítás A programhibákról az átalakítás során a lehető legpontosabb információt kapjuk (lehetséges ok és hely megadásával) a fordítás során a szintaktikus hibák előre kiszűrhetőek, a szemantikus hibák nagy része azonban futtatáskor léphet fel értelmezés esetén csak futtatáskor szembesülünk a hibákkal A további programhibák ellenőrzését teszteléssel végezhetjük a statikus tesztelés során a programkódot vizsgáljuk át a dinamikus tesztelés során futás közben keressük a hibákat A programfejlesztői környezetek megadják a nyomkövetés (debug) lehetőségét is (futás közben végigkövethetjük a kódot) ELTE IK, Alkalmazott modul: Programozás 1:24

Programkód transzformáció magas szintű programkód fordítás / értelmezés alacsony szintű kód fordítási hibák futtatás gépi kód futtatott kód futtatási hibák ELTE IK, Alkalmazott modul: Programozás 1:25

A szoftverfejlesztés folyamata A szoftverfejlesztés a kódoláson túl több lépésből áll, amely függ a feladat bonyolultságától is: 1. A feladatot elemezni kell, és megadni a formális megfelelőjét, vagyis a specifikációt 2. A specifikációt alapján megtervezhető a program, amely egyszerű feladatnál az absztrakt program, míg bonyolult feladatnál a programterv elkészítésével jár, amelyből elállítható a programmodell (egyszerűsített célprogram) 3. A tervet implementáljuk a megfelelő programozási nyelven 4. Az implementált programot, illetve a programkódot tesztelésnek vetjük alá, ami módosításokat eredményezhet az implementációban (vagy a korábbi fázisokban) ELTE IK, Alkalmazott modul: Programozás 1:26

A szoftverfejlesztés folyamata egyszerű feladat specifikáció absztrakt program feladat elemzés tervezés implementálás bonyolult feladat specifikáció programterv programmodell program tesztelés ELTE IK, Alkalmazott modul: Programozás 1:27

A feladat elemzése és tervezése Önmagában a feladat elemzése is nagyban meghatározza a programfejlesztés folyamatát, ennek két formája: felülről lefelé (top-down): a főfeladatot részfeladatokra, majd azokat további részfeladatokra bontjuk alulról felfelé (bottom-up): a feladatban szereplő egységeket határozzuk meg, majd azokat kombináljuk A tervezés során egy nyelv-független vázát kell elkészítenünk a szoftvernek, amely megadja annak közeli működését lehet formális, vagy informális modell használhatunk modellező eszközt (pl. stuktogram), vagy nyelvet (pl. UML) ELTE IK, Alkalmazott modul: Programozás 1:28

Tesztelés A tesztelés annak ellenőrzése, hogy a program teljesíti-e az előírt funkcionalitást, illetve minőségi elvárásokat célja elsősorban a futási idejű hibák, működési rendellenességek keresése a tesztelés módja szerint lehet: fekete doboz tesztelés: a tesztelendő programrész ismeretlen, csak a hiba voltát fedezzük fel fehér doboz tesztelés: a programrész teljes mértékben ismert, tehát így a hiba helyét is megtalálhatjuk a tesztelés módszere lehet statikus (kód kiértékelés és ellenőrzés), illetve dinamikus (futtatás adott tesztesetekkel) ELTE IK, Alkalmazott modul: Programozás 1:29

A szoftverfejlesztés optimalizálása A szoftverfejlesztés során a legfőbb cél, hogy a kész program megfeleljen a funkcionális és minőségi követelményeknek emellett, a fejlesztők számára fontos, hogy a kész szoftver fejlesztése a lehető legoptimálisabb legyen A szoftverek tervezésének és programozásának módszerét nevezzük programozási paradigmának meghatározza a programozási stílust, az absztrakciós szintet meghatározza az alkalmazható programozási nyelvek körét is, és fordítva sok programozási nyelv több paradigmát is támogatnak, ezek a multiparadigma nyelvek ELTE IK, Alkalmazott modul: Programozás 1:30

Programozási paradigmák A paradigmák csoportosítása A programozási paradigmákat két csoportba soroljuk: imperatív: a programot állapotváltozások sorozatával írja le az utasításokat szekvenciálisan hajtja végre megfelel a gépi szintű végrehajtásnak deklaratív: a program a tartalmát, megjelenését írja le, nem pedig a funkció végrehajtásának módját nem alkalmaz változókat, csak konstans értékeket az utasításokat nem feltétlenül szekvenciálisan hajtja végre, automatikusan párhuzamosít magasabb szintű kifejezőerővel rendelkezik ELTE IK, Alkalmazott modul: Programozás 1:31

Programozási paradigmák A jelentősebb paradigmák csak adatstruktúrák tartományleíró rekord Turing-teljes λ-kalkulus eljárás állapot ekvivalencia funkcionális relációs (logikai) adatfolyam folyam-alapú deklaratív procedurális lokalizáció strukturált öröklődés objektum-orientált imperatív ELTE IK, Alkalmazott modul: Programozás 1:32

Programozási paradigmák Procedurális programozás Procedurális (Procedural): a programot alprogramokra (subroutine) bontja, és minden alprogram meghatározott részfeladatot végez el az alprogramoknak két típusa lehet: eljárás (procedure): valamilyen utasítássorozatot futtat, végeredmény nélkül függvény (function): valamilyen matematikai számítást végez el, és megadja annak eredményét az alprogramok programkonstrukciókkal épülnek fel, meghívhatnak más alprogramokat, és kommunikálhatnak velük ELTE IK, Alkalmazott modul: Programozás 1:33

Programozási paradigmák Procedurális programozás a vezérlést a főprogram szolgáltatja, amely kezeli a teljes programban jelen lévő adatokat nyelvek: Fortran, C, BASIC, Pascal pl. (C++, vektor összegzése függvénnyel): int Sum(vector<int> values){ // a függvény paraméterben megkapja a vektort int sum = 0; for (int i = 0; i < value.size(); i++) sum = sum + values[i]; // ciklussal hozzávesszük ez elemeket return sum; // visszatérési érték az összeg } ELTE IK, Alkalmazott modul: Programozás 1:34

Programozási paradigmák Procedurális programozás pl. (Fortran, tömb átlaga): implicit none integer :: number_of_points real, dimension(:), allocatable :: points real :: average_points=0. read (*,*) number_of_points allocate (points(number_of_points)) read (*,*) points if (number_of_points > 0) average_points = sum(points)/number_of_points deallocate (points) write (*,'(''Average = '', 1g12.4)') average_points ELTE IK, Alkalmazott modul: Programozás 1:35

Programozási paradigmák Procedurális programozás pl. (Maple, szám faktoriálisa): myfac := proc(n::nonnegint) local out, i; out := 1; for i from 2 to n do out := out * i end do; out end proc; ugyanez lambda-kifejezés segítségével (funkcionálisan): myfac := n -> product( i, i = 1..n ); ELTE IK, Alkalmazott modul: Programozás 1:36

Programozási paradigmák Strukturált programozás Strukturált (Structured): a program részegységekre (csomagokra, vagy blokkokra) tagolódik, minden egység rendelkezik belépési ponttal, és kilépési ponttal a programegységeknek van egy kívülről látható része (interfész), és egy belső megvalósítása (implementáció) a programban használt adatstruktúrák a programegységeknek megfelelően strukturálódnak támogatja a kivételkezelést, tiltja a programkódban történő ugrást (goto) nyelvek: Pascal, C, ADA ELTE IK, Alkalmazott modul: Programozás 1:37

Programozási paradigmák Strukturált programozás pl. (Ada, verem csomag): package STACK_T is type Stack is limited private; procedure Push (v: in out Stack; e: Value); procedure Pop (v: in out Stack); function Top (v: Stack) return Value; private type Node; type Pointer is access Node; type Node is record data: Value; next: Pointer := null; end record; end STACK_T; ELTE IK, Alkalmazott modul: Programozás 1:38

Programozási paradigmák Strukturált programozás pl. (C++, verem típus): class Stack { private: // rejtett rész, implementáció int* values; // attribútumok int top; public: // látható rész, interfész Stack(){ values = new int[10]; top = 0; } // konstruktor ~Stack() { delete[] values; } // destruktor void Push(int v) { // metódus if (top < 10) { values[top] = v; top++; } } }; ELTE IK, Alkalmazott modul: Programozás 1:39

Programozási paradigmák Objektum-orientált programozás Objektum-orientált (Object-oriented): a feladat megoldásában az alulról-felfelé megközelítést alkalmazza, alapja az egységbe zárás és az öröklődés a programot egymással kommunikáló objektumok alkotják, amelyek valamilyen relációban állnak egymással manapság a legnépszerűbb programozási paradigma, a programozási nyelvek jelentős része támogatja objektumorientált támogatással rendelkező nyelvek: C++, Objective-C, Matlab, PHP, Python, Perl, tisztán objektumorientált nyelvek: Smalltalk, Java, C#, Eiffel, Ruby, ELTE IK, Alkalmazott modul: Programozás 1:40

Programozási paradigmák Objektum-orientált programozás pl. (C++, grafikus felületű ablak): class DemoWindow : public QWidget { // ablak osztály public: DemoWindow(QWidget* parent = 0) { // a konstruktor megkaphatja a szülőt setbasesize(200, 120); setwindowtitle("demo Window"); qbutton = new QPushButton("Quit", this); // gomb példányosítása } private: QPushButton* qbutton; // gomb az ablakon }; ELTE IK, Alkalmazott modul: Programozás 1:41

Programozási paradigmák Objektum-orientált programozás pl. (Java, mobil alkalmazás vezérlője): public class HelloWorld extends MIDlet // a MIDlet osztály leszármazottja implements CommandListener { private Form form; // implementáció private Command exitcommand; } public HelloWorld() { // konstruktor form = new Form("Welcome!", new Item[] { new StringItem("","Hello World!") }); form.addcommand(exitcommand); form.setcommandlistener(this); } ELTE IK, Alkalmazott modul: Programozás 1:42