Informatikai Kar. 4. fejezet. Giachetta Roberto

Hasonló dokumentumok
Szoftvertechnológia 4. előadás. Objektumorientált tervezés: általánosítás. Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

Alkalmazott modul: Programozás 11. előadás. Objektumorientált programozás: öröklődés

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

Alkalmazott modul: Programozás 10. előadás. Objektumorientált programozás: tervezés és megvalósítás

Informatikai Kar. 3. fejezet. alapismeretek. Giachetta Roberto

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

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

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

Származtatási mechanizmus a C++ nyelvben

Programozási technológia

Szoftvertechnológia 7. előadás. Objektumorientált tervezés: végrehajtás. Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

C++ programozási nyelv

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

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

Osztály és objektum fogalma

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

Elemi Alkalmazások Fejlesztése II.

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

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ási nyelvek Java

Virtuális függvények (late binding)

Bánsághi Anna


Objektumorientált programozás C# nyelven

C# osztályok. Krizsán Zoltán

Eseményvezérelt alkalmazások fejlesztése II. A.NET keretrendszer és a C# programozási nyelv. Objektumorientált programozási nyelvek A Smalltalk nyelv

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

Objektumorientált programozás C# nyelven III.

JAVA PROGRAMOZÁS 3.ELŐADÁS

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

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

Programozás II gyakorlat. 7. Példák a polimorfizmus alkalmazásaira

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

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

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

Szoftvertechnológia 6. előadás. Objektumorientált tervezés: állapotkezelés. Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

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

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

C#, OOP. Osztályok tervezése C#-ban

Programozás II. labor

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

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

117. AA Megoldó Alfréd AA 117.

1 Rev 4. A C++ programozás alapjai- segédlet

Programozás C++ -ban 2007/4

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

Webes alkalmazások fejlesztése 8. előadás. Webszolgáltatások megvalósítása (ASP.NET WebAPI)

JAVA nyelvi alapok. Adatbányászati technikák (VISZM185) Dávid István

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

BME MOGI Gépészeti informatika 8.

Programozási nyelvek II.: JAVA, 11. gyakorlat

Szoftvertechnológia 3. előadás. Objektumorientált tervezés: alapismeretek. Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

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

Objektumorientált programozás C# nyelven

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

Objektumorientált programozás C# nyelven

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

Objektumorientált programozás C# nyelven

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

Objektumorientált programozás C# nyelven

Programozási nyelvek Java

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

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

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

Bevezetés a Programozásba II 10. előadás. Dinamikus memóriakezelés

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

3. Osztályok II. Programozás II

Öröklés és Polimorfizmus

500. AA Megoldó Alfréd AA 500.

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

500. CC Megoldó Alfréd CC 500.

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

VB C++ C# JScript J# Common Language Specification. ADO.NET and XML. Base Class Library. Common Language Runtime. Operating System

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

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

Objektumok inicializálása

Programozási Paradigmák és Technikák

Bánsághi Anna

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

A feladat lényege egy felhasználói típusnak a zsák típusnak a megvalósítása.

Programozás BMEKOKAA146. Dr. Bécsi Tamás 1. Előadás

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

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

Java Programozás 11. Ea: MVC modell

Feladat. Ternáris fa. Típusspecikáció. Reprezentáció. Absztrakt implementáció. Érdi Gerg EAF II. 4/3.

Objektum elvű alkalmazások fejlesztése Kifejezés lengyel formára hozása és kiértékelése

Objektum orientált alapelvek

2. Beadandó feladat dokumentáció

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

OOP: Java 5.Gy: Osztály, referencia, konstruktor

C++ programozási nyelv

228. AA Default Konstruktor AA 228.

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

Alkalmazott modul: Programozás 9. előadás. Strukturált programozás: dinamikus adatszerkezetek

Az OO paradigma. Mitől OO egy program? Objektum Osztály Öröklődés

Java VII. Polimorfizmus a Java nyelvben

128. AA Megoldó Alfréd AA 128.

Java és web programozás

Java VII. Polimorfizmus a Java nyelvben

Átírás:

Informatikai Kar 4. fejezet Giachetta Roberto

Feladat (Triangle, Square, Rectangle, Hexagon) _a, _b _a), a area perimeter) 4:2

- _a :int Hexagon + Hexagon(int) + area() :double {query} + perimeter() :int {query} - _a :int - _b :int Rectangle + Rectangle(int, int) + area() :int {query} + perimeter() :int {query} - _a :int Triangle + Triangle(int) + area() :double {query} + perimeter() :int {query} - _a :int Square + Square(int) + area() :int {query} + perimeter() :int {query} 4:3

