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

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

SZOFTVERFEJLESZTÉSI TECHNOLÓGIÁK

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

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

OOP. Alapelvek Elek Tibor

Programozás módszertan p.1/46

Interfészek. PPT 2007/2008 tavasz.

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

Már megismert fogalmak áttekintése

Programozási alapismeretek 4.

Objektumorientált szoftverfejlesztés alapjai

Objektum-orientált programozás

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

Programozás III. - NGB_IN001_3

Objektumorientált paradigma és a programfejlesztés

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

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

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

Juhász István PROGRAMOZÁS 2

és az instanceof operátor

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

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

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.

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

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?

C++ programozási nyelv

Bevezetés a Python programozási nyelvbe

Objektumorientált paradigma és programfejlesztés Bevezető

Objektumorientált programozás C# nyelven

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

C++ programozási nyelv

JAVA PROGRAMOZÁS 2.ELŐADÁS

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

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

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

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

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

Programozási nyelvek Java

Adatstruktúrák, algoritmusok, objektumok

PROGRAMOZÁSMÓDSZERTAN II

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

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

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

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

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

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

Objektumorientált paradigma

ELTE SAP Excellence Center Oktatóanyag 1

Öröklés és Polimorfizmus

Osztályok. 4. gyakorlat

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

Programozási nyelvek Java

Objektum Orientált Tervezés

Objektum orientált alapelvek

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

Objektumelvű programozás

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

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

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

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

A TANTÁRGY ADATLAPJA

Programozás. Osztályok, Származtatott osztályok. Fodor Attila

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

Programozási technológia

C++ programozási nyelv Konstruktorok-destruktorok

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

Osztály és objektum fogalma

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

Java VII. Polimorfizmus a Java nyelvben

OOP #14 (referencia-elv)

Programozási nyelvek Java

Objektumorientált programozás C# nyelven

Adatszerkezetek 2. Dr. Iványi Péter

Java VII. Polimorfizmus a Java nyelvben

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

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

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

Programfejlesztési Modellek

Programozási technológia

Magas szintű adatmodellek Egyed/kapcsolat modell I.

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

Pénzügyi algoritmusok

JAVA PROGRAMOZÁS 3.ELŐADÁS

Adatbázis rendszerek. dr. Siki Zoltán

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

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

10. előadás. Alapfogalmak. Adatbázisrendszerek előadás november 28.

Java és web programozás

Adatstruktúrák, algoritmusok, objektumok

WEBFEJLESZTÉS 2. ADATBÁZIS-KEZELÉS, OSZTÁLYOK

Programozás alapjai II. (5. ea) C++

OOP és UML Áttekintés

Programozás alapjai II. (5. ea) C++

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

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

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

ELTE SAP EXCELLENCE CENTER Oktatóanyag. Sas László: ABAP Objects Objektumorientált ABAP

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

Magas szintű programozási nyelvek 2 Előadás jegyzet

Átírás:

Programozás Objektum Orientált Programozás (OOP) Alapfogalmak Fodor Attila Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék foa@almos.vein.hu 2010. február 18.

Bevezetés Objektum Orientált Programozás (OOP) Bevezetés Programok fő összetevői Adat Funkcionális modell OOP alapötlete (filozófiája) Adat és funkcionális modell elválaszthatatlan 1960-as évek végén jelent meg a SIMULA67 Fodor A. (Pannon Egyetem) Programozás 2010. február 18. 2 / 19

OOP rövid története Bevezetés SIMULA67 (OOP eszközrendszer) 1960-as évek második fele Algol verzió Minden objektum-orientált eszköz meg van benne (Innen való például: Osztály/virtuális függvény) BCPL 1980 (Innen való például a megjegyzés formátuma) Alan Kay OO világ víziója Ő használja először az objektum-orientált fogalmakat Smalltalk programozási nyelv Xerox-nál Az első objektum-orientáltnak tervezett nyelv Fodor A. (Pannon Egyetem) Programozás 2010. február 18. 3 / 19

OOP története Bevezetés C++ SIMULA67 és BCPL voltak a fő forrásai 1983-tól használják "ipari körülmények" között 1987-től kezdik a szabványosítást, ami 1998-ig tart ISO/IEC 14882 Szinte bármely platformon van megvalósítása Turbo Pascal 6.0 1990 OO eszközrendszerrel rendelkezik 90-es évektől szintem minden nyelvnek van OO változata Java SUN fejlesztette 1994-től C++ után ez első, aminek gyakorlati jelentősége is van Fodor A. (Pannon Egyetem) Programozás 2010. február 18. 4 / 19

Objektum-orientáltság Bevezetés Objektum-orientáltság jellemzői Adatmodell és az eljárásmodell elválaszthatatlan Absztrakt eszköz és fogalomrendszer Újrafelhasználhatóság Valós világot nagyon megközelíti Szemlélet: Imperatív eszközrendszer (algoritmus - kódolni kell) Fodor A. (Pannon Egyetem) Programozás 2010. február 18. 5 / 19

