Hermetyzacja oraz pola i metody statyczne

Save this PDF as:
 WORD  PNG  TXT  JPG

Wielkość: px
Rozpocząć pokaz od strony:

Download "Hermetyzacja oraz pola i metody statyczne"

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

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ółowo

Pola i metody statyczne

Pola 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ółowo

Wprowadzenie do szablonów klas

Wprowadzenie 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ółowo

Rzutowanie i konwersje

Rzutowanie 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ółowo

Wprowadzenie do szablonów szablony funkcji

Wprowadzenie 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ółowo

Ję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.

Ję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ółowo

Programowanie obiektowe, wykład nr 6. Klasy i obiekty

Programowanie 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ółowo

Referencje do zmiennych i obiektów

Referencje 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ółowo

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

Skł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ółowo

Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np

Klasa 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ółowo

Operacje wejścia/wyjścia (odsłona druga) - pliki

Operacje 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ółowo

wykł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

wykł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ółowo

Wstęp do Programowania 2

Wstę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ółowo

Klasa, 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 na temat programowania obiektowego.

Bardziej szczegółowo

Style programowania - krótki przeglad

Style 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ółowo

Geneza C++, hermetyzacja struktur danych

Geneza 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ółowo

Wprowadzenie do UML, przykład użycia kolizja

Wprowadzenie 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ółowo

Qt sygnały i designer

Qt 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ółowo

Wyliczanie wyrażenia obiekty tymczasowe

Wyliczanie 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ółowo

Obiekty i metody stałe

Obiekty 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ółowo

Klasa, metody, rozwijanie w linii

Klasa, 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ółowo

PARADYGMATY PROGRAMOWANIA Wykład 2

PARADYGMATY 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ółowo

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Kurs 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ółowo

Praca z aplikacją designer

Praca 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ółowo

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Dariusz 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ółowo

Konstruktor kopiujacy

Konstruktor 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ółowo

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

Skł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ółowo

Podstawy Programowania Obiektowego

Podstawy 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ółowo

Wykład V. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Wykł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ółowo

Zaawansowane programowanie w języku C++ Klasy w C++

Zaawansowane 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ółowo

Schemat konstrukcja pliku Makefile

Schemat 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ółowo

Języki i paradygmaty programowania

Ję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ółowo

Dziedziczenie. Ogólna postać dziedziczenia klas:

Dziedziczenie. 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ółowo

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Kurs 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ółowo

1. 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ść 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ółowo

Wykład 4: Klasy i Metody

Wykł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ółowo

Szablon klasy std::vector

Szablon 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ółowo

wykł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

wykł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ółowo

TEMAT : KLASY DZIEDZICZENIE

TEMAT : 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ółowo

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Wykł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ółowo

Wprowadzenie 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: 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ółowo

Wstęp do Programowania 2

Wstę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ółowo

PARADYGMATY PROGRAMOWANIA Wykład 4

PARADYGMATY 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ółowo

referencje Wykład 2. Programowanie (język C++) Referencje (1) int Num = 50; zdefiniowano zmienną Num (typu int) nadając jej wartość początkową 50.

referencje 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ółowo

TEMAT : KLASY POLIMORFIZM

TEMAT : 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ółowo

Definiowanie własnych klas

Definiowanie 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ółowo

Diagramy UML, przykład problemu kolizji

Diagramy 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ółowo

Programowanie obiektowe

Programowanie 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ółowo

Projektowanie klas c.d. Projektowanie klas przykład

Projektowanie 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ółowo

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :

W2 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ółowo

Wstęp do programowania obiektowego. Wykład 2

Wstę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ółowo

Języki Programowania. Prowadząca: dr inż. Hanna Zbroszczyk. tel: Konsultacje: piątek:

Ję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ółowo

Wartości domyślne, szablony funkcji i klas

Wartoś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ółowo

Programowanie obiektowe w języku C++ dr inż. Jarosław Forenc

Programowanie 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ółowo

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

METODY 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ółowo

Język C++ wykład VIII

Ję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ółowo

Globalne / Lokalne. Wykład 15. Podstawy programowania (język C) Zmienne globalne / lokalne (1) Zmienne globalne / lokalne (2)

Globalne / 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ółowo

2.4 Dziedziczenie. 2.4 Dziedziczenie Przykłady programowania w C - kurs podstawowy

2.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ółowo

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta 16.09.2006. Strona 1 z 26. Powrót. Full Screen. Zamknij.

