Adatstruktúrák, algoritmusok, objektumok

Hasonló dokumentumok
Adatstruktúrák, algoritmusok, objektumok

Objektumorientált paradigma és programfejlesztés Bevezető

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

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

OOP. Alapelvek Elek Tibor

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

Objektumorientált paradigma és a programfejlesztés

Objektumorientált paradigma

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

Programozási alapismeretek 4.

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 szoftverfejlesztés alapjai

Öröklés és Polimorfizmus

Interfészek. PPT 2007/2008 tavasz.

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

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

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

Már megismert fogalmak áttekintése

Programozás BMEKOKAA146. Dr. Bécsi Tamás 7. előadás

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

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ás III KIINDULÁS. Különböző sportoló típusok vannak: futó, magasugró, focista, akik teljesítményét más-más módon határozzuk meg.

AAO 1. félév EA - PDF 01

Objektumorientált programozás C# nyelven

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?

Bevezetés a Python programozási nyelvbe

Objektumelvű programozás

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.

Adatstruktúrák, algoritmusok, objektumok

JAVA PROGRAMOZÁS 2.ELŐADÁS

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

C++ programozási nyelv

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

III. OOP (objektumok, osztályok)

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

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

OOP #14 (referencia-elv)

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

Magas szintű adatmodellek Egyed/kapcsolat modell I.

és az instanceof operátor

Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni:

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

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

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

Osztályok. 4. gyakorlat

Objektumorientált programozás C# nyelven

OOP és UML Áttekintés

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

Programozás III. - NGB_IN001_3

Web-programozó Web-programozó

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

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

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

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

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

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

58. Osztály, objektum fogalma, implementációs lehetőségek(shagreen) 59. Egységbezárás (elvi háttere, gyakorlati megvalósítás) (Shagreen)

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

Pénzügyi algoritmusok

Programozás módszertan p.1/46

Elemi Alkalmazások Fejlesztése II.

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

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

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

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

Programfejlesztési Modellek

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

1.sz melléklet Nyári gyakorlat teljesítésének igazolása Hiányzások

C++ programozási nyelv Konstruktorok-destruktorok

Halmazelmélet. 1. előadás. Farkas István. DE ATC Gazdaságelemzési és Statisztikai Tanszék. Halmazelmélet p. 1/1

Objektum-orientált programozás

Globális operátor overloading

Osztály és objektum fogalma

UML (Unified Modelling Language)

Programozási technológia

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

Objektumorientáció, objektumorientált szemlélet

Dr. Mileff Péter

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

Az importálás folyamata Felhasználói dokumentáció verzió 2.1.

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

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

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

1. Bevezetés A C++ nem objektumorientált újdonságai 3

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

Többrétegű műszaki nyilvántartás. NETinv

I. Objektumorientált programozás

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

Halmaz: alapfogalom, bizonyos elemek (matematikai objektumok) Egy halmaz akkor adott, ha minden objektumról eldönthető, hogy

Vizuális és eseményvezérelt programozás , II. félév BMF NIK

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

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

Programozási technológia 1.

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

Java és web programozás

Kölcsönhatás diagramok

Java V. Osztályszint. lyszintű ű tagok. Példányváltozó. Osztályváltozó. Általános Informatikai Tanszék Utolsó módosítás:

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

Átírás:

Adatstruktúrák, algoritmusok, objektumok 3. Az objektumorientált paradigma alapelemei Objektum Osztály Példányosítás A konstruktor és a destruktor Osztályok közötti kapcsolatok Miklós Árpád, BMF NIK, 2006 1

Objektum Definíció Az objektum állapottal rendelkező entitás, amely a benne tárolt adatok felhasználásával feladatokat hajt végre és egyéb objektumokkal kommunikál Adatokat és algoritmusokat tartalmaz Saját feladatait önállóan végzi Saját életciklussal rendelkezik A külvilággal meghatározott üzeneteken keresztül tartja a kapcsolatot Az objektum saját adatait mezőknek, beépített algoritmusait metódusoknak nevezzük Az objektumok metódusaikkal vesznek részt az üzenetváltásokban Az üzenetek elemei: célobjektum, metódus, paraméterek, eredmény 2 2