Attribútum (Attribute) "adatrész" Tetszőleges nagyságú és bonyolultságú adatszerkezet lehet Minden attribútumot egy meghatározott memóriaterületen tárol (tárterület meghatározott bitjein) Objektum állapota (State): Az objektum minden állapotát egy-egy attribútum kombináció (bitkombináció) határoz meg. Módszer (Method) Az Objektum viselkedését írja le (Eljárások, függvények) Viselkedésmód (behavior) Módszerek adják meg a viselkedésmódot Azonosság Minden objektum csak és kizárólag önmagával azonos OID (object identifier) Objektum azonosítóval rendelkezik minden objektum (Nyelvi szinten ez nem kell) Fodor A. (Pannon Egyetem) Programozás 2010. február 18. 6 / 19

Objektum Orientáltság - Objektum viselkedése és élettartama Objektum viselkedése Az állapot (State) időben megváltozik/megváltozhat Viselkedési módok csoportjai Objektum állapotát le tudja kérdezni Objektum állapotát meg tudja változtatni Objektum élettartama Az objektumot létre kell hozni Az objektum használható Az objektum megszüntetése Programozási nyelv Programozó OID-nek (object identifier) mindig léteznie kell. Fodor A. (Pannon Egyetem) Programozás 2010. február 18. 7 / 19

Objektum Orientáltság - Osztály Osztály (Class) Absztrakt eszköz Típusfogalom általánosítása (az eljárásorientált nyelveknél) Azonos attribútumú és módszerű objektumok együttese Osztályhoz köthetőek az objektumok Osztályból származtathatóak le az objektumok példányai Fodor A. (Pannon Egyetem) Programozás 2010. február 18. 8 / 19

Objektum Orientáltság - Példány Példány (Instance) Példányosítás (instantiation). Az osztályon belül létrehozott objektum Az adott objektum egy meghatározott osztály példánya Minden objektum tudja, hogy melyik meghatározott osztálynak példánya Egy meghatározott osztályhoz tartozó minden példány ugyanolyan attribútumokkal és módszerekkel rendelkezik Minden példány tudja, hogy milyen módszerrel rendelkezik A módszereket mindig konkrét példányon futtatnak (aktuális példány) Példány létrehozása: Adatszerkezet újra és újra megjelenik a tárban. Módszereket nem többszörözi Létezhetnek osztályhoz tartozó attribútumok és módszerek (Példányattribútum, példánymódszer, osztályattribútum, osztálymódszer) Osztályattribútum: hány darab példánya van (az osztály kiterjedése) Az osztályattribútumok nem többszöröződnek Példányosítás után az osztály példányairól beszélünk Fodor A. (Pannon Egyetem) Programozás 2010. február 18. 9 / 19

Objektum Orientáltság - Öröklődés Öröklődés A programkódok újrafelhasználásának a legjobb példája az OOP Az osztályok nem függetlenek egymástól Speciális viszonz az osztályok között az öröklődés Aszimmetrikus (Osztályok közötti párhuzamot nem kezeli) Öröklődés tulajdonságai Osztályokhoz kötött fogalom Két vagy több osztály között értelmezhető A leszarmazottak bővíthetik, vagy akar szűkíthetik az őstípus állapotterét és műveleteit Kiváló lehetőseg a közös tulajdonságok és műveletek összevonasara és újrahasznositasara superclass (szuperosztály, szülőosztály, ősosztály, alaposztály) Ebből tudunk létrehozni alosztályokat subclass (alosztály, gyerekosztály, származtatott osztály) átveszi, örökli a superclass attribútumait és módszereit Láthatóság módszerével letilthatóak Fodor A. (Pannon Egyetem) Programozás 2010. február 18. 10 / 19

Objektum Orientáltság - subclass Bizonyos attributomok módosítás nélkül átvehetőek Módosulhat a subclass a superclass-hoz képest új attribútumokat vezethet be új módszereket vezethet be újraimplementálhatja a módszereket törölhet attribútumokat törölhet módszereket láthatósági szabályokat újraértelmezheti, hatásukat felfüggesztheti átnevezhet attribútumokat duplikálhat attribútumokat duplikálhat módszereket Aszimmetria Szuperosztály nem látja alosztályait Szuperosztály nem manipulálhatja alosztályait Egy osztályból tetszőleges számú alosztály származtatható Fodor A. (Pannon Egyetem) Programozás 2010. február 18. 11 / 19

