Objektum-orientált programozás

Hasonló dokumentumok
III. OOP (objektumok, osztályok)

Programozási alapismeretek 4.

Osztályok. 4. gyakorlat

OOP. Alapelvek Elek Tibor

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

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

Programozás III. - NGB_IN001_3

JAVA PROGRAMOZÁS 2.ELŐADÁS

Bevezetés a Python programozási nyelvbe

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

Objektumelvű programozás

C++ programozási nyelv

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

Programozás 1. 2.gyakorlat

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

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

Objektumorientált paradigma és a programfejlesztés

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

I. Objektumorientált programozás

Objektumorientált paradigma és programfejlesztés Bevezető

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

Interfészek. PPT 2007/2008 tavasz.

Adatstruktúrák, algoritmusok, objektumok

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

Már megismert fogalmak áttekintése

Smalltalk 3. Osztályok létrehozása. Készítette: Szabó Éva

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

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

Objektumorientált szoftverfejlesztés alapjai

OOP #14 (referencia-elv)

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:

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

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

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

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

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

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

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

Programozási nyelvek Java

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 módszertan p.1/46

Objektumorientált paradigma

Kölcsönhatás diagramok

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

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

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?

Objektumorientált programozás C# nyelven

C++ programozási nyelv

Java és web programozás

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.

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

Java és web programozás

Előzmények

Gyakorlati vizsgatevékenység A

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

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

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

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

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

UML (Unified Modelling Language)

ELTE SAP Excellence Center Oktatóanyag 1

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

Tömbök kezelése. Példa: Vonalkód ellenőrzőjegyének kiszámítása

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

S01-8 Komponens alapú szoftverfejlesztés 2

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

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

C++ programozási nyelv Konstruktorok-destruktorok

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

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

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

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

MUNKAANYAG. Szabó Mária. Programozás - Objektumorientált. gyakorlatban. A követelménymodul megnevezése: Informatikai ismeretek

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

Alkatresz::Alkatresz(string n; int csz, int a) { nev = n; cikkszam = csz; ar = a; };

Függőség injekció Konstantinusz Kft 2010

Programozási nyelvek Java

SZOFTVERFEJLESZTÉSI TECHNOLÓGIÁK

Szerializáció. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Szerializáció / 22

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

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

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

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

A Java nyelv. Dialógus ablakok. Elek Tibor

Objektumorientáció, objektumorientált szemlélet

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

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

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

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

Öröklés és Polimorfizmus

10-es Kurzus. OMT modellek és diagramok OMT metodológia. OMT (Object Modelling Technique)

JAVA PROGRAMOZÁS 3.ELŐADÁS

és az instanceof operátor

Magas szintű adatmodellek Egyed/kapcsolat modell I.

Programozási nyelvek II.: JAVA

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

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

Átírás:

Objektum-orientált programozás Készítette: Nagy Zsolt, 2014 Modellezés A modellezés során nem a valós világ dolgaival foglakozunk, hanem egy kisebb, megfoghatóbb, megérthetőbb egyszerűsített példánnyal. Gondoljunk a Forma 1-es versenyautók tervezésénél elvégzett légellenállási kísérletekre. Először itt sem a megépített gépet vizsgálják, hanem annak kicsinyített mását. Majd, ha már közelebb kerültek a megoldáshoz, akkor váltanak teljes 1:1 méretarányra, de még ilyenkor sem a komplett versenyautót vizsgálják, hanem egy fabrikált felületet. Hogy mi ennek a lényege? Felesleges, és sokszor lehetetlen is a valós világ objektumait teljes egészükben vizsgálni. Egyrészt: lehetetlen lenne a bonyolultsága miatt minden részletére figyelni, illetve a lényegtelen részletek feleslegesen vonnák el a fontos és lényeges részektől az időt és az energiát. Így van ez a szoftverfejlesztésnél is. Amikor egy valós világbeli problémára keresünk megoldást, egyszerűsítenünk kell. Meg kell keresni a feladat megoldása szempontjából fontos és releváns részeket, majd azokat ki kell emelni a problématérből. Ugyanis a feladat megoldása szempontjából csak ezek a tulajdonságok fognak szerepet játszani. Képzeljük el a következő feladatot. Egy autókereskedő számára szeretnénk programot készíteni, amelyben nyílván tudja tartani a kereskedésében lévő gépkocsik adatait. Kezelni akarná-e a kocsik tulajdonosit? Bizonyára igen. De kell-e foglalkoznia a tulajdonosok heti bevásárlásaival? Nem valószínű. Nagyon sok olyan tulajdonság jellemzi a valós objektumokat, amelyek a feladat megoldására nézve irrelevánsak, nem fontosak. Ezeket az adatokat nem is kell kezelnünk. A modellalkotásnak ezt a részét absztrakciónak elvonatkoztatásnak nevezzük.

