Programozási technológia 1.

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

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

Adatbázis rendszerek. dr. Siki Zoltán

Adatbázis-kezelő rendszerek. dr. Siki Zoltán

Objektumelvű alkalmazások fejlesztése 6. gyakorlat. Öröklődés, polimorfizmus. Öröklődés Kódismétlődés objektum-orientált szerkezetben

Bevezetés a Programozásba II 5. előadás. Objektumorientált programozás és tervezés

Objektum orientált programozás Bevezetés

Programozás módszertan p.1/46

Absztrakció. Objektum orientált programozás Bevezetés. Általános Informatikai Tanszék Utolsó módosítás:

Bánsághi Anna 2014 Bánsághi Anna 1 of 31

Objektumorientált paradigma és a programfejlesztés

Objektumorientált paradigma és programfejlesztés Bevezető

OOP. Alapelvek Elek Tibor

Már megismert fogalmak áttekintése

Adatstruktúrák, algoritmusok, objektumok

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

Programozás s 2. Alapok

Funkcionális és logikai programozás. { Márton Gyöngyvér, 2012} { Sapientia, Erdélyi Magyar Tudományegyetem }

Adatstruktúrák Algoritmusok Objektumok

Nyékyné Gaizler Judit 2.1. A jelkészlet ffl 29 Az ASCII kód ffl 31 Az EBCDIC kód ffl 31 Az ISO 8859 család ffl 32 A Unicode szabvány ffl 32

Interfészek. PPT 2007/2008 tavasz.

A programozás alapjai előadás. Amiről szólesz: A tárgy címe: A programozás alapjai

Java programozási nyelv 5. rész Osztályok III.

Programozás alapjai (ANSI C)

GENERIKUS PROGRAMOZÁS Osztálysablonok, Általános felépítésű függvények, Függvénynevek túlterhelése és. Függvénysablonok

ME Szoftverfejlesztés

Programozási nyelvek a közoktatásban alapfogalmak I. előadás

Adatstruktúrák, algoritmusok, objektumok

Programozás III. - NGB_IN001_3

S0-02 Típusmodellek (Programozás elmélet)

Programozási nyelvek 6. előadás

Történeti áttekintés

Programozástanítási célok teljesítése a Logóval és a Scratch-csel

SZOFTVERFEJLESZTÉSI TECHNOLÓGIÁK

Bánsághi Anna 2014 Bánsághi Anna 1 of 33

és az instanceof operátor

Objektum orientált alapelvek

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Programozás. Objektum Orientált Programozás (OOP) Alapfogalmak. Fodor Attila

Bevezetés. Dr. Iványi Péter

Models are not right or wrong; they are more or less useful.

Bevezetés a Programozásba II 8. előadás. Polimorfizmus Giachetta Roberto

Szoftvertechnológia 8. előadás. Szoftverrendszerek tervezése. Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

Webes alkalmazások fejlesztése

Programozási alapismeretek 4.

Objektumelvű programozás

Számítógép architektúra

OOP #1 (Bevezetés) v :39:00. Eszterházy Károly Főiskola Információtechnológia tsz. Hernyák Zoltán adj.

NC program ellenorzo szimulátor fejlesztése objektumorientált módszerrel

III. Alapfogalmak és tervezési módszertan SystemC-ben

Osztálytervezés és implementációs ajánlások

Osztálytervezés és implementációs ajánlások

Magas szintű adatmodellek Egyed/kapcsolat modell I.

C++ programozási nyelv

Java programozási nyelv 9. rész Kivételkezelés

A TANTÁRGY ADATLAPJA

Bevezetés az informatikába

Objektum orientáltság alapjai A Java nyelv Fordítás - futtatás

Alkalmazott Modul III 6. előadás. Objektumorientált programozás: öröklődés és polimorfizmus

Gépészeti rendszertechnika (NGB_KV002_1)

VII. Keretalapú ismeretábrázolás

FUNKCIONÁLIS PROGRAMOZÁS

Szoftver-technológia II. Modulok és OOP. Irodalom

Programozási technológia

Programozás. Bevezetés. Fodor Attila. Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék

A szemantikus elemzés helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok

Mindenki abból a három tantárgyból tesz szigorlatot, amelyet hallgatott.

Bevezetés a Python programozási nyelvbe

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

Egy Erlang refaktor lépés: Függvényparaméterek összevonása tuple-ba

