Elemi Alkalmazások Fejlesztése II.

Hasonló dokumentumok
Objektum elvű alkalmazások fejlesztése. Öröklődés. Készítette: Sike Sándor Gregorics Tibor

Objektum elvű alkalmazások fejlesztése. Öröklődés. Készítette: Sike Sándor Gregorics Tibor

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

Osztályok. 4. gyakorlat

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

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

Osztály és objektum fogalma

Programozási nyelvek Java

Tervminták I. (Sablonfüggvény, Stratégia, Egyke, Látogató) Testek térfogata Lények túlélési versenye

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

4. Öröklődés. Programozás II

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

OAF Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1.

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

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

Származtatási mechanizmus a C++ nyelvben

Programozás alapjai II. (9. ea) C++ többszörös öröklés, cast, perzisztencia

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

Objektumok inicializálása

Objektumorientált programozás C# nyelven

BME MOGI Gépészeti informatika 8.

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II / 19

Programozás C++ -ban 2007/4

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

Programozási technológia

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.

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamá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?

Programozás II gyakorlat. 8. Operátor túlterhelés

Java és web programozás

Java és web programozás

Objektumelvű programozás

3. Osztályok II. Programozás II

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

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

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

Java és web programozás

Programozás II. ATM példa Dr. Iványi Péter

Programozás II gyakorlat. 6. Polimorfizmus

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

Objektumorientált programozás C# nyelven

Pénzügyi algoritmusok

1. Egy 30 cm sugarú körszelet körívének hossza 120 cm. Mekkora a körív középponti szöge?

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

JAVA PROGRAMOZÁS 2.ELŐADÁS

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

BME MOGI Gépészeti informatika 6.

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?

Objektumorientált programozás C# nyelven

Öröklés és Polimorfizmus

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

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

C++ programozási nyelv

500. AA Megoldó Alfréd AA 500.

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

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

PHP5 Új generáció (2. rész)

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

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

A C++ öröklés. (Előfeltétel: 12. tétel ismerete)

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

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

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

Objektumorientált programozás C# nyelven

OOP: Java 8.Gy: Gyakorlás

128. AA Megoldó Alfréd AA 128.

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

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

OOP #14 (referencia-elv)

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

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

osztályok kapcsolata Származtatatás C++ Izsó Tamás március 19. Izsó Tamás Származtatatás/ 1

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

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.

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

Programozási nyelvek Java

C++ programozási nyelv Konstruktorok-destruktorok

Programozás II gyakorlat. 4. Öröklődés

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

Objektumorientált programozás C# nyelven III.

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 módszertan

Események C#-ban Krizsán Zoltán iit

6 MATEMATIKA A 9. SZAKISKOLAI ÉVFOLYAM TANÁRI KÉZIKÖNYV

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

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

JAVA PROGRAMOZÁS 3.ELŐADÁS

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

Emlékeztető: a fordítás lépései. Szimbólumtábla-kezelés. Információáramlás. Információáramlás. Információáramlás.

Kompetencia Alapú Levelező Matematika Verseny

Informatikai Kar. 4. fejezet. Giachetta Roberto

OOP és UML Áttekintés

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

STL gyakorlat C++ Izsó Tamás május 9. Izsó Tamás STL gyakorlat/ 1

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

Kalapácsvetés 2016 szöveges

500. CC Megoldó Alfréd CC 500.

Bánsághi Anna

Átírás:

Elemi Alkalmazások Fejlesztése II. Osztályok közötti kapcsolatok öröklődés asszociáció aggregáció kompozíció

1. Feladat Készítsünk programot, amellyel testek térfogatát határozhatjuk meg, illetve megadhatjuk azt is, hogy az egyes testfajtákból hány objektum létezik! A lehetséges fajták: szabályos sokszögek: gömb, kocka, tetraéder, oktaéder; hasáb jellegű testek: henger, négyzet alapú hasáb, szabályos háromszög alapú hasáb; gúla jellegű testek: kúp, négyzetes gúla.

2. A megoldás menete Az előző órán megismert megoldást módosítsuk. Hasáb jellegű testek esetén az alapterület kiszámítását egy beágyazott objektumra delegáljuk. Így elérhető, hogy négyzet alapú hasáb, illetve gúla esetén ugyanazt a műveletet használjuk fel, nem kell ugyanazt a megvalósítást elkészítenünk két különböző osztályban. Ugyanez igaz háromszög, illetve kör alap esetén is. Az alapterület kiszámítását az Alap absztrakt osztály deklarálja, amit a konkrét Kor, Negyzet, Haromszog osztályokban valósítunk meg. A beágyazott objektum ennek megfelelően az Alap osztályból származtatott konkrét osztály példánya lesz.

