ELTE SAP Excellence Center Oktatóanyag 1

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

Osztályok. 4. gyakorlat

JAVA PROGRAMOZÁS 2.ELŐADÁS

Bevezetés a Python programozási nyelvbe

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

és az instanceof operátor

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 II. 3. gyakorlat Objektum Orientáltság C++-ban

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

C++ programozási nyelv

Már megismert fogalmak áttekintése

OOP #14 (referencia-elv)

Programozási nyelvek Java

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

Smart Pointer koncepciója

Objektumelvű programozás

Programozási nyelvek Java

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

Interfészek. PPT 2007/2008 tavasz.

C++ programozási nyelv Konstruktorok-destruktorok

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:

Java és web programozás

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

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

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

Programozási alapismeretek 4.

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

Programozási nyelvek Java

Java III. I I. Osztálydefiníció (Bevezetés)

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

Programozási nyelvek Java

Java III. I I. Osztálydefiníció (Bevezetés)

Öröklés és Polimorfizmus

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

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

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

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

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

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

Java és web programozás

Osztályok, objektumok

Objektumorientált programozás C# nyelven

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

Programozás módszertan p.1/46

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

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

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

C programozási nyelv Pointerek, tömbök, pointer aritmetika

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: Java 8.Gy: Abstract osztályok, interfészek

Programozás II. 6.Öröklés Dr. Iványi Péter

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

Programozás BMEKOKAA146. Dr. Bécsi Tamás 7. előadá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.

Pénzügyi algoritmusok

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

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

A C programozási nyelv V. Struktúra Dinamikus memóriakezelés

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

Programozás C++ -ban 2007/7

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

Globális operátor overloading

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

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

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon

Programozási nyelvek Java

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 C++ -ban

Programozás C++ -ban

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

8. gyakorlat Pointerek, dinamikus memóriakezelés

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN

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

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

Bevezetés a programozásba II. 5. Előadás: Másoló konstruktor, túlterhelés, operátorok

Google C++ style guide

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

Komponensek együttműködése web-alkalmazás környezetben. Jónás Richárd Debreceni Egyetem T-Soft Mérnökiroda KFT

III. OOP (objektumok, osztályok)

Objektumorientált programozás IX. Osztályok, objektumok

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

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

Objektumok és osztályok. Az objektumorientált programozás alapjai. Rajzolás tollal, festés ecsettel. A koordinátarendszer

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

Objektumok inicializálása

OOP. Alapelvek Elek Tibor

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?

OEP Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1. Feladat. Elemzés 1

OOP és UML Áttekintés

Programozás alapjai. 7. előadás

Programozási nyelvek II. JAVA

A Java nyelv. Dialógus ablakok. Elek Tibor

Java és web programozás

Programozási technológia

C++ programozási nyelv

Bevezetés a programozásba Előadás: A const

BME MOGI Gépészeti informatika 8.

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

Átírás:

Oktatóanyag 1

Oktatóanyag 2

Az oktatás folyamán használt példák a fent látható egyszerű modell implementációi. Oktatóanyag 3

A definíciós részben definiálja a fejlesztő az egyes attribútumokat, metódusokat, eseményeket, konstansokat, típusokat és az implementált interfészeket. Az implementációs részben csak a metódusok implementációja szerepelhet. A CLASS utasítás nem ágyazható be, azaz nem lehet osztályon belül osztályt definiálni. Oktatóanyag 4

Konstansokat (CONSTANTS) és típusokat (TYPES) a már megszokott módon definiáljuk. A DATA utasítással definiálhatók a példány attribútumok, míg a CLASS-DATAval a statikus (vagy osztály) attribútumok. A METHODS utasítással adhatók meg az egyes metódusok (módszerek), míg CLASS-METHODS-zal a statikus metódusok. Az egyes elemek láthatóságát azzal adhatja meg a fejlesztő, hogy a megfelelő részbe (PUBLIC, PROTECTED vagy PRIVATE SECTION-be) helyezi el az adott elemet. PUBLIC: Mindenki számára látható. Az egyes elemhez közvetlen hozzáférése van a fejlesztőnek. PROTECTED: Csak az adott osztályban, illetve az alosztályaiban látható, érhető el. PRIVATE: Csak az osztályon belül látható. Kívülről illetve az alosztályokból nem érhető el. Oktatóanyag 5