Szoftverarchitektúrák 3. előadás (második fele) Fornai Viktor

Oktatási segédlet 2014

ERLANG PROGRAMOK TRANSZFORMÁCI CIÓJA ERLANG

Programozás elmélete

Programozási nyelvek Java

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

S01-7 Komponens alapú szoftverfejlesztés 1

Programozás II. 2. gyakorlat Áttérés C-ről C++-ra

Kedvenc Ingyenes editorok avagy milyen a programozó jobbkeze? PSPAD editor DEVPHP IDE

Szoftvertechnológia 8. előadás. Szoftverrendszerek tervezése Giachetta Roberto

Programozás. C++ osztályok. Fodor Attila. Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék

Inczédy György Középiskola, Szakiskola és Kollégium Nyíregyháza, Árok u. 53. TANMENET. Informatika szakmacsoport

Informatikai alkalmazások - levelező

Java programozási nyelv

Bevezetés a programozásba II. 8. Előadás: Osztályok, objektumok, osztályszintű metódusok

Programfejlesztési Modellek

Adatstruktúrák, algoritmusok, objektumok

Az iskolai rendszerű képzésben az összefüggő szakmai gyakorlat időtartama. 10. évfolyam Adatbázis- és szoftverfejlesztés gyakorlat 50 óra

Miről lesz ma szó? A PROGAMOZÁS ALAPJAI 1. Bemutatkozás. Bemutatkozás. Bemutatkozás. Bemutatkozás. 1. előadás. A tárgy címe: A programozás alapjai 1

Interfészek. Programozás II. előadás. Szénási Sándor.

Programozási nyelvek Java

Objektum orientált software fejlesztés (Bevezetés)

Logikai programozás ADMINISZTRATÍV KÉRDÉSEK KÖVETELMÉNYRENDSZER FŐBB PONTOK NÉHÁNY BIZTATÓ SZÓ

Szoftver-technológia I.

Programozási Paradigmák

Az adatbázisrendszerek világa

Programozási technológia

Abstract osztályok és interface-ek. 7-dik gyakorlat

Komponens alapú fejlesztés

Átírás:

ngleton Sin ELTE-IK + st: boo ol Programozási technológia 1. 2. gyakorlat: Programozási paradigmák, az objektumorientált tált programozás Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto p p

Programozási paradigmák A szoftverfejlesztés során a legfőbb cél, hogy a kész programrendszer 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 szoftverfejlesztési modell meghatározza a fejlesztés módját és menetét azt nem, hogy milyen legyen a fejlesztés stílusa, milyen absztrakciós szinten történjen a megvalósítás, hiszen ezek a tényezők nem határozzák meg a szoftvert önmagát, csak a fejlesztés folyamatát A szoftverek tervezésének és programozásának módszerét nevezzük programozási paradigmának 2

Programozási paradigmák A paradigma meghatározza a programozás stílusát és az absztrakciós szintet Vannak általános célú, és szűk körben alkalmazott paradigmák, minden adott feladatra megtalálható a legjobban alkalmazható paradigma, vagy paradigmák Általában az elemzési szakasz végén célszerű meghatározni az alkalmazni kívánt paradigmákat (egy projekten belül akár programegységenként alkalmazhatunk más paradigmát) a paradigma meghatározza az alkalmazható programozási nyelvek körét is, és fordítva egyes programozási nyelvek több paradigmát is támogatnak, így a programozási nyelv szempontjából is meghatározhatjuk 3

Elsődleges programozási paradigmák deklaratív (leíró) imperatív + st: boo ol funkcionális procedurális relációs (logikai) folyam alapú strukturált korlátozott objektumorientált 4

Elsődleges programozási paradigmák Deklaratív: a program a tartalmát, megjelenését írja le, nem pedig a funkció módját általában nem alkalmas teljes értékű programok írására, mert nem Turing teljes (azaz nem képes minden feladatot elvégezni) megszokott alkalmazási területe konfigurációs fájlok, interfész felületek programozására, ezért rendszerint kiegészítésként szolgál más paradigma használata mellett deklaratív nyelvek: XSLT (XML), HTML, XAML, SQL egyes funkcionális nyelvek is támogatják deklaratív részek írását (pl. LISP, Erlang, Prolog), illetve imperatív nyelvekben is előfordulhatnak deklaratív részek (pl. LINQ) 5