Objektum Állapotok, viselkedés és azonosság Az objektum állapotát mezői aktuális értéke határozza meg Az objektum állapota az elvégzett műveletek hatására megváltozhat Az objektum mindig megjegyzi aktuális állapotát Két objektum állapota akkor egyezik meg, ha minden megfelelő mezőértékük megegyezik Minden objektum egyértelműen azonosítható Az objektumok önállóak (saját életciklusuk határozza meg őket) Ha két objektum állapota megegyezik, maguk az objektumok akkor sem azonosak Az objektum viselkedését az általa ismert (az objektumba épített) algoritmusok határozzák meg 3 Példa: programozható időkapcsoló 3

Osztály Definíció Az osztály egy adott objektumtípust határoz meg annak adataival (mezők) és beépített algoritmusaival (metódusok) Az osztályok egyfajta mintát, sablont adnak az objektumokhoz Az osztályok tehát azonos adatszerkezetű és viselkedésű objektumokat írnak le Minden objektum valamilyen létező osztályba tartozik Más kifejezéssel élve az egyes objektumok azon osztályok példányai, amelyekhez tartoznak Egy osztályból több példány is létrehozható Egy osztály összes példánya ugyanazokat a mezőket és metódusokat tartalmazza Az egyes példányok létrehozásuk pillanatában azonos állapotúak, ezt követően viszont önállóan működnek tovább Léteznek az osztályra (és nem az egyes objektumpéldányokra) jellemző mezők és metódusok is 4 4

Osztály Példa: az Autó osztály és két példánya (UML) Objektum (példány) Meződefiníciók Metódusdefiníciók Osztály (típus) EgyikKocsi.Beindul(); EgyikKocsi.Megy(); MásikKocsi.Beindul(); Autó Gyártó Típus Rendszám Beindul() Leáll() Megy() Fordul() Szerviz() Példányosítás Példányosítás EgyikKocsi : Autó Suzuki Ignis 4WD 5MT KQX-987 Objektum (példány) MásikKocsi : Autó Lamborghini Murciélago LP640 KQX-988 Mezőértékek Mezőértékek 5 5

Objektumorientált szoftverciklus Elemzés, tervezés, megvalósítás Objektumorientált elemzés (OOA) A megoldandó feladat leírása osztályok és objektumok segítségével Objektumorientált tervezés (OOD) A feladatleírás objektumközpontú részekre bontása (dekompozíciója) Logikai modell az osztályok és objektumok Fizikai modell a logikai modellt megvalósító modulok és folyamatok Statikus és dinamikus jellemzők Objektumorientált programozás (OOP) A modell megvalósítása egymással kommunikáló, dinamikusan létrehozott objektumok segítségével, melyek egy-egy osztály példányai OO stílusú programokat bármilyen nem OO nyelven is lehet írni, csak nagyon nehéz Részletesebb, pontosabb információk később (a szoftvertechnológiával foglalkozó tantárgyak keretében) 6 6

Metódusok általános típusai Objektumok létrehozása (példányosítás): konstruktor Ahhoz, hogy az objektumokat használhassuk, először létre kell hozni őket Ez a művelet a példányosítás Alapja az osztály megadott definíciója A példányosítást követően érhetők el az objektumok metódusai és ekkortól érhető el az objektumok mezőinek értéke A konstruktor egy olyan metódus, amelynek segítségével példányok (objektumok) hozhatók létre egy osztályból Feladatai: Új objektum létrehozása Az objektumhoz tartozó mezők kívánt kezdőértékének beállítása Egyéb szükséges kezdeti műveletek végrehajtása Minden osztályhoz tartoznia kell konstruktornak Ha külön nem definiálunk konstruktort, akkor is létrejön 7 7

Metódusok általános típusai Objektumok megszüntetése (felszámolás): destruktor Az objektumokat az utolsó használat után fel kell számolni Minden objektum külön-külön szüntethető meg (önállóan léteznek) A destruktor egy olyan metódus, melynek segítségével létező objektumok szüntethetők meg Egyetlen feladata az objektum megszüntetése Az objektumok felszámolása lehet a programozó feladata vagy történhet automatikusan is Egy objektum akkor számolható fel automatikusan, ha a későbbiekben már biztosan nincs rá szükség Az automatikus felszámolás fejlettebb és jóval kevésbé hibaérzékeny megoldás Automatikus felszámolás esetén nincs feltétlenül szükség destruktorra 8 8

Metódusok általános típusai Módosító, kiválasztó és iterációs metódusok Módosító metódusok Megváltoztatják az objektum állapotát Kiválasztó metódusok Hozzáférést biztosítanak az objektum adataihoz, de nem változtatják meg őket (így az objektum állapotát sem) Iterációs metódusok Az objektum adatainak valamely részhalmazán lépkednek végig, és az adott részhalmazra vonatkozóan végeznek el műveleteket 9 9

