I. Objektumorientált programozás



Hasonló dokumentumok
Programozási alapismeretek 4.

Már megismert fogalmak áttekintése

III. OOP (objektumok, osztályok)

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

OOP. Alapelvek Elek Tibor

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 2.ELŐADÁS. Objektumorientá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.

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.

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

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

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

9. Játék a véletlennel

Objektumorientált programozás C# nyelven

Objektumorientált szoftverfejlesztés alapjai

Interfészek. PPT 2007/2008 tavasz.

Programozási nyelvek Java

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

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

Web-programozó Web-programozó

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

Két csomag elemeiből lehet a felületet elkészíteni: awt: heavy weight komponensek; swing: light weight komponensek (időben később).

3. Osztályok II. Programozás II

C++ programozási nyelv

Objektumelvű programozás

Eseménykezelés. Szoftvertervezés és -fejleszté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ás C++ -ban 2007/7

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

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

Osztályok. 4. gyakorlat

OOP #14 (referencia-elv)

A szerzõrõl... xi Bevezetés... xiii

Szoftvertechnolo gia gyakorlat

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

JAVA PROGRAMOZÁS 2.ELŐADÁS

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

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

Objektum-orientált programozás

Programozás módszertan p.1/46

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

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

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

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

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

Java V. Osztályszint. lyszintű ű tagok. Példányváltozó. Osztályváltozó. Általános Informatikai Tanszék Utolsó módosítá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

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

Tájékoztató. Használható segédeszköz: -

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

8. gyakorlat Pointerek, dinamikus memóriakezelés

Johanyák Zsolt Csaba: Ugráló gomb oktatási segédlet Copyright 2008 Johanyák Zsolt Csaba

Programozás II gyakorlat. 6. Polimorfizmus

Objektum orientált programozás Bevezetés

Sorosítás (szerializáció) és helyreállítás. 1. Bináris sorosítás és helyreállítás Szükséges névterek Attribútumok. 1.3.

Objektumorientált paradigma és programfejlesztés Bevezető

Absztrakció. Objektum orientált programozás Bevezetés. Általános Informatikai Tanszék Utolsó módosítá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?

Java II. I A Java programozási nyelv alapelemei

C++ programozási nyelv Konstruktorok-destruktorok

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