Strona 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ółowo

PARADYGMATY PROGRAMOWANIA Wykład 3

PARADYGMATY 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ółowo

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

IMIĘ 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ółowo

Programowanie, część I

Programowanie, część I 11 marca 2010 Kontakt Wstęp Informacje organizacyjne Materiał na ćwiczenia Plan wykładu http://www.fuw.edu.pl/~rwys/prog rwys@fuw.edu.pl tel. 22 55 32 263 Materiał na ćwiczenia Informacje organizacyjne

Bardziej szczegółowo

Programowanie obiektowe i C++ dla matematyków

Programowanie obiektowe i C++ dla matematyków Programowanie obiektowe i C++ dla matematyków Bartosz Szreder szreder (at) mimuw... 22 XI 2011 Uwaga! Ponieważ już sobie powiedzieliśmy np. o wskaźnikach i referencjach, przez które nie chcemy przegrzebywać

Bardziej szczegółowo

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Interfejsy. 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ółowo

Programowanie obiektowe - Przykładowe zadania egzaminacyjne (2005/2006)

Programowanie 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ółowo

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Podstawy 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ółowo

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Polimorfizm, 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ółowo

Programowanie obiektowe, wykład nr 7. Przegląd typów strukturalnych - klasy i obiekty - c.d.

Programowanie 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ółowo

Nowe słowa kluczowe. Komentarze. Wskaźniki typu void. class, delete, new, friend,... /* Komentarz w C i C++ */ // Komentarz w C++ (do końca wiersza)

Nowe słowa kluczowe. Komentarze. Wskaźniki typu void. class, delete, new, friend,... /* Komentarz w C i C++ */ // Komentarz w C++ (do końca wiersza) Różnice między C i C++ (Rozszerzenia C++) Nowe słowa kluczowe class, delete, new, friend,... Komentarze /* Komentarz w C i C++ */ // Komentarz w C++ (do końca wiersza) Wskaźniki typu void W C wskaźniki

Bardziej szczegółowo

Laboratorium 1 - Programowanie proceduralne i obiektowe

Laboratorium 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

Zaawansowane programowanie w języku C++ Programowanie obiektowe

Zaawansowane programowanie w języku C++ Programowanie obiektowe Zaawansowane programowanie w języku C++ Programowanie obiektowe Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt. Innowacyjna dydaktyka

Bardziej szczegółowo

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static), Tworzenie obiektów Dostęp do obiektów jest realizowany przez referencje. Obiekty w języku Java są tworzone poprzez użycie słowa kluczowego new. String lan = new String( Lancuch ); Obszary pamięci w których

Bardziej szczegółowo

Języki i paradygmaty programowania Wykład 2. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/18

Języki i paradygmaty programowania Wykład 2. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/18 Dariusz Wardowski dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/18 Literatura Języki i paradygmaty programowania Wykład 2 1. C. S. Horstman, G. Cornell, core Java 2 Podstawy, Helion 2003

Bardziej szczegółowo

Technologie i usługi internetowe cz. 2

Technologie i usługi internetowe cz. 2 Technologie i usługi internetowe cz. 2 Katedra Analizy Nieliniowej, WMiI UŁ Łódź, 15 luty 2014 r. 1 Programowanie obiektowe Programowanie obiektowe (z ang. object-oriented programming), to paradygmat programowania,

Bardziej szczegółowo

Język ludzki kod maszynowy

Język ludzki kod maszynowy Język ludzki kod maszynowy poziom wysoki Język ludzki (mowa) Język programowania wysokiego poziomu Jeśli liczba punktów jest większa niż 50, test zostaje zaliczony; w przeciwnym razie testu nie zalicza

Bardziej szczegółowo

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Java - tablice, konstruktory, dziedziczenie i hermetyzacja Java - tablice, konstruktory, dziedziczenie i hermetyzacja Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak PLAN WYKŁADU zmienne tablicowe konstruktory klas dziedziczenie hermetyzacja

Bardziej szczegółowo

Podstawy Programowania Obiektowego

Podstawy Programowania Obiektowego Podstawy Programowania Obiektowego Pojęcie struktury i klasy. Konstruktor i destruktor. Spotkanie 08 Dr inż. Dariusz JĘDRZEJCZYK Tematyka wykładu Spotkanie 08 Klasy: definicja a deklaracja klasy dane składowe

Bardziej szczegółowo

Programowanie obiektowe - 1.