A fent említett kereskedő autóiból több is lehet, és ezek az autók mind hasonlóan épülnek fel, hasonló tulajdonságokkal jellemezhetők. Igaz lehetnek motorkerékpárok, teherautók, stb. is a kereskedő udvarán. Vagyis a valós világ objektumait csoportokba tudjuk rendezni, a hasonló tulajdonságaik alapján. Így lesznek olyan járművek, amelyekre az jellemző, hogy személyeket szállítanak, és négy kerekük van. De olyanok is, amelyek két kerekűek és szintén személyeket szállítanak. Meg olyanok is, amelyek fő feladata a teherszállítás. Könnyebb kezelni, megérteni a valós világ objektumait, ha a hasonló tulajdonságaik alapján csoportokba rendezzük, kategorizáljuk őket. De, ha jobban megvizsgáljuk a kereskedő járműveit, felismerhetünk a csoportok között hasonlóságokat, olyan tulajdonságokat, amelyekkel minden csoportnál foglakozni akarunk. Ilyen például az évjárat, a motor űrtartalma, tulajdonosa, stb. Tehát ki tudunk emelni közös jellemzőket az egyes csoportokból. Viszont lehet olyan is, hogy az autóknál meg akarjuk különböztetni a sportkocsikat. Tehát például újabb tulajdonságot akarunk bevezetni, szűkítve ezzel az autók csoportját. Ezekre azt mondjuk, hogy általánosítunk, vagyis kiemeljük a közös tulajdonságokat, illetve specializálunk, azaz szűkítjük a csoportot. A kereskedő által nyílván tartott csoportok nem önmagukban léteznek, nem függetlenek egymástól. Kapcsolat van például a gépjármű és a jelenlegi tulajdonosa között. Kétféle kapcsolatot különböztetünk meg. Ismeretségi kapcsolat esetén a két objektum létezhet önállóan is (autó és tulajdonosa). Egész-rész kapcsolatnál, pedig a rész nem létezhet az egészen kívül (autó és motorja). Objektum orientált paradigma A valós világ objektumait két oldalról tudjuk vizsgálni. Egyrészt a felépítését, amelyet az adatok határoznak meg. Általánosítva ezek a tulajdonságai, jellemzői. Például a gépkocsinál a márka, típus, gyártási év, szín, ár, stb.. Másrészt a gépjárművek tudnak haladni az úton, lehet velük sebességet váltani, lehet gyorsítani vagy lassítani, stb.. Ez pedig az objektum cselekvőképességét jelenti, más néven a módszereit, funkcióit.

Objektum (object) Az objektum-orientált paradigmának (gondolkodásmódnak) a sarkalatos eleme az objektum. Az objektumnak, az előbbi kocsi példát alapul véve, vannak adatai, amelyek egy szerkezetet alkotnak, és vannak funkciói, eljárásai, amelyekkel cselekedni tud. Az objektum egy olyan programozási eszköz, amelynek három komponense van: Attribútumai, amelyek az objektum szerkezetét írják le. Ezeket szokás statikus résznek is nevezni. Minden objektum mögött van egy memóriaterület, amely tárolja az objektum értékeit. Az attribútumok által felvett értékeket az objektum aktuális állapotának nevezzük. Módszerei, amelyekkel az objektum viselkedését tudjuk leírni. Vagyis az objektum képes magáról adatokat szolgáltatni, megváltoztatni az aktuális adatait, azaz állapotát, vagy egyéb (meghatározott) műveletet elvégezni. A viselkedést metódusokkal írjuk le. Az objektumot megszólítani a metódusain keresztül lehet, ezt üzenetküldésnek nevezzük. Minden objektumnak van azonosságtudata, azaz létezik azonosítója, amely csak rá jellemző (OID Object IDentifier). A változó neve igazából soha nem azonosító csak hatáskörön belül egyértelmű a névhivatkozás. Az OID viszont tényleg egyedi, még programok között is! Az objektum addig él, amíg vagy a programozó, vagy a nyelvi rendszer meg nem szünteti. Osztály (class) Absztrakt eszköz, az eljárás-orientált nyelvek típusfogalmának általánosítása (gyakran itt is típusként említjük - szinonimák). Az osztály azonos attribútumú és módszerű objektumok együttese. Az osztályhoz köthetőek az objektumok; az osztályból származtathatóak az objektumok. Az osztály olyan objektumminta vagy típus, amelynek alapján példányokat (objektumokat) hozunk létre. Minden objektum egy jól meghatározott osztály alapján jön létre. Az osztályban definiáljuk: az objektumok adatait, az objektum által elvégezhető műveleteket.