Elsődleges programozási paradigmák Funkcionális: a programfutás matematikai függvények kiértékelésének sorozata, alapja a lambda-kalkulus nincsenek benne állapotok és változó adatok, gyakori a rekurzió, könnyű a párhuzamosítás korábban csak kutatásokban alkalmazták, mostanság megjelenik a piaci szoftverekben is a nagyobb absztrakciós szint miatt magasabb az erőforrásigény, de rövidebb a programkód funkcionális nyelvek: LISP, Erlang, Clean, Haskell, R, Mathematica egyes imperatív nyelvekben lehet szimulálni függvénymutatók és lambda-függvények segítségével 6

Elsődleges programozási paradigmák Relációs, logikai: a program logikai kiértékelések sorozata, általában implikációkon keresztül a programozó feladat, hogy a program igaz legyen, és megfelelően hatékony logikai nyelvek: Prolog, Oz, Castor for C++ Korlátozott: nem a megoldás módját, hanem a megoldandó dó probléma tulajdonságait írja le, a változók kapcsolatát korlátozásokon keresztül adja meg korlátozott nyelvek: B-Prolog, CHIP, Claire imperatív nyelvek külön programkönyvtárakkal kk támogatják: Choco (Java), Disolver (C++) 7

Elsődleges programozási paradigmák Folyam alapú: a program fekete doboz jellegű alkalmazások hálózata, amelyek üzenetküldéssel kommunikálnak egymással az egyes folyamatok párhuzamosan, aszinkron módon futnak, és információs csomagokat fogadnak, illetve küldenek nyelvek: Linda, FBP Imperatív: a program utasítások sorozata, amelyek állapotváltozásokat okoznak, így a program az állapotok mentén írható le a feladat megvalósításának lépéseit írja le, azaz milyen akciók sorozatát kell végrehajtani, ezért általában kizárja a programkódban való ugrások (GOTO) lehetőségeit 8

Elsődleges programozási paradigmák Procedurális: az imperatív elv továbbfejlesztése, az utasítások eljárásokba vannak csoportosítva (a program modularizálva van), és ezen eljárások összessége oldja meg a feladatot a procedurális megközelítés előnyei: kód újrahasznosítás programkód könnyű nyomon követése, gyors áttekinthetősége a programszerkezet struktúrájának tetszőleges kialakítása procedurális nyelvek: Fortran, C, Ada, BASIC, Pascal, PHP, Python, ECMAScript 9

Elsődleges programozási paradigmák Strukturált: a procedurális programozás egy változata a programok olyan részegységekre tagolódik, egy belépési ponttal, és egy kilépési ponttal tervezésnél felülről lefelé megközelítés, azaz a fő problémát bontjuk részekre, és azokat további részekre, satöbbi a programban használt adatstruktúrák a programegységeknek megfelelően strukturálódnak Objektum-orientált: a programegységet egymással kommunikáló objektumok összessége adja, amelyek valamilyen relációban állnak egymással 10

Programozási paradigmák Vannak úgynevezett másodlagos programozási paradigmák, amelyek a programozást stílusát nagyban befolyásolják, pl.: eseményvezérelt: a programfutás mentetét az interfészeken keresztül érkező események vezérlik folyamat alapú: a programban egymással párhuzamosan futó folyamatok kommunikálnak iteratív: a feladatot iteratívan oldja meg, rekurzív hívás nélkül rekurzív: a feladatot rekurzív hívások sorozatával oldja meg sablon programozás: az adatszerkezetek sablonokon keresztül állnak össze meta programozás: a folyamatot a program metainformációs (programmanipulációs) szinten vezérli 11

Objektumorientáció Az objektumorientált programozásban a feladatot nem felülről lefelé, hanem alulról felfelé oldjuk meg, azaz azonosítjuk azon alkotóelemeket, amelyek a végrehajtásban részt vesznek, és ezek kapcsolatának, kommunikációjának módját tárjuk fel az alkotóelemek külön önálló egységeket alkotnak, amelyek adott feladatok elvégzésére alkalmasak, és belső változókkal és műveletekkel rendelkeznek, amelyekkel különböző állapotokat vehetnek fel a kommunikáció üzenetküldéseken keresztül valósul meg általában nagyobb feladatok megoldására alkalmazható, amelyek procedurális módon túl komplikáltnak bizonyulnak 12