Két speciális metódus létezhet egy osztálynál. Az egyik a class_constructor, ami egy statikus konstruktor. Egy program életében csak egyszer fut le, mégpedig még azelőtt, hogy az osztályhoz először hozzáférnének, azaz mielőtt még létrehozna a fejlesztő egy objektumot, vagy hozzáférne egy statikus attribútumhoz, vagy meghívna egy statikus metódust, vagy mielőtt beregisztrálná egy statikus metódusát eseményfigyelésre, vagy egy statikus eseményére beregisztrálna egy eseményfigyelőt. A másik a constructor, ami egy konstruktor. Minden osztálynak csak egy konstruktora lehet, de nem kötelező definiálni. Automatikusan meghívódik, amikor a fejlesztő kiad egy CREATE OBJECT utasítást (lásd később!). Oktatóanyag 6

Az osztályokban csak a TYPE-pal lehet megadni az attribútum (változó) típusát. LIKE-ot csak abban az esetben használhat a fejlesztő, ha egy az osztályon belüli változóra hivatkozik. A VALUE-val a fejlesztő megadhatja egy változó kezdőértékét. A READ-ONLY opció megadásával egy publikus attribútum elérhető az osztályon kívül, de módosítani csak az osztály metódusain belül lehet. Csak PUBLIC SECTION-ben használható. A TYPE REF TO-val egy referenciaváltozót lehet definiálni, ami egy osztály egy példányára, vagy annak egy alosztályának egy példányára, vagy egy a megadott interfészt implementáló osztály egy példányára mutat. Oktatóanyag 7

Oktatóanyag 8

Egy metódusnak 0 vagy több bemeneti paramétere (IMPORTING), 0 vagy több kimeneti paramétere (EXPORTING) és 0 vagy több módosítható paramétere (CHANGING) lehet. EXPORTING vagy CHANGING helyett egy úgynevezett függvény metódusnak van egy RETURNING része, amely egy formális paramétert definiál (<vissz. változó>) visszatérési értékként. A visszatérési értéket mindenképpen érték szerint (VALUE) kell átadni. Egy metódus 0 vagy több kivételt (RAISING vagy EXCEPTIONS) válthat ki. A RAISING-et osztály-alapú (CX_STATIC_CHECK vagy CX_DYNAMIC_CHECK alosztályai), míg az EXCEPTIONS-t a nem osztály-alapú kivételek deklarálásához használhatja a fejlesztő. Oktatóanyag 9

Az lcl_arucikk osztálynak van egy publikus konstansa, egy publikus konstruktora, további beállító és lekérdező metódusai a privát attribútumaira. Oktatóanyag 10

A fenti ábrán az lcl_arucikk osztály implementációja látható (a legtöbb attribútum lekérdező és beállító metódusa helyhiány miatt nem kerül megjelenítésre). Az első metódus maga a konstruktor. A második az azonosito attribútum lekérdező metódusa, míg a harmadik ugyanennek az attribútumnak a beállító/módosító metódusa. Amennyiben egy metóduson belül a fejlesztő el szeretné érni magát objektumot, aminek a metódusát éppen meghívták, akkor az impliciten elérhető me referenciaváltozót kell használnia. Például a metódus egy paraméterét pont úgy hívják, mint az attribútumot (vagy tagváltozót). A fenti példa több ilyen esetet is bemutat. Oktatóanyag 11

A g_ref_arucikk egy referencia-változó. Egy mutató egy lcl_arucikk osztályú objektumra. Oktatóanyag 12