Osztályok közötti kapcsolatok 1. Leszármazás (ún. IS-A kapcsolat) Egy osztály leszármazottai öröklik az osztály jellemzőit Rendelkeznek ugyanazokkal a mezőkkel Tartalmazzák ugyanazokat a metódusokat Ebben a specializációs kapcsolatban a leszármazottat utódnak, az eredeti osztályt ősosztálynak nevezzük A leszármazottak bővíthetik az ősosztály adatait és algoritmusait Új mezőket adhatnak a meglévőkhöz Új metódusokat definiálhatnak Meglévő metódusok működését módosíthatják A leszármazottak minden műveletre képesek, amelyre az ősosztály képes volt Az utódosztály példányai használhatók az ősosztály példányai helyett 10 10

Osztályok közötti kapcsolatok Példa: leszármazás (UML) Jármű Gyártó Típus Tulajdonos Beindul() Leáll() Halad() Szerviz() Változatlanul örökölt mezők Új mezők Autó Gyártó Típus Tulajdonos Meghajtás Rendszám Hajó Gyártó Típus Tulajdonos Merülés Hívókód Repülő Gyártó Típus Tulajdonos Szárnyfesztáv Hatótávolság Változatlanul örökölt metódusok Módosított metódusok Új metódus(ok) Beindul() Leáll() Halad() Szerviz() Fordul() Beindul() Leáll() Halad() Szerviz() Elsüllyed() Beindul() Leáll() Halad() Szerviz() Felszáll() Leszáll() 11 11

Osztályok közötti kapcsolatok 2. Asszociáció Az asszociáció osztályok közötti tetszőleges típusú viszony Általában az asszociáció konkrét elnevezése fejezi ki a viszonyt Szerep (pl. az ember az autó tulajdonosa) Cselekvés (pl. az ember vezeti az autót) Multiplicitás: vannak egy-egy, egy-több és több-több típusú asszociációk Irányultság: az asszociáció lehet egy- vagy kétirányú Asszociációs kapcsolat áll fenn két osztály között, ha az egyiknek a saját helyes működéséhez ismernie kell a másikat Példa: egy osztály használ egy másik osztályt (ún. USES-A kapcsolat) 12 12

Osztályok közötti kapcsolatok Példa: asszociáció (UML) Asszociáció Iskola alkalmaz Oktató 0..* órán vesz részt tanul 0..* Hallgató birtokol Leckekönyv 13 13

Osztályok közötti kapcsolatok 3. Aggregáció és kompozíció (ún. HAS-A kapcsolat) Az aggregáció az asszociáció speciális esete: tartalmazási kapcsolat A kapcsolat aszimmetrikus és tranzitív A tartalmazó osztály példányai magukban foglalják a tartalmazott osztály egy vagy több példányát A tartalmazó és a tartalmazott osztály egymástól függetlenül létezhetnek A tartalmazott átveheti (de nem örökli) a tartalmazó egyes jellemzőit A kompozíció az aggregáció speciális esete: szigorú tartalmazási kapcsolat Egy tartalmazottnak mindig csak egy tartalmazója lehet Egy tartalmazó viszont tetszőleges számú tartalmazott példánnyal rendelkezhet A tartalmazó és a tartalmazott életciklusa közös 14 14

Osztályok közötti kapcsolatok Példa: aggregáció és kompozíció (UML) Ablak Kompozíció Varázsló Képnyomtató Lista 1 Kép 1 Aggregáció 0..* Bélyegkép Gomb 5 3 Címke 15 15

Az OOP néhány csapdája Mire kell ügyelni az osztályok kialakításánál? Rossz döntés az osztályok közötti kapcsolat típusának megválasztásánál Pl. leszármazás helyett aggregáció vagy fordítva Leszármazási kapcsolat helytelen kialakítása Az ősosztály túl keveset vagy túl sokat tud Önkéntelenül (nem látható módon) beépített feltételezések Az ősosztály feltételez bizonyos állapotváltozásokat, a metódusok végrehajtási sorrendjét ez nem biztos, hogy a leszármazottaknál is igaz lesz Felduzzasztott osztályok A túl sok mező és metódus, a túl hosszú metódusok azt jelezhetik, hogy valamilyen módon fel kell bontani az osztályt Elnevezési anomáliák 16 16