Objektum Orientáltság - Öröklődés Alosztály és szuperosztály(ok) kapcsolata Öröklési hierarchia Egy szuperosztály van Egyszeres (single) öröklődés Fa rajzolható öröklési hierarchiaként Több szuperosztály van Többszörös (multiple) öröklődés Több ős tulajdonságait ötvöző "vegyes" osztálytípusok Sokat vitatott lehetőség néhány OOP megvalósításban Aciklikus gráf rajzolható öröklési hierarchiaként Névütközés: Lehetnek azonos nevű attribútumok, módszerek (A megoldások nyelvenként/rendszerenként különbözőek) Fodor A. (Pannon Egyetem) Programozás 2010. február 18. 12 / 19

Objektum Orientáltság - Bezárás Bezárás (Encapsulation) Nem objektumhoz kötődik Információrejtés elve (Information hiding) Interfész és implementációs rész Az osztály objektumaihoz csak az interfész részen keresztül férhetünk hozzá Az osztály implementációhoz nem lehet hozzáférni Az attributumok két részre bonthatóak Nyilvános (public) rész minden kliens osztály lát Privát (private) rész kívülről nem látható Fodor A. (Pannon Egyetem) Programozás 2010. február 18. 13 / 19

Objektum Orientáltság - Polimorfizmus Polimorfizmus, többalakúság (Polimorphism) Objektum polimorfizmus Az Objektum tudják, melyik osztály példánya Az ősosztály objektuma helyett szerepelhet egy az ősosztályból leszármaztatott objektumra Módszerpolimorfizmus (overriding) A leszármazott osztály újraimplementálhat egy örökölt módszert Valamely függvény(ek) újra implementálása Fodor A. (Pannon Egyetem) Programozás 2010. február 18. 14 / 19

Objektum Orientáltság - Kötés, Üzenet Kötés (Binding) Módszerek polimorfizmusához köthető Probléma: egy függvénynek több implementációja van Mikor melyik függvény fusson le? Statikus/korai (static/early) kötés Fordítási időben eldöl A névhez hozzárendeli a kódot a fordító Dinamikus/késői (dynamic/late) kötés Futási időben döl el Vagy az osztálykód hajtódik végre, vagy a hierarchián felfele a legközelebbi hajtódik végre A nyelvek általában mindkettőt támogatják Üzenet (Message) Üzenetekkel tudok kommunikálni az objektummal (Smalltalk nyelv filozófiájához kötődik leginkább) Most is használnak objektumok közötti kommunikációra üzeneteket Fodor A. (Pannon Egyetem) Programozás 2010. február 18. 15 / 19

Objektum Orientáltság - Absztrakt és konténer osztály, kollekció Absztrakt osztály (Abstract class) Olyan osztály, melynek nincs példánya (nem példányosítható) Öröklődésnél használható (ősosztálynak) A leszármaztatott osztály már példányosítható Felhasználása: Tervezési fázis Program implementációs fázis Konténer osztály (Container class) Objektumokat tartalmazó adatszerkezet Bizonyos nyelvek támogatják ezeket Programozónak kell implementáni Adatbáziskezelőknél van nagy előnyük Például: Tömb, láncolt lista, verem, sor, stb. Kollekció (Kollection) Objektum-orientált adatbázisok esetén konténerosztályok helyett használt fogalom Fodor A. (Pannon Egyetem) Programozás 2010. február 18. 16 / 19

Objektum Orientáltság - Paraméterezett osztály, Iterátor Paraméterezett osztály Bizonyos nyelvekben léteznek csak C++-ban a template osztály felel meg ennek Iterátor Példányaihoz tartozó objektumok bejárhatóak Élettartam A példányosítást mindig a programozó végzi Objektum megszüntetése (2 filozófia) Objektum törlése/felszabadítása a programozó feladata (Pl.: C++) Automatikus objektum törlési mechanizmust (garbage collection) Előny: Nem kell vele foglalkozni Hátrány: Melyik szabadítható fel? Precíz algoritmus kell hozzá. Fodor A. (Pannon Egyetem) Programozás 2010. február 18. 17 / 19

Objektum Orientáltság - Egységesség Egységesség Létezik-e az objektumon kívüli eszközrendszer? Objektum Orientált nyelvek Minden objektum A nyelvi rendszer egyetlen osztályhierarchiából épül fel Hibrid nyelvek Elsődlegesen eljárásorientált, funkcionális, logikai nyelvi eszközöket tartalmaznak OO eszközrendszerrel bővített nyelv Nincs osztályhierarchia Szinte minden nyelvnek van objektum orientált kiterjesztése Például az OO COBOL, Object Pascal, C++. Fodor A. (Pannon Egyetem) Programozás 2010. február 18. 18 / 19

Osztályok (Class) Absztrakciós Módszerek - Osztályok Osztályokkal kapcsolatos fogalmak Tagfüggvények Elérhetőség szabályozása Konstruktor Destruktor Statikus tagok Osztály típusú tagok másolása Konstans tagfüggvények Önhivatkozás Struktúra és osztály kapcsolata Osztályon belüli függvénydefiníciók Fodor A. (Pannon Egyetem) Programozás 2010. február 18. 19 / 19