Feladat UniversityStudent (UniversityTeacher Neptun a kurzus (Course 4:4

UniversityTeacher - _name :string - _neptuncode :string - _neptunpassword :string - _courses :vector<course> + UniversityTeacher(string) + name() :string {query} + neptuncode() :string {query} + courses() :vector<course> {query} + newcourse(course) :void -_teacher -_students 0..maxCount() UniversityStudent - _name :string - _neptuncode :string - _neptunpassword :string - _courses :vector<course> + UniversityStudent(string) + name() :string {query} + neptuncode() :string {query} + courses() :vector<course> {query} + newcourse(course) :void + numberofcredits() :int {query} Course -_courses * - _coursename :string - _teacher :UniversityTeacher - _credits :int - _maxcount :int - _students :vector<universitystudent> + Course(string, UniversityTeacher, int, int) + newstudent(universitystudent) :bool + name() :string {query} + teacher() :UniversityTeacher {query} + credits() :int {query} + maxcount() :int {query} + currentcount() :int {query} -_courses * 4:5

Az objektumez 4:6

Pl.: kurzusokat tart, 4:7

Pl.: ember tanul, van neve kockul 4:8

nak (generalization) nak (specialization) 4:9

nek (base, superclass nak (descendant, subclass gyereknek (child nek (parent), illetve ciklikus 4:10

(inheritance class < > : < > < > { < > }; 4:11

Pl.: class SuperClass { public: int value; SuperClass() { value = 1; } // konstruktor void setvalue(int v) { value = v; } int getvalue() { return value; } }; SuperClass super; cout << super.value; // 1 super.setvalue(5); cout << super.value; // 5 4:12

Pl.: class SubClass : public SuperClass value, // setvalue(int), getvalue() tagokat { public: int othervalue; SubClass() { value = 2; othervalue = 3; } void setothervalue(int v) { othervalue = v; } int getothervalue() { return othervalue; } }; 4:13

Pl.: SubClass sub; cout << sub.value; // 2 sub.setvalue(5); cout << sub.value; // 5 cout << sub.othervalue; // 3 sub.setothervalue(4); cout << sub.getothervalue(); // 4 4:14

public rejtett (private (protected # 4:15

Pl.: class SuperClass { private: int value; public: SuperClass() { value = 1; } void setvalue(int v) { value = v; } int getvalue() { return value; } }; SuperClass super; cout << super.getvalue(); // 1 super.setvalue(5); cout << super.getvalue(); // 5 4:16

Pl.: class SubClass : public SuperClass { // a value private: int othervalue; public: SubClass() { setvalue(2); value } othervalue = 3; }; 4:17

Pl.: SubClass sub; cout << sub.getvalue(); // 2 sub.setvalue(5); cout << sub.getvalue(); // 5 cout << sub.getothervalue(); // 3 sub.setothervalue(4); cout << sub.getothervalue(); // 4 4:18

Pl.: class SuperClass { protected: int value; public: SuperClass() { value = 1; } void setvalue(int v) { value = v; } int getvalue() { return value; } }; SuperClass sup; cout << sup.getvalue(); // 1 sup.setvalue(5); cout << sup.getvalue(); // 5 4:19

Pl.: class SubClass : public SuperClass { private: int othervalue; public: SubClass() { value = 2; othervalue = 3; } }; 4:20

Feladat _a Shape), amelybe protected) _a 4:21

Shape # _a :int Hexagon Rectangle Square Triangle + Area() :double {query} + Hexagon(int) + Perimeter() :int {query} - _b :int + Area() :int {query} + Perimeter() :int {query} + Rectangle(int, int) + Area() :int {query} + Perimeter() :int {query} + Square(int) + Area() :double {query} + Perimeter() :int {query} + Triangle(int) 4:22

class Shape { protected: int _a; }; class Ractangle : public Shape { private: int _b; public: Rectangle(int a, int b) { _a = a; _b = b; } }; 4:23

vagy elrejtik, vagy a destruktor 4:24

Pl.: class SuperClass { int getdefaultvalue() { return 1; } int computedoubledefault() { return 2 * getdefaultvalue(); }; } Superclass super; cout << sub.computedoubledefault(); 4:25

class SubClass : public SuperClass { }; int getdefaultvalue() { return 2; } SubClass sub; cout << sub.computedoubledefault(); getdefaultvalue() == 2 4:26

Feladat (perimeter area _a) 4:27

# _a :int Shape + Shape(int) + area() :double {query} + perimeter() :int {query} Hexagon Rectangle Square Triangle + Hexagon(int) + area() :double {query} + perimeter() :int {query} - _b :int + Rectangle(int, int) + area() :int {query} + perimeter() :int {query} + Square(int) + area() :int {query} + perimeter() :int {query} + Triangle(int) + area() :double {query} + perimeter() :int {query} 4:28

class Shape { protected: int _a; public: Shape(int a) { _a = a; } double area() const { return 0; } double perimeter() const { return 0; } }; 4:29

class Rectangle : public Shape { private: int _b; public: Rectangle(int a, int b) : Shape(a) { _b = b; } double area() const { return _a * _b; } double perimeter() const { return 2 * (_a + _b); } }; 4:30

Polimorfizmus subtyping), vagy ) polimorfizmusnak (polymorphism, pl. a SubClass sub; SuperClass ) 4:31

Polimorfizmus pl.: SuperClass* super = new SuperClass(); cout << super->getvalue(); // 1 pl.: SuperClass* super = new SubClass(); cout << super->getvalue(); // 2 4:32

Polimorfizmus Pl.: SuperClass* super1 = new SubClass(); SuperClass, SubClass SuperClass* super2 = new SuperClass(); 4:33

Polimorfizmus pl.: SuperClass* super = new SuperClass(); cout << super->getvalue(); // 1 delete super; super = new SubClass(); cout << super->getvalue(); // 2 pl.: cout << super->getothervalue(); // getothervalue 4:34

Polimorfizmus Pl.: SuperClass* array[3]; array[0] = new SuperClass(); array[1] = new SubClass(); array[2] = new SubClass(); for (int i = 0; i < 3; i++) cout << array[i]->getvalue(); // 1 2 2 4:35

ezt nek (dynamic binding amennyiben (override (virtual, vagy (sealed) 4:36

Pl.: class SuperClass { protected: int value; public: SuperClass() { value = 1; } void setvalue(int v) { value = v; } }; virtual void getvalue() { return value; } void getdefaultvalue() { return 1; } 4:37

class SubClass : public SuperClass { }; void getvalue() { return othervalue; } // void getdefaultvalue() { return 2; } SuperClass *sup = new SuperClass(); cout << sup->getvalue(); // 1 cout << sup->getdefaultvalue(); // 1 sup = new SubClass(); cout << sup->getvalue(); // 3 cout << sup->getdefaultvalue(); // 1 4:38

Feladat area perimeter) Group), amelybe 4:39

4:40

class Shape { protected: int _a; public: Shape(int a) { _a = a; } virtual double area() const { return 0; } virtual double perimeter() const { return 0; } }; 4:41

class Group { private: vector<shape*> _shapes; public: double area() const { double sum = 0; for (int i = 0; i < _shapes.size(); i++) sum += _shapes[i]->area(); }; } return sum; 4:42

A nem nak (abstract class) absztrakt, vagy (realize 4:43

Pl.: class SuperClass { virtual void getvalue() =0; }; SuperClass *super = new SubClass(); cout << super.getvalue(); // 3 super = new SuperClass(); 4:44

Feladat UniversityStudent (UniversityTeacher UniversityCitizen newcourse - Course numberofcredits()) 4:45

UniversityCitizen # _name :string # _neptuncode :string # _neptunpassword :string # _courses :vector<course> # UniversityCitizen(string) + name() :string {query} + neptuncode() :string {query} + courses() :vector<course> {query} + newcourse(course) :void UniversityStudent + UniversityStudent(string) + numberofcredits() :int {query} + newcourse(course) :void -_students * Course UniversityTeacher + UniversityTeacher(string) + newcourse(course) :void -_teacher -_courses * - _coursename :string - _teacher :UniversityTeacher - _credits :int - _maxheadcount :int - _students :vector<universitystudent> + Course(string, UniversityTeacher, int, int) + newstudent(universitystudent) :bool + name() :string {query} + teacher() :UniversityTeacher* {query} + credits() :int {query} + maxcount() :int {query} + currentcount() :int {query} 4:46

class UniversityCitizen { public: virtual void newcourse(course& course) = 0; }; class UniversityStudent : public UniversityCitizen { public: void newcourse(const Course& course }; 4:47

(interface < > + < > () :< > a diagramban az <<interface>> < > + < > () :< > (realize, implement 4:48

Feladat (Planar 4:49

4:50

class Planar { public: virtual double area() const = 0; virtual double perimeter() const = 0; }; class Shape : public Planar { protected: int _a; Shape(int a) { _a = a; } }; 4:51