Ha egy objektumra már nem mutat referencia, akkor azt a Garbage Collector eltávolítja a memóriából. A Garbage Collector (Szemétgyűjtő) egy rendszer rutin, amely automatikusan kitörli azokat az objektumokat a főmemóriából, amelyeket már nem lehet megcímezni, és felszabadítja azokat a memóriaterületeket, amelyeket elfoglaltak. Először a g_ref_arucikk1 egy könyvre, a g_ref_arucikk2 pedig egy CD-re mutat. A következő lépésben (az értékadás miatt) már mindkettő a CD-re mutat. Mivel a könyv objektumra már nem mutat semmilyen referencia, azért a rendszer eltávolítja azt a memóriából. Oktatóanyag 13

Oktatóanyag 14

Oktatóanyag 15

Oktatóanyag 16

Funkcionális metódusoknak nevezzük azokat a metódusokat, amelyek rendelkeznek RETURNING paraméterrel. Értékszerinti átadás (VALUE) használata kötelező! Ezen kívül csak IMPORTING paraméterei lehetnek. Kivételeket dobhatnak. Típusnak nem adható meg generikus típus (pl. c, p, stb.). Oktatóanyag 17

Oktatóanyag 18

Ha a fejlesztő egy alosztályt szeretne létrehozni, akkor a DEFINITION részben meg kell adni az ősosztályt az INHERITING FROM nyelvi elem segítségével. Egy osztálynak csak egy ősosztálya lehet. Oktatóanyag 19

Az lcl_konyv osztály az lcl_arucikk osztályból származik. Újabb attribútumokkal (szerzo, oldalak, nyelv) és metódusokkal (konstruktor és lekérdező/beállító) bővül. Oktatóanyag 20

Ha a fejlesztő meg szeretné változtatni egy alosztályban egy metódus viselkedését, akkor a metódust újra kell definiálni az alosztályban. Oktatóanyag 21

Az lcl_antikkonyv osztályban a fejlesztő felüldefiniálja az eladasi_ar metódust. Ehhez felhasználja az újonnan bevezetett kedvezmeny attribútumot és az eladasi_ar ősosztálybeli implementációját. Oktatóanyag 22

Absztrakt osztályokat nem lehet példányosítani, de lehet olyan referenciaváltozónk, ami az absztrakt osztályra mutat. Ténylegesen az alosztályok példányaira mutat. Ha egy osztálynak legalább egy absztrakt metódusa van, akkor az osztály is absztrakt. A fejlesztő az absztrakt metódusokat a DEFINITION részben definiálja, de nem implementálja. Ezt az alosztályokban teszi meg. Statikus metódusok és konstruktorok nem lehet absztraktak. Oktatóanyag 23

Az lcl_arucikk osztály egy absztrakt osztály. Valójában csak az alosztályainak (lcl_konyv, lcl_antikkonyv, lcl_ekonyv, stb ) a példányai létezhetnek. Oktatóanyag 24

A fejlesztő használhat olyan referenciát, ami egy absztrakt osztályra mutat. Ha létre kíván hozni egy új objektumot, és a hivatkozást egy ilyen referenciában tárolná el, akkor a CREATE OBJECT-et ki kell egészíteni a TYPE résszel. Oktatóanyag 25

A példában a fejlesztő definiál egy g_ref_arucikk referencia-változót, ami egy lcl_arucikk-re mutat. Létrehoz egy lcl_konyv példányt. Az erre való hivatkozást eltárolja a g_ref_arucikk változóban. Oktatóanyag 26

Végleges osztályoknak nem lehetnek alosztályai. Végleges metódust nem lehet újradefiniálni egy alosztályban. Oktatóanyag 27

Az interfészek leírják egy osztálynak a külvilággal való külső kapcsolódási pontjait. Ezek elsősorban metódusok. Oktatóanyag 28

Az interfész csak definíció tartozik, implementáció nem. Interfész definiálásakor a fejlesztő felsorolhat attribútumokat is a metódusok mellett. Ha a fejlesztő implementálni szeretne egy interfészt, akkor először az osztály DEFINITION részben fel kell sorolnia azt az INTERFACES részben. Utána el kell készítenie a metódusok implementációját az osztály IMPLEMENTATION részében. Az interfészben definiált attribútumokat és metódusokat <interfésznév>~<attribútum> vagy <interfésznév>~<metódus> formában érheti el a fejlesztő. Oktatóanyag 29

