Professional Documents
Culture Documents
ORGANIZAN - MATERILY
Slidy a pprava
http://cecko.eu/public/pb161_cviceni pro dal tden typicky dostupn v ptek odpoledne
vetn zadn domcho kolu
Video nahrvky
https://is.muni.cz/auth/el/1433/podzim2013/PB161/um/vi/ do dvou dnu po pednce (automaticky)
Twitter
https://twitter.com/rngsec zveejnn ppravy a slid, obasn info hash tag #pb161_2013 (opravdu dleit vci budou rozeslny hromadn na IS mail)
PB161 Principy OOP - Zapouzden 23.9.2013
CO NS DNES EK
Vce o objektovm nvrhu Koncept tdy v syntaxi C++ Princip a implementace zapouzden
Nejprve definujeme procesy a datov struktury Pot definujeme sadu funkc realizujc proces a pracujcch s datovmi strukturami
8
Nejprve definujeme chovn a vlastnosti objekt Pot vytvome jejich instance a nechme je spolupracovat (volaj sv metody)
9
objekt ~ instance C++ tdy zprva ~ voln metody metoda ~ lensk funkce parametry zprvy ~ parametry metody stav ~ hodnoty atribut
10
TDY V C++
Zaloeno na konceptu td a objekt Analogie se struct z C, ale s vtmi monostmi
struktura doplnn o metody, ktermi me sv data manipulovat
Tda
podklad pro vytvoen objektu (al struct XY) atributy (data) a metody (implementace funkce) nap. vkresy pro koda Octavia
Objekt
instance tdy (al promnn typu struct XY) me bt vce objekt z jedn tdy (~ vce struktur typu XY) m svj stav (hodnoty atribut) a definovan chovn (metody) nap. konkrtn auto koda Octavia s SPZ BMZ-4523
PB161 Principy OOP - Zapouzden 23.9.2013
11
12
PIPOMENUT
Tda je podklad pro tvorbu objekt Objekt je pamov instance tdy Tda obsahuje datov atributy a metody pro prci s nimi
Atribut m_size Tda CMouse
15
METODA TDY
Metoda tdy je funkce (stejn syntaxe i chovn) Metoda tdy typicky pracuje s vnitnm stavem
te/modifikuje atributy
UKAZATEL THIS
Ukazatel na aktuln objekt
this->m_size;
class CTest { int value; public: int getValue2() const { int value = 1; return value; } };
18
Jen jedna definice (implementace), mono vce deklarac Deklarace me bt zrove definice
nap. deklarace metody pmo doplnn jejm tlem
19
deklarace i definice
class CMouse { int m_size; public: CMouse(); int getSize() const { return m_size; } import deklarac bool feed(const unsigned int foodAmount); private: bool increaseSize(const unsigned int foodAmount); }; #include "mouse.h" CMouse::CMouse() { #endif // MOUSE_H definice m_size = 10; } bool CMouse::feed(const unsigned int foodAmount) { deklarace deklarace // Check basic limits of foodAmount if (foodAmount > 0 && foodAmount < 100) { return increaseSize(foodAmount); } else return false; } bool CMouse::increaseSize(const unsigned int foodAmount 20) { m_size += foodAmount / 10; return true; definice } PB161 Principy OOP - Zapouzden 23.9.2013
mouse.cpp
21
KONSTRUKTOR
22
KONSTRUKTOR - MOTIVACE
Motivace: Nae tda m nkolik atribut
Jak bude jejich hodnota pi vytvoen objektu?
class CExampleClassDefConstructor { int m_atrib; public: int getAtrib() const { return m_atrib; } }; int main() { // Invoke default constructor CExampleClassDefConstructor object1; cout << "object1::m_atrib = " << object1.getAtrib() << endl; // ??? return 0; }
23
KONSTRUKTOR
Metoda, kter je automaticky volna pi vytven objektu Zajist, e objekt bude od zatku v konzistentnm stavu
meme inicializovat atributy na defaultn hodnotu meme je nastavit na speciln hodnoty meme otevt spojen na server
KONSTRUKTORY - SYNTAXE
class CExampleClass { int m_atrib1; int m_atrib2;
public: CExampleClass(); // Constructor with no parameters CExampleClass(int atribute1); // Constructor with one parameter CExampleClass(int atribute1, int atribute2);// Constructor with two parameters int getAtrib1() const { return m_atrib1; int getAtrib2() const { return m_atrib2; }; } }
Voln konstruktor
Implementace konstruktor
CExampleClass::CExampleClass(int atribute1) { m_atrib1 = atribute1; m_atrib2 = 0; } CExampleClass::CExampleClass(int atribute1, int atribute2) { m_atrib1 = atribute1; m_atrib2 = atribute2; 25 }
DEFAULTN KONSTRUKTOR
Co kdy nen definovn dn konstruktor?
automaticky existuje defaultn konstruktor nem dn argumenty a neinicializuje atributy CClass object;
26
27
KOSTRUKTORY - UKZKA
constructorDemo.cpp pouit konstruktoru neinicializovan promnn defaultn konstruktor konstruktor s argumenty peten konstruktoru
28
Nelze deklarovat, je to povaovno za deklaraci funkce object bez argument vracejc CClass V C++11 dolo ke sjednocen syntaxe CClass object{}; // default constructor int i{}; // default ctor, i==0
29
Lze definovat, e nkter z tchto metod je defaultn (default) nebo zakzan (delete)
class CClass { public: CClass() = default; CClass &operator=( CClass ) = delete; };
PB161 Zapouzden... 24.9.2011 30/51
ZAPOUZDEN
32
33
Jak vidte dsledky pro pedchoz kd? Zapouzdenm omezujeme viditelnost vnitnho stavu
meme lpe kontrolovat interakce se stavem (setter) meme mnit reprezentaci stavu
PB161 Principy OOP - Zapouzden 23.9.2013
34
setPoint()
pro nov aplikace vyadujc vt pesnost pidme dal metodu setPoint()s jinmi argumenty ed kd zstane fungovat!
void setPoint(int x, int y) { m_x = convertToString(x); m_y = convertToString(y); }
35
ZAPOUZDEN V C++
C++ poskytuje nstroje pro zapouzden dat
ale umouje i poruit (tj. pm pstup)
Tda
zmna z private na public
37
PSTUPOV PRVA
Prvo plat, dokud nen nastaveno jin
viz. pedchoz ukzka kdu
struct je to sam jako class, rozdl prv v defaultnch prvech struct v C++ m vechny poloky defaultn public
z dvodu zptn kompatibility s C lze penastavit na private
41
42
43
44
Motivace 2:
chceme deklarovat, e nae funkce nebude mnit vstupn parametr pestoe by mohla (nap. pedn referenc)
46
47
48
void konstConstantDemo() { konstanty nelze //const int a, b = 0; // error, uninitialized const 'a' const int numMonthsInYear = 12; dodaten mnit cout << "Number of months in year: " << numMonthsInYear << endl; //numMonthsInYear = 13; // error, assignment of read-only variable } char* konstReturnValueDemo() { return "Unmodifiable string"; } const char* konstReturnValueDemo2() { return "Unmodifiable string"; } explicitn ozname etzec int main() { char* value = konstReturnValueDemo(); value[1] = 'x'; // read-only memory write - problem
jako nemodifikovateln
void konstFunctionDemo() { CMouse mouse1; //const CMouse mouse2; // error: uninitilized const mouse2 const CMouse* pMouse2 = &mouse1; mouse1.getSize() ; mouse1.setSize(10); cout << pMouse2->getSize() << endl;
// Let's try to call non-constant method of constant object //pMouse2->setSize(10); // error: no matching function for call }
50
Analogie <stdio.h>
SHRNUT
Konstruktor je metoda pro inicializaci objektu
pozor na defaultn konstruktor
52
ZDROJE
StackOverflow Q&A C++ FAQ Odpovdi na ato kladen otzky. cplusplus.com Dokumentace C++ a standardn knihovny. cppreference.com Dokumentace C++ a standardn knihovny, obsahuje i dokumentaci k C++11. C++ Coding Standards 101 Rules, Guidelines, and Best practices Effective C++ 55 Specific Ways to Improve Your Programs and Designs Exceptional C++ 47 Engineering Puzzles, Programming Problems, and Solutions Modern C++ Generic Programming and Design Patterns Applied
PB161 Principy OOP - Zapouzden 23.9.2013
53
BONUS
54