3. Osztálydiagram Test Gömb Szabályos Hasáb Henger Kocka Kúp Gúla Négyzetes Tetraéder NGúla Háromszöges Oktaéder

Test # méret : double - darab : int # Test(méret : double) + Test() + Térfogat() : double + Darab() : int Szabályos Hasáb - darab : int # Szabályos(méret : double) + Szabályos() + Térfogat() : double # Szorzó() : double + Darab() : int # magasság : double - darab : int # Hasáb(méret : double, magasság : double) + Hasáb() + Térfogat() : double + Darab() : int # alap Alap + Terület(m : double) : double

Alap + Terület(m : double) : double Kör + Terület(m : double) : double Négyzet + Terület(m : double) : double Háromszög + Terület(m : double) : double

Szabályos - darab : int # Szabályos(méret : double) + Szabályos() + Térfogat() : double # Szorzó() : double + Darab() : int Gömb Kocka Tetraéder Oktaéder - darab : int - szorzó : double = 4π/3 + Gömb(méret : double) + Gömb() # Szorzó() : double + Darab() : int - darab : int + Kocka(méret : double) + Kocka() # Szorzó() : double + Darab() : int - darab : int - szorzó : double = 2/12 + Tetraéder(méret : double) + Tetraéder() # Szorzó() : double + Darab() : int - darab : int - szorzó : double = 2/3 + Oktaéder(méret : double) + Oktaéder() # Szorzó() : double + Darab() : int

Hasáb # magasság : double - darab : int # Hasáb(méret : double, magasság : double) + Hasáb() + Térfogat() : double + Darab() : int Gúla - darab : int # Gúla(méret : double, magasság : double) + Gúla() + Térfogat() : double + Darab() : int

Hasáb # magasság : double - darab : int # Hasáb(méret : double, magasság : double) + Hasáb() + Térfogat() : double + Darab() : int - darab : int Henger - darab : int Négyzetes - darab : int Háromszöges + Henger(méret : double, magasság : double) + Henger() + Darab() : int + Négyzetes(méret : double, magasság : double) + Négyzetes() + Darab() : int + Háromszöges(méret : double, magasság : double) + Háromszöges() + Darab() : int

- darab : int Gúla # Gúla(méret : double, magasság : double) + Gúla() + Térfogat() : double + Darab() : int - darab : int Kúp - darab : int NGúla + Kúp(méret : double, magasság : double) + Kúp() + Darab() : int + NGúla(méret : double, magasság : double) + NGúla() + Darab() : int

4. Osztályok Nem változnak az előző megoldáshoz képest: Test, Szabalyos, Gomb, Kocka, Tetraeder, Oktaeder.

5. Az Alap osztály class Alap public: virtual double Terulet(double m) const = 0; ~Alap() protected: Alap() ;

6. A Kor osztály class Kor : public Alap public: double Terulet(double m) const return PI * m * m; ;

7. A Negyzet osztály class Negyzet : public Alap public: double Terulet(double m) const return m * m; ;

8. A Haromszog osztály class Haromszog : public Alap public: double Terulet(double m) const return SQ3 * m * m / 4.0;

9. A Hasab osztály class Hasab : public Test public: ~Hasab(); double Terfogat() const; static int Darab() return darab; protected: Hasab(double meret, double magassag); protected: double magassag; Alap *alap; private: static int darab; ;

int Hasab::darab = 0; Hasab::Hasab(double meret, double magassag) : Test(meret) this->magassag = magassag; darab++; Hasab::~Hasab() darab--; double Hasab::Terfogat() const return alap->terulet(meret) * magassag;

10. A Gula osztály class Gula : public Hasab public: ~Gula(); double Terfogat() const; static int Darab() return darab; protected: Gula(double meret, double magassag); private: static int darab; ;

int Gula::darab = 0; Gula::Gula(double meret, double magassag) : Hasab(meret, magassag) darab++; Gula::~Gula() darab--; double Gula::Terfogat() const return (alap->terulet(meret) * magassag) / 3.0;

11. A Henger osztály class Henger : public Hasab public: Henger(double meret, double magassag); ~Henger(); static int Darab() return darab; private: static int darab; ;

int Henger::darab = 0; Henger::Henger(double meret, double magassag) : Hasab(meret, magassag) darab++; alap = new Kor(); Henger::~Henger() darab--; delete alap;

12. A Negyzetes osztály class Negyzetes : public Hasab public: Negyzetes(double meret, double magassag); ~Negyzetes(); static int Darab() return darab; private: static int darab; ;

int Negyzetes::darab = 0; Negyzetes::Negyzetes(double meret, double magassag) : Hasab(meret, magassag) darab++; alap = new Negyzet(); Negyzetes::~Negyzetes() darab--; delete alap;

