OOP. Alapelvek Elek Tibor



Hasonló dokumentumok
Objektum orientált programozás Bevezetés

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

Objektumorientált paradigma és a programfejlesztés

Objektum orientált alapelvek

Objektumorientált paradigma és programfejlesztés Bevezető

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

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

Programozási alapismeretek 4.

Már megismert fogalmak áttekintése

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

és az instanceof operátor

C++ programozási nyelv

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 III. - NGB_IN001_3

Adatstruktúrák, algoritmusok, objektumok

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?

Interfészek. PPT 2007/2008 tavasz.

Visual C++ osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés.

OOP #14 (referencia-elv)

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

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

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

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

C++ programozási nyelv Struktúrák a C++ nyelvben

Programozás módszertan p.1/46

Objektum orientált kiterjesztés A+ programozási nyelvhez

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

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

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

Programozási nyelvek Java

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

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

Programozási nyelvek Java

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

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

Öröklés és Polimorfizmus

Eseménykezelés. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor.

Objektumorientált programozás C# nyelven

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

C++ programozási nyelv

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

Java VII. Polimorfizmus a Java nyelvben

Java VII. Polimorfizmus a Java nyelvben

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 2.ELŐADÁS. Objektumorientált programozás

C++ programozási nyelv Konstruktorok-destruktorok

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

Virtuális függvények (late binding)

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

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

C++ referencia. Izsó Tamás február 17. A C++ nyelvben nagyon sok félreértés van a referenciával kapcsolatban. A Legyakoribb hibák:

Kölcsönhatás diagramok

III. OOP (objektumok, osztályok)

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

Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék

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

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

Osztály öröklődés. Öröklődés és polimorfizmus. Programozás II. előadás. Szénási Sándor.

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

Adatbázisrendszerek. adatbázisokban. Objektumorientált és objektum-relációs adatbázisok április 24.

Java II. I A Java programozási nyelv alapelemei

Objektum-orientált programozás

Java programozási nyelv 4. rész Osztályok II.

Bevezetés a Python programozási nyelvbe

C++ programozási nyelv

OO rendszerek jellemzői

Adatstruktúrák, algoritmusok, objektumok

I. Objektumorientált programozás