A lif_letoltheto interfész definiálja a meret metódust. Minden olyan osztály, ami implementálja a lif_letoltheto-t, annak a példányainál a fejlesztő le tudja kérdezni a méretet, illetve ezeket árucikkeket a vásárlók le is tudják tölteni. Oktatóanyag 30

Oktatóanyag 31

Oktatóanyag 32

Mint az látható, elég nehézkes az interfészekben definiált metódusok és attribútumok kezelése. Oktatóanyag 33

Lehetőség van egy alias bevezetésére. A fejlesztőnek ezentúl nem kell kiírnia az interfész nevét programozás közben. Az ALIASES részt az osztály definíciójába kell elhelyezni. Oktatóanyag 34

Ebben a példában a fejlesztő definiált egy meret alias-t a lif_letoltheto~meret helyett. Oktatóanyag 35

Bár a fejlesztő ezentúl könnyebben meghívhatja a meret metódust, a lif_letoltheto~meret továbbra is használható. Oktatóanyag 36

Az első esetben egy szimpla értékadás (=) bőven elegendő. A második eset már nem ennyire triviális, mert semmi sem garantálja, hogy egy árucikk egyben egy könyv is. Erre vezeték be a?= operátort. Oktatóanyag 37

Oktatóanyag 38

A fejlesztő az eseményeket a CLASS-EVENTS (osztályszintű) vagy az EVENTS (példányszintű) részben definiálja. Csak EXPORTING paraméterei lehetnek és érték szerint (VALUE) kell átadnia azokat a fejlesztőnek. Oktatóanyag 39

Eseményeket a RAISE EVENT utasítással lehet kiváltani. Oktatóanyag 40

Az eseményt figyelő osztályban a fejlesztőnek definiálnia kell egy metódust, ami azt adott osztály adott eseményére fog reagálni. Ezután be kell regisztrálni a SET HANDLER utasítással az eseményt figyelő osztály egy objektumát az eseményt kiváltó osztály egy objektumára. ACTIVATION rész: Ha az ACTIVATION után egy 'X' áll, akkor beregisztrálja az eseményfigyelést. Ilyenkor ez elhagyható. Ha a fejlesztő törölni szeretné a regisztrációt, akkor az ACTIVATION után egy ' ' (szóközt) kell írni. Oktatóanyag 41

A példában egy felhasználó egy letöltőt használ egy letölthető árucikk letöltésére. Ha a letöltő letöltötte az árucikket, akkor értesíti egy esemény segítségével a felhasználót. Az lcl_letolto osztály csak a letoltve eseményt váltja ki. Az esemény kiváltása a letolt metódusban történik. Oktatóanyag 42

A letolt metódusban a fejlesztő lekérdezi a letoltheto objektum méretét, és kiváltja a letoltve eseményt. A letöltött bájtok számát átadja paraméterként. Oktatóanyag 43

Az lcl_felhasznalo osztály egy példánya figyeli majd az lcl_letolto osztály egy példánya által kiváltott letoltve eseményeket. A kezel_letoltve metódus lezeli majd le az eseményt. Oktatóanyag 44

Ebben az egyszerű példában a fejlesztő csak kiíratja a képernyő a letöltött bájtok számát. Oktatóanyag 45

Először a fejlesztő létrehoz egy letölthető objektumot. Jelen esetben ez az lcl_ekonyv osztály egy példánya. Utána létrehoz egy letöltőt, majd egy felhasználót. A felhasználót beregisztrálja a letöltő eseményeire. Végül a fejlesztő meghívja a letöltő letolt metódusát, azaz elindul a letöltés. Mi történik ez után? A letöltő letölti az elektronikus könyvet, és kiváltja a letoltve eseményt, amire felfigyel a felhasználó. A képernyőn erre megjelenik a letöltött adatok mérete bájtban. Oktatóanyag 46