Programowanie obiektowe - 1. Programowanie obiektowe - 1 Mariusz.Masewicz@cs.put.poznan.pl Programowanie obiektowe Programowanie obiektowe (ang. object-oriented programming) to metodologia tworzenia programów komputerowych, która

Bardziej szczegółowo

Programowanie obiektowe w języku

Programowanie obiektowe w języku Programowanie obiektowe w języku C++ Stanisław Gepner sgepner@meil.pw.edu.pl Dziedziczenie Wstęp Zacznijmy od przykładu Przykład rolniczy Każde zwierzątko wydaje dźwięk Każde się tak samo porusza Musimy

Bardziej szczegółowo

Wartości domyślne, przeciażenia funkcji

Wartości domyślne, przeciażenia funkcji Wartości domyślne, przeciażenia funkcji 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ółowo

Abstrakcyjny typ danych

Abstrakcyjny typ danych Abstrakcyjny typ danych Abstrakcyjny Typ Danych (abstract data type-adt): zbiór wartości wraz z powiązanymi z nimi operacjami; operacje są zdefiniowane w sposób niezależny od implementacji; operacje są

Bardziej szczegółowo

Informatyka I. Dziedziczenie. Nadpisanie metod. Klasy abstrakcyjne. Wskaźnik this. Metody i pola statyczne. dr inż. Andrzej Czerepicki

Informatyka I. Dziedziczenie. Nadpisanie metod. Klasy abstrakcyjne. Wskaźnik this. Metody i pola statyczne. dr inż. Andrzej Czerepicki Informatyka I Dziedziczenie. Nadpisanie metod. Klasy abstrakcyjne. Wskaźnik this. Metody i pola statyczne. dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2017 Dziedziczenie klas

Bardziej szczegółowo

Programowanie obiektowe w C++ Wykład 12