Nézzünk egy példát az osztályra. Az iskola tanulói egy jól körülhatárolható részét képezik az iskolába járó embereknek. Egy program elkészítése során a tanulóknak csak a számunkra fontos adatit akarjuk eltárolni, és csak a szükséges feladatok megoldására, illetve viselkedés elvégzésére szeretnénk képessé tenni. Ezek tudatában kell osztályt létrehozni. Tanulói nyilvántartás során, a következő adatokra, illetve viselkedésre lehet szükségünk. Tulajdonságok: név, lakhely, osztály, nem, tantárgyak. Viselkedések, feladatok: név beállítása, lekérdezése, lakhely beállítása, lekérdezése, osztály beállítása, lekérdezése, nem beállítása, lekérdezése. Tervezzünk egy másik osztályt! A síkidomok közül legyen a téglalap. Tulajdonságai: a, b. Műveletei: a oldal beállítása, lekérdezése, b oldal beállítása, lekérdezése, terület, kerület. Példány (instance) Az OO szemlélet szerint először létre kell hozni egy osztályt, leírni, hogy a hozzá tartozó objektumoknak milyen attribútumai és módszerei legyenek. Az osztály alapján jönnek létre az objektumok, amelyeket példányoknak is nevezünk. A műveletet pedig példányosításnak.

Az adott objektum adott osztály példánya. Minden objektum tudja, hogy melyik osztálynak példánya. Adott osztályhoz tartozó minden példány ugyanolyan attribútumokkal és módszerekkel rendelkezik. Minden példány tudja, hogy milyen módszerekkel rendelkezik. A módszereket mindig konkrét példányon futtathatom le, ezen értelmezhetők: az aktuális példányon. Példány létrehozása: ugyanaz az adatszerkezet újra és újra megjelenik a tárban. A módszereket nem többszörözi! Létezhetnek olyan attribútumok és olyan módszerek, amelyek nem arra szolgálnak, hogy az egyes példányok állapotait és viselkedését vizsgáljuk velük, hanem magához az osztályhoz tartoznak. (Példány-attribútum, példánymódszer; osztály-attribútum, osztálymódszer). Osztály-attribútum: hány darab példánya van (az osztály kiterjedése). Az osztály-attribútumok nem többszöröződnek. Egységesített Modellező Nyelv (UML) A tervezéshez grafikus eszközt használhatunk. Ilyen az UML (Unified Modeling Language) Egységesített Modellező Nyelv. Osztályok megadása Egy három részre osztott téglalappal jelöljük. A felső részében adjuk meg az osztály nevét, középre kiemelten. Pl. Teglalap A középső részben az adattagokat (változókat, különböző információ hordozó objektumokat). Pl. a, b: egész; Az alsó részben pedig a metódus tagokat (viselkedési formákat). Pl. seta(ertek: egész); terulet(): egész;

a, b: egész Teglalap seta(ertek: egész) setb(ertek: egész) geta(): egész getb(): egész terulet(): egész kerulet(): egész Osztály neve Osztály adattagjai Osztály viselkedései Példány megadása Egy két részre osztott téglalappal jelöljük. A példányba beírjuk az azonosítóját és osztályát egy kettősponttal elválasztva ezek közül valamelyik elhagyható. Pl. teglalap1: Teglalap, vagy teglalap1 vagy :Teglalap. Szükség esetén megadjuk az objektum állapotát egy vonallal elválasztva. A példányt egy szaggatott nyíllal kötjük az osztályhoz. Teglalap a, b: egész seta(ertek: egész) setb(ertek: egész) geta(): egész getb(): egész terulet(): egész kerulet(): egész teglalap1:teglalap a = 10 b = 20 Ha két objektumnak megegyezik az állapota, vagyis rendre egyformák az adataik, akkor ugyanarra az üzenetre ugyanúgy reagálnak. Egy objektum mindig a saját osztályában megadott metódus szerint működik. Üzenet (Message) Egy objektum felkérhet más objektumokat feladatok elvégzésére. A felkérést üzenetküldésnek nevezzük. Az üzenet nem más, mint egy kívülről elérhető metódus hívása. A hívás formája: objektum.üzenet(paraméterek)