OOP alapok Egy OOP nyelvet három fontos dolog jellemez. egységbezárás ( encapsulation objektumoknak öröklés ( inheritance

OOP és UML Áttekintés

JAVA PROGRAMOZÁS 2.ELŐADÁS

Fogalmi modellezés. Ontológiák Alkalmazott modellező módszertan (UML)

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

Programfejlesztési Modellek

Adatszerkezetek 2. Dr. Iványi Péter

Java II. I A Java programozási nyelv alapelemei

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

Programozás C++ -ban

Objektumorientált szoftverfejlesztés alapjai

Globális operátor overloading

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

Programozási nyelvek Java

Osztály és objektum fogalma

Objektumorientált programozás C# nyelven

Objektum orientált programozás (Object Oriented Programming = OOP)

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

Óbudai Egyetem. C programozási nyelv

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

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title;

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

Osztály tervezési szempontok és C++ implementációs ajánlások

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

Programozás II. 2. Dr. Iványi Péter

Bevezetés a programozásba I 10. gyakorlat. C++: alprogramok deklarációja és paraméterátadása

C programozási nyelv

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

Modellező eszközök, kódgenerálás

Bevezetés a programozásba Előadás: Tagfüggvények, osztály, objektum

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

C# osztálydeníció. Krizsán Zoltán 1. .net C# technológiák tananyag objektum orientált programozás tananyag

Az élet szép, környezetünk tele van fákkal, virágokkal, repdeső madarakkal, vidáman futkározó állatokkal.

Átírás:

OOP Alapelvek Elek Tibor

OOP szemlélet Az OOP szemlélete szerint: a valóságot objektumok halmazaként tekintjük. Ezen objektumok egymással kapcsolatban vannak és együttműködnek. Program készítés: Absztrakciós folyamat, amelyben a valós világban létező jelenséget (megoldandó problémát) valamilyen programozási eszköz absztrakciós szintjén képezünk le. A modell alkotást megkönnyíti, ha a programozási eszköz a valós élethez közeli nyelvi elemeket tartalmaz. Azaz szükség van egy objektumot modellező nyelvi elemre.

OOP szemlélet Természetes objektum jellemzői - egyéniség (különállás) - struktúra: objektumot jellemző adatok együttese - állapot: az objektum adatainak aktuális értékei - viselkedés: más objektumokkal való kapcsolata

Természetes objektumok: példa Ficsor Lajos Elég bonyolult struktúrájú, számos viselkedés formára képes objektum. A vér alkoholszintje, mint adat a struktúrájához tartozik Az alkoholszint pillanatnyi értéke az állapothoz tartozik Egyes viselkedésformák (pl. sört iszik) módosíthatják az állapotot Más viselkedésformák működését (pl. járás) az aktuális állapot befolyásolhatja Ficsor Lajos Objektum orientált programozás (Bevezetés) OOPALAP / 4

Objektumtól objektumig A valós világ egy eleme Absztrakció Valós objektum Absztrakt adattípus Absztrakció és/vagy formális leírás 1. 2. Megvalósítása vmely programozási eszközzel (Implementáció) Nyelvi elem Osztály Nyelvi elem Objektum Objektum Objektum Példány létrehozása (Deklaráció) 3. Ficsor Lajos Objektum orientált programozás (Bevezetés) OOPALAP / 5

Objektumtól objektumig: 1. szint Tanulmányozzuk a valós objektumokat, és megkeressük azoknak a probléma megoldása szempontjából fontos adatai és viselkedésmintáit. (Az absztrakció definíciójából a "leglényegesebb tulajdonságok kiemelése".) Például a Ficsor Lajos objektumnak a Neptun szempontjából lényegtelen az alkoholszintje, de lényeges, hogy melyik tanszéken dolgozik. Ficsor Lajos Objektum orientált programozás (Bevezetés) OOPALAP / 6

Objektumtól objektumig: 1. szint (folyt.) Ezután megkeressük azon objektumcsoportokat, amelyek azonos adatokkal és viselkedésmintákkal rendelkeznek, és elnevezzük ezt a csoportot. (Az absztrakció definíciójából az "általánosítás".) Így jön létre a Neptun szempontjából az "oktató" fogalom. Ficsor Lajos Objektum orientált programozás (Bevezetés) OOPALAP / 7

Objektumtól objektumig A valós világ egy eleme Absztrakció Valós objektum Absztrakt adattípus Absztrakció és/vagy formális leírás 1. 2. Megvalósítása vmely programozási eszközzel (Implementáció) Nyelvi elem Osztály Nyelvi elem Objektum Objektum Objektum Példány létrehozása (Deklaráció) 3. Ficsor Lajos Objektum orientált programozás (Bevezetés) OOPALAP / 8

Objektumtól objektumig: 2. szint Az előzőleg definiált fogalom leképezése egy programozási eszközre (osztálydefiníció elkészítése). Ez valójában egy minta a program működéséhez szükséges objektumok létrehozására. Például a Neptun szempontjából egy oktatónak vannak lényeges adatai (neve, tanszéke, minősítése stb.) és vannak lehetséges viselkedésformái (kurzust hirdethet meg, vizsgaidőpontot írhat ki, jegyet adhat stb., de például nem nézheti meg egy hallgató adószámát.) Ficsor Lajos Objektum orientált programozás (Bevezetés) OOPALAP / 9

Objektumtól objektumig A valós világ egy eleme Absztrakció Valós objektum Absztrakt adattípus Absztrakció és/vagy formális leírás 1. 2. Megvalósítása vmely programozási eszközzel (Implementáció) Nyelvi elem Osztály Nyelvi elem Objektum Objektum Objektum Példány létrehozása (Deklaráció) 3. Ficsor Lajos Objektum orientált programozás (Bevezetés) OOPALAP / 10

Objektumtól objektumig: 3. szint Akkor és annyi objektumot kell létrehozni a program futása során, amelyek együttműködve képesek a valóságot modellezni. Például amikor Ficsor Lajos oktató be akarja írni Kisházi Brünhilda hallgatónak a GEIAL214N kurzus vizsgájához tartozó jeles vizsgajegyet, akkor Létrejön egy oktató típusú objektum Ficsor Lajos adataival, egy vizsgaalkalom típusú objektum a megfelelő adatokkal, és egy hallgató típusú objektum Kisházi Brünhilda adataival. A Ficsor objektum üzen a vizsgaalkalom objektumnak, megadva a hallgató nevét és jegyét, aki (ellenőrzések után) egy üzenetet küld a hallgató objektumnak, megváltoztatva ezzel az állapotát. Ficsor Lajos Objektum orientált programozás (Bevezetés) OOPALAP / 11

Azok az elvek, amelynek egy OOP programozási nyelvnek, illetve a megírt programoknak, meg kell felelnie 1. alapelv: osztály, objektum Egy OOP nyelvben két új nyelvi elemre van szükség: - osztály - objektum

1. alapelv: osztály, objektum Osztály A modellezés során nyert absztrakt adattípus implementációja: Egy programozó által definiálható típus, amely tartalmazhat - adatokat az objektum struktúrájának modellezésére - metódusokat az objektum viselkedésének modellezésére

1. alapelv: osztály, objektum Objektum Egy osztály egy példánya. Egy osztály általában többször is példányosítható. A példányok ugyanazzal a viselkedésfajtákkal rendelkeznek, ugyanaz a struktúrája, de minden példány más állapottal rendelkezhet (azaz adatai más-más értékekkel rendelkezhetnek).

2. alapelv: egységbezárás (encapsulation) Az osztály egy egységbe zárja az objektum adatait és az azokkal dolgozó műveleteket. Az osztály saját névteret képez, azaz több osztályban is lehet ugyanolyan nevű adat vagy művelet. Valamint az osztályon belül az adatok és műveletek korlátlanul elérik egymást.

2. alapelv: egységbezárás (encapsulation) (pl. Egy háromszög területét számító metódusnak nem kell átadni az oldalakat, mint a C-ben kellett, hiszen a Haromszog osztály adatai közé tartoznak az oldalak, az területet visszaadó metódus szintén az osztály része. Az osztály metódusai pedig látják az osztály adatait. Ha a metódusnak híváskor átkellene adni az oldalakat ez az Elek Tibor mond meg a neved -nek felelne meg.)

3. alapelv: üzenet (message) Az üzenet az objektumok között kommunikáció formája. Technikailag az objektum metódusainak meghívását jelenti. (A Fo objektum üzen az elsokor nevű Kor típusú objektumnak, hogy növelje meg a sugarát 5-el, majd üzen, hogy add meg a területed: elsokor.sugarnovel(5); double ter = elsokor.terulet(); )

4. alapelv: adatrejtés (information hiding) - Az osztály műveleteinek implementációja osztályon kívülre nem látható (automatikusan teljesül) - Az osztály adatai, és műveletei csak szabályozottan legyenek elérhetőek. Kell egy mechanizmus, amellyel a programozó szabályozhatja az adatok, műveletek elérését, figyelembe véve a szabályokat. (A szabályok az idők során alakultak ki a szoftver minőség követelményeit szem előtt tartva.)

4. alapelv: adatrejtés (information hiding) Betartandó szabályok: A) az adatok ne legyenek közvetlenül elérhetőek a külvilág számára, legfeljebb metódusokon (függvényeken keresztül). Ennek előnyei: - tudom szabályozni, hogy csak olvasásra, csak írásra vagy írásra és olvasásra biztosítok elérést, azzal, hogy milyen metódusokat készítek. Pl. egy Idő osztályhoz készítek egy időt visszaadó metódust, de nem készítek időt beállítót.

4. alapelv: adatrejtés (information hiding) - Független lesz az adat elérése a tényleges ábrázolástól. Pl. az Idő osztálynak a metódusát, amely visszaadja az időt, vagy amelyik beállítja az időt ugyanúgy kell használni függetlenül attól, hogy három számmal tárolja az időt (10 óra 30 perc, 30 másodperc) vagy esetleg egy számmal (10*3600+30*60+30). - Az adatok beállításakor megtehető, hogy csak bizonyos értékeket lehessen beállítani. Pl. egy tanuló jegyét tároló egész típusú változót beállító metódus nem fogad el csak 1 és 5 közötti számot.

4. alapelv: adatrejtés (information hiding) B) A metódusok közül csak azok legyenek a többi objektum számára elérhetőek, amelyek az objektum kommunikációs felületéhez tartoznak.

