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