teglalap1.terulet() program teglalap1 Objektum létrehozása, inicializálása Az objektumok a memóriában helyezkednek el. Megszületnek, léteznek viselkednek, majd vagy a programozó által, vagy a futtató rendszer által megsemmisülnek. A létrehozáskor be kell állítani az objektum állapotát, vagyis inicializálni kell. Ezt a kezdeti értékadást egy speciális metódus, a konstruktor végzi. A konstruktornak lehetnek paraméterei, amelyeken keresztül kívülről lehet kezdeti értékadásokat végrehajtani. Lehetnek olyan adatai is, amelyeket nem lehet kívülről elérni, befolyásolni. Példa konstruktorra: Teglalap(oldal_1: egész, oldal_2: egész) a = oldal_1 b = oldal_2 End Teglalap Az objektum létrehozását Java nyelvben a new operátor végzi. Az operátor után meg kell adni az osztály nevét, vagyis a konstruktort. Példa létrehozásra: teglalap1 = new Teglalap(10, 20) Példányváltozó, példánymetódus Az osztálynak azokat az adattagjait, amelyek minden belőle létrehozott példányban szerepelnek, példányváltozóknak, példányadatnak nevezzük. Ezek a változók minden példányban létrejönnek, és saját értékük lesz. Pl. Teglalap osztály alapján létrehozott teglalap1 objektumnak lesz két példánytagja a és b oldalak. Ezek minden példányban külön-külön létrejönnek és saját értékük lesz. Az osztály azon metódusait, amelyek példányokon dolgoznak, példánymetódusoknak nevezzük. Pl. a Teglalap osztály terulet() metódusa. A példánymetódust példányon hívjuk meg teglalap1.terulet(). Az üzenetküldés eredménye egy érték lesz, amit a terulet() metódus fog kiszámolni az adott (teglalap1) objektumon.

Osztályváltozó, osztálymetódus Vannak adatok, amelyek nem egy konkrét példányra, hanem az egész osztályra jellemzőek. Ilyen például az, hogy a programunkban összesen hány téglalap objektumot hoztunk létre. Ezt elegendő egy helyen, egy példányban tárolni. Nem kell, sőt nem is tanácsos külön-külön minden példányban jelen lennie. Ezek a változók, adatok az osztály saját adatai, ezért osztályadatnak, vagy osztályváltozónak nevezzük. A rajtuk műveletet végző metódusokat pedig osztálymetódusnak. Az osztályadat és osztálymetódus nevét az UML-ben aláhúzzuk. Egy osztályt csak osztálymetódussal lehet megszólítani, egy objektumot meg lehet példánymetódussal és osztálymetódussal is. Bezárás, információ elrejtése, kód újrafelhasználása Egy objektum legnagyobb ereje abban áll, hogy zárt és sérthetetlen. Azokat az adatokat, és metódusokat, amelyeket nem akar a külvilág számára elérhetővé tenni, elrejti előlük. Ezt információ elrejtésnek nevezzük. Az objektum zártsága azt jelenti, hogy az adatokat és a rajtuk dolgozó metódusokat egy egységnek kezeli (egységbezárás). A kód újrafelhasználásának egyik módja, hogy egy osztály alapján újabb és újabb példányokat lehet létrehozni. A másik módja, hogy egy osztályból származtatással újabb osztályokat tudunk létrehozni. Ezt örökítésnek nevezzük. Az osztály örökítésével specializáltabb viselkedésmódot, vagy újabb tulajdonságokat lehet felvenni.

Felhasznált, ajánlott irodalom Angster Erzsébet Objektumorientált tervezés és programozás Java 4Kör Bt. 2002 Juhász István Programozás 2 Egyetemi jegyzet - 2004