Hermetyzacja oraz pola i metody statyczne
|
|
- Paweł Jastrzębski
- 7 lat temu
- Przeglądów:
Transkrypt
1 Bogdan Kreczmer Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2010 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu dotyczącego programowania obiektowego. Jest on udostępniony pod warunkiem wykorzystania wyłącznie do własnych prywatnych potrzeb i może on być kopiowany wyłącznie w całości, razem z niniejszą stroną tytułową.
2 Niniejsza prezentacja została wykonana przy użyciu systemu składu L A TEX oraz stylu beamer, którego autorem jest Till Tantau. Strona domowa projektu Beamer:
3 1 Struktury danych w języku C++ class, struct, union 2 Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji 3 Hamowanie propagacji błędu 4 Zmienne globalne versus zmienne statyczne
4 Podstawowe własności class, struct, union W języku C++ istnieją trzy rodzaje definicji struktur złożonych rozpoczynających się od słów kluczowych: class, struct, union. Dwie pierwsze definiują klasę. Jednak nie każda z nich może zawierać wszystkie dostępne własności klasy. Poprzez union definiowana jest struktura specjalna (analogicznie jak w języku C). class NazwaKlasy // Domyślnie prywatna protected: private: public: ; struct NazwaKlasy // Domyślnie publiczna private: protected: public: ; union NazwaKlasy // Domyślnie publiczna private: protected: public: ;
5 Tryby dostępu class, struct, union Sekcje private, protected, public; definiują tryb dostępu do poszczególnych elementów sekcji w niej zawartych, tzn. pól i metod (w tym również konstruktora i destruktora). Ich porządek występowania w definicji nie jest ustalony. Mogą występować wielokrotnie i wzajemnie się przeplatać. końcu public. class NazwaKlasy // Domyślnie prywatna protected: private: public: private: ; private dostęp i bezpośrednie odwołanie się do pól i metod tej sekcji możliwy jest tylko z poziomu metod klasy, w której deklarowane i definiowane są te pola i metody. protected dostęp i bezpośrednie odwołanie się do pól i metod tej sekcji możliwy jest z poziomu metod klasy, w której deklarowane i definiowane są te pola i metody. Odwołanie się i bezpośredni dostęp możliwy jest również w klasie pochodnej. public nie ma żadnego ograniczenia na dostęp do pól i metod z tej sekcji.
6 class, struct, union Definicja klasy z wykorzystaniem słowa kluczowego class class definiuje klasę, która może posiadać wszystkie możliwe atrybuty klasy dostępne w języku C++, tzn. może posiadać metody, konstruktory, destruktory, metody wirtualne, pola i metody statyczne itd. Pozwala na dziedziczenie innych struktur i sama może być dziedziczona. Oprócz tego klasę definiowaną poprzez class można parametryzować tworząc w ten sposób szablony. Domyślną sekcją w definicji klasy jest zawsze sekcja private. class NazwaKlasy //Domyślnie prywatna protected: private: public: ; Przykład definicji: class LZepolona float re, im; public: float Re( ) const return re; float Im( ) const return im; void Zmien(float r, float i); ;
7 class, struct, union Definicja klasy z wykorzystaniem słowa kluczowego struct struct definiuje klasę, która może posiadać prawie wszystkie możliwe atrybuty klasy dostępne w języku C++, tzn. może posiadać metody, konstruktory, destruktory, metody wirtualne, pola i metody statyczne itd. Pozwala na dziedziczenie innych struktur i sama może być dziedziczona. Jedyne ograniczenie polega na tym, że definiowaną w ten sposób klasę nie można parametryzować, tzn. za jej pomocą nie można tworzyć szablonów. Domyślną sekcją w definicji klasy jest zawsze sekcja public. struct NazwaKlasy //Domyślnie publiczna protected: private: public: ; Przykład definicji: struct LZepolona float Re( ) const return re; float Im( ) const return im; void Zmien(float r, float i); private: float re, im; ;
8 class, struct, union Definicja klasy z wykorzystaniem słowa kluczowego union union definiuje strukturę, w której każde pole ma ten sam adres. Unia może mieć pola i metody. Nie może mieć natomiast zarówno pól statycznych, jak też metod statycznych. Nie może również posiadać konstruktorów oraz destruktora. Struktura zdefiniowana przez unię może być dziedziczona, ale nie może dziedziczyć innych struktur. Unia nie może też posiadać metod wirtualnych. Domyślną sekcją w definicji klasy jest zawsze sekcja public. union NazwaKlasy //Domyślnie publiczna protected: private: public: ; Przykład definicji: union Wartosc int Absolutna; float Wzgledna; ;
9 class, struct, union Dostęp do elementów klasy poza klasą class Macierz2x2 //.. double Tab[2][2]; public : double Wez( int i, int j ) const return Tab[i][j]; void Zmien( double elem, int i, int j ) Tab[ i ][ j ] = elem; ;.. float Wyznacznik( const Macierz2x2 &M ) return M. Tab[0][0] M. Tab[1][1] M. Tab[0][1] M. Tab[1][0]; Czy jest to poprawne (i dlaczego nie ;-)?
10 class, struct, union Dostęp do elementów klasy poza klasą class Macierz2x2 //.. double Tab[2][2]; public : double Wez( int i, int j ) const return Tab[i][j]; void Zmien( double elem, int i, int j ) Tab[ i ][ j ] = elem; ;.. float Wyznacznik( const Macierz2x2 &M ) return M. Tab[0][0] M. Tab[1][1] M. Tab[0][1] M. Tab[1][0]; Poza definicjami metod danej klasy nie można odwoływać się wprost do elementów tej klasy, które znajdują się w sekcji prywatnej. Z tego powodu odwołanie się do pola Tab obiektu M w funkcji Wyznacznik jest niedopuszczalne.
11 class, struct, union Dostęp do elementów klasy poza klasą class Macierz2x2 //.. protected : double Tab[2][2]; public : double Wez( int i, int j ) const return Tab[i][j]; void Zmien( double elem, int i, int j ) Tab[ i ][ j ] = elem; ;.. float Wyznacznik( const Macierz2x2 &M ) return M. Tab[0][0] M. Tab[1][1] M. Tab[0][1] M. Tab[1][0]; Jeżeli pole zadeklarowane jest w sekcji protected, to bezpośredni dostęp do tego pola poza metodami klasy jest również niemożliwy. Różnice między sekcją public, a protected pojawiają się dopiero przy dziedziczeniu. Dla pojedynczej klasy, która nie jest dziedziczona, sekcje te mają takie samo znaczenie.
12 class, struct, union Dostęp do elementów klasy poza klasą class Macierz2x2 //.. double Tab[2][2]; public : double Wez( int i, int j ) const return Tab[i][j]; void Zmien( double elem, int i, int j ) Tab[ i ][ j ] = elem; ;.. float Wyznacznik( const Macierz2x2 &M ) return M.Wez(0,0) M.Wez(1,1) M.Wez(0,1) M.Wez(1,0); W sekcji publicznej zdefiniowany jest interfejs do pól klasy Macierz2x2. Pozwala to zachować kontrolę nad sposobem dostępu do tych pól oraz sposobem ich udostępniania. Pozwala to również udostępnić tylko te pola, które chcemy udostępnić.
13 class, struct, union Dostęp do elementów klasy poza klasą class Macierz2x2 //.. friend float Wyznacznik( const Macierz2x2 &M ); double public : Tab[2][2]; double Wez( int i, int j ) const return Tab[i][j]; void Zmien( double elem, int i, int j ) Tab[ i ][ j ] = elem; ;.. float Wyznacznik( const Macierz2x2 &M ) return M. Tab[0][0] M. Tab[1][1] M. Tab[0][1] M. Tab[1][0]; Pomimo ograniczenia dostępu do pola Tab można uczynić wyjątek dla wybranych funkcji. Pozwala na to deklaracja funkcji zaprzyjaźnionych z daną klasą. Musi ona znaleźć się w obrębie definicji klasy. Miejsce wystąpienia nie jest istotne. Zwyczajowo jednak jest to początek definicji klasy.
14 class, struct, union Dostęp do elementów klasy poza klasą class Macierz2x2 // float Tab[2][2]; public : float Wez(int i, int j) const return Tab[i][j]; void Zmien(float elem, int i, int j); ; //.. class Macierz3x3 //. float Elem[3][3]; public : float Wez(int i, int j) const return Elem[i][j]; void Zmien(float elem, int i, int j); void Wstaw(Macierz2x2 M); ; //.. void Macierz3x3::Wstaw( Macierz2x2 M2 ) Elem[0][0] = M2. Tab[0][0]; Elem[0][1] = M2. Tab[0][1]; Elem[1][0] = M2. Tab[1][0]; Elem[1][1] = M2. Tab[1][1];
15 class, struct, union Dostęp do elementów klasy poza klasą class Macierz2x2 // float Tab[2][2]; public : float Wez(int i, int j) const return Tab[i][j]; void Zmien(float elem, int i, int j); ; //.. class Macierz3x3 //. float Elem[3][3]; public : float Wez(int i, int j) const return Elem[i][j]; void Zmien(float elem, int i, int j); void Wstaw(Macierz2x2 M); ; //.. void Macierz3x3::Wstaw( Macierz2x2 M2 ) Elem[0][0] = M2. Tab[0][0]; Elem[0][1] = M2. Tab[0][1]; Elem[1][0] = M2. Tab[1][0]; Elem[1][1] = M2. Tab[1][1]; Ze względu na podobieństwo klas tu jest wszystko poprawnie. Czyż nie?
16 class, struct, union Dostęp do elementów klasy poza klasą class Macierz2x2 // float Tab[2][2]; public : float Wez(int i, int j) const return Tab[i][j]; void Zmien(float elem, int i, int j); ; //.. class Macierz3x3 //. float Elem[3][3]; public : float Wez(int i, int j) const return Elem[i][j]; void Zmien(float elem, int i, int j); void Wstaw(Macierz2x2 M); ; //.. void Macierz3x3::Wstaw( Macierz2x2 M2 ) Elem[0][0] = M2. Tab[0][0]; Elem[0][1] = M2. Tab[0][1]; Elem[1][0] = M2. Tab[1][0]; Elem[1][1] = M2. Tab[1][1]; Podobieństwo tych klas ma charakter subiektywny. Dla kompilatora to są tak samo różne klasy jak każde inne. Dostęp do pól prywatnych danej klasy nie jest możliwy na poziomie zarówno funkcji jak też metody innej klasy.
17 class, struct, union Dostęp do elementów klasy poza klasą class Macierz2x2 // friend void Macierz3x3::Wstaw(Macierz2x2); float Tab[2][2]; public : float Wez(int i, int j) const return Tab[i][j]; void Zmien(float elem, int i, int j); ; //.. class Macierz3x3 //. float Elem[3][3]; public : float Wez(int i, int j) const return Elem[i][j]; void Zmien(float elem, int i, int j); void Wstaw(Macierz2x2 M); ; //.. void Macierz3x3::Wstaw( Macierz2x2 M2 ) Elem[0][0] = M2. Tab[0][0]; Elem[0][1] = M2. Tab[0][1]; Elem[1][0] = M2. Tab[1][0]; Elem[1][1] = M2. Tab[1][1]; Dostęp do pól prywatnych staje się możliwy, gdy zaprzyjaźnimy daną metodę z klasą, do której pól prywatnych metody tej klasy mają uzyskać dostęp.
18 class, struct, union Dostęp do elementów klasy poza klasą class Macierz2x2 //.. friend void Macierz3x3::Wstaw(Macierz2x2); float Tab[2][2]; public : float Wez(int i, int j) const return Tab[i][j]; void Zmien(float elem, int i, int j); ; //.. class Macierz3x3 //.. float Elem[3][3]; public : float Wez(int i, int j) const return Elem[i][j]; void Zmien(float elem, int i, int j); void Wstaw(Macierz2x2 M); ; // Zaprzyjaźnienie jednej metody nie rozwiązuje problemu dostępu do pól prywatnych na poziomie innej metody tej samej klasy. void Macierz3x3::Wstaw( Macierz2x2 M2 ) Elem[0][0] = M2. Tab[0][0]; Elem[0][1] = M2. Tab[0][1]; Elem[1][0] = M2. Tab[1][0]; Elem[1][1] = M2. Tab[1][1]; void Macierz3x3::WstawTrans( Macierz2x2 M2 ) Elem[0][0] = M2. Tab[0][0]; Elem[0][1] = M2. Tab[1][0]; Elem[1][0] = M2. Tab[0][1]; Elem[1][1] = M2. Tab[1][1];
19 class, struct, union Dostęp do elementów klasy poza klasą class Macierz2x2 //.. friend class Macierz3x3; float Tab[2][2]; public : float Wez(int i, int j) const return Tab[i][j]; void Zmien(float elem, int i, int j); ; //.. class Macierz3x3 //.. float Elem[3][3]; public : float Wez(int i, int j) const return Elem[i][j]; void Zmien(float elem, int i, int j); void Wstaw(Macierz2x2 M); ; // Zaprzyjaźnienie całej klasy pozwala odwoływać się do pól prywatnych na poziomie metod klasy zaprzyjaźnionej. void Macierz3x3::Wstaw( Macierz2x2 M2 ) Elem[0][0] = M2. Tab[0][0]; Elem[0][1] = M2. Tab[0][1]; Elem[1][0] = M2. Tab[1][0]; Elem[1][1] = M2. Tab[1][1]; void Macierz3x3::WstawTrans( Macierz2x2 M2 ) Elem[0][0] = M2. Tab[0][0]; Elem[0][1] = M2. Tab[1][0]; Elem[1][0] = M2. Tab[0][1]; Elem[1][1] = M2. Tab[1][1];
20 class, struct, union Dostęp do elementów klasy poza klasą class Macierz2x2 // float Tab[2][2]; public : float Wez(int i, int j) const return Tab[i][j]; void Zmien(float elem, int i, int j); ; //.. class Macierz3x3 //. float Elem[3][3]; public : float Wez(int i, int j) const return Elem[i][j]; void Zmien(float elem, int i, int j); void Wstaw(Macierz2x2 M); ; //.. void Macierz3x3::Wstaw( Macierz2x2 M2 ) Elem[0][0] = M2.Wez(0,0); Elem[0][1] = M2.Wez(0,1); Elem[1][0] = M2.Wez(1,0); Elem[1][1] = M2.Wez(1,1); Zaprzyjaźnienie z klasą jest ostatecznością. O ile tylko jest to możliwe należy korzystać z metod wchodzących w skład interfejsu danej klasy.
21 Pojęcie prywatności class, struct, union class Macierz2x2 //. float Tab[2][2]; public : float Wez( int i, int j ) const return Tab[i][j]; void Zmien( float elem, int i, int j ); void Wstaw( Macierz2x2 M ); ; // void Macierz2x2::Wstaw( Macierz2x2 M ) Tab[0][0] = M. Tab[0][0]; Tab[0][1] = M. Tab[0][1]; Tab[1][0] = M. Tab[1][0]; Tab[1][1] = M. Tab[1][1]; Czy można na poziomie metody danej klasy odwoływać się do pól prywatnych obiektu tej samej klasy?
22 Pojęcie prywatności class, struct, union class Macierz2x2 //. float Tab[2][2]; public : float Wez( int i, int j ) const return Tab[i][j]; void Zmien( float elem, int i, int j ); void Wstaw( Macierz2x2 M ); ; // void Macierz2x2::Wstaw( Macierz2x2 M ) Tab[0][0] = M. Tab[0][0]; Tab[0][1] = M. Tab[0][1]; Tab[1][0] = M. Tab[1][0]; Tab[1][1] = M. Tab[1][1]; Prywatność nie jest cechą obiektu. Jest to cecha klasy.
23 Potencjalne możliwości błędów Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji struct Stos // float int TabStosu[ROZ STOSU]; Ilosc; Stos( ) Ilosc = 0; ; //
24 Potencjalne możliwości błędów Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji struct Stos // float int TabStosu[ROZ STOSU]; Ilosc; Stos( ) Ilosc = 0; ; // int main( ) Stos St; float Arg; if (St. Ilosc >= ROZ STOSU) / Obsługa błędu / St. TabStosu[St. Ilosc++] = 12.3;
25 Potencjalne możliwości błędów Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji struct Stos // float int TabStosu[ROZ STOSU]; Ilosc; Stos( ) Ilosc = 0; ; // int main( ) Stos St; float Arg; if (St. Ilosc >= ROZ STOSU) / Obsługa błędu / St. TabStosu[St. Ilosc] = 12.3;
26 Potencjalne możliwości błędów Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji struct Stos // float int TabStosu[ROZ STOSU]; Ilosc; Stos( ) Ilosc = 0; ; // int main( ) Stos St; float Arg; if (St. Ilosc <= 0) / Obsługa błędu / Arg = St. TabStosu[ St. Ilosc];
27 Potencjalne możliwości błędów Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji struct Stos // float int TabStosu[ROZ STOSU]; Ilosc; Stos( ) Ilosc = 0; ; // int main( ) Stos St; float Arg; if (St. Ilosc <= 0) / Obsługa błędu / Arg = St. TabStosu[ St. Ilosc];
28 Metoda jako element interfejsu klasy Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji struct Stos // float int TabStosu[ROZ STOSU]; Ilosc; Stos( ) Ilosc = 0; ; //
29 Metoda jako element interfejsu klasy Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji struct Stos // float int TabStosu[ROZ STOSU]; Ilosc; Stos( ) Ilosc = 0; float Pobierz( ); ; //
30 Metoda jako element interfejsu klasy Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji struct Stos // float int TabStosu[ROZ STOSU]; Ilosc; Stos( ) Ilosc = 0; float Pobierz( ); ; // float Stos::Pobierz( ) return TabStosu[ Ilosc];
31 Metoda jako element interfejsu klasy Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji struct Stos // float int TabStosu[ROZ STOSU]; Ilosc; Stos( ) Ilosc = 0; float Pobierz( ); ; // float Stos::Pobierz( ) if ( Ilosc <= 0) return numeric limits<float>::max( ); return TabStosu[ Ilosc];
32 Metoda jako element interfejsu klasy Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji #include <limits> using namespace std; struct Stos //.. float int TabStosu[ROZ STOSU]; Ilosc; Stos( ) Ilosc = 0; float Pobierz( ); ; // float Stos::Pobierz( ) if ( Ilosc <= 0) return numeric limits<float>::max( ); return TabStosu[ Ilosc];
33 Metoda jako element interfejsu klasy Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji struct Stos // float int TabStosu[ROZ STOSU]; Ilosc; Stos( ) Ilosc = 0; float Pobierz( ); ; // float Stos::Pobierz( ) if ( Ilosc <= 0) return numeric limits<float>::max( ); return TabStosu[ Ilosc];
34 Metoda jako element interfejsu klasy Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji struct Stos // float TabStosu[ROZ STOSU]; int Ilosc; ; // float Stos::Pobierz( ) if ( Ilosc <= 0) return numeric limits<float>::max( ); return TabStosu[ Ilosc]; int main( ) Arg = St.Pobierz( ); if (Arg == numeric limits <float>::max()) / Obsługa błędu /
35 Metoda jako element interfejsu klasy Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji struct Stos // float TabStosu[ROZ STOSU]; int Ilosc; ; // float Stos::Pobierz( ) if ( Ilosc <= 0) return numeric limits<float>::max( ); return TabStosu[ Ilosc]; int main( ) Arg = St.Pobierz( ); if (Arg == numeric limits <float>::max()) / Obsługa błędu /
36 Metoda jako element interfejsu klasy Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji struct Stos // float TabStosu[ROZ STOSU]; int Ilosc; ; // float Stos::Pobierz(bool & Sukces ) if ( Ilosc <= 0) Sukces = false; return numeric limits<float>::max( ); return Sukces = true, TabStosu[ Ilosc]; int main( ) Arg = St.Pobierz(CzySukces); if (CzySukces) / Obsługa błędu /
37 Metoda jako element interfejsu klasy Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji struct Stos // float TabStosu[ROZ STOSU]; int Ilosc; ; // float Stos::Pobierz(bool & Sukces ) if ( Ilosc <= 0) Sukces = false; return numeric limits<float>::max( ); return Sukces = true, TabStosu[ Ilosc]; int main( ) Arg = St.Pobierz(CzySukces); if (CzySukces) / Obsługa błędu /
38 Metoda jako element interfejsu klasy Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji struct Stos // float TabStosu[ROZ STOSU]; int Ilosc; ; // float Stos::Pobierz(bool & Sukces ) if ( Ilosc <= 0) Sukces = false; return numeric limits<float>::max( ); return Sukces = true, TabStosu[ Ilosc]; int main( ) Arg = St.Pobierz(CzySukces); if (CzySukces) / Obsługa błędu /
39 Metoda jako element interfejsu klasy Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji struct Stos // float TabStosu[ROZ STOSU]; int Ilosc; ; // bool Stos::Pobierz(float & ZeStosu ) if ( Ilosc <= 0) return false; return ZeStosu = TabStosu[ Ilosc], true; int main( ) Arg = St.Pobierz(CzySukces); if (CzySukces) / Obsługa błędu /
40 Metoda jako element interfejsu klasy Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji struct Stos // float TabStosu[ROZ STOSU]; int Ilosc; ; // bool Stos::Pobierz(float & ZeStosu ) if ( Ilosc <= 0) return false; return ZeStosu = TabStosu[ Ilosc], true; int main( ) if (St.Pobierz(Arg)) / Obsługa błędu /
41 Metoda jako element interfejsu klasy Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji struct Stos // float TabStosu[ROZ STOSU]; int Ilosc; ; // bool Stos::Pobierz(float & ZeStosu ) if ( Ilosc <= 0) return false; return ZeStosu = TabStosu[ Ilosc], true; Czy takie rozwiązanie pozwala w pełni zabezpieczyć się przed int main( ) błędnym pobraniem wartości ze stosu? if (St.Pobierz(Arg)) / Obsługa błędu /
42 Metoda jako element interfejsu klasy Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji struct Stos // float TabStosu[ROZ STOSU]; int Ilosc; ; // bool Stos::Pobierz(float & ZeStosu ) if ( Ilosc <= 0 ROZ STOSU < Ilosc) return false; return ZeStosu = TabStosu[ Ilosc], true; int main( ) if (St.Pobierz(Arg)) / Obsługa błędu /
43 Metoda jako element interfejsu klasy Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji struct Stos // float TabStosu[ROZ STOSU]; unsigned int Ilosc; ; // bool Stos::Pobierz(float & ZeStosu ) if ( Ilosc <= 0 ROZ STOSU < Ilosc) return false; return ZeStosu = TabStosu[ Ilosc], true; int main( ) if (St.Pobierz(Arg)) / Obsługa błędu /
44 Metoda jako element interfejsu klasy Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji struct Stos // float TabStosu[ROZ STOSU]; unsigned int Ilosc; ; // bool Stos::Pobierz(float & ZeStosu ) if (! Ilosc ROZ STOSU < Ilosc) return false; return ZeStosu = TabStosu[ Ilosc], true; int main( ) if (St.Pobierz(Arg)) / Obsługa błędu /
45 Metoda jako element interfejsu klasy Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji struct Stos // float TabStosu[ROZ STOSU]; unsigned int Ilosc; bool Pobierz(float& ZeStosu); bool Poloz(float NaStos); ; //.. int main( ) if (St.Pobierz(Arg)) / Obsługa błędu /
46 Metoda jako element interfejsu klasy Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji struct Stos // float TabStosu[ROZ STOSU]; unsigned int Ilosc; bool Pobierz(float& ZeStosu); bool Poloz(float NaStos); ; //.. int main( ) if (St.Pobierz(Arg)) / Obsługa błędu / St. TabStosu[3] = 5; St. Ilosc;
47 Metoda jako element interfejsu klasy Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji struct Stos // bool Pobierz(float& ZeStosu); bool Poloz(float NaStos); private: float TabStosu[ROZ STOSU]; unsigned int Ilosc; ; // int main( ) if (St.Pobierz(Arg)) / Obsługa błędu / St. TabStosu[3] = 5; St. Ilosc;
48 Metoda jako element interfejsu klasy Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji struct Stos // bool Pobierz(float& ZeStosu); bool Poloz(float NaStos); private: float TabStosu[ROZ STOSU]; unsigned int Ilosc; ; // int main( ) if (St.Pobierz(Arg)) / Obsługa błędu / St. TabStosu[3] = 5; St. Ilosc;
49 Metoda jako element interfejsu klasy Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji struct Stos // bool Pobierz(float& ZeStosu); bool Poloz(float NaStos); private: float TabStosu[ROZ STOSU]; unsigned int Ilosc; ; // int main( ) if (St.Pobierz(Arg)) / Obsługa błędu /
50 Metoda jako element interfejsu klasy Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji struct Stos // bool Pobierz(float& ZeStosu); bool Poloz(float NaStos); unsigned int Ilosc( ) return Ilosc; private: float TabStosu[ROZ STOSU]; unsigned int Ilosc; ; // int main( ) if (St.Pobierz(Arg)) / Obsługa błędu /
51 Metoda jako element interfejsu klasy Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji struct Stos // bool Pobierz(float& ZeStosu); bool Poloz(float NaStos); unsigned int Ilosc( ) const return Ilosc; private: float TabStosu[ROZ STOSU]; unsigned int Ilosc; ; // int main( ) if (St.Pobierz(Arg)) / Obsługa błędu /
52 Reprezentacja liczby zespolonej Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji class LZespolona //. float re, im; public : float Re( ) const return re; float Im( ) const return im; float Modul( ) const return re re + im im; void ZmienRI( float re, float im) re = re; im = im; void ZmienMA( float m, float alfa) re = m cos(alfa); im = m sin(alfa); ; //. int main( ) LZespolona Z; Z.ZmienRI(2,5); cout << Modul: << Z.Modul( ) << endl;
53 Reprezentacja liczby zespolonej Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji class LZespolona //. float re, im; public : float Re( ) const return re; float Im( ) const return im; float Modul( ) const return re re + im im; void ZmienRI( float re, float im) re = re; im = im; void ZmienMA( float m, float alfa) re = m cos(alfa); im = m sin(alfa); ; //. int main( ) LZespolona Z; Z.ZmienRI(2,5); cout << Modul: << Z.Modul( ) << endl; Bezpośrednia reprezentacja części rzeczywistej i urojonej ułatwia implementację operacji dodawania i odejmowania dwóch liczb. Jednak jednocześnie utrudnia realizację operacji mnożenia, dzielenia i wyznaczania modułu.
54 Reprezentacja liczby zespolonej Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji class LZespolona // float m, alfa; // Kąt wyrażony w radianach public : float Re( ) const return m cos( alfa); float Im( ) const return m sin( alfa); float Modul( ) const return m; void ZmienRI( float re, float im) m = sqrt(re re+im im); alfa = atan2(im,re); void ZmienMA( float m, float alfa) m = m; alfa = alfa; ; // int main() LZespolona Z; Z.ZmienRI(2,5); cout << Modul: << Z.Modul( ) << endl;
55 Reprezentacja liczby zespolonej Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji class LZespolona // float m, alfa; // Kąt wyrażony w radianach public : float Re( ) const return m cos( alfa); float Im( ) const return m sin( alfa); float Modul( ) const return m; void ZmienRI( float re, float im) m = sqrt(re re+im im); alfa = atan2(im,re); void ZmienMA( float m, float alfa) m = m; alfa = alfa; ; // int main() LZespolona Z; Z.ZmienRI(2,5); cout << Modul: << Z.Modul( ) << endl; Reprezentacja trygonometryczna liczby zespolonej ułatwia implementację operacji mnożenia, dzielenia oraz wyznaczania modułu. Mimo istotnej zmiany wewnętrznej reprezentacji liczby zespolonej na zewnątrz nic się nie zmieniło.
56 Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji Podsumowanie: Ważniejsze cechy i własności Hermetyzacja pozwala ukryć wewnętrzne cechy implementacji danej klasy. Daje możliwość wydzielenia tej części interfejsu, która realizuje modyfikację obiektu oraz tej, która służy do odczytu stanu obiektu. Umożliwia zdefiniowanie interfejsu, który określa sposób manipulowania wewnętrznymi strukturami obiektu. Pozwala to na zapewnienie spójności wewnętrznych struktur danych. Zapobiega przypadkowej ingerencji w wewnętrzną strukturę obiektu, która mogłaby spowodować utratę spójność przechowywanych danych w obiekcie.
57 Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji Podsumowanie: Ważniejsze cechy i własności Hermetyzacja pozwala ukryć wewnętrzne cechy implementacji danej klasy. Daje możliwość wydzielenia tej części interfejsu, która realizuje modyfikację obiektu oraz tej, która służy do odczytu stanu obiektu. Umożliwia zdefiniowanie interfejsu, który określa sposób manipulowania wewnętrznymi strukturami obiektu. Pozwala to na zapewnienie spójności wewnętrznych struktur danych. Zapobiega przypadkowej ingerencji w wewnętrzną strukturę obiektu, która mogłaby spowodować utratę spójność przechowywanych danych w obiekcie.
58 Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji Podsumowanie: Ważniejsze cechy i własności Hermetyzacja pozwala ukryć wewnętrzne cechy implementacji danej klasy. Daje możliwość wydzielenia tej części interfejsu, która realizuje modyfikację obiektu oraz tej, która służy do odczytu stanu obiektu. Umożliwia zdefiniowanie interfejsu, który określa sposób manipulowania wewnętrznymi strukturami obiektu. Pozwala to na zapewnienie spójności wewnętrznych struktur danych. Zapobiega przypadkowej ingerencji w wewnętrzną strukturę obiektu, która mogłaby spowodować utratę spójność przechowywanych danych w obiekcie.
59 Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji Podsumowanie: Ważniejsze cechy i własności Hermetyzacja pozwala ukryć wewnętrzne cechy implementacji danej klasy. Daje możliwość wydzielenia tej części interfejsu, która realizuje modyfikację obiektu oraz tej, która służy do odczytu stanu obiektu. Umożliwia zdefiniowanie interfejsu, który określa sposób manipulowania wewnętrznymi strukturami obiektu. Pozwala to na zapewnienie spójności wewnętrznych struktur danych. Zapobiega przypadkowej ingerencji w wewnętrzną strukturę obiektu, która mogłaby spowodować utratę spójność przechowywanych danych w obiekcie.
60 Niebezpieczeństwa struktur bez kontroli dostępu Redukcja możliwych błędów poprzez metody Redukcja możliwych błędów poprzez kontrolę dostępu Zalety hermetyzacji Przykład zastosowania stosu - kalkulator RPN
61 Formułowanie warunków Hamowanie propagacji błędu Licznik = 0; do ++Licznik; while (Licznik!= MAKS ILOSC); if (Licznik == MAKS ILOSC) cerr << Blad << endl;
62 Formułowanie warunków Hamowanie propagacji błędu Licznik = 0; do ++Licznik; if ( JakisWarunek ) ++Licznik; while (Licznik!= MAKS ILOSC); if (Licznik == MAKS ILOSC) cerr << Blad << endl;
63 Formułowanie warunków Hamowanie propagacji błędu Licznik = 0; do ++Licznik; if ( JakisWarunek ) ++Licznik; while (Licznik!= MAKS ILOSC); if (Licznik == MAKS ILOSC) cerr << Blad << endl;
64 Formułowanie warunków Hamowanie propagacji błędu Licznik = 0; do ++Licznik; if ( JakisWarunek ) ++Licznik; while (Licznik < MAKS ILOSC); if (Licznik >= MAKS ILOSC) cerr << Blad << endl;
65 Zmienne globalne Zmienne globalne versus zmienne statyczne #include <stdio.h> int IloscPakietow = 0; void WyslijPakiet( ) printf( Pakiet nr: %i\n,++iloscpakietow); int main( ) WyslijPakiet( ); WyslijPakiet( ); WyslijPakiet( ); return 0;
66 Zmienne globalne Zmienne globalne versus zmienne statyczne #include <stdio.h> int IloscPakietow = 0; void WyslijPakiet( ) printf( Pakiet nr: %i\n,++iloscpakietow); int main( ) WyslijPakiet( ); WyslijPakiet( ); WyslijPakiet( ); return 0; Pakiet nr: 1 Pakiet nr: 2 Pakiet nr: 3
67 Zmienne globalne Zmienne globalne versus zmienne statyczne #include <stdio.h> int IloscPakietow = 0; void WyslijPakiet( ) printf( Pakiet nr: %i\n,++iloscpakietow); int main( ) WyslijPakiet( ); WyslijPakiet( ); WyslijPakiet( ); return 0; Pakiet nr: 1 Pakiet nr: 2 Pakiet nr: 11
68 Zmienne globalne Zmienne globalne versus zmienne statyczne #include <stdio.h> int IloscPakietow = 0; void WyslijPakiet( ) printf( Pakiet nr: %i\n,++iloscpakietow); int main( ) WyslijPakiet( ); WyslijPakiet( ); IloscPakietow = 10; WyslijPakiet( ); return 0; Pakiet nr: 1 Pakiet nr: 2 Pakiet nr: 11
69 Zmienne lokalne Zmienne globalne versus zmienne statyczne #include <stdio.h> void WyslijPakiet( ) int IloscPakietow = 0; printf( Pakiet nr: %i\n,++iloscpakietow); int main( ) WyslijPakiet( ); WyslijPakiet( ); IloscPakietow = 10; WyslijPakiet( ); return 0;?
70 Zmienne lokalne Zmienne globalne versus zmienne statyczne #include <stdio.h> void WyslijPakiet( ) int IloscPakietow = 0; printf( Pakiet nr: %i\n,++iloscpakietow); int main( ) WyslijPakiet( ); WyslijPakiet( ); IloscPakietow = 10; WyslijPakiet( ); return 0; Pakiet nr: 1 Pakiet nr: 1 Pakiet nr: 1
71 Zmienne globalne versus zmienne statyczne #include <stdio.h> void WyslijPakiet( ) static int IloscPakietow = 0; printf( Pakiet nr: %i\n,++iloscpakietow); int main( ) WyslijPakiet( ); WyslijPakiet( ); IloscPakietow = 10; WyslijPakiet( ); return 0; w języku C pełnią rolę zmiennych globalnych z ograniczonym zakresem dostępu tylko do poziomu funkcji, w której są deklarowane. Pakiet nr: 1 Pakiet nr: 2 Pakiet nr: 3
72 Zmienne globalne versus zmienne statyczne #include <iostream> void WyslijPakiet( ) static int IloscPakietow = 0; std::cout << Pakiet nr: << ++IloscPakietow << std::endl; int main( ) WyslijPakiet( ); WyslijPakiet( ); IloscPakietow = 10; WyslijPakiet( ); Identyczne znaczenie mają również w języku C++. Pakiet nr: 1 Pakiet nr: 2 Pakiet nr: 3
73 Pola statyczne w klasie Zmienne globalne versus zmienne statyczne class LaczeSieciowe.. public : static int IloscLacz; LaczeSieciowe( ) ++ IloscLacz; LaczeSieciowe( ) IloscLacz; ;. int LaczeSieciowe :: IloscLacz = 0; int main( ) cout << Lacze1. IloscLacz << endl; Pole statyczne pełni rolę zmiennej globalnej w ramach danej klasy. Istnieje tylko w jednym egzemplarzu niezależnie od wszystkich obiektów.
74 Pola statyczne w klasie Zmienne globalne versus zmienne statyczne class LaczeSieciowe.. public : static int IloscLacz; LaczeSieciowe( ) ++ IloscLacz; LaczeSieciowe( ) IloscLacz; ;. int LaczeSieciowe :: IloscLacz = 0; int main( ) cout << Lacze1. IloscLacz << endl; Musi być zadeklarowane oraz zainicjalizowane poza klasą w przestrzeni zmiennych globalnych. Określony zostaje w ten sposób moment jego utworzenia.
75 Pola statyczne w klasie Zmienne globalne versus zmienne statyczne class LaczeSieciowe.. public : static int IloscLacz; LaczeSieciowe( ) ++ IloscLacz; LaczeSieciowe( ) IloscLacz; ;. int LaczeSieciowe :: IloscLacz; int main( ) cout << Lacze1. IloscLacz << endl; Czy brak inicjalizacji oznacza wartość przypadkową?
76 Pola statyczne w klasie Zmienne globalne versus zmienne statyczne class LaczeSieciowe.. public : static int IloscLacz; LaczeSieciowe( ) ++ IloscLacz; LaczeSieciowe( ) IloscLacz; ;. int LaczeSieciowe :: IloscLacz; int main( ) cout << Lacze1. IloscLacz << endl; Pola statyczne typów wbudowanych zawsze inicjalizowane są wartością 0.
77 Pola statyczne w klasie Zmienne globalne versus zmienne statyczne class LaczeSieciowe.. public : static int IloscLacz; LaczeSieciowe( ) ++ IloscLacz; LaczeSieciowe( ) IloscLacz; ;. int LaczeSieciowe :: IloscLacz; int main( ) cout << LaczeSieciowe:: IloscLacz << endl; Do pola statycznego można odwoływać się bez konieczności tworzenia obiektu, gdyż jest ono własnością klasy, a nie obiektu.
78 Pola statyczne w klasie Zmienne globalne versus zmienne statyczne class LaczeSieciowe.. public : static int IloscLacz; LaczeSieciowe( ) ++ IloscLacz; LaczeSieciowe( ) IloscLacz; ;. int LaczeSieciowe :: IloscLacz; int main( ) LaczeSieciowe Lacze1, Lacze2; Dlatego też każdy z tych trzech sposobów odwołania się do pola IloscLacz jest odwołaniem się do tego samego obszaru pamięci. cout << LaczeSieciowe:: IloscLacz << endl; cout << Lacze1. IloscLacz << endl; cout << Lacze2. IloscLacz << endl;
79 Pola statyczne w klasie Zmienne globalne versus zmienne statyczne class LaczeSieciowe.. public : static int IloscLacz; LaczeSieciowe( ) ++ IloscLacz; LaczeSieciowe( ) IloscLacz; ;. int LaczeSieciowe :: IloscLacz; int main( ) Aby móc odwołać się do pola statycznego, nie musi istnieć żaden obiekt. Pola statyczne istnieją niezależnie od poszczególnych obiektów. cout << LaczeSieciowe:: IloscLacz << endl;
80 Koniec prezentacji
Szablony funkcji i szablony klas
Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2011 Bogdan Kreczmer Niniejszy dokument
Bardziej szczegółowoPola i metody statyczne
Pola i metody statyczne Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2005 2009 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat programowania
Bardziej szczegółowoWprowadzenie do szablonów klas
Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2008-2010 Bogdan Kreczmer Niniejszy
Bardziej szczegółowoWstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this
Wstęp do programowania obiektowego WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this 1 Nazwa typu Rozmiar Zakres Uwagi bool 1 bit wartości true albo false stdbool.h TYPY ZNAKOWE
Bardziej szczegółowoPrzesłanianie nazw, przestrzenie nazw
Przesłanianie nazw, przestrzenie nazw Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2005 2013 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu
Bardziej szczegółowoWyjątki. Wyjątki. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Politechnika Wrocławska
Bogdan Kreczmer bogdan.kreczmer@pwr.edu.pl Katedra Cybernetyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2018 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu dotyczącego programowania
Bardziej szczegółowoPrzestrzenie nazw. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Politechnika Wrocławska
Bogdan Kreczmer bogdan.kreczmer@pwr.edu.pl Katedra Cybernetyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2018 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu dotyczącego programowania
Bardziej szczegółowoRzutowanie i konwersje
Rzutowanie i konwersje Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2005 2013 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat programowania
Bardziej szczegółowoWprowadzenie do szablonów szablony funkcji
Wprowadzenie do szablonów szablony funkcji Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2006 2010 Bogdan Kreczmer Niniejszy dokument zawiera materiały do
Bardziej szczegółowoWprowadzenie do szablonów szablony funkcji
Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2006 2010 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat programowania obiektowego.
Bardziej szczegółowoJęzyk C++ wykład VII. uzupełnienie notatek: dr Jerzy Białkowski. Programowanie C/C++ Język C++ wykład VII. dr Jarosław Mederski. Spis.
Programowanie uzupełnienie notatek: dr Jerzy Białkowski 1 2 3 4 Obiektowość języka C++ ˆ Klasa (rozszerzenie struktury), obiekt instancją klasy, konstruktory i destruktory ˆ Enkapsulacja - kapsułkowanie,
Bardziej szczegółowoReferencje do zmiennych i obiektów
Referencje do zmiennych i obiektów Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2005 2008 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu
Bardziej szczegółowoProgramowanie obiektowe, wykład nr 6. Klasy i obiekty
Dr hab. inż. Lucyna Leniowska, prof. UR, Zakład Mechatroniki, Automatyki i Optoelektroniki, IT Programowanie obiektowe, wykład nr 6 Klasy i obiekty W programowaniu strukturalnym rozwój oprogramowania oparto
Bardziej szczegółowoQt sygnały i sloty. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Wydział Elektroniki Politechnika Wrocławska
Qt sygnały i sloty Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Katedra Cybernetyki i Robotyki Wydział Elektroniki Politechnika Wrocławska Kurs: Copyright c 2018 Bogdan Kreczmer Niniejszy dokument zawiera
Bardziej szczegółowoKlasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np
Klasy Klasa jest nowym typem danych zdefiniowanym przez użytkownika Wartości takiego typu nazywamy obiektami Najprostsza klasa jest po prostu strukturą, np struct Zespolona { Klasy jako struktury z operacjami
Bardziej szczegółowoOperacje wejścia/wyjścia (odsłona druga) - pliki
Operacje wejścia/wyjścia (odsłona druga) - pliki Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2005 2008 Bogdan Kreczmer Niniejszy dokument zawiera materiały
Bardziej szczegółowoQt sygnały i designer
Qt sygnały i designer Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2015 Bogdan
Bardziej szczegółowoProgramowanie 2. Język C++. Wykład 3.
3.1 Programowanie zorientowane obiektowo... 1 3.2 Unie... 2 3.3 Struktury... 3 3.4 Klasy... 4 3.5 Elementy klasy... 5 3.6 Dostęp do elementów klasy... 7 3.7 Wskaźnik this... 10 3.1 Programowanie zorientowane
Bardziej szczegółowoSkładnia C++ Programowanie Obiektowe Mateusz Cicheński
Składnia C++ Programowanie Obiektowe Mateusz Cicheński Klasy i modyfikatory dostępu Przesłanianie metod Polimorfizm Wskaźniki Metody wirtualne Metody abstrakcyjne i interfejsy Konstruktory i destruktory
Bardziej szczegółowoWstęp do Programowania 2
Wstęp do Programowania 2 dr Bożena Woźna-Szcześniak bwozna@gmail.com Akademia im. Jana Długosza Wykład 5 W programowaniu obiektowym programista koncentruje się na obiektach. Zadaje sobie pytania typu:
Bardziej szczegółowoKlasa, metody, rozwijanie w linii
Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2005 2008 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat programowania obiektowego.
Bardziej szczegółowoMateriały do zajęć VII
Spis treści I. Klasy Materiały do zajęć VII II. III. Konstruktor Właściwości i indeksatory Klasy Programowanie obiektowe wiadomości wstępne Paradygmat programowania obiektowego Abstrakcja Hermetyzacja
Bardziej szczegółowowykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp
Programowanie uzupełnienie notatek: dr Jerzy Białkowski 1 2 3 4 Historia C++ został zaprojektowany w 1979 przez Bjarne Stroustrupa jako rozszerzenie języka C o obiektowe mechanizmy abstrakcji danych i
Bardziej szczegółowoPraca z aplikacją designer
Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2014 Bogdan Kreczmer Niniejszy dokument
Bardziej szczegółowoWyliczanie wyrażenia obiekty tymczasowe
Wyliczanie wyrażenia obiekty tymczasowe Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2013 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu
Bardziej szczegółowoOperacje wejścia/wyjścia odsłona pierwsza
Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2005 2008 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat programowania obiektowego.
Bardziej szczegółowoKlasa, metody, rozwijanie w linii
Klasa, metody, rozwijanie w linii Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2005 2008 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu
Bardziej szczegółowoObiekty i metody stałe
Obiekty i metody stałe Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2005 2008 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat programowania
Bardziej szczegółowoWprowadzenie do UML, przykład użycia kolizja
Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2012 Bogdan Kreczmer Niniejszy dokument
Bardziej szczegółowoGeneza C++, hermetyzacja struktur danych
Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2012 Bogdan Kreczmer Niniejszy dokument
Bardziej szczegółowoPARADYGMATY PROGRAMOWANIA Wykład 2
PARADYGMATY PROGRAMOWANIA Wykład 2 Definiowanie klas w C++ - ciąg dalszy Lista inicjalizująca konstruktora Przeznaczenie - do inicjalizacji pól klasy z kwalifikatorem const i inicjalizacji obiektów składowych
Bardziej szczegółowoKurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016
Wykład 1 3 marca 2016 Słowa kluczowe języka Java abstract, break, case, catch, class, const, continue, default, do, else, enum, extends, final, finally, for, goto, if, implements, import, instanceof, interface,
Bardziej szczegółowoKonstruktor kopiujacy
Konstruktor kopiujacy Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Niniejszy dokument zawiera materiały do wykładu na temat programowania obiektowego. Jest on udostępniony
Bardziej szczegółowoDariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki
Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki int getmax (int a, int b) { return (a > b? a : b); float getmax (float a, float b) { return (a > b? a : b); long getmax (long a, long b)
Bardziej szczegółowoStyle programowania - krótki przeglad
Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2005 2008 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat programowania obiektowego.
Bardziej szczegółowoSchemat konstrukcja pliku Makefile
Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2008 Bogdan Kreczmer Niniejszy dokument
Bardziej szczegółowoJęzyk C++ wykład VI. uzupełnienie notatek: dr Jerzy Białkowski. Programowanie C/C++ Język C++ wykład VI. dr Jarosław Mederski.
- - uzupełnienie notatek: dr Jerzy Białkowski - - 1-2 - - - 1 #include 2 #include 3 # include 4 using namespace std ; 5 6 class Punkt { 7 8 private : 9 double
Bardziej szczegółowoProgramowanie Obiektowew języku C++ Zadania L4
Programowanie Obiektowew języku C++ Zadania L4 Mirosław Głowacki 1,2 1 Akademia Górniczo-Hutnicza im. Stanisława Staszica w Ktrakowie Wydział Inżynierii Metali i Informatyki Stosowanej Katedra Informatyki
Bardziej szczegółowoPodstawy Programowania Obiektowego
Podstawy Programowania Obiektowego Wprowadzenie do programowania obiektowego. Pojęcie struktury i klasy. Spotkanie 03 Dr inż. Dariusz JĘDRZEJCZYK Tematyka wykładu Idea programowania obiektowego Definicja
Bardziej szczegółowoMechanizm dziedziczenia
Mechanizm dziedziczenia Programowanie obiektowe jako realizacja koncepcji ponownego wykorzystania kodu Jak przebiega proces dziedziczenia? Weryfikacja formalna poprawności dziedziczenia Realizacja dziedziczenia
Bardziej szczegółowoDo czego służą klasy?
KLASY Dorota Pylak 2 Do czego służą klasy? W programowaniu obiektowym posługujemy się obiektami. Obiekty charakteryzują się: cechami (inaczej - atrybutami lub stanami) operacjami, które na nich można wykonywać
Bardziej szczegółowoSkładnia C++ Programowanie Obiektowe Mateusz Cicheński
Składnia C++ Programowanie Obiektowe Mateusz Cicheński Klasy i modyfikatory dostępu Przesłanianie metod Polimorfizm Wskaźniki Metody wirtualne Metody abstrakcyjne i interfejsy Przeciążanie operatorów Słowo
Bardziej szczegółowoKurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016
Wykład 2 17 marca 2016 Dziedziczenie Klasy bazowe i potomne Dziedziczenie jest łatwym sposobem rozwijania oprogramowania. Majac klasę bazowa możemy ja uszczegółowić (dodać nowe pola i metody) nie przepisujac
Bardziej szczegółowoDziedziczenie. Ogólna postać dziedziczenia klas:
Dziedziczenie Ogólna postać dziedziczenia klas: class nazwa_clasy_pochodnej : specyfikator_dostępu nazwa_clasy_bazowej specyfikator_dostępu : public private protected Specyfikator dostępu definiuje, w
Bardziej szczegółowoWykład V. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej
Wykład V - semestr II Kierunek Informatyka Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2014 c Copyright 2014 Janusz Słupik Programowanie obiektowe Dziedziczenie (inheritance) - mechanizm
Bardziej szczegółowoZaawansowane programowanie w języku C++ Klasy w C++
Zaawansowane programowanie w języku C++ Klasy w C++ Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt. Innowacyjna dydaktyka bez ograniczeń
Bardziej szczegółowoProgramowanie w C++ Wykład 14. Katarzyna Grzelak. 3 czerwca K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27
Programowanie w C++ Wykład 14 Katarzyna Grzelak 3 czerwca 2019 K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27 Na ostatnim wykładzie: Konstruktor standardowy (domyślny) to taki, który nie ma żadnych argumentów
Bardziej szczegółowoSzablon klasy std::vector
Szablon klasy std::vector Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2006 2010 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat
Bardziej szczegółowoProgramowanie Obiektowew języku C++ Zadania L4
Programowanie Obiektowew języku C++ Zadania L4 Mirosław Głowacki 1,2 1 Akademia Górniczo-Hutnicza im. Stanisława Staszica w Ktrakowie Wydział Inżynierii Metali i Informatyki Stosowanej Katedra Informatyki
Bardziej szczegółowoWykład 8: klasy cz. 4
Programowanie obiektowe Wykład 8: klasy cz. 4 Dynamiczne tworzenie obiektów klas Składniki statyczne klas Konstruktor i destruktory c.d. 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD
Bardziej szczegółowoJęzyki i paradygmaty programowania
Języki i paradygmaty programowania WYDZIAŁ ELEKTRONIKI i INFORMATYKI dr inż. Robert Arsoba Politechnika Koszalińska Wydział Elektroniki i Informatyki POLITECHNIKA KOSZALIŃSKA 2009/2010 Materiały do wykładu
Bardziej szczegółowoTechniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.
Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni Wykład 3 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Abstrakcja funkcyjna Struktury Klasy hermetyzacja
Bardziej szczegółowo1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość
1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 2. Poprawna definicja wskażnika b to: a) float *a, **b = &a; b) float
Bardziej szczegółowoWykład 4: Klasy i Metody
Wykład 4: Klasy i Metody Klasa Podstawa języka. Każde pojęcie które chcemy opisać w języku musi być zawarte w definicji klasy. Klasa definiuje nowy typ danych, których wartościami są obiekty: klasa to
Bardziej szczegółowoTEMAT : KLASY DZIEDZICZENIE
TEMAT : KLASY DZIEDZICZENIE Wprowadzenie do dziedziczenia w języku C++ Język C++ możliwa tworzenie nowej klasy (nazywanej klasą pochodną) w oparciu o pewną wcześniej zdefiniowaną klasę (nazywaną klasą
Bardziej szczegółowoDefiniowanie własnych klas
Programowanie obiektowe Definiowanie własnych klas Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski @ pwr.wroc.pl Definiowanie własnych klas Autor:
Bardziej szczegółowoLaboratorium nr 12. Temat: Struktury, klasy. Zakres laboratorium:
Zakres laboratorium: definiowanie struktur terminologia obiektowa definiowanie klas funkcje składowe klas programy złożone z wielu plików zadania laboratoryjne Laboratorium nr 12 Temat: Struktury, klasy.
Bardziej szczegółowowykład V uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C++ klasy i obiekty wykład V dr Jarosław Mederski Spis Język C++ - klasy
i obiekty Programowanie i obiekty uzupełnienie notatek: dr Jerzy Białkowski i obiekty 1 2 3 4 i obiekty Obiektowość języka C++ Na tym wykładzie poznamy: ˆ Klasa (w języku C++ rozszerzenie struktury, typ
Bardziej szczegółowoW2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :
Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy : class nazwa_klasy prywatne dane i funkcje public: publiczne dane i funkcje lista_obiektów;
Bardziej szczegółowoWprowadzenie w dziedziczenie. Klasa D dziedziczy klasę B: Klasa B klasa bazowa (base class), klasa D klasa pochodna (derived class).
Wprowadzenie w dziedziczenie Klasa D dziedziczy klasę B: B klasa bazowa D klasa pochodna Klasa B klasa bazowa (base class), klasa D klasa pochodna (derived class). Najpierw jest tworzona klasa bazowa,
Bardziej szczegółoworeferencje Wykład 2. Programowanie (język C++) Referencje (1) int Num = 50; zdefiniowano zmienną Num (typu int) nadając jej wartość początkową 50.
Programowanie (język C++) referencje Wykład 2. Referencje (1) Referencja (odnośnik) jest zmienną identyfikującą inną zmienną. Wykonanie operacji na referencji ma taki sam skutek, jak wykonanie tejŝe operacji
Bardziej szczegółowoKLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany
KLASA UCZEN Napisz deklarację klasy Uczen, w której przechowujemy następujące informacje o uczniu: imię, nazwisko, średnia (pola prywatne), poza tym klasa zawiera metody: konstruktor bezparametrowy (nie
Bardziej szczegółowoTEMAT : KLASY POLIMORFIZM
TEMAT : KLASY POLIMORFIZM 1. Wprowadzenie do polimorfizmu i funkcji wirtualnych w języku C++ Język C++ zakłada, że w pewnych przypadkach uzasadnione jest tworzenie klas, których reprezentanci w programie
Bardziej szczegółowoSzablon klasy std::list
Szablon klasy std::list Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2006 2010 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat programowania
Bardziej szczegółowoWstęp do Programowania 2
Wstęp do Programowania 2 dr Bożena Woźna-Szcześniak bwozna@gmail.com Akademia im. Jana Długosza Wykład 8 Przykład realizowany na wykładzie Klasy StringBad i String. Wstępne pliki załaczone jako źródła.
Bardziej szczegółowoWykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej
Wykład I - semestr II Kierunek Informatyka Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2015 c Copyright 2015 Janusz Słupik Zaliczenie przedmiotu Do zaliczenia przedmiotu niezbędne jest
Bardziej szczegółowoDiagramy UML, przykład problemu kolizji
Bogdan Kreczmer bogdan.kreczmer@pwr.edu.pl Katedra Cybernetyki i Robotyki Wydział Elektroniki Politechnika Wrocławska Kurs: Copyright c 2015 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu
Bardziej szczegółowoStyle programowania - krótki przeglad
Style programowania - krótki przeglad Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Niniejszy dokument zawiera materiały do wykładu na temat programowania obiektowego.
Bardziej szczegółowoPARADYGMATY PROGRAMOWANIA Wykład 4
PARADYGMATY PROGRAMOWANIA Wykład 4 Metody wirtualne i polimorfizm Metoda wirualna - metoda używana w identyczny sposób w całej hierarchii klas. Wybór funkcji, którą należy wykonać po wywołaniu metody wirtualnej
Bardziej szczegółowoMechanizm dziedziczenia
Mechanizm dziedziczenia Programowanie obiektowe jako realizacja koncepcji ponownego wykorzystania kodu Jak przebiega proces dziedziczenia? Weryfikacja formalna poprawności dziedziczenia Realizacja dziedziczenia
Bardziej szczegółowoProjektowanie klas c.d. Projektowanie klas przykład
Projektowanie klas c.d. ogólne wskazówki dotyczące projektowania klas: o wyodrębnienie klasy odpowiedź na potrzeby życia (obsługa rozwiązania konkretnego problemu) o zwykle nie uda się utworzyć idealnej
Bardziej szczegółowoProgramowanie obiektowe
Programowanie obiektowe Wykład 2 Marcin Młotkowski 4 marca 2015 Plan wykładu 1 2 3 4 5 Marcin Młotkowski Programowanie obiektowe 2 / 47 Krótki opis C Obiektowy, z kontrolą typów; automatyczne odśmiecanie;
Bardziej szczegółowoProgramowanie obiektowe w języku C++ dr inż. Jarosław Forenc
Rok akademicki 2016/2017, Wykład nr 4 2/45 Plan wykładu nr 4 Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia stacjonarne I stopnia Rok akademicki 2016/2017
Bardziej szczegółowoPARADYGMATY PROGRAMOWANIA Wykład 3
PARADYGMATY PROGRAMOWANIA Wykład 3 Definiowanie operatorów i ich przeciążanie Przykłady zastosowania operatorów: a) operator podstawienia ( = ) obiektów o złożonej strukturze, b) operatory działania na
Bardziej szczegółowoInterfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej
Programowanie obiektowe Interfejsy Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski pwr.wroc.pl Interfejsy Autor: Paweł Rogaliński Instytut Informatyki,
Bardziej szczegółowoPodstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.
M. Trzebiński C++ 1/14 Podstawy języka C++ Maciej Trzebiński Instytut Fizyki Jądrowej Polskiej Akademii Nauk Praktyki studenckie na LHC IVedycja,2016r. IFJ PAN Przygotowanie środowiska pracy Niniejsza
Bardziej szczegółowoIMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi
IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi EGZAMIN PIERWSZY (25 CZERWCA 2013) JĘZYK C++ poprawiam ocenę pozytywną z egzaminu 0 (zakreśl poniżej x) 1. Wśród poniższych wskaż poprawną formę definicji
Bardziej szczegółowoJęzyki Programowania. Prowadząca: dr inż. Hanna Zbroszczyk. tel: Konsultacje: piątek:
Języki Programowania Prowadząca: dr inż. Hanna Zbroszczyk e-mail: gos@if.pw.edu.pl tel: +48 22 234 58 51 Konsultacje: piątek: 12.00 13.30 www: http://www.if.pw.edu.pl/~gos/students/jp Politechnika Warszawska
Bardziej szczegółowoTechniki programowania INP001002Wl rok akademicki 2017/18 semestr letni. Wykład 4. Karol Tarnowski A-1 p.
Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni Wykład 4 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Dziedziczenie Przestrzenie nazw Na podstawie: A.
Bardziej szczegółowoDariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki
Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki Object-oriented programming Najpopularniejszy obecnie styl (paradygmat) programowania Rozwinięcie koncepcji programowania strukturalnego
Bardziej szczegółowoPolimorfizm, metody wirtualne i klasy abstrakcyjne
Programowanie obiektowe Polimorfizm, metody wirtualne i klasy abstrakcyjne Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski pwr.wroc.pl Polimorfizm,
Bardziej szczegółowoWartości domyślne, szablony funkcji i klas
Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2012 Bogdan Kreczmer Niniejszy dokument
Bardziej szczegółowoWstęp do programowania obiektowego. Wykład 2
Wstęp do programowania obiektowego Wykład 2 1 CECHY I KONCEPCJA PROGRAMOWANIA OBIEKTOWEGO 2 Cechy programowania obiektowego Dla wielu problemów podejście obiektowe jest zgodne z rzeczywistością (łatwe
Bardziej szczegółowoMETODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02
METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE Wykład 02 NAJPROSTSZY PROGRAM /* (Prawie) najprostszy przykład programu w C */ /*==================*/ /* Między tymi znaczkami można pisać, co się
Bardziej szczegółowoJAVA W SUPER EXPRESOWEJ PIGUŁCE
JAVA W SUPER EXPRESOWEJ PIGUŁCE Obiekt Obiekty programowe to zbiór własności i zachowań (zmiennych i metod). Podobnie jak w świecie rzeczywistym obiekty posiadają swój stan i zachowanie. Komunikat Wszystkie
Bardziej szczegółowoProgramowanie obiektowe Wykład 3. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21
Dariusz Wardowski dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21 Przydzielanie pamięci Poniżej przedstawiono w C++ dwie klasy obrazujące sposób rezerwacji pamięci. class Osoba char imie[30];
Bardziej szczegółowo1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?
1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie? a) konstruktor b) referencje c) destruktor d) typy 2. Które z poniższych wyrażeń są poprawne dla klasy o nazwie
Bardziej szczegółowo2.4 Dziedziczenie. 2.4 Dziedziczenie Przykłady programowania w C - kurs podstawowy
2.4 Dziedziczenie Poprzednie dwa rozdziały które dotyczyły zagadnienia automatów komórkowych na przykładach programów w C++. Mogłyby one sugerować że niekoniecznie trzeba programować obiektowo aby napisać
Bardziej szczegółowoJęzyk C++ wykład VIII
Programowanie uzupełnienie notatek: dr Jerzy Białkowski 1 2 3 4 Obiektowość języka C++ ˆ Klasa (rozszerzenie struktury), obiekt instancją klasy, konstruktory i destruktory ˆ Enkapsulacja - kapsułkowanie,
Bardziej szczegółowoKLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany
KLASA UCZEN Napisz deklarację klasy Uczen, w której przechowujemy następujące informacje o uczniu: imię, nazwisko, średnia (pola prywatne), poza tym klasa zawiera metody: konstruktor bezparametrowy (nie
Bardziej szczegółowoPodstawy algorytmiki i programowania - wykład 4 C-struktury
1 Podstawy algorytmiki i programowania - wykład 4 C-struktury Treści prezentowane w wykładzie zostały oparte o: S. Prata, Język C++. Szkoła programowania. Wydanie VI, Helion, 2012 www.cplusplus.com Jerzy
Bardziej szczegółowoProgramowanie Obiektowo Zorientowane w języku C++ Klasy, pola, metody
Programowanie Obiektowo Zorientowane w języku C++ Klasy, pola, metody Mirosław Głowacki 1 1 Akademia Górniczo-Hutnicza im. Stanisława Staszica w Ktrakowie Wydział Inżynierii Metali i Informatyki Stosowanej
Bardziej szczegółowoTypy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1
Typy złożone Struktury, pola bitowe i unie. Programowanie Proceduralne 1 Typy podstawowe Typy całkowite: char short int long Typy zmiennopozycyjne float double Modyfikatory : unsigned, signed Typ wskaźnikowy
Bardziej szczegółowoKLASY cz.1. Dorota Pylak
KLASY cz.1 Dorota Pylak Do czego służą klasy? 2 W programowaniu obiektowym posługujemy się obiektami. Obiekty charakteryzują się: cechami (inaczej - atrybutami lub stanami) operacjami, które na nich można
Bardziej szczegółowoStrona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta 16.09.2006. Strona 1 z 26. Powrót. Full Screen. Zamknij.
Programowanie Sobera Jolanta 16.09.2006 Strona 1 z 26 1 Wprowadzenie do programowania 4 2 Pierwsza aplikacja 5 3 Typy danych 6 4 Operatory 9 Strona 2 z 26 5 Instrukcje sterujące 12 6 Podprogramy 15 7 Tablice
Bardziej szczegółowoGlobalne / Lokalne. Wykład 15. Podstawy programowania (język C) Zmienne globalne / lokalne (1) Zmienne globalne / lokalne (2)
Podstawy programowania (język C) Globalne / Lokalne Wykład 15. Tomasz Marks - Wydział MiNI PW -1- Tomasz Marks - Wydział MiNI PW -2- Zmienne globalne / lokalne (1) int A, *Q; // definicja zmiennych globalnych
Bardziej szczegółowoProgramowanie obiektowe - Przykładowe zadania egzaminacyjne (2005/2006)
Programowanie obiektowe - Przykładowe zadania egzaminacyjne (2005/2006) Część 1. Teoria Wyjaśnij pojęcia, podaj przykład: klasa obiekt konstruktor destruktor kapsułkowanie (hermetyzacja) wskaźnik this
Bardziej szczegółowoProgramowanie obiektowe, wykład nr 7. Przegląd typów strukturalnych - klasy i obiekty - c.d.
Dr hab. inż. Lucyna Leniowska, prof. UR, Zakład Mechatroniki, Automatyki i Optoelektroniki, IT Programowanie obiektowe, wykład nr 7 Przegląd typów strukturalnych - klasy i obiekty - c.d. Klasa - powtórzenie
Bardziej szczegółowoInformacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;
Klasy w C++ są bardzo ważnym narzędziem w rękach programisty. Klasy są fundamentem programowania obiektowego. Z pomocą klas będziesz mógł tworzyć lepszy kod, a co najważniejsze będzie on bardzo dobrze
Bardziej szczegółowoLaboratorium 1 - Programowanie proceduralne i obiektowe
Laboratorium 1 - Programowanie proceduralne i obiektowe mgr inż. Kajetan Kurus 4 marca 2014 1 Podstawy teoretyczne 1. Programowanie proceduralne (powtórzenie z poprzedniego semestru) (a) Czym się charakteryzuje?
Bardziej szczegółowo