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

Hasonló dokumentumok
Bánsághi Anna 2014 Bánsághi Anna 1 of 31

Alkalmazott modul: Programozás 10. előadás. Objektumorientált programozás: tervezés és megvalósítás

Szoftvertechnológia 3. előadás. Objektumorientált tervezés: alapismeretek. Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

Bevezetés a Programozásba II 3. előadás. Biztonságos adattípusok megvalósítása

Bevezetés a Programozásba II 3. előadás. Biztonságos adattípusok megvalósítása. Biztonságos adattípusok megvalósítása

Objektumelvű programozás

Bevezetés a Programozásba II 2. előadás. Adattípusok megvalósítása egységbe zárással. Adattípusok megvalósítása egységbe zárással

Alkalmazott Modul III 4. előadás. Objektumorientált programozás: objektumok és osztályok. Procedurális programozás Koncepció

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

Informatikai Kar. 3. fejezet. alapismeretek. Giachetta Roberto

Programozási technológia 1.

Programfejlesztési Modellek

UML (Unified Modelling Language)

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

Alkalmazott modul: Programozás 11. előadás. Objektumorientált programozás: öröklődés

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

Programozás 1. 2.gyakorlat

Java VI. Miskolci Egyetem Általános Informatikai Tanszék. Utolsó módosítás: Ficsor Lajos. Java VI.: Öröklődés JAVA6 / 1

Magas szintű adatmodellek Egyed/kapcsolat modell I.

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

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

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

Programozási technológia 1.

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

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

Szakterületi modell A fogalmak megjelenítése. 9. fejezet Applying UML and Patterns Craig Larman

Adatstruktúrák, algoritmusok, objektumok

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

Interfészek. PPT 2007/2008 tavasz.

Programozás módszertan p.1/46

Előzmények

OOP. Alapelvek Elek Tibor

Objektumorientált paradigma és programfejlesztés Bevezető

Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban

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

S01-7 Komponens alapú szoftverfejlesztés 1

Szoftvertechnológia 4. előadás. Objektumorientált tervezés: általánosítás. Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

Objektumorientált paradigma és a programfejlesztés

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda IRT 6. kurzus

Modellinformációk szabványos cseréje. Papp Ágnes, Debreceni Egyetem EFK

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

Programozási nyelvek Java

Szoftvertechnológia ellenőrző kérdések 2005

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

Programozási alapismeretek 4.

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

Bevezetés, a C++ osztályok. Pere László

01. gyakorlat - Projektalapítás

Programozási technológia

Programozási technológia

III. OOP (objektumok, osztályok)

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

Objektum-orientált programozás

Komplex záróvizsga témakörök Gazdaságinformatikus szak Pénzintézeti informatikus szakirány 2018

OOP: Java 8.Gy: Abstract osztályok, interfészek

OOP #14 (referencia-elv)

OOP és UML Áttekintés

Generikus osztályok, gyűjtemények és algoritmusok

Osztályok. 4. gyakorlat

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

A SZOFTVERTECHNOLÓGIA ALAPJAI

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

Osztály és objektum fogalma

Programozás I. 2. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

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

és az instanceof operátor

Java grafikai lehetőségek

Információtartalom vázlata

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

3. Beadandó feladat dokumentáció

Már megismert fogalmak áttekintése

Eseményvezérelt alkalmazások fejlesztése I 11. előadás. Szoftverek tesztelése

Bánsághi Anna 1 of 67

A dokumentáció felépítése

I. Objektumorientált programozás

Objektum orientált programozás Bevezetés

Név: Neptun kód: Pontszám:

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

Bevezetés a programozásba előadás: Öröklődés

ISA szimulátor objektum-orientált modell (C++)

STL gyakorlat C++ Izsó Tamás május 9. Izsó Tamás STL gyakorlat/ 1

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

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

Programozási technológia

Programozási technikák Pál László. Sapientia EMTE, Csíkszereda, 2009/2010

Felhasználó által definiált adattípus

Bevezetés a Programozásba II 4. előadás. Adattípusok hordozhatósága

Alkalmazott modul: Programozás 6. előadás. Strukturált programozás: újrafelhasználható adattípusok

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

Pénzügyi algoritmusok

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

HASZNÁLATI ESET DIAGRAM (USE CASE DIAGRAM)

Programozási nyelvek Java

Unit Teszt. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Unit Teszt / 22