Programowanie obiektowe w C++ Wykład 12 Programowanie obiektowe w C++ Wykład 12 dr Lidia Stępień Akademia im. Jana Długosza w Częstochowie L. Stępień (AJD) 1 / 22 Zakresowe pętle for double tab[5] {1.12,2.23,3.33,4.12,5.22 for(double x: tab)

Bardziej szczegółowo

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Instytut Mechaniki i Inżynierii Obliczeniowej  Wydział Mechaniczny Technologiczny Politechnika Śląska Instytut Mechaniki i Inżynierii Obliczeniowej www.imio.polsl.pl fb.com/imiopolsl @imiopolsl Wydział Mechaniczny Technologiczny Politechnika Śląska Języki programowania z programowaniem obiektowym Laboratorium

Bardziej szczegółowo

Typy zmiennych proste i złożone. Programowanie komputerów. Tablica. Złożone typy zmiennych. Klasa. Struktura

Typy zmiennych proste i złożone. Programowanie komputerów. Tablica. Złożone typy zmiennych. Klasa. Struktura Programowanie komputerów Programowanie obiektowe. Typy zmiennych proste i złożone Typy zmiennych "wbudowane", tj. identyfikowane przez słowa kluczowe, są określane jako proste: int short long float double

Bardziej szczegółowo

Dziedziczenie i poliformizm

Dziedziczenie i poliformizm Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Katedra Cybernetyki i Robotyki Wydziału Elektroniki Politechnika Wrocławska Kurs: Copyright c 2016 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu

Bardziej szczegółowo

wykład III uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - zarządzanie pamięcią, struktury,

wykład III uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - zarządzanie pamięcią, struktury, , Programowanie, uzupełnienie notatek: dr Jerzy Białkowski , 1 2 3 4 , Wczytywanie liczb , Wczytywanie liczb 1 #include 2 #include < s t d l i b. h> 3 4 int main ( ) { 5 int rozmiar, numer

Bardziej szczegółowo

Programowanie 2. Język C++. Wykład Relacje między klasami, klasy zagnieŝdŝone, klasy lokalne

Programowanie 2. Język C++. Wykład Relacje między klasami, klasy zagnieŝdŝone, klasy lokalne 3.1 Relacje między klasami, klasy zagnieŝdŝone, klasy lokalne... 1 3.2 Zaprzyjaźnione klasy, specyfikator friend... 3 3.3 Zaprzyjaźnione funkcje, metody z klasą... 4 3.4 Relacje dziedziczenia... 6 3.5

Bardziej szczegółowo

Programowanie obiektowe język C++

Programowanie obiektowe język C++ Programowanie obiektowe język C++ Dr inż. Sławomir Samolej D108A, tel: 865 1486, email: ssamolej@prz-rzeszow.pl WWW: ssamolej.prz-rzeszow.pl Podziękowanie: Chcę podziękować dr inż.. Grzegorzowi Hałdasiowi

Bardziej szczegółowo

C-struktury wykład. Dorota Pylak

C-struktury wykład. Dorota Pylak C-struktury wykład Dorota Pylak C-struktury W języku C++, jak w każdym języku obiektowym, mamy możliwość definiowania własnych typów danych, wraz z określeniem operacji, jakie na tych danych można wykonywać.

Bardziej szczegółowo

dr inż. Jarosław Forenc

dr inż. Jarosław Forenc Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia niestacjonarne I stopnia Rok akademicki 2012/2013 Wykład nr 6 (07.12.2012) dr inż. Jarosław Forenc Rok

Bardziej szczegółowo

Organizacja kursu, paradygmaty, ogólnie o C i C++

Organizacja kursu, paradygmaty, ogólnie o C i C++ Organizacja kursu, paradygmaty, ogólnie o C i C++ Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Katedra Cybernetyki i Robotyki Wydziału Elektroniki Politechniki Wrocławskiej Kurs: Copyright c 2015 Bogdan

Bardziej szczegółowo

tablica: dane_liczbowe

tablica: dane_liczbowe TABLICE W JĘZYKU C/C++ tablica: dane_liczbowe float dane_liczbowe[5]; dane_liczbowe[0]=12.5; dane_liczbowe[1]=-0.2; dane_liczbowe[2]= 8.0;... 12.5-0.2 8.0...... 0 1 2 3 4 indeksy/numery elementów Tablica

Bardziej szczegółowo

Wykład 1. Program przedmiotu. Programowanie Obiektowe (język C++) Literatura. Program przedmiotu c.d.:

Wykład 1. Program przedmiotu. Programowanie Obiektowe (język C++) Literatura. Program przedmiotu c.d.: Program przedmiotu Programowanie Obiektowe (język C++) Wykład 1. Definiowanie prostych klas. Przykłady. Przypomnienie: typy referencyjne, domyślne wartości argumentów, przeciąŝanie funkcji. Konstruktory,

Bardziej szczegółowo

Programowanie Obiektowe i C++

Programowanie Obiektowe i C++ Programowanie Obiektowe i C++ Marcin Benke Instytut Informatyki UW 30.10.2006 Marcin Benke (IIUW) Programowanie Obiektowe i C++ 30.10.2006 85 / 112 Zgodność typów Rozważmy klasy class A { //... }; class

Bardziej szczegółowo

Programowanie, część I

Programowanie, część I Programowanie, część I Rafał J. Wysocki Instytut Fizyki Teoretycznej, Wydział Fizyki UW 22 lutego 2011 Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 22 lutego 2011 1 / 80 Wstęp Informacje organizacyjne

Bardziej szczegółowo

Język C++ Programowanie obiektowe

Język C++ Programowanie obiektowe Język C++ Programowanie obiektowe Cechy programowania obiektowego abstrakcyjne typy danych hermetyczność obiektów (kapsułkowanie) dziedziczenie polimorfizm Programowanie proceduralne vs. programowanie

Bardziej szczegółowo

Programowanie 2. Język C++. Wykład 9.

Programowanie 2. Język C++. Wykład 9. 9.1 Ukrywanie metod, metody nadpisane... 1 9.2 Metody wirtualne, wirtualny destruktor... 2 9.3 Metody czysto wirtualne... 6 9.4 Klasy abstrakcyjne... 7 9.5 Wielodziedziczenie... 9 9.1 Ukrywanie metod,

Bardziej szczegółowo

Wstęp do wiadomości teoretycznych (nie, nie jest to masło maślane ani wstęp, wstępów proszę cierpliwie czytać)

Wstęp do wiadomości teoretycznych (nie, nie jest to masło maślane ani wstęp, wstępów proszę cierpliwie czytać) Języki i Paradygmaty Programowania Laboratorium 1 Obiekty i klasy C++ Wstęp do wiadomości teoretycznych (nie, nie jest to masło maślane ani wstęp, wstępów proszę cierpliwie czytać) UWAGA! Umiejętność tworzenia

Bardziej szczegółowo

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki zaprojektowany jako rozszerzenie języka C o obiektowe mechanizmy abstrakcji danych jest to język pozwalający na programowanie zarówno proceduralne

Bardziej szczegółowo