13. A Haromszoges osztály class Haromszoges : public Hasab public: Haromszoges(double meret, double magassag); ~Haromszoges(); static int Darab() return darab; private: static int darab; ;

int Haromszoges::darab = 0; Haromszoges::Haromszoges(double meret, double magassag) : Hasab(meret, magassag) darab++; alap = new Haromszog(); Haromszoges::~Haromszoges() darab--; delete alap;

14. A Kup osztály class Kup : public Gula public: Kup(double meret, double magassag); ~Kup(); static int Darab() return darab; private: static int darab; ;

int Kup::darab = 0; Kup::Kup(double meret, double magassag) : Gula(meret, magassag) darab++; alap = new Kor(); Kup::~Kup() darab--; delete alap;

15. A NGula osztály class NGula : public Gula public: NGula(double meret, double magassag); ~NGula(); static int Darab() return darab; private: static int darab; ;

int NGula::darab = 0; NGula::NGula(double meret, double magassag) : Gula(meret, magassag) darab++; alap = new Negyzet(); NGula::~NGula() darab--; delete alap; A főprogram értelemszerűen nem változik az előző megoldáshoz képest.

16. Javítás Vegyük észre, hogy Alap típusú elemekből elég egyetlen példányt létrehoznunk, azt közösen használhatják a megfelelő testek. Tehát elég egyetlen Kör, egytelen Négyzet és egyetlen Háromszög objektum. A közös Kör objektumot használhatja az összes kör alapú test. (Eddig minden test külön objektumot hozott létre.)

Alap + Terület(m : double) : double Kör Négyzet Háromszög - példány : Kör - példány : Négyzet - példány : Háromszög + Terület(m : double) : double + Példány() : Kör + Terület(m : double) : double + Példány() : Négyzet + Terület(m : double) : double + Példány() : Háromszög

17. A Kor osztály class Kor : public Alap public: double Terulet(double m) const return PI * m * m; static Kor *Peldany(); private: static Kor *peldany; Kor() ; Kor *Kor::peldany = 0; Kor *Kor::Peldany() if ( peldany == 0 ) return peldany; peldany = new Kor();

18. A Negyzet osztály class Negyzet : public Alap public: double Terulet(double m) const return m * m; static Negyzet *Peldany(); private: static Negyzet *peldany; Negyzet() ; Negyzet *Negyzet::peldany = 0; Negyzet *Negyzet::Peldany() if ( peldany == 0 ) peldany = new Negyzet(); return peldany;

19. A Haromszog osztály class Haromszog : public Alap public: double Terulet(double m) const return SQ3 * m * m / 4.0; static Haromszog *Peldany(); private: static Haromszog *peldany; Haromszog() ; Haromszog *Haromszog::peldany = 0; Haromszog *Haromszog::Peldany() if ( peldany == 0 ) peldany = new Haromszog(); return peldany;

Ezután az összes Hasáb jellegű osztály konstruktorában a new helyett az osztályszintű Peldany művelet szerepel. A destruktorban pedig elmarad a felszabadítás. Például a Henger osztályban: Henger::Henger(double meret, double magassag) : Hasab(meret, magassag) darab++; alap = Kor::Peldany(); Henger::~Henger() darab--;

20. Asszociáció és aggregáció implementálása Ezeket a kapcsolatokat mutatók segítségével lehet megvalósítani, ahogy a Hasáb osztály és az Alap osztály kapcsolatánál láthattuk. Ha a multiplicitás többszörös, akkor egy megfelelő méretű mutató tömböt kell felvenni. 21. Kompozíció implementálása A kompozíció attribútum jellegű kapcsolat, ezért a kompozíciós objektum beágyazott objektumként (adattag) jelenik meg az összetett objektumban. Ha egyéb, gyakorlati okokból mutató(ka)t használunk, akkor az összetett objektum létrehozásakor, a konstruktorban, létre kell hoznunk a beágyazott objektumokat is, és a mutatókat csak az objektum megszűnésekor, a destruktorban, változtathatjuk meg, szabadíthatjuk fel.

Rendszer név Bolygó név Csillag class Rendszer Rendszer(string nev, int meret, string nevek[]); ~Rendszer();... private: Csillag csillag; int bolgyoszam; Bolygo* bolygok[]; string nev; ;

class Bolygo Bolygo(string nev);... ; Rendszer::Rendszer(string nev, int meret, string nevek[]) this.nev = nev; bolygoszam = meret; // csillag automatikusan létrejön bolygok = new Bolygo *[bolygoszam]; for ( int i = 0; i < bolygoszam; i++ ) bolygok[i] = new Bolygo(nevek[i]); Rendszer::~Rendszer() delete [] bolygok;