Programozási nyelvek Java

Egyetemi könyvtári nyilvántartó rendszer

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Bevezetés a Programozásba II 12. előadás. Adatszerkezetek alkalmazása (Standard Template Library)

Bevezetés a Python programozási nyelvbe

Átírás:

Pázmány Péter Katolikus Egyetem Információs Technológiai és Bionikai Kar Bevezetés a Programozásba II 5. előadás Objektumorientált programozás és tervezés 2014.03.10. Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto

Objektumorientált programozás Kialakulása A procedurális programozási paradigma összetett alkalmazások esetén számos korlátozást tartalmaz: a program nem tagolható kellő mértékben az adatok élettartama nem eléggé testre szabható a feladat módosítása utóhatásokkal rendelkezhet Ezek megoldása a felelősség továbbadása programegységeket alakítunk ki, amely rendelkeznek saját adataikkal és műveleteikkel, ezeket egységbe zárjuk, megvalósításukat elrejtjük a feladat megoldását a programegységek együttműködésével, kommunikációjával valósítjuk meg PPKE ITK, Bevezetés a programozásba II 5:2

Objektumorientált programozás Objektumok Objektumnak (object) nevezzük a feladat egy adott tárgyköréért felelős programegységet, amely tartalmazza a tárgykör megvalósításához szükséges adatokat, valamint műveleteket az objektum működése során saját adatait manipulálja, műveleteit futtatja és kommunikál a többi objektummal pl.: egy téglalapot kezelhetünk objektumként adatai: szélessége és magassága műveletei: területlekérdezés, kirajzolás pl.: egy egyetemi hallgatót kezelhetünk objektumként adatai: neve, azonosítója, kurzusai műveletei: kurzus felvétele, teljesítése PPKE ITK, Bevezetés a programozásba II 5:3

Objektumorientált programozás Objektumok állapotai Az objektumok állapottal (state) rendelkeznek, ahol az állapot mezőértékeinek összessége két objektum állapota ugyanaz, ha értékeik megegyeznek (ettől függetlenül az objektumok különbözőek) az állapot valamilyen esemény (műveletvégzés, kommunikáció) hatására változhat meg A program teljes állapotát a benne lévő objektumok összállapota adja meg Az objektumok életciklussal rendelkeznek, létrejönnek (a konstruktorral), működést hajtanak végre (további műveletekkel), majd megsemmisülnek PPKE ITK, Bevezetés a programozásba II 5:4

Objektumorientált programozás Objektum-orientált programok Objektum-orientáltnak nevezzük azt a programot, amely egymással kommunikáló objektumok összessége alkot minden adat egy objektumhoz tartozik, és minden algoritmus egy objektumhoz rendelt tevékenység, nincsenek globális adatok, vagy globális algoritmusok a program így kellő tagoltságot kap az objektumok mentén az adatok élettartama így összekapcsolható az objektum élettartamával a módosítások általában az objektum belsejében véghezvihetők, ami nem befolyásolja a többi objektumot, így nem szükséges jelentősen átalakítani a programot PPKE ITK, Bevezetés a programozásba II 5:5

Objektumorientált programozás Objektum-orientált programok Az objektum-orientáltság öt alaptényezője: absztrakció: az objektum reprezentációs szintjének megválasztása enkapszuláció: az adatok és alprogramok egységbe zárása, a belső működés elrejtése nyílt rekurzió: az objektum mindig látja saját magát, eléri műveleteit és adatait öröklődés: az objektum tulajdonságainak átruházása más objektumokra polimorfizmus és dinamikus kötés: a műveletek futási időben történő működéshez kötése PPKE ITK, Bevezetés a programozásba II 5:6

Objektumorientált programozás Osztályok Az objektumok viselkedési mintáját az osztály tartalmazza, az osztályból példányosíthatjuk az objektumokat tehát az osztály az objektum típusa Az osztályban tárolt adatokat attribútumoknak, vagy mezőknek (field), az általa elvégezhető műveleteket metódusoknak (method) nevezzük, együtt ezek az osztály tagjainak (member) Az osztály tagjainak szabályozhatjuk a láthatóságát, a kívülről látható részét interfésznek, a kívülről nem látható részét implementációnak nevezzük a metódusok megvalósítása az implementáció része, tehát más osztályok számára a működés mindig ismeretlen PPKE ITK, Bevezetés a programozásba II 5:7

Objektumorientált programozás Osztályok megvalósítása Az osztályokat minden nyelv más formában valósítja meg, de az általános jellemzőket megtartja A C++ programozási nyelv támogatja az objektumorientált programozást, noha alapvetően procedurális A C++ osztály szerkezete: class/struct <osztálynév> { public/private: <típus> <mezőnév>; <típus> <metódusnév> ([ <paraméterek> ]) { } }; PPKE ITK, Bevezetés a programozásba II 5:8

Szoftverek tervezése A program szerkezetének és működésének megtervezések az osztályok és objektumok szempontjából történik a szerkezeti tervezésnél az osztályok tagjait, azok kapcsolatait, illetve elhelyezkedését a programban, ez alkotja a statikus tervet a programfutási tervezésnél az osztályok időbeli működését, az objektumok állapotainak változását modellezzük, ez a dinamikus tervezés Az objektumorientált tervezés eszköze a Unified Modeling Language (UML), amelyben 13 diagramtípus segítségével tervezhető meg a program szerkezete és működése PPKE ITK, Bevezetés a programozásba II 5:9

Az UML nyelv Az UML segítségével szabványos módon lehet rendszerek terveit elkészíteni alkalmas üzleti folyamatok és programfunkciók, és adatbázis-sémák leírására a modellek automatikusan kódba fejthetőek, tehát tetszőleges objektumorientált nyelvre átültethetőek a nyelv kiterjeszthető, és lehetőséget ad a személyesítésre a nyelv leginkább diagramok keretében mutatkozik meg, noha a nyelv nem a diagramokat magukat adja meg, hanem a diagramok által reprezentált modell specifikációját A legfrissebb változat a 2.4.1-es szabvány PPKE ITK, Bevezetés a programozásba II 5:10

Az UML nyelv Az UML a szoftverrendszert a következő szempontok szerint tudja jellemezni: funkcionális modell: a szoftver funkcionális követelményeit adja meg és a felhasználóval való interaktivitást pl.: felhasználói esetek diagramja, kihelyezési diagram szerkezeti modell: a program felépítését adja meg, milyen osztályok, objektumok, relációk alkotják a programot pl.: osztálydiagram, objektumdiagram dinamikus modell: a program működésének lefolyását, az objektumok együttműködésének módját ábrázolja pl.: állapotdiagram, szekvenciadiagram PPKE ITK, Bevezetés a programozásba II 5:11

Az UML nyelv diagram szerkezeti diagram viselkedési diagram Komponens Kihelyezési Csomag Osztály Objektum Felhasználói esetek Állapot Aktivációs interakciós Összetett struktúra Szekvencia Időzítés Kommunikációs Interakciós áttekintés PPKE ITK, Bevezetés a programozásba II 5:12

Az UML nyelv A szoftverfejlesztés különböző szakaszaiban az UML különböző diagramjait kell alkalmaznunk: 1. elemzés: felhasználói esetek, komponens, kihelyezési 2. tervezés: statikus tervezés: csomag, osztály, objektum, komponens dinamikus tervezés: állapot, szekvencia, aktivációs, interakciós áttekintési, kommunikációs 3. tesztelés: időzítés A későbbi fázisokban a korábban létrehozott diagramok újra alkalmazhatóak, tovább finomíthatóak PPKE ITK, Bevezetés a programozásba II 5:13

Az osztálydiagram Az osztálydiagram a programban szereplő osztályok szerkezetét, és a közöttük lévő kapcsolatokat definiálja az osztálynak megadjuk a nevét, valamint mezőinek és metódusainak halmazát (típusokkal, paraméterekkel) megadjuk a tagok láthatóságát látható (+), illetve rejtett (-) jelölésekkel <osztálynév>... - <mezőnév> :<típus>... + <metódusnév>(<paraméterek>) :<típus> PPKE ITK, Bevezetés a programozásba II 5:14

Példa Feladat: Valósítsuk meg a téglalap (Rectangle) osztályt, amely utólag átméretezhető, és le lehet kérdezni a területét és kerületét. a téglalapnak a feladat alapján elég a méreteit letárolni (_height, _width), amelyek valós számok lesznek ezeket a későbbiekben lekérdezhetjük (getwidth(), getheight()), vagy felülírhatjuk (setwidth(double), setheight(double)) lehetőséget adunk a terület, illetve került lekérdezésére (area(), perimeter()) lehetőséget adunk a téglalap létrehozására a méretek alapján (Rectangle(double, double)) PPKE ITK, Bevezetés a programozásba II 5:15