5. Gyakorlat. struct diak {

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

Objektumorientált paradigma és a programfejlesztés

Vizuális programozás Komplex számok

BME MOGI Gépészeti informatika 8.

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

Eseménykezelés - Lottó játék

VII. Appletek, grafika

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

Dokumentáció. 1. Beadandó feladat

Objektumorientált programozás. Pál László. Sapientia EMTE, Csíkszereda, 2014/2015

Programozás 1. 2.gyakorlat

ELTE SAP Excellence Center Oktatóanyag 1

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

Programozás C++ -ban

Műveletek makrókkal. Makró futtatása párbeszédpanelről. A Színezés makró futtatása a Makró párbeszédpanelről

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

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

Információ megjelenítés Számítógépes ábrázolás. Dr. Iványi Péter

Programozási nyelvek JAVA EA+GY 1. gyakolat

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

1. Egyszerű (primitív) típusok. 2. Referencia típusok

Pénzügyi algoritmusok

Grafikus felhasználói felület (GUI) létrehozása A GUI jelentése Egy egyszerű GUI mintaalkalmazás létrehozása

Gyakorlati vizsgatevékenység A

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

Alkalmazások fejlesztése A D O K U M E N T Á C I Ó F E L É P Í T É S E

Java II. I A Java programozási nyelv alapelemei

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

Tájékoztató. Használható segédeszköz: -

Java és web programozás

Rekurzió. Dr. Iványi Péter

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

Bevezetés a Programozásba II 4. előadás. Adattípusok hordozhatósága

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

Adatstruktúrák, algoritmusok, objektumok

Visual Studio 2015 Express for Windows Desktop Első lépések

Átírás:

I. Objektumorientált programozás 1. Az objektumorientált programozás alapjai Objektumok és objektumosztályok A számítógépes programok közvetve vagy közvetlenül a körülöttünk lévô világ elemeihez illeszkednek, gyakorlati feladatokat oldanak meg. Ilyen feladatnak tekinthetjük az adatbázis-kezelésen, a mérnöki-tudományos számításokon túl akár egy videó lejátszását vagy játékprogramok futtatását is. Ezért célszerû olyan programozási modellt alkalmazni, amely illeszkedik a környezô világ építôköveihez, leírja tulajdonságaikat és viselkedésüket. Ezt az elvet valósítja meg az objektumorientált programozás, röviden OOP. Az OOP olyan módszert nyújt a programozók számára, amely lehetôvé teszi a programok bonyolultságának csökkentését, a megbízhatóság és a hatékonyság növelését. Az OOP objektumokból építi fel a programot. Objektum: a valós világ elemeinek programozási modellje. Az objektum adatokat tárol, és kérésre tevékenységeket végez. Lássunk példát objektumokra! Az iskolában diákok tanulnak. Egy diák adataihoz tartozik a neve, születési ideje, lakcíme. A diák a tanórán felel, hiányzást igazol, tornázik. A diák objektummodelljének többek között ezeket az adatokat kell tartalmaznia, ezeket a tevékenységeket végeznie. A grafikus felhasználói felület programozásakor is objektummal dolgozunk. Megadjuk például egy parancsgomb helyzetét, méretét, feliratát. Elkészítjük eseménykezelô eljárásait. A Programozási ismeretek tankönyv bemutatja a grafikus felhasználói felület számos objektumát. Egy osztályba sok diák jár, a programablakban több parancsgombot helyezhetünk el. Programjainkban gyakran sok objektum tárol ugyanolyan adatokat, és végez ugyanolyan tevékenységeket. Az egymáshoz hasonló objektumokat osztályokba soroljuk. Objektumosztály: az egymáshoz hasonló objektumok általánosítása, gyûjtôfogalma. Az objektumosztály határozza meg a hozzá tartozó objektumok típusát. Az objektum által tárolt adatokat szokás az objektum mezôinek, adattagjainak vagy tagváltozóinak hívni. Programjainkban az osztályszintû változók jelentik az objektumok mezôit. Az objektumokat függvények vagy eljárások hívásával kérjük meg a tevékenységek végzésére. Ezek az alprogramok az objektum metódusai. A metódusokat gyakran tagfüggvényeknek, illetve eljárástagoknak nevezzük. Az objektum tehát a hozzá tartozó mezôk és metódusok összessége. A mezôk és metódusok együttesen alkotják az objektum tagjait. A metódusok hívása helyett azt is mondhatjuk, hogy üzenetet küldünk az objektumnak, amely a metódus végrehajtásával válaszol az üzenetre. 9

I. Objektumorientált programozás A szakirodalomban néha csak azokat a változókat nevezik mezôknek, illetve azokat az alprogramokat hívják metódusoknak, melyek az osztályszintûnél nagyobb hatókörrel rendelkeznek (kívülrôl is elérhetôk). Könyvünkben követjük a Visual Studio szóhasználatát, mely szerint mezônek tekintjük az osztályszinten (tehát az eljárásokon/függvényeken kívül) deklarált változókat, illetve metódusnak minden, az osztályban definiált alprogramot. Az objektumok az objektumosztály konkrét egyedei Minden egyes objektum egy-egy jól meghatározott osztályhoz tartozik. Az osztály forráskódjában definiáljuk a hozzá tartozó objektumok mezôit és metódusait. Az egyes objektumok a megfelelô objektumosztály példányai. A diák objektumosztály egy példánya (objektuma) Kovács István vagy Nagy Irén. A programablakban a parancsgomb (Button) objektumosztály példányait helyezzük el (Button1, Button2 stb.). Az objektumok és objektumosztályok használata megkönnyíti az összetett, bonyolult programok elkészítését, mert összefogja, egységbe zárja az összetartozó elemeket. Egységbezárás (encapsulation): az összetartozó adatokat és a hozzájuk kapcsolódó tevékenységeket egyetlen objektumban fogjuk össze. 1. gyakorlat. Keressünk az interneten objektumorientált programozási nyelveket! Telepítsük egy ilyen nyelv fejlesztôrendszerét! A továbbiakban szükségünk lesz rá. Futóverseny A következô leckékben egy futóverseny szimulációjával mutatjuk be az objektumorientált programozás alapjait. A program kirajzolja a képernyôre a pályát, amelyen különbözô színû, sorszámokkal jelképezett versenyzôk futnak végig, balról jobbra. A sötét háttér miatt csak világos színeket választunk. Futás közben a versenyzôk helyzetét egy ciklussal változtatjuk. A ciklusban minden versenyzô véletlenszerû mértékben lép elôre. A verseny addig tart, amíg egy léptetés során egy vagy több versenyzô be nem ér a célba. Ôket mind gyôztesnek tekintjük, tehát megengedjük a holtversenyt is. A verseny végén kiírjuk a gyôztes versenyzô(k) sorszámát. A mûködô programot a forrásfájlok között található Futóverseny mutatja be. A futóverseny képernyôképe 10

1. Az objektumorientált programozás alapjai A futóverseny objektumai és feladataik A programban szereplô mezôket és metódusokat nagy kezdôbetûvel írjuk Az OOP szemléletmódjának megfelelôen osszuk fel a végrehajtáshoz szükséges feladatokat kis egységekre, azaz alakítsuk ki a megvalósításhoz szükséges objektumokat! Közben arra törekszünk, hogy minden objektum lehetôleg önállóan végezze el a feladatát, a lehetô legkisebb mértékben támaszkodjon más objektumokra. Nyilván szükségünk lesz versenyzôobjektumokra, amik a versenyzôket jelképezik. Kialakítunk továbbá egy versenyobjektumot, amely a verseny indítását, adminisztrálását végzi. Végül célszerû létrehozni egy pályaobjektumot is, amely a pálya kirajzolásáról, adatainak (hosszának) tárolásáról gondoskodik. A futóverseny objektumai, a mezôk és metódusok megadásával: Pályaobjektum: a versenypályát jelképezi. Hossz mezô: a pálya hossza. A versenyzôk használják fel a cél elérésének ellenôrzéséhez. Létrehoz metódus: a versenyzôk számának megfelelôen méretezi az ablakot, és kirajzolja a képernyôre a célvonalat. Az ablak szélessége alapján meghatározza a Hossz értékét. A versenyzôk számát argumentumként adjuk meg. Versenyzôobjektum: egy versenyzô adatait és metódusait tartalmazza. Mezôk: Mez: a versenyzô mezének sorszáma. Szín: a versenyzô mezének színe. Helyzet: a versenyzô pozíciója a pályán. Színek(): a lehetséges színeket tartalmazó tömb. Vélszám: véletlenszám-objektum a szín választásához, illetve a helyzet változtatásához. Metódusok: Létrehoz: inicializálja a mezôket. A metódus argumentuma a versenyzô mezének sorszáma. A színt véletlenszerûen választja ki. 11

I. Objektumorientált programozás Fut: lépteti a versenyzôt a verseny során. Véletlenszerûen választott mértékben megnöveli a Helyzet mezô értékét. Ha a versenyzô beér a célba, akkor hozzáadja a mez sorszámát a versenyobjektum gyôzteseket tartalmazó halmazához. Kiír: megjeleníti a képernyôn a versenyzô helyzetét. A Fut metódus hívja. Versenyobjektum: elindítja és vezérli a versenyt. Mezôk: Pálya: pályaobjektum. Gyôztesek: a gyôztesek mezének sorszámát tartalmazó halmaz. VersenyzôkSzáma: a versenyzôk száma. Versenyzôk(): a versenyzôobjektumokat tartalmazó tömb. Metódusok: Start: megkérdezi a felhasználótól a versenyzôk számát, majd létrehozza a versenyzôobjektumokat, és meghívja Létrehoz metódusukat. Létrehozza a pályaobjektumot, amelynek meghívja a Létrehoz metódusát. A Futás metódus hívásával elindítja a versenyt, a végén pedig az Eredmény metódussal kiíratja az eredményt. Futás: magát a versenyt jelképezi. Ciklussal lépteti a versenyzôket mindaddig, amíg valamelyikük be nem ér a célba (egy cikluson belül esetleg egyszerre több is). Eredmény: a verseny végén kilistázza a gyôztes versenyzôket. Ehhez a Gyôztesek halmazt használja fel, melybe a célba érô versenyzôk beírták mezük sorszámát. Vár: a megadott idôtartamra leállítja a végrehajtást, egyébként a versenyt nem tudnánk követni a képernyôn. A Futás metódus hívja. A szerepek kiosztása természetesen másként is elvégezhetô. Például kialakíthattunk volna külön objektumot a gyôztes versenyzôk nyilvántartására és kiírására, a versenyzôk helyett a versenyobjektum adhatná a célba beérôk sorszámát a gyôztesek halmazához, a versenyzôk léptetését végezhetnék idôzítôobjektumokkal stb. A programot konzolalkalmazásként készítjük el, így a grafikus felhasználói felület elemei nem zavarják az objektumok áttekintését. A konzolalkalmazás indítja el a futóversenyt úgy, hogy a Main eljárás létrehozza a versenyobjektumot, majd meghívja a Start metódust. A futóverseny programját fokozatosan építjük fel. A közben felmerülô problémák megoldásához egyre újabb OOP-eszközöket ismerünk meg. 2. gyakorlat. Írjuk meg a futóverseny programját OOP-eszközök nélkül! Ábrázolás osztálydiagramon Programunkban osztályokat definiálunk a tervben szereplô objektumok alapján. Az osztályok szerkezetét úgynevezett osztálydiagrammal tesszük áttekinthetôvé. Az osztálydiagram fontos eleme az objektumorientált programok tervezését segítô UML-nek (Unified Modeling Language: egységes modellezô nyelv). Az osztálydiagram téglalapban tünteti fel az osztály nevét, mezôit és metódusait. A mezôket és metódusokat vízszintes vonallal választjuk el egymástól. 12

1. Az objektumorientált programozás alapjai 3. gyakorlat. A futóverseny leírása alapján jelöljük be az alábbi osztálydiagramra, hogy egyegy osztály objektumai mely másik osztály mezôit kérdezik le vagy módosítják, illetve mely metódusokat hívják! Melyik osztály objektuma hoz létre egy másik osztályhoz tartozó objektumot vagy objektumokat? A mellékelt osztálydiagramon csak az általunk definiált osztályokat tüntettük fel. Nem ábrá zol tuk külön a fejlesztôrendszerben rendelkezésünkre álló osztályokat (véletlenszám, halmaz, tömb). Az osztálydiagramok mellett gyakran használják az objektumdiagramot is. Az objektumdiagram az objektumokat téglalapokban ábrázolja, feltüntetve az objektum nevét, osztályát, továbbá mezôinek értékét. Az objektum nevét, osztályát aláhúzzuk, és kettôsponttal választjuk el egymástól. Ha nem lényeges az objektum neve, akkor el is hagyhatjuk. Az UML-re a késôbbiekben még visszatérünk, kibôvítjük az osztály- és objektumdiagram fogalmát. A futóverseny osztálydiagramja Az osztályok nevének kezdôbetûje (T) jelzi, hogy új típust definiálunk. A pályaobjektum kétféle ábrázolási módja Objektumosztály definiálása, objektumok létrehozása Objektumosztályt az OSZTÁLY OSZTÁLY VÉGE kulcsszavak között definiálunk a forráskódban. A definícióban a mezôk (változók) deklarációi és metódusok (alprogramok) definíciói szerepelnek a szokásos módon: OSZTÁLY Osztálynév változók (mezôk) deklarálása eljárások, függvények (metódusok) definiálása OSZTÁLY VÉGE Mivel az osztály a hozzá tartozó objektumok típusa, ezért könyvünkben az osztályok nevét T betûvel kezdjük. A TPálya osztály definíciója például (vázlatosan): OSZTÁLY TPálya VÁLTOZÓ Hossz MINT Egész ELJÁRÁS Létrehoz(VersenyzôkSzáma MINT Egész) az ablak méretének módosítása a célvonal kirajzolása ELJÁRÁS VÉGE OSZTÁLY VÉGE 13

I. Objektumorientált programozás Az objektumosztályokat definiálhatjuk a Module1.vb, illetve Form1.vb kódfájlban (a Module1 modul, illetve a Form1 osztály definícióján kívül), de célszerû inkább külön kódfájlt hozzáadni a projekthez (Project/Add New Item, Class). Egy kódfájlban több osztálydefiníció is szerepelhet, azonban áttekinthetôbb programot kapunk, ha minden egyes kódfájl csak egyetlen osztály definícióját tartalmazza. A View/Other Windows/Class View paranccsal megnyitott Class View munkaablakban könnyen áttekinthetjük az osztályokat (az ôsosztályokkal együtt lásd késôbb). A Class View munkaablakot csak a Professional változatban találjuk meg. 4. gyakorlat. Hozzunk létre új konzolalkalmazást! Adjuk hozzá a TPálya kódfájlt, amelyben definiáljuk a TPálya osztályt! A futóverseny leírásának megfelelôen deklaráljuk a Hossz mezôt, majd készítsük el a Létrehoz metódus kódját! Ha a fejlesztôrendszer esetleg Public megjelöléssel látja el az egyes mezôket vagy metódusokat, akkor ezzel most ne törôdjünk! Az objektumokat egyelôre a konzolalkalmazás moduljának (Module1) Main metódusában hozzuk létre, a már jól ismert módon. Elôször deklaráljuk az objektumra hivatkozó, az osztálynak megfelelô típusú változót, majd az Új operátorral elkészítjük az objektumot, és hozzárendeljük a változóhoz: Objektumnév MINT Objektumosztály Objektumnév = Új Objektumosztály A pályaobjektum létrehozása például: VÁLTOZÓ Pálya MINT TPálya Pálya = Új TPálya Class View a Visual Basic-ben Vegyük figyelembe, hogy az Objektumnév itt egy hivatkozás típusú változó, amely az objektumnak a memóriában elfoglalt helyét mutatja (lásd például a Programozási ismeretek tankönyvet). Az ilyen változót a továbbiakban objektumváltozónak nevezzük. Az objektumváltozó deklarálásakor még nem jön létre maga az objektum, majd csak az Új operátor készíti el. Egy objektum létrehozását az objektumosztály példányosításának szokás nevezni. A példányosítás után ne felejtsük el meghívni a Létrehoz metódust, amely elvégzi az ilyenkor szükséges tevékenységeket. A metódust szabály szerint az objektum nevével minôsítjük: Pálya.Létrehoz(VersenyzôkSzáma) Az objektumok létrehozásának és inicializálásának ez a szétválasztása sok hibalehetôséget rejt magában, például könnyen megfeledkezhetünk róla. Hamarosan megismerkedünk az inicializálást automatikusan elvégzô metódus készítésének módjával. 5. gyakorlat. Írjuk meg a pályaobjektumot létrehozó és a Létrehoz metódust meghívó kódot! Futtassuk az alkalmazást! Programozási összefoglaló: Objektumok és objektumosztályok 14