5. alapelv: öröklődés (inheritance) Egy osztály létrehozható úgyis, hogy egy másik osztály leszármazottja. Ilyenkor az osztály örökli a szülője adatait, metódusait (tehát már nem kell ezeket definiálni), de lehet újakat is definiálni illetve lehet örökölt metódusokat módosítani (felüldefiniálni, a viselkedés a leszármazottban is létezik, de kicsit másképpen).

5. alapelv: öröklődés (inheritance) Az öröklődés jelentősége egyrészt valós életbeli osztályozás (leszármazás) modellezése, másrészt a kód újrafelhasználás. (pl. Állat, Emlős, Kutya: Az Emlős egy Állat, a Kutya egy Emlős. Pl. Sikidom, Kor: A Kor egy Sikidom) (Az öröklődést később még részletesen vesszük!)

6. alapelv: polimorfizmus Bizonyos viselkedések működése függ a környezettől, ahol alkalmazzuk. Pl. egy síkidom elmozdit viselkedése eltérhet, ha két koordinátát adok meg vagy ha egy Vektor-t adok meg. Pl. a Kor, ami a Sikidom leszármazottja, tehát örökli az elmozdit viselkedést, elmozdit viselkedése más lehet, mint az eredeti elmozdit Pl. egy összeadás operátor másként működhet ha egész számokra használom vagy ha String-ekre (szövegekre) (Később ezeket megnézzük részletesen!)