Példa Tervezés: Rectangle - _width :double - _height :double + Rectangle(double, double) + area() :double + perimeter() :double + getheight() :double + getwidth() :double + setheight(double) :void + setwidth(double) :void PPKE ITK, Bevezetés a programozásba II 5:16

Példa Megoldás: struct Rectangle // téglalap típusa { private: double _width; // szélesség double _height; // magasság public: // látható rész Rectangle(double w, double h) { } // 2 paraméteres konstruktor művelet double area(); // téglalap területe double perimeter(); // téglalap kerülete }; PPKE ITK, Bevezetés a programozásba II 5:17

A tervezési folyamat A tervezés során a program szerkezetét általában iterálva, több lépésben határozzuk meg 1. elemezzük a feladatot, feltérképezzük az igényeket, követelményeket, a felhasználói eseteket 2. a követelményekben azonosítjuk a lehetséges tárgyköröket, amelyekhez az osztályokat rendeljük 3. megtervezzük az osztályok felületét, kapcsolódási pontjait más osztályokhoz 4. megtervezzük az osztályok belső reprezentációját, működési elveit (algoritmusait) 5. megtervezzük az osztályok viselkedési módját, végrehajtásai folyamatát, állapotváltozásait iterálva PPKE ITK, Bevezetés a programozásba II 5:18

Az osztálydiagram A lépések során az osztálydiagramot is tovább pontosítjuk feltételeket szabhatunk a mezőkre, metódusokra a { } jelzéssel (speciálisan a lekérdező műveleteket a {query} jelzéssel jelölhetjük) további tulajdonságokat jelölhetjük, illetve csoportba foglalásokat végezhetünk a << >> jelzéssel <sablon> <osztálynév> - <mezőnév> :<típus> {<felvétel>} + <metódusnév>() :<típus> {query} PPKE ITK, Bevezetés a programozásba II 5:19

Példa Feladat: Valósítsuk meg a téglalap (Rectangle) osztályt, amely utólag átméretezhető, és le lehet kérdezni a területét. «struct» Rectangle - _width :double = 0 {_width >= 0} - _height :double = 0 {_height >= 0} + Rectangle() + Rectangle(double, double) + area() :double {query} + perimeter() :double {query} + getwidth() :double {query} + getheight() :double {query} + setwidth(double) :void + setheight(double) :void «friend» + operator>>(istream&, Rectangle&) :istream& + operator<<(ostream&, Rectangle) :ostream& PPKE ITK, Bevezetés a programozásba II 5:20

Objektumok közötti kapcsolatok Az alkalmazásokban rendszerint több osztály szerepel, amelyek objektumai kommunikálhatnak egymással, ezért az osztályok között kapcsolatokat állíthatunk fel a legegyszerűbb kapcsolat az egyszerű kommunikáció (asszociáció) az osztály meghívja más osztály (látható) metódusát, vagy bármilyen módon hivatkozik rá a műveletek végrehajtása során a kapcsolat a célosztály felé irányított <osztálynév> <relációnév/metódusnév> <osztálynév> PPKE ITK, Bevezetés a programozásba II 5:21

Példa Feladat: Készítsünk grafikus felületű alkalmazást, amelyben a képernyő tetszőleges pontján el tudunk helyezni egy új téglalapot (bal kattintással), majd annak színét tudjuk módosítani (jobb kattintással), amelyiket elhelyezkedik az egér. Rectangle - _r :int - _g :int - _b :int Color + Color() + Color(int, int, int) + getr() :int {query} + getg() :int {query} + getb() :int {query} + setr(int) :void + setg(int) :void + setb(int) :void «friend» + operator<<(genv::canvas&, Color) :genv::canvas& - _color :Color - _x :int - _y :int - _width :int - _height :int + Rectangle(int, int, int, int) + Rectangle(int, int, int, int, int, int, int) + area() :int {query} + perimeter() :int {query} + contains(int, int) :bool {query} + getwidth() :int {query} + getheight() :int {query} + setcolor(color) :void + setcolor(int, int, int) :void + draw() :void {query} «friend» + operator<<(genv::canvas&, Rectangle) :genv::canvas& PPKE ITK, Bevezetés a programozásba II 5:22