Objektumorientáció A való világ modellezéséből indul ki Először a 60-as években tűnt fel a Simula programozási nyelvben az objektumorientált támogatás, majd a 80-as években megjelent az első teljesen objektumorientált nyelv, a SmallTalk Manapság a legnépszerűbb programozási paradigma, a programozási nyelvek jelentős része támogatja Objektumorientált tált támogatással rendelkező ő nyelvek: C++, Object-C, Ada, Object Pascal (Delphi), Common LISP, F#, Visual Basic, PHP, ECMAScript, Python, Perl, D, Visual Prolog, Objektumorientált nyelvek: Smalltalk, lk JAVA, C#, Eiffel, Ruby, 13

Objektumorientáció alkotóelemei Osztály (Class): az alkotóelemek absztrakt jellemzőit, karakterisztikáját, azaz típusát adja meg (tekinthető egy tervrajznak is, amely alapján a példányokat le lehet gyártani) megadja, milyen részekből, és értékekből állhat egy alkotóelem, és milyen tevékenységre képes (milyen műveleteket tud futtatni) tekinthető változók (konstansok) és eljárások (függvények) gyűjteményének az osztály változóit attribútumoknak, az eljárásokat pedig metódusoknak nevezzük az osztály biztosítja a program modularitását 14

Objektumorientáció alkotóelemei az osztálynak kell biztosítania egy külső felületet (export interface), amely a külvilág (a többi objektum) számára látható, és amelyen keresztül a kommunikáció lezajlik, az osztály többi részét el kell rejteni a külvilágtól pl. kutya, villamos, autó Objektum (Object): az osztály egy példánya, amely konkrét értékekkel bír, és meghatározza az egyedet ténylegesen ilyen jönnek létre és működnek a program futása során, és mindegyikük önálló állapotokkal rendelkezik egy objektumokhoz tetszőleges számú további objektum is kapcsolódhat pl. Lassie, 2025-ös Combino, AII-911-es rendszámú autó 15

Objektumorientáció alkotóelemei Öröklődés: az osztályoknál megszabhatunk általánosabb, illetve speciálisabb osztályokat, ahol a speciálisabbak rendelkeznek minden tulajdonsággal, amivel az általánosabb változat pl.: általános élőlény gerinces kutya skót juhász speciális lélegzik van gerincoszlopa ugat 16 hosszú szőrű

nternalitera ator Objektumorientáció alkotóelemei ezt a folyamatot, amikor a speciálisabb átveszi az általános jellemzőit és működését, öröklődésnek nevezzük az öröklődés két irányát specializációnak, illetve általánosításnak nevezzük, az általánosabb objektumot ősnek, a speciálisabbat leszármazottnak nevezzük (ha csak egy szint a különbség, akkor szülőnek, illetve Ingyereknek) ) általában egy szülőnek több gyereke is van, ám csak egyes esetekben e engedélyezett, e hogy egy gyereknek e e több szülője is legyen (ezt többszörös öröklődésnek nevezzük) többszörös öröklődés során a gyerek megkaphatja minden szülője minden tulajdonságát, illetve szabályozhatjuk, hogy melyik őstől melyeket kapja 17

Objektumorientáció alkotóelemei Absztrakció: az objektumok tetszőleges reprezentálása lehetővé teszi, hogy az adott problémát több szinten kezeljük, azaz az összes lehetséges tulajdonságának egy tetszőleges halmazát válasszuk ki, és azokat használjuk az ábrázolásban a reprezentációs szint megválasztása jelenti az absztrakció szintet a számunkra lényeges tulajdonságokat megtartjuk, a lényegteleneket elhagyjuk pl.: az autót ábrázolhatjuk rendszámmal, sebességgel és tömeggel, vagy ábrázolhatjuk, mint motor és karosszéria összessége, vagy akár minden egyes alkatrészét külön- külön vehetünk 18

Objektumorientáció alkotóelemei Polimorfizmus: ha egy objektum olyan osztálynak példánya, amelynek több őse is van, akkor az az objektum tekinthető bármely ősének példányaként is ezáltal lehetővé válik, hogy egy objektumnak több osztálya is legyen, és aktuálisan azt az osztályt használjuk, amely az aktuális környezetbe beleillik pl.: ha egy raktérben vegyesen akarunk autókat és motorokat elhelyezni, akkor azt mondjuk, hogy egységesek személygépjárműveket helyezünk el (amelynek mindkettő speciális esete) pl.: ha egy koordináta rendszerben köröket és négyzeteket is akarunk rajzolni, akkor egységesen geometriai alakzatokat rajzolunk 19