Programowanie obiektowe w języku C++

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

Download "Programowanie obiektowe w języku C++"

Transkrypt

1 Programowanie obiektowe w języku C++ Roman Simiński romansiminski@usedupl wwwsiminskionlinepl Koncepcja programowania obiektowego

2 Programowanie obiektowe trochę historii Programowanie obiektowe nie jest nowością ostatnich lat obiektowość w programowaniu pojawia się mniej lub bardziej jawnie od wielu lat Pierwszym znanym językiem wykorzystującym obiekty był język Simula67, opracowany w latach 60-tych w Norweskim Ośrodku Obliczeniowym w Oslo przez O-J Dahla, B Myhrhauga i K Nygaarda Termin object oriented programming pojawił się w latach 70-tych wraz z językiem Smalltalk, wywodzącym się z Xerox Palo Alto Research Center Język Smalltalk, inspirowany językiem Simula 67, posiada szereg eresujących właściwości Oprócz cech obiektowych posiada rozbudowane biblioteki, środowisko programistyczne, działa z wykorzystaniem maszyny wirtualnej Mimo swojego nowatorstwa jak i zaawansowania technologicznego Smalltalk nie zdobywa popularności, staje się jednak źródłem inspiracji dla wielu innych języków obiektowych Programowanie obiektowe w C++ 2

3 Programowanie obiektowe trochę historii, cd Koncepcja obiektowości w programowaniu znajduje wielu zwolenników Powstają obiektowe rozszerzenia istniejących języków programowania (np Object Pascal, C++, Objective-C) Powstają nowe języki, rdzennie posiadające wbudowane mechanizmy obiektowe Są to zarówno języki ortodoksyjnie obiektowe (np Oberon, Ruby), jak i języki wywodzące się z nurtu hybrydowego (np Java, JavaScript, C#, PHP) Obiektowość w programowaniu jest jednolita na poziomie koncepcji, jednak w zakresie rozwiązań szczegółowych i implementacyjnych występują różnice Popularne aktualnie języki programowania, takie jak Java, C#, PHP, JavaScript, ActionScript, wykorzystują (w różnym co prawda stopniu) koncepcję programowania obiektowego wywodzącą się z języka C++ Programowanie obiektowe w C++ 3

4 Programowanie obiektowe ogólna koncepcja Co to jest obiekt? Jak jest zbudowany? Jak działa? Koncepcja Koncepcja programowania programowania obiektowego obiektowego jest jest prosta prosta ii naturalna naturalna Aby Aby ją ją sugestywnie sugestywnie przedstawić, przedstawić, proponuję proponuję rozważenie rozważenie pewnego pewnego przykładu, przykładu, zrealizowanego zrealizowanego najpierw najpierw strukturalnie strukturalnie aa potem potem obiektowo obiektowo Programowanie obiektowe w C++ 4

5 Przykład Napisać program wyświetlający na pustym ekranie tekstowym zadany znak (np * ), pozwalający na przesuwanie tego znaku w górę, dół, lewo i prawo, przy użyciu klawiszy sterowania kursorem X * Y Programowanie obiektowe w C++ 5

6 Dekompozycja problemu z mniejszym być może łatwiej walczyć Rozwiązanie zadanego problemu w programowaniu polega na wykonaniu sekwencji pewnych czynności, zgodnie z algorytmem rozwiązania tego problemu Dekompozycyjna strategia rozwiązywania problemów polega na dzieleniu potencjalnie dużego i złożonego problemu na podproblemy tak długo, aż wyodrębnione podproblemy staną się proste do rozwiązania Podproblem 11 Podproblem 12 Podproblem 1? Problem? Podproblem 2 Programowanie obiektowe w C++ 6

7 Podejście proceduralne Proceduralne podejście do programowania zakłada, że złożone czynności niezbędne do rozwiązania problemu będą opisane procedurami (podprogramami), rozbijanymi na kolejne podprocedury tak długo, aż uzyskane zostaną czynności proste, łatwe do zaprogramowania Podprogram11 Podprogram12 Podprogram1 Program Podprogram2 Programowanie obiektowe w C++ 7

8 Podejście strukturalne Podejście strukturalne rozwija ideę programowania proceduralnego, zakładając tworzeniu programów w taki sposób, że blok główny programu stanowi szkielet, określający kolejność realizacji czynności, zapisanych w postaci odpowiednich procedur i/lub funkcji Podprogramy wykorzystują globalne i lokalne struktury danych Podprogram11 Dane Podprogram12 Podprogram1 Dane Dane Podprogram2 Program Dane Dane Programowanie obiektowe w C++ 8

9 Analiza dane i czynności związane z przesuwaniem punktu Pozycja przesuwanego znaku będzie opisana parą zmiennych x i y, kod tego znaku (wygląd) będzie opisany zmienną shape Przesuwanie znaku polega na wymazywaniu znaku na pozycji poprzedniej i ponownym wyświetlaniu na pozycji nowej, o ile jest ona prawidłowa X Gdy klawisz UP: jeżeli y > 1 to y = y - 1 Gdy klawisz LEFT: jeżeli x > 1 to x = x - 1 * Y Gdy klawisz RIGHT: jeżeli x < 80 to x = x + 1 Gdy klawisz DOWN: jeżeli y < 25 to y = y + 1 Programowanie obiektowe w C++ 9

10 Analiza wymagane funkcje obsługi konsoli Zakładamy, że mamy do dyspozycji funkcje obsługi ekranu konsoli: Funkcję clearscreen, czyszczącą ekran tekstowy Funkcję writecharxy, wyświetlającą na ekranie znak na określonej pozycji X * Y writecharxy( writecharxy( 40, 40, 12, 12, '*' '*' Standard Standard bibliotek bibliotek języka języka C/C++ C/C++ nie nie zawiera zawiera funkcji funkcji obsługi obsługi konsoli konsoli operacje operacje te te są są mocno mocno zależne zależne od od środowiska środowiska systemowego, systemowego, w w niektórych niektórych zresztą zresztą nie nie występują występują wcale wcale Operacje Operacje te te należy należy zaimplementować zaimplementować samemu samemu lub lub wykorzystać wykorzystać rozszerzenia rozszerzenia dodawane dodawane przez przez producentów producentów kompilatorów kompilatorów Przykładowe implementacje powyższych funkcji zawiera suplement umieszczony na końcu tego dokumentu Programowanie obiektowe w C++ 10

11 Analiza wymagane funkcje obsługi konsoli Zakładamy, że mamy do dyspozycji obsługę klawiatury konsoli: Funkcję getkey, której rezultatem jest kod klawisza, w tym tzw klawiszy sterujących kursorem (czytanie znaku bez echa na ekranie i bez "potwierdzania" Enterem) Stałe określające kody klawiszy, wtym klawiszy sterujących kursorem (dla funkcji getkey): KEY_UP, KEY_DOWN, KEY_LEFT, KEY_RIGHT, KEY_ESC key; key; key key == getkey( getkey( /* /* Czekaj Czekaj na na naci naciśśni nięęcie cie klawisza klawisza */ */ switch( switch( key key )) case :: /* case KEY_UP KEY_UP /* Obsługa Obsługa strzałki strzałki ww gor goręę */ */ break; break; case */ case KEY_DOWN KEY_DOWN :: /* /* Obsługa Obsługa strzałki strzałki ww dół dół */ break; break; case case KEY_LEFT KEY_LEFT :: /* /* Obsługa Obsługa strzałki strzałki ww lewo lewo */ */ break; break; case case KEY_RIGHT KEY_RIGHT :: /* /* Obsługa Obsługa strzałki strzałki ww prawo prawo */ */ break; break; Przykładową implementację funkcji getkey zawiera suplement umieszczony na końcu tego dokumentu Programowanie obiektowe w C++ 11

12 Realizacja strukturalna najprostsza wersja char char key, key, xx == 40, 40, yy == 12; 12; shape = '*'; shape = '*'; clearscreen( clearscreen( do do writecharxy( writecharxy( x, x, y, y, shape shape key key == getkey( getkey( writecharxy( writecharxy( x, x, y, y, '' '' switch( switch( key key )) case case KEY_UP KEY_UP case case case case case case :: if( if( yy >> break; break; KEY_DOWN KEY_DOWN :: if( if( yy << break; break; KEY_LEFT KEY_LEFT :: if( if( xx >> break; break; KEY_RIGHT KEY_RIGHT :: if( if( xx << break; break; /* /* /* /* /* /* Wy Wyśświetl wietl znak znak na na zadanej zadanej pozycji pozycji Czekaj Czekaj na na naci naciśśni nięęcie cie klawisza klawisza Wyma Wymażż znak, znak, potencjalny potencjalny ruch ruch 11 )) --y; --y; /* /* Przeskocz Przeskocz wy wyżżej ej */ */ )) ++y; ++y; /* /* Przeskocz Przeskocz ni niżżej ej */ */ 11 )) --x; --x; /* /* Przeskocz Przeskocz ww lewo lewo */ */ )) ++x; ++x; /* /* Przeskocz Przeskocz ww prawo prawo */ */ */ */ */ */ */ */ while( while( key key!=!= KEY_ESC KEY_ESC Programowanie obiektowe w C++ 12

13 Realizacja strukturalna wady Wady techniczne Brak jawnego powiązania pomiędzy zmiennymi x, y i shape A przecież te zmienne opisują jeden obiekt! Brak jawnego powiązania pomiędzy fragmentem wyświetlającym (ukrywającym) punkt oraz zmiennymi go opisującymi Siermiężne testowanie poprawności współrzędnych Wady metodyczne Z kodu programu nie wynika bezpośrednio, jakie jest jego przeznaczenie, brak powiązań pomiędzy wykonywanymi akcjami a danymi Sam algorytm jest prosty, lecz jego zapis nie wspomaga zrozumienia jaka jest istota rozwiązywanego problemu Programowanie obiektowe w C++ 13

14 Od programowanie proceduralnego do obiektowego Podejdźmy do problemu inaczej spróbujmy zrozumieć jego istotę Zapraszamy na: Krótki wywiad z głównym bohaterem programu! Programowanie obiektowe w C++ 14

15 Czwartek 24 maja 2011 Redaktor Prowadzący Roman Simiński Fakty IT gazeta codzienna Niecodzienny dodatek Gazety Codziennej Tylko u nas, ekskluzywny wywiad z głównym bohaterem Programu Jak się nazywasz? No, wiesz, na imię mam nieciekawie jestem R, po prostu R Kim jesteś? Jestem ruchomym punktem ekranowym Ponieważ zasuwam po całym ekranie, można o mnie powiedzieć z angielska, że jestem jednym z Runner ów Czyli może Was być więcej? wywiadu jest ruchomy punkt Takich jak ja może być więcej W tym programie potrzeba tylko jednego Runner'a, więc oto jestem ekranowy Dzięki temu Powiedz nam coś o sobie wyjątkowemu wywiadowi Co tu dużo gadać Jak trzeba to mnie widać, jak nie trzeba to znikam Potrafię się przesunąć o jedno pole w górę, w dół, w lewo lub w prawo Nie wylecę poza ekran to pewne dbam o to Możesz mi podać pozycję ekranową oraz znak, jakim mam być Bohaterem dzisiejszego poznamy unikatowe fakty z życia przedstawicieli tego gatunku

16 Czwartek, 24 maja 2011 Tajemnice życia Runnerów ujawnione prawie wszystkie ymne szczegóły, tylko w dodatku Fakty IT gazeta Jak to możesz mi podać? codzienna Co jak to zwyczajnie Przecież wiesz jak mam na imię, to mnie zawołaj, ustal gdzie mam być na ekranie i jak mam wyglądać W ogóle to możesz mną sterować, zawołaj mnie i prześlij mi komunikat, rozumiesz, takie polecenie co mam zrobić Jak niby mam Ci przesyłać komunikat? Jaki ty jesteś no, niedoinformowany Przecież już Ci mówiłem, co potrafię Dokładnie komunikaty nazywają się: show, hide, moveup, movedown, moveleft, moverigt Dodatkowo mam swoją wewnętrzną pamięć i trzymam tam wszystko, co powinienem wiedzieć Pozycję przechowuję w komórkach o nazwie x i y, a znak jakim mam być, znaczy, wyglądać, w szufladce shape Chcesz, to mi coś tam wstaw Co łaska, byleby to było legalne Wiesz, my gwiazdy programów musimy uważać A skąd Ty to wszystko wiesz i potrafisz? Nauczył mnie tego programista Wymyślił, że będą Runner y, określił, co każdy Runner powinien wiedzieć, co powinien robić A potem nauczył nas, Runner ów jak to wszystko mamy robić Ja jestem Runner'em, to umiem to wszystko Każdy Runner umie to wszystko No, przydałoby się, żeby nauczyła nas jeszcze kilku rzeczy, no wiesz ale nie nauczył :( Strona 2 Wywiady

17 Czwartek, 24 maja 2011 Tajemnice życia Runnerów ujawnione prawie wszystkie ymne szczegóły, tylko w dodatku Fakty IT A skoro już tu jesteś mogę trochę Ciebie poużywać? gazeta codzienna Taaak, Wy to, jak zwykle, zawsze o jednym A dobra masz mieć, nie jestem mydełko, nie wymydlę się Ale ostrożnie, najpierw Ci wszystko wyjaśnię Jeżeli chcesz, żebym wiedział, że mam się pojawić np w 40-stej kolumnie 12-go wiersza, to piszesz w swoim programie: Rx = 40; Ry = 12; Zauważ, że piszesz najpierw moje imię, potem po kropce nazwę miejsca, gdzie przechowuję dane To miejsce nazywam polem Możesz do tego pola przypisać wartość np: 40, 12 To tak, jakbyś mi wkładał tą wartość do kieszeni Jeżeli chcesz, żebym pokazał się na ekranie piszesz: Rshow( I znowu, piszesz moje imię, potem po kropce nazwę polecenia, jakie mam wykonać To tak jakbyś do mnie wysyłał komunikat To wygląda trochę jak wywołanie funkcji w języku C, i rzeczywiście, na Twój komunikat odpowiadam wywołaniem funkcji, którą mam w siebie wbudowaną Taka funkcja nazywa się funkcją składową Strona 3 Wywiady

18 Czwartek, 24 maja 2011 Tajemnice życia Runnerów ujawnione prawie wszystkie ymne szczegóły, tylko w dodatku Fakty IT Jeżeli mam się przesunąć o jedno pole do góry, potem o jedno w lewo i jeszcze raz gazeta codzienna o jedno do góry, to piszesz: RmoveUp( RmoveLeft( RmoveUp( Jeżeli chcesz, żebym przeszedł po kwadracie: pięć kroków w prawo, pięć w dół, pięć w lewo i pięć w górę, to napiszesz np: steps; Rx = 1; Ry = 1; // Powiedz mi, skąd mam wystartować Rshow( // Powiedz żebym się pokazał for( steps = 5; steps > 0 ; steps-- ) // Pięć kroków w prawo RmoveRight( // Krok w prawo for( steps = 5; steps > 0 ; steps-- ) // Pięć kroków w dół RmoveDown( // Krok w dół for( steps = 5; steps > 0 ; steps-- ) // Pięć kroków w lewo RmoveLeft( // Krok w lewo for( steps = 5; steps > 0 ; steps-- ) // Pięć kroków w górę RmoveUp( // Krok w górę Strona 4 Wywiady

19 Czwartek, 24 maja 2011 Tajemnice życia Runnerów ujawnione prawie wszystkie ymne szczegóły, tylko w dodatku Fakty IT Czy możesz naszym czytelnikom wyjaśnić jak są zbudowane funkcje składowe, np show, hide? gazeta codzienna Mogę, ale mi się nie chce Zapytaj o to programistę Ja jestem od zasuwania na ekranie a nie od programowania Szkoda, ale i tak serdecznie dziękujemy za rozmowę Strona 5 Wywiady

20 Realizacja obiektowa najprostsza wersja Runner Runner R; R; // // Utworzenie Utworzenie obiektu obiektu oo nazwie nazwie RR ii typie typie Runner Runner Rx Rx == 40; 40; // // Ustalenie Ustalenie pozycji pozycji ii wygl wygląądu du Runnera'a Runnera'a RR Ry Ry == 12; 12; Rshape Rshape == '*'; '*'; clearscreen( clearscreen( Rshow( Rshow( // // Niech Niech RR si sięę poka pokażżee do do key key == getkey( getkey( switch( switch( key key )) case :: RmoveUp( case KEY_UP KEY_UP RmoveUp( break; break; case case KEY_DOWN KEY_DOWN :: RmoveDown( RmoveDown( break; break; case case KEY_LEFT KEY_LEFT :: RmoveLeft( RmoveLeft( break; break; case case KEY_RIGHT KEY_RIGHT :: RmoveRight( RmoveRight( break; break; while( while( key key!=!= KEY_ESC KEY_ESC // // Niech Niech RR si sięę przesunie przesunie ww gór góręę // // Niech Niech RR si sięę przesunie przesunie ww dół dół // // Niech Niech RR si sięę przesunie przesunie ww lewo lewo // // Niech Niech RR si sięę przesunie przesunie ww prawo prawo Programowanie obiektowe w C++ 20

21 Obiektowo vs strukturalnie Rx Rx == 40; 40; Ry = 12; Ry = 12; Rshape Rshape == '*'; '*'; Rshow( Rshow( RmoveUp( RmoveUp( RmoveDown( RmoveDown( Rhide( Rhide( X Obiektowo Obiektowo * Y Strukturalnie Strukturalnie key, key, xx == 40, 40, yy == 12; 12; shape shape == '*'; '*'; clearscreen( clearscreen( writecharxy( writecharxy( x, x, y, y, shape shape key = getkey( key = getkey( writecharxy( writecharxy( x, x, y, y, '' '' if( if( yy >> 11 )) --y; --y; if( if( yy << )) ++y; ++y; Programowanie obiektowe w C++ 21

22 Obiektowo vs strukturalnie Obiektowo Obiektowo Wyodrębnij najważniesze obiekty w rozważanym problemie, ustal co powinny wiedzieć oraz co powinny umieć Naucz je tego wszystkiego Jeżeli problem tego wymaga, połącz obiekty w grupy, ustal szefa grupy jemu będziesz przekazywała polecenia, on będzie zarządzał pracą grupy Utwórz potrzebne obiekty, przekaż im konieczne informacje i każ im pracować wysyłając odpowiednie komunikaty, tak zby rozwiązać rozważany problem Strukturalnie Strukturalnie Ustal jakie dane są istotne dla rozważanego problemu, dobierz odpowiednie struktury do ich przechowywania Ustal jakie czynności powinny być wykonane na danych, jaka powinna być ich kolejność Jeżeli ustalone czynności są złożone, dziel je na podczynności tak długo, aż będą łatwe do zaprogramowania Zbuduj odpowiednie podprogramy Uaktywnij zaplanowane czynności w ustalonej kolejności, tak aby rozwiązać rozważany problem Programowanie obiektowe w C++ 22

23 Programming in the small programming in the large Programowanie proceduralne jest zorientowane na czynności wykonywane na strukturach danych Czynności są realizowane przez podprogramy (procedury i funkcje) grupowane zwykle w moduły Programowanie proceduralne wraz ze wzrostem rozmiaru programu zaczyna być coraz trudniejsze Coraz więcej podprogramów, coraz więcej modułów, coraz więcej nieuicyjnych i niejasnych powiązań pomiędzy podprogramami a strukturami danych Potrzebujemy Potrzebujemy porządku porządku ii hierarchii hierarchii trzeba trzeba jasno jasno określić określić kto kto ii za za co co jest jest odpowiedzialny odpowiedzialny W W programie programie muszą muszą się się pojawić pojawić kompetentne kompetentne podmioty, podmioty, zarówno zarówno te te zarządzające zarządzające (kadra (kadra managerska ) managerska ) jak jak ii te te zarządzane zarządzane W W programowaniu programowaniu podmiot, podmiot, czyli czyli ktoś ktoś to to obiekt obiekt Programowanie obiektowe w C++ 23

24 Obiektowość analiza, projektowanie, programowanie Obiektowość jest strategią pozwalającą zapanować na złożonym projektem Może być stosowana w każdej z faz realizacji systemu, zapewniając spójny i jednolity opis systemu w każdej z tych faz W wymiarze czysto programistycznym obiektowość jest strategią organizacji kodu potencjalnie złożonego oprogramowania Programowanie obiektowe nie stoi w sprzeczności z ideą programowania strukturalnego, stanowi raczej jego nadbudowę Zazwyczaj realizacja metod obiektów w systemie przebiega zgodnie z koncepcją programowania strukturalnego Programowanie Programowanie obiektowe obiektowe strategiczne strategiczne narzędzie narzędzie realizacji realizacji złożonych złożonych systemów systemów Programowanie Programowanie proceduralne proceduralne taktyczne taktyczne narzędzie narzędzie realizacji realizacji mniejszych mniejszych systemów, systemów, bądź bądź wybranych wybranych elementów elementów systemów systemów złożonych złożonych Programowanie obiektowe w C++ 24

25 Obiektowość przepis na program obiektowy raz jeszcze Wyodrębnij najważniesze obiekty w rozważanym problemie, ustal co powinny wiedzieć oraz co powinny umieć Jeżeli problem tego wymaga, połącz obiekty w grupy, ustal szefów grup im będziesz przekazywała polecenia, oni będą zarządzali pracą grupy Sprawdź czy istnieją odpowiadające Ci gotowe szablony dla potrzebnych obiektów Jeżeli tak to użyj ich, jeżeli nie to zbuduj własne szablony Utwórz potrzebne obiekty, przekaż im konieczne informacje i każ im pracować wysyłając odpowiednie komunikaty, tak zby rozwiązać rozważany problem Wyodrębniliśmy już najważniejszy obiekt w naszym problemie, wiadomo co powinien wiedzieć i co powinien umieć Jak go tego nauczyć? Programowanie obiektowe w C++ 25

26 Klasa Runner szablon do tworzenia obiektów Runner to nazwa klasy obiektów Wszystkie obiekty klasy Runner będą posiadały te same cechy i umiejętności Klasa swoją deklarację przypomina deklarację rekordu (struktury) Klasa będzie posiadała składowe, którymi będą pola i funkcje Deklaracja pustej klasy: class class Runner Runner public: public: }; }; Wszystkie Wszystkie elementy elementy zadeklarowane zadeklarowane w w sekcji sekcji public public są są dostępne dostępne dla dla tych, tych, którzy którzy chcą chcą używać używać obiektu obiektu klasy klasy Runner: Runner: Runner Runner R; R; Rx Rx == 40; 40; Ry Ry == 12; 12; Rshape Rshape == '*'; '*'; Programowanie obiektowe w C++ 26

27 Anatomia klasy Runner pola, czyli to co obiekt wie To, co obiekt wie o sobie i swoim otoczeniu pamiętane jest w jego polach Pola stanowią pamięć obiektu każdy obiekt ma własny zestaw niestatyczych pól Polami w klasie Runner są x i y opisujące ekranową pozycję obiektu, oraz shape opisujące wygląd obiektu class class Runner Runner public public :: x, x, y; y; char char shape; shape; }; }; Pola Pola w w obrębie obrębie klasy klasy deklaruje deklaruje się się podobnie podobnie jak jak pola pola w w obrębie obrębie typu typu rekordowego rekordowego Programowanie obiektowe w C++ 27

28 Anatomia klasy Runner funkcje składowe, czyli to co obiekt potrafi Każdy obiekt klasy Runner posiada funkcje składowe, które mogą być przez niego wywoływane Funkcje składowe pozwalają obiektowy działać, wykonywać akcje W trakcie wykonywania funkcji składowych obiekt korzysta zwykle z informacji zapisanej w jego polach class class Runner Runner public public :: x, x, y; y; char char shape; shape; show( show( hide( hide( }; }; moveup( moveup( movedown( movedown( moveleft( moveleft( moveright( moveright( Prototypy Prototypy funkcji funkcji składowych, składowych, ich ich ciała ciała mogą mogą być być definiowane definiowane są są poza poza klasą klasą Programowanie obiektowe w C++ 28

29 Anatomia klasy Runner wywołanie funkcji a przesłanie komunikatu Podprogramy wbudowane w obiekt nazywa się w programowaniu obiektowym metodami, w języku C++ metody nazywane są funkcjami składowymi (ang member function) Wywołanie funkcji składowej nazywane jest często przesłaniem komunikatu do obiektu Obiekt "odpowiada" na komunikat wykonując kod odpowiedniej funkcji składowej switch( switch( key key )) case case KEY_UP KEY_UP :: RmoveUp( RmoveUp( break; break; case case KEY_DOWN KEY_DOWN :: RmoveDown( RmoveDown( break; break; case case KEY_LEFT KEY_LEFT :: RmoveLeft( RmoveLeft( break; break; case case KEY_RIGHT KEY_RIGHT :: RmoveRight( RmoveRight( break; break; Wywołanie Wywołanie funkcji funkcji składowych składowych dla dla obiektu obiektu R, R, inaczej inaczej przesłanie przesłanie komunikatu komunikatu do do obiektu obiektu Programowanie obiektowe w C++ 29

30 Anatomia klasy Runner implementacje funkcji składowych Właściwe definicje (implementacje zawierające konkretny kod) funkcji składowych umieszczone są zwykle poza definicją klasy Nazwa każdej funcji składowej zdefiniowanej poza klasą jest kwalifikowana nazwą klasy wraz z operatorem zakresu "::" class class Runner Runner show( show( hide( hide( }; }; Prototypy Prototypy (deklaracje) (deklaracje) funkcji funkcji składowych składowych Runner::show() Runner::show() Runner::hide() Runner::hide() Definicje Definicje (implementacje) (implementacje) funkcji funkcji składowych składowych Programowanie obiektowe w C++ 30

31 Anatomia klasy Runner implementacje funkcji show i hide Wyprowadź znak zapisany w polu code na pozycji zapisanej w polach x i y Runner::show() Runner::show() writecharxy( writecharxy( x, x, y, y, shape shape Wyprowadź spację na pozycji zapisanej w polach x i y, wymazującą zapisany tam znak Runner::hide() Runner::hide() writecharxy( writecharxy( x, x, y, y, '' '' Programowanie obiektowe w C++ 31

32 Anatomia klasy Runner implementacje funkcji show i hide Wyprowadź znak zapisany w polu code na pozycji zapisanej w polach x i y Runner::show() Runner::show() writecharxy( writecharxy( x, x, y, y, shape shape Do jakich x, y i shape odwołują się te funkcje? Wyprowadź spację na pozycji zapisanej w polach`azującą zapisany tam znak Runner::hide() Runner::hide() writecharxy( writecharxy( x, x, y, y, '' '' Programowanie obiektowe w C++ 32

33 Funkcje składowe wywoływane są dla konkretnego obiektu Runner Runner R; R; Rx Rx == 40; 40; Ry Ry == 12; 12; Rshape Rshape == '*'; '*'; R x: 40 y: 12 shape : * Rshow( Rshow( Każda niestatyczna funkcja składowa musi zostać wywołana dla jakiegoś obiektu klasy Runner Runner::show() Runner::show() writecharxy( writecharxy( xx,, yy,, shape shape W trakcie swojego działania funkcja składowa zwykle odwołuje się do pól obiektu, dla którego została wywołana Programowanie obiektowe w C++ 33

34 Wskaźnik this W obrębie niestatycznych funkcji składowych istnieje predefiniowany wskaźnik this, wskazujący na obiekt, dla którego działa funkcja składowa this Runner Runner R; R; Rx Rx == 40; 40; Ry Ry == 12; 12; Rshape Rshape == '*'; '*'; this == &R R x: 40 y: 12 shape : * Rshow( Rshow( Runner::show() Runner::show() writecharxy( writecharxy( this->x this->x,, this->y this->y,, this->shape this->shape Wykorzystanie wskaźnika this jest konieczne tylko w niewielkiej liczbie przypadków i nie powinno być nadużywane w tym przypadku użycie wskaźnika this jest niepotrzebne Programowanie obiektowe w C++ 34

35 Anatomia klasy Runner implementacje funkcji move Wymazanie znaku na bieżacej pozycji obiektu klasy Runner Ustalenie nowej pozycji, o ile jest ona prawidłowa Pokazanie znaku na nowej pozycji Runner::moveUp() Runner::moveUp() hide( hide( if( if( yy >> 11 )) --y; --y; show( show( Runner::moveLeft() Runner::moveLeft() hide( hide( if( if( xx >> 11 )) --x; --x; show( show( Runner::moveDown() Runner::moveDown() hide( hide( if( if( yy << )) ++y; ++y; show( show( Runner::moveRight() Runner::moveRight() hide( hide( if( if( xx << )) ++x; ++x; show( show( Programowanie obiektowe w C++ 35

36 Anatomia klasy Runner implementacje funkcji move W obrębie funkcji składowej (np moveup) można wywoływać inne funkcje składowe (np show, hide), działają one wtedy dla tego obiektu, dla ktorego została wywołana funkcja nadrzędna R Runner Runner R; R; x: 40 y: 12 shape : * Rx Rx == 40; 40; Ry Ry == 12; 12; Rcode Rcode == '*'; '*'; Runner::moveUp() Runner::moveUp() hide( hide( if( if( yy >> 11 )) --y; --y; show( show( RmoveUp( RmoveUp( Niestatycznych funkcje składowe "pracują" dla obiektu wskazywanego przez this Runner::moveUp() Runner::moveUp() this->hide( this->hide( if( if( yy >> 11 )) --y; --y; this->show( this->show( Programowanie obiektowe w C++ 36

37 Każdy egzemplarz klasy ma własne dane i wspólny kod funkcji Runner Runner pierwszy, pierwszy, drugi; drugi; pierwszy pierwszyx pierwszyx == 1; 1; pierwszyy = 1; pierwszyy = 1; pierwszyshape pierwszyshape == '@'; '@'; x: 1 y: 1 drugix drugix == 5; 5; drugiy drugiy == 5; 5; drugishape drugishape == '$'; '$'; pierwszyshow( pierwszyshow( drugishow( drugishow( shape drugi x: 5 y: 5 shape : $ Runner::show() Runner::show() writecharxy( writecharxy( x, x, y, y, shape shape Każdy obiekt na własny zestaw pól niestatycznych, zgodnie z definicją klasy Każdy obiekt tej samej klasy wykonuje te same akcje, wywołując współdzielone funkcje składowe Programowanie obiektowe w C++ 37

38 Obiekt krótka definicja Istnieje wiele, różniących się od siebie definicji pojęcia obiekt i klasa Tutaj przyjmiemy następującą definicje: Obiekt Obiekt jest jest programowym programowym tworem, tworem, stanowiącym stanowiącym model model pewnego pewnego konkretnego konkretnego bytu bytu ze ze świata świata rzeczywistego, rzeczywistego, reprezentujący reprezentujący rzecz rzecz (obiekt (obiekt fizyczny), fizyczny), pojęcie pojęcie (obiekt (obiekt konceptualny) konceptualny) lub lub obiekt obiekt jest jest pewnym pewnym bytem bytem programistycznym programistycznym nie nie mający mający swojego swojego odpowiednika odpowiednika w w rzeczywistości rzeczywistości W sensie programistycznym obiekt jest zmienną złożoną, zawierającą dane różnego typu Jest zatem podobny do rekordu Od rekordu różni go zdolność do działania, polegająca na możliwości przesłania do obiektu komunikatu, na który reaguje on uruchomieniem wbudowanej weń funkcji składowej (metody) Programowanie obiektowe w C++ 38

39 Klasa krótka definicja Klasa Klasa to to szablon szablon określający określający jak jak obiekt obiekt jest jest zbudowany zbudowany ii co co potrafi potrafi W W szczególności szczególności klasa klasa zawiera zawiera informacje informacje oo nazwach, nazwach, typie typie ii reprezentacji reprezentacji pól, pól, deklaracje deklaracje ii definicje definicje funkcji funkcji składowych składowych oraz oraz informacje informacje dotyczące dotyczące relacji relacji ii powiązań powiązań zz innymi innymi klasami klasami W sensie programistycznym klasa jest dla obiektu tym, czym typ dla zmiennej W języku Object Pascal mówi się: zmienna obiektowa i typ obiektowy, w C++ i pokrewnych językach obiektowych mówi się po prostu obiekt i klasa Klasa ma charakter pierwotny aby utworzyć obiekt, najpierw należy zdefiniować jego klasę Programowanie obiektowe w C++ 39

40 Trzy podstawowe cechy obiektu Tożsamość (ang identity) Stan (ang state) Działanie, zachowanie (ang behavior) Programowanie obiektowe w C++ 40

41 Tożsamość obiektu Tożsamość (ang identity), pozwala na odróżnienie danego obiektu od każdego innego Tożsamość jest potrzebna, aby można było obiekt zlokalizować i wykorzystać Programista przypisuje obiektowi unikatową nazwę lub włącza go do identyfikowalnej kolekcji obiektów, lub odwołuje się do obiektu posługując się informacją o jego adresie w pamięci operacyjnej Runner Runner R; R; Rshow( Rshow( Runner Runner duchy[ duchy[ 33 ]; ]; for( i = 0; i for( i = 0; i << 3; 3; i++ i++ )) duchy[ duchy[ ii ]show( ]show( Runner Runner ** wsk wsk == new new Runner; Runner; wsk->show( wsk->show( Programowanie obiektowe w C++ 41

42 Stan obiektu Stan (ang state) obiektu w danym momencie opisany jest wartością jego pól Pola obiektu nazywane są również atrybutami lub składowymi danych Wartości pól oczywiście mogą się zmieniać w czasie wykonania programu, oznacza to, że obiekt zmienia swój stan Runner Runner R; R; Rx Rx == 1; 1; Ry Ry == 1; 1; Rshape Rshape == '@'; '@'; Rshow( Rshow( Rx Rx == 5; 5; Ry Ry == 5; 5; Rshape Rshape == '$'; '$'; Rshow( Rshow( Programowanie obiektowe w C++ 42

43 Zdolność obiektu do działania Zdolność do działania (ang behavior) opisuje operacje, które obiekt może wykonać Operacje są realizowane poprzez wykonanie metod zwanych w C++ funkcjami składowymi Metody są częścią obiektu i mogą być aktywowane wtedy, gdy obiekt otrzyma komunikat, zgodny z nazwą metody, która ma być wykonana Wykonanie metod zwykle zmienia stan obiektu poprzez zmianą wartości jego pól Runner Runner R; R; Rshow( Rshow( RmoveLeft( RmoveLeft( RmoveLeft( RmoveLeft( RmoveUp( RmoveUp( Rhide( Rhide( Programowanie obiektowe w C++ 43

44 Najważniejsze cechy obiektowego podejścia do programowania Abstrakcja (ang abstraction) Hermetyzacja (ang encapsulation) Dziedziczenie (ang inheritance) Polimorfizm (ang polymorphism) Programowanie obiektowe w C++ 44

45 Abstrakcja w sztuce to abstrakcjonizm, abstrakcjonizm, po co w programowaniu? Czy muszę wiedzieć wszystko? Czy potrzebne są wszystkie szczegóły? Rysunki: Programowanie obiektowe w C++ 45

46 Abstrakcja tworzenie komputerowych modeli Obiekt jest zwykle programową abstrakcją pewnego konkretnego bytu ze świata rzeczywistego, reprezentującego rzecz (obiekt fizyczny) lub pojęcie (obiekt konceptualny) W programowaniu obiekt stanowi zatem komputerowy model jakiegoś obiektu ze świta rzeczywistego Obiekt-model zwykle jest uproszczony w stosunku do rzeczywistego pierwowzoru Jest tak, ponieważ trudno wiernie odwzorować rzeczywistość, lub to wierne odwzorowanie nie jest wcale potrzebne? The "Stanford Bunny" Programowanie obiektowe w C++ 46

47 Abstrakcja tylko to co istotne Abstrakcja pozwala postrzegać modelowaną rzeczywistość bez rozważania wszystkich szczegółów tej rzeczywistości oraz bez wnikania w jej wewnętrzną strukturę Stosowanie abstrakcji w programowaniu obiektowym prowadzi do tego, że obiekt powiniem posiadać tylko te elementy, które są istotne dla tworzonego systemu, elementy w danym momencie nieistotne powinny zostać pominięte Obiekty rzeczywiste Abstrakcyjny model analityczny Programowanie obiektowe w C++ 47

48 Cechy Marka Model Rok produkcji Nr rejestracyjny Kolor nadwozia Nr silnika Akcje Abstrakcja obiekt w rzeczywistości model obiekt w programie Podaj średnie spalanie Podaj przebieg Reprezentacja obiektowa Obiekty rzeczywiste Abstrakcyjny model analityczny Programowanie obiektowe w C++ 48

49 Abstrakcja prostota ale nie prostactwo Abstrakcja ma dostarczyć maksymalnie prostego i adekwatnego dla problemu opisu obiektu Obiekt ma być prosty, lecz nie prostacki Stosowaniu abstrakcji w programowaniu ma towarzyszyć antycypacja, czyli przewidywanie i wyprzedzenie potencjalnych zmian wymagań Antycypacja i abstrakacja mają dostarczać prostego opisu obiektu, jednocześnie elastycznego i podatnego na rozwój Programowanie obiektowe w C++ 49

50 Hermetyzacja czyli: mam to w, po co w programowaniu? Czy muszę wiedzieć co jest w środku aby tego używać? Czy muszę wiedzieć jak to działa aby tego używać? Programowanie obiektowe w C++ 50

51 Hermetyzacja totalny zez, czyli: spójrz z dwóch stron Nie wiem jak to działa, i nie chcę wiedzieć Chcę tego używać! Wiem jak to działa, ale Ty nie musisz tego wiedzieć aby używać Tak, dbam o swoje eresy! Programowanie obiektowe w C++ 51

52 Hermetyzacja w programowaniu Bardzo często programista wykorzystujący obiekt pewnej klasy nie pisze jej samodzielnie, wykorzystując klasy przygotowane przez innych Klasa powinna mieć jasno zdefiniowany erfejs, który wykorzystuje programista używający klasy Szczegóły reprezentacji pól oraz implementacji metod powinny zostać przez twórcę klasy oddzielone od erfejsu i niewidoczne dla programisty używającego klasy Tworzę! Użyyywaaaam! Interfejs Implementacja Klasa Programowanie obiektowe w C++ 52

53 Hermetyzacja Klasa bez hermetyzacji class class Runner Runner public: public: x, x, y; y; char char shape; shape; }; }; show( show( hide( hide( moveup( moveup( movedown( movedown( moveleft( moveleft( moveright( moveright( Hermetyzację osiąga się to poprzez ukrycie (ang information hiding) pól obiektu oraz niektórych funkcji składowych w sekcjach prywatnych lub chronionych Dzięki hermetyzacji można modyfikować wewnętrzną reprezentację klasy, sposób jej działania w sposób przeźroczysty dla programisty używającego klasy Programowanie obiektowe w C++ 53

54 Niebezpieczeństwa braku hermetyzacji Runner Runner R; R; Rx = -400; Ry = 1200; Błędna Błędna pozycja pozycja ekranowa ekranowa Rshape = ' '; Nieszczęśliwie Nieszczęśliwie dobrany dobrany znak znak reprezentujący reprezentujący obiekt obiekt Rshow(? Bezpośredni Bezpośredni ii niekontrolowany niekontrolowany dostęp dostęp do do pól pól obiektu obiektu nie nie pozwala pozwala na na sprawdzenie sprawdzenie poprawności poprawności informacji informacji przekazywanych przekazywanych obiektowi obiektowi Programowanie obiektowe w C++ 54

55 Ukrycie pól dostęp za pomocą funkcji składowych Runner Runner R; R; RsetX( -400 RsetY( 1200 Ustalanie Ustalanie pozycji pozycji via via funkcje funkcje składowe składowe obiektu obiektu RsetShape( ' ' Ustalanie Ustalanie znaku znaku via via funkcje funkcje składowe składowe obiektu obiektu Rshow( Funkcje Funkcje składowe składowe zignorowały zignorowały niepoprawne niepoprawne parametry parametry ii ustaliły ustaliły wartości wartości domyślne: domyślne: xx == 1, 1, yy == 1, 1, shape shape == '*''*' Funkcje Funkcje składowe składowe mogą mogą kontrolować kontrolować poprawność poprawność danych danych przekazywanych przekazywanych obiektowi, obiektowi, odrzucając odrzucając wartości wartości niepoprawne, niepoprawne, przyjmując przyjmując ustalone ustalone arbitralnie arbitralnie wartości wartości domyślne domyślne dla dla pól pól Programowanie obiektowe w C++ 55

56 Publiczne i prywatne elementy klasy class class Runner Runner public public :: setx( setx( sety( sety( setshape( setshape( char char Runner Runner R; R; newx newx newy newy char char newshape newshape getx( getx( gety( gety( getshape( getshape( Interfejs Interfejs klasy klasy sekcja sekcja publiczna publiczna show( show( hide( hide( Tylko Tylko te te elementy elementy mogą mogą być być wykorzystywane wykorzystywane przez przez programistę programistę używającego używającego klasę klasę Runner Runner RsetX( RsetX( RsetY( RsetY( RsetShape('#' RsetShape('#' moveup( moveup( movedown( movedown( moveleft( moveleft( moveright( moveright( private: private: x, x, y; y; char char shape; shape; }; }; Rx Rx == 10; 10; Ry Ry == 20; 20; Rshape Rshape == '#'; '#'; RisXOnScreen( RisXOnScreen( bool bool isxonscreen( isxonscreen( newx newx bool bool isyonscreen( isyonscreen( newy newy Wewnętrzne Wewnętrzne elementy elementy klasy klasy sekcja sekcja prywatna prywatna Te Te elementy elementy mogą mogą być być wykorzystywane wykorzystywane wyłącznie wyłącznie przez przez funkcje funkcje składowe składowe klasy klasy Programowanie obiektowe w C++ 56

57 Podział publicznych funkcji składowych class class Runner Runner public public :: setx( setx( sety( sety( setshape( setshape( char char newx newx newy newy char char newshape newshape getx( getx( gety( gety( getshape( getshape( Modyfikatory Modyfikatory funkcje funkcje dokonujące dokonujące modyfikacji modyfikacji wartości wartości pól, pól, zapewne zapewne w w sposób sposób kontrolowany kontrolowany Akcesory Akcesory funkcje funkcje umożliwiające umożliwiające kontrolowane kontrolowane pobieranie pobieranie wartości wartości pól pól show( show( hide( hide( moveup( moveup( movedown( movedown( moveleft( moveleft( moveright( moveright( private: private: x, x, y; y; char char shape; shape; }; }; bool bool isxonscreen( isxonscreen( newx newx bool bool isyonscreen( isyonscreen( newy newy Realizatory Realizatory funkcje funkcje realizujące realizujące właściwe właściwe dla dla klasy klasy usługi usługi Modyfikatory Modyfikatory ii akcesory akcesory mają mają charakter charakter administracyjno-kontrolny, administracyjno-kontrolny, realizatory realizatory to to esencja esencja działania działania klasy klasy Programowanie obiektowe w C++ 57

58 Modyfikatory wersja pierwsza Runner::setX( Runner::setX( newx newx )) if( if( isxonscreen( isxonscreen( newx newx )) )) xx == newx; newx; else else xx == 1; 1; // // Warto Wartośśćć domy domyśślna lna Runner::setY( Runner::setY( newy newy )) if( if( isyonscreen( isyonscreen( newy newy )) )) yy == newy; newy; else else yy == 1; 1; // // Warto Wartośśćć domy domyśślna lna Runner::setShape( Runner::setShape( char char newshape newshape )) if( if( newshape newshape >> && && newshape newshape << )) shape shape == newshape; newshape; else else shape shape == '*'; '*'; // // Warto Wartośśćć domy domyśślna lna Programowanie obiektowe w C++ 58

59 Modyfikatory wersja druga, bez ustawiania wartości domyślnych Runner::setX( Runner::setX( newx newx )) if( if( isxonscreen( isxonscreen( newx newx )) )) xx == newx; newx; Runner::setY( Runner::setY( newy newy )) if( if( isyonscreen( isyonscreen( newy newy )) )) yy == newy; newy; Runner::setShape( Runner::setShape( char char newshape newshape )) if( if( newshape newshape >> && && newshape newshape << )) shape shape == newshape; newshape; Programowanie obiektowe w C++ 59

60 Akcesory Runner::getX() Runner::getX() return return x; x; Runner::getY() Runner::getY() return return y; y; char char Runner::getShape() Runner::getShape() return return shape; shape; Programowanie obiektowe w C++ 60

61 Z hermetyzacją i bez, czyli jak z polem siłowym i bez niego class class Runner Runner public public :: setx( setx( sety( sety( setshape( setshape( char char newx newx newy newy char char newshape newshape show( show( hide( hide( getx( getx( gety( gety( getshape( getshape( show( show( hide( hide( class class Runner Runner public: public: x, x, y, y, shape; shape; }; }; moveup( moveup( movedown( movedown( moveleft( moveleft( moveright( moveright( moveup( moveup( movedown( movedown( moveleft( moveleft( moveright( moveright( private: private: x, x, y; y; char char shape; shape; }; }; bool bool isxonscreen( isxonscreen( newx newx bool bool isyonscreen( isyonscreen( newy newy Programowanie obiektowe w C++ 61

62 Jeszcze dwie cechy obiektowego podejścia do programowania Osobny Osobny wykład wykład Dziedziczenie (ang inheritance) Polimorfizm (ang polymorphism) Osobny Osobny wykład wykład Programowanie obiektowe w C++ 62

63 Suplement obsługa klawiatury, klawisze sterujące, Borland conio Znaki sterujące na starszym bajcie (tzw scan code), zwykłe na młodszym (notacja szesnastkowa): enum enum KEY_CODES KEY_CODES KEY_UP == 0x4800, KEY_UP 0x4800, KEY_DOWN KEY_DOWN == 0x5000, 0x5000, KEY_LEFT KEY_LEFT == 0x4b00, 0x4b00, KEY_RIGHT KEY_RIGHT == 0x4d00, 0x4d00, KEY_ESC == 0x001b KEY_ESC 0x001b }; }; Przykładowa implementacja funkcji getkey (biblioteka conio firmy Borland) Znak ASCII pozostawiany jest na młodszym bajcie, sterujący przesuwany jest na starszy bajt: getkey() getkey() key key == getch( getch( return return (( key key == == 00 ))?? getch() getch() << << 88 :: key; key; Programowanie obiektowe w C++ 63

64 Suplement obsługa ekranu, Borland conio Implementacje funkcji czyszczenia ekranu oraz wyświetlania znaku na zadanej pozycji ekranu wersje wykorzystujące bibliotekę conio (kompilatory firmy Borland): clearscreen() clearscreen() clrscr( clrscr( writecharxy( writecharxy( x, x, y, y, char char cc )) gotoxy( gotoxy( x, x, yy putch( putch( cc Programowanie obiektowe w C++ 64

65 Suplement obsługa klawiatury, Borland + MINGW i GCC enum enum KEY_CODES KEY_CODES #ifdef #ifdef BORLANDC BORLANDC KEY_BLANK KEY_BLANK == 0x0000, 0x0000, #endif #endif #ifdef #ifdef MINGW32_VERSION MINGW32_VERSION KEY_BLANK KEY_BLANK == 0x00e0, 0x00e0, #endif #endif KEY_UP KEY_UP KEY_DOWN KEY_DOWN KEY_LEFT KEY_LEFT KEY_RIGHT KEY_RIGHT KEY_ESC KEY_ESC };; };; == == == == == 0x4800, 0x4800, 0x5000, 0x5000, 0x4b00, 0x4b00, 0x4d00, 0x4d00, 0x001b 0x001b // // Wymaga Wymaga wł włąączenia czenia pliku pliku conioh conioh getkey() getkey() key key == getch( getch( return return (( key key == == KEY_BLANK KEY_BLANK ))?? getch() getch() << << 88 :: key; key; Programowanie obiektowe w C++ 65

66 Suplement czyszczenie ekranu, Borland conio + MINGW i GCC // // Wymaga Wymaga wł włąączenia czenia pliku pliku conioh conioh (Borland) (Borland) lub lub windowsh windowsh (MINGW (MINGW ii GCC) GCC) clearscreen() clearscreen() #ifdef #ifdef BORLANDC BORLANDC clrscr( clrscr( #endif #endif #ifdef #ifdef MINGW32_VERSION MINGW32_VERSION COORD COORD lefttop lefttop == 0, 0, 00 }; }; CONSOLE_SCREEN_BUFFER_INFO CONSOLE_SCREEN_BUFFER_INFO consoleinfo; consoleinfo; DWORD DWORD writtenitems; writtenitems; numofcells numofcells == ** 25; 25; HANDLE HANDLE consolehandle consolehandle == GetStdHandle( GetStdHandle( STD_OUTPUT_HANDLE STD_OUTPUT_HANDLE if( if( GetConsoleScreenBufferInfo( GetConsoleScreenBufferInfo( consolehandle, consolehandle, &consoleinfo &consoleinfo )) )) numofcells numofcells == consoleinfodwsizex consoleinfodwsizex ** consoleinfodwsizey; consoleinfodwsizey; FillConsoleOutputAttribute( FillConsoleOutputAttribute( consolehandle, consolehandle, 0xf, 0xf, numofcells, numofcells, lefttop, lefttop, &writtenitems &writtenitems FillConsoleOutputCharacter( FillConsoleOutputCharacter( consolehandle, consolehandle, '' ', ', numofcells, numofcells, lefttop, lefttop, &writtenitems &writtenitems #endif #endif Programowanie obiektowe w C++ 66

67 Suplement wypisywanie znaku, Borland conio + MINGW i GCC // // Wymaga Wymaga wł włąączenia czenia pliku pliku conioh conioh (Borland) (Borland) lub lub windowsh windowsh (MINGW (MINGW ii GCC) GCC) writecharxy( writecharxy( x, x, y, y, char char cc )) #ifdef #ifdef BORLANDC BORLANDC gotoxy( gotoxy( x, x, yy putch( putch( cc #endif #endif #ifdef #ifdef MINGW32_VERSION MINGW32_VERSION COORD cursorpos; COORD cursorpos; DWORD DWORD written; written; cursorposx cursorposx == xx -- 1; 1; cursorposy cursorposy == yy -- 1; 1; SetConsoleCursorPosition( SetConsoleCursorPosition( GetStdHandle( GetStdHandle( STD_OUTPUT_HANDLE STD_OUTPUT_HANDLE ), ), cursorpos cursorpos WriteConsole( WriteConsole( GetStdHandle( GetStdHandle( STD_OUTPUT_HANDLE STD_OUTPUT_HANDLE ), ), &c, &c, 1, 1, &written, &written, 00 #endif #endif Programowanie obiektowe w C++ 67

68 Suplement wypisywanie napisu, Borland conio + MINGW i GCC // // Wymaga Wymaga wł włąączenia czenia pliku pliku conioh conioh (Borland) (Borland) lub lub windowsh windowsh (MINGW (MINGW ii GCC) GCC) writestrxy( writestrxy( x, x, y, y, char char s[] s[] )) #ifdef #ifdef BORLANDC BORLANDC gotoxy( gotoxy( x, x, yy cputs( cputs( ss #endif #endif #ifdef #ifdef MINGW32_VERSION MINGW32_VERSION COORD cursorpos; COORD cursorpos; DWORD DWORD written; written; HANDLE HANDLE consolehandle consolehandle == GetStdHandle( GetStdHandle( STD_OUTPUT_HANDLE STD_OUTPUT_HANDLE cursorposx cursorposx cursorposy cursorposy == == xx yy --- 1; 1; 1; 1; SetConsoleCursorPosition( SetConsoleCursorPosition( consolehandle, consolehandle, cursorpos cursorpos WriteConsole( WriteConsole( consolehandle, consolehandle, s, s, strlen( strlen( ss ), ), &written, &written, 00 #endif #endif Programowanie obiektowe w C++ 68

69 Suplement wypisywanie liczby i double, double, Borland conio+mingw i GCC // // Wymaga Wymaga wł włąączenia czenia pliku pliku nagłówkowego nagłówkowego cstdio cstdio lub lub stdioh stdioh // // Wykorzystuje Wykorzystuje wcze wcześśniej niej zdefiniowan zdefiniowanąą funkcj funkcjęę writestrxy writestrxy writeintxy( writeintxy( x, x, y, y, ii )) char char s[ s[ ]; ]; sprf( sprf( s, s, "%d", "%d", ii writestrxy( writestrxy( x, x, y, y, ss writedoublexy( writedoublexy( char char s[ s[ ]; ]; sprf( sprf( s, s, "%g", "%g", writestrxy( writestrxy( x, x, y, y, x, x, y, y, double double dd )) dd ss Programowanie obiektowe w C++ 69

70 Suplement wyłączenie kursora tekstowego // // Wymaga Wymaga wł włąączenia czenia pliku pliku conioh conioh (Borland) (Borland) lub lub windowsh windowsh (MINGW (MINGW ii GCC) GCC) cursoroff() cursoroff() #ifdef #ifdef BORLANDC BORLANDC setcursortype( _setcursortype( _NOCURSOR _NOCURSOR #endif #endif #ifdef #ifdef MINGW32_VERSION MINGW32_VERSION CONSOLE_CURSOR_INFO CONSOLE_CURSOR_INFO cursorinfo; cursorinfo; HANDLE consolehandle HANDLE consolehandle == GetStdHandle( GetStdHandle( GetConsoleCursorInfo( GetConsoleCursorInfo( consolehandle, consolehandle, cursorinfobvisible cursorinfobvisible == false; false; SetConsoleCursorInfo( SetConsoleCursorInfo( consolehandle, consolehandle, #endif #endif STD_OUTPUT_HANDLE STD_OUTPUT_HANDLE &cursorinfo &cursorinfo &cursorinfo &cursorinfo Programowanie obiektowe w C++ 70

71 Suplement włączenie kursora tekstowego // // Wymaga Wymaga wł włąączenia czenia pliku pliku conioh conioh cursoron() cursoron() #ifdef #ifdef BORLANDC BORLANDC setcursortype( _setcursortype( _NORMALCURSOR _NORMALCURSOR #endif #endif (Borland) (Borland) lub lub windowsh windowsh (MINGW (MINGW ii GCC) GCC) #ifdef #ifdef MINGW32_VERSION MINGW32_VERSION CONSOLE_CURSOR_INFO CONSOLE_CURSOR_INFO cursorinfo; cursorinfo; HANDLE consolehandle HANDLE consolehandle == GetStdHandle( GetStdHandle( GetConsoleCursorInfo( GetConsoleCursorInfo( consolehandle, consolehandle, cursorinfobvisible cursorinfobvisible == true; true; SetConsoleCursorInfo( SetConsoleCursorInfo( consolehandle, consolehandle, #endif #endif STD_OUTPUT_HANDLE STD_OUTPUT_HANDLE &cursorinfo &cursorinfo &cursorinfo &cursorinfo Programowanie obiektowe w C++ 71

Wprowadzenie do programowanie obiektowego w języku C++

Wprowadzenie do programowanie obiektowego w języku C++ Wprowadzenie do programowanie obiektowego w języku C++ Część pierwsza Podstawy programowania obiektowego Autor Roman Simiński Kontakt romansiminski@usedupl wwwusedupl/~siminski Niniejsze opracowanie zawiera

Bardziej szczegółowo

Metodyki programowania. Roman Simiński programowanie.siminskionline.pl. Wprowadzenie do podejścia zwinnego

Metodyki programowania. Roman Simiński programowanie.siminskionline.pl. Wprowadzenie do podejścia zwinnego Metodyki programowania Roman Simiński roman.siminski@us.edu.pl programowanie.siminskionline.pl Wprowadzenie do podejścia zwinnego Trochę wprowadzenia... Kaskadowy model procesu wytwarzania oprogramowania

Bardziej szczegółowo

Projektowanie obiektowe

Projektowanie obiektowe Projektowanie obiektowe Roman Simiński roman.siminski@us.edu.pl programowanie.siminskionline.pl Obiektowość w systemach informatycznych Dlaczego projektowanie jest ważne Fakt 1: Wzrost złożoności oprogramowania

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

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

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego Iwona Kochaoska Programowanie Obiektowe Programowanie obiektowe (ang. object-oriented programming) - metodyka tworzenia programów komputerowych,

Bardziej szczegółowo

Modelowanie i Programowanie Obiektowe

Modelowanie i Programowanie Obiektowe Modelowanie i Programowanie Obiektowe Wykład I: Wstęp 20 październik 2012 Programowanie obiektowe Metodyka wytwarzania oprogramowania Metodyka Metodyka ustandaryzowane dla wybranego obszaru podejście do

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

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

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

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

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

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1 Podstawy programowania, Poniedziałek 30.05.2016, 8-10 Projekt, część 1 1. Zadanie Projekt polega na stworzeniu logicznej gry komputerowej działającej w trybie tekstowym o nazwie Minefield. 2. Cele Celem

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

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

Laboratorium nr 12. Temat: Struktury, klasy. Zakres laboratorium:

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

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak Java język programowania obiektowego Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak 1 Język Java Język Java powstał w roku 1995 w firmie SUN Microsystems Java jest językiem: wysokiego

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

Wykład 8: klasy cz. 4

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

Programowanie obiektowe

Programowanie obiektowe Laboratorium z przedmiotu Programowanie obiektowe - zestaw 02 Cel zajęć. Celem zajęć jest zapoznanie z praktycznymi aspektami projektowania oraz implementacji klas i obiektów z wykorzystaniem dziedziczenia.

Bardziej szczegółowo

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę. Języki C i C++ to bardzo uniwersalne platformy programistyczne o ogromnych możliwościach. Wykorzystywane są do tworzenia systemów operacyjnych i oprogramowania użytkowego. Dzięki niskiemu poziomowi abstrakcji

Bardziej szczegółowo

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1 Podstawy programowania. Wykład Funkcje Krzysztof Banaś Podstawy programowania 1 Programowanie proceduralne Pojęcie procedury (funkcji) programowanie proceduralne realizacja określonego zadania specyfikacja

Bardziej szczegółowo

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016 Wstęp - wykład 0 22 lutego 2016 Historia Simula 67 język zaprojektowany do zastosowan symulacyjnych; Smalltalk 80 pierwszy język w pełni obiektowy; Dodawanie obiektowości do języków imperatywnych: Pascal

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

Wykład 5: Klasy cz. 3

Wykład 5: Klasy cz. 3 Programowanie obiektowe Wykład 5: cz. 3 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD - podstawy Konstruktor i destruktor (część I) 2 Konstruktor i destruktor KONSTRUKTOR Dla przykładu

Bardziej szczegółowo

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Program, to lista poleceń zapisana w jednym języku programowania zgodnie z obowiązującymi w nim zasadami. Celem programu jest przetwarzanie

Bardziej szczegółowo

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018 Informatyka I Klasy i obiekty. Podstawy programowania obiektowego dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2018 Plan wykładu Pojęcie klasy Deklaracja klasy Pola i metody klasy

Bardziej szczegółowo

Analiza i projektowanie oprogramowania. Analiza i projektowanie oprogramowania 1/32

Analiza i projektowanie oprogramowania. Analiza i projektowanie oprogramowania 1/32 Analiza i projektowanie oprogramowania Analiza i projektowanie oprogramowania 1/32 Analiza i projektowanie oprogramowania 2/32 Cel analizy Celem fazy określania wymagań jest udzielenie odpowiedzi na pytanie:

Bardziej szczegółowo

Język programowania. Andrzej Bobyk http://www.alfabeta.lublin.pl. www.alfabeta.lublin.pl/jp/

Język programowania. Andrzej Bobyk http://www.alfabeta.lublin.pl. www.alfabeta.lublin.pl/jp/ Język programowania Andrzej Bobyk http://www.alfabeta.lublin.pl www.alfabeta.lublin.pl/jp/ Literatura K. Reisdorph: Delphi 6 dla każdego. Helion, Gliwice 2001 A. Grażyński, Z. Zarzycki: Delphi 7 dla każdego.

Bardziej szczegółowo

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu. Zrozumienie funkcji danych statycznych jest podstawą programowania obiektowego. W niniejszym artykule opiszę zasadę tworzenia klas statycznych w C#. Oprócz tego dowiesz się czym są statyczne pola i metody

Bardziej szczegółowo

Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r.

Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r. Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r. Programowanie obiektowe Programowanie obiektowe (z ang. object-oriented programming), to

Bardziej szczegółowo

1 Podstawy c++ w pigułce.

1 Podstawy c++ w pigułce. 1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,

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

Analiza i projektowanie obiektowe 2016/2017. Wykład 10: Tworzenie projektowego diagramu klas

Analiza i projektowanie obiektowe 2016/2017. Wykład 10: Tworzenie projektowego diagramu klas Analiza i projektowanie obiektowe 2016/2017 Wykład 10: Tworzenie projektowego diagramu klas Jacek Marciniak Wydział Matematyki i Informatyki Uniwersytet im. Adama Mickiewicza 1 Plan wykładu 1. Projektowy

Bardziej szczegółowo

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji. JAVA Java jest wszechstronnym językiem programowania, zorientowanym obiektowo, dostarczającym możliwość uruchamiania apletów oraz samodzielnych aplikacji. Java nie jest typowym kompilatorem. Źródłowy kod

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Laboratorium z przedmiotu - zestaw 02 Cel zajęć. Celem zajęć jest zapoznanie z praktycznymi aspektami projektowania oraz implementacji klas i obiektów z wykorzystaniem dziedziczenia. Wprowadzenie teoretyczne.

Bardziej szczegółowo

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

Podstawy Programowania 2

Podstawy Programowania 2 Podstawy Programowania 2 Laboratorium 7 Instrukcja 6 Object Pascal Opracował: mgr inż. Leszek Ciopiński Wstęp: Programowanie obiektowe a programowanie strukturalne. W programowaniu strukturalnym, któremu

Bardziej szczegółowo

JAVA W SUPER EXPRESOWEJ PIGUŁCE

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

ZARZĄDZANIU. Wykład VI. dr Jan Kazimirski

ZARZĄDZANIU. Wykład VI. dr Jan Kazimirski INFORMATYKA W ZARZĄDZANIU Wykład VI dr Jan Kazimirski jankazim@mac.edu.pl http://www.mac.edu.pl/jankazim MODELOWANIE SYSTEMÓW UML Literatura Joseph Schmuller UML dla każdego, Helion 2001 Perdita Stevens

Bardziej szczegółowo

Projektowanie obiektowe. Roman Simiński Wzorce projektowe Wybrane wzorce strukturalne

Projektowanie obiektowe. Roman Simiński  Wzorce projektowe Wybrane wzorce strukturalne Projektowanie obiektowe Roman Simiński roman.siminski@us.edu.pl www.siminskionline.pl Wzorce projektowe Wybrane wzorce strukturalne Fasada Facade Pattern 2 Wzorzec Fasada Facade Pattern koncepcja 3 Wzorzec

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

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 w języku C++

Podstawy programowania w języku C++ Podstawy programowania w języku C++ Część dziesiąta Rekordy w C/C++ struktury Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.programowanie.siminskionline.pl Niniejsze opracowanie zawiera skrót

Bardziej szczegółowo

10. Programowanie obiektowe w PHP5

10. Programowanie obiektowe w PHP5 Ogólnie definicja klasy wygląda jak w C++. Oczywiście elementy składowe klasy są zmiennymi PHP, stąd nieśmiertelne $. Warto zauważyć, że mogą one mieć wartość HHH mgr inż. Grzegorz Kraszewski TECHNOLOGIE

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

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

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie. Część XXII C++ w Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie. Ćwiczenie 1 1. Utwórz nowy projekt w Dev C++ i zapisz go na

Bardziej szczegółowo

Rozdział 4 KLASY, OBIEKTY, METODY

Rozdział 4 KLASY, OBIEKTY, METODY Rozdział 4 KLASY, OBIEKTY, METODY Java jest językiem w pełni zorientowanym obiektowo. Wszystkie elementy opisujące dane, za wyjątkiem zmiennych prostych są obiektami. Sam program też jest obiektem pewnej

Bardziej szczegółowo

Technologie obiektowe

Technologie obiektowe WYKŁAD dr inż. Paweł Jarosz Instytut Informatyki Politechnika Krakowska mail: pjarosz@pk.edu.pl LABORATORIUM dr inż. Paweł Jarosz (3 grupy) mgr inż. Piotr Szuster (3 grupy) warunki zaliczenia Obecność

Bardziej szczegółowo

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody Obiektowy PHP Czym jest obiekt? W programowaniu obiektem można nazwać każdy abstrakcyjny byt, który programista utworzy w pamięci komputera. Jeszcze bardziej upraszczając to zagadnienie, można powiedzieć,

Bardziej szczegółowo

Wykład 9: Polimorfizm i klasy wirtualne

Wykład 9: Polimorfizm i klasy wirtualne Programowanie obiektowe Wykład 9: i klasy wirtualne 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD Programowanie obiektowe i metody wirtualne 2 W programowaniu obiektowym polimorfizm

Bardziej szczegółowo

Do czego służą klasy?

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

Deklaracja struktury w C++

Deklaracja struktury w C++ Struktury to złożone typy danych pozwalające przechowywać różne informacje. Za pomocą struktur możliwe jest grupowanie wielu zmiennych o różnych typach w jeden obiekt. Strukturę można nazywać obiektem

Bardziej szczegółowo

Typy klasowe (klasy) 1. Programowanie obiektowe. 2. Założenia paradygmatu obiektowego:

Typy klasowe (klasy) 1. Programowanie obiektowe. 2. Założenia paradygmatu obiektowego: Typy klasowe (klasy) 1. Programowanie obiektowe Programowanie obiektowe (ang. object-oriented programming) to metodologia tworzenia programów komputerowych, która definiuje programy za pomocą obiektów

Bardziej szczegółowo

Każdy z nich posiada swoje parametry. W przypadku silnika może to być moc lub pojemność, w przypadku skrzyni biegów można mówić o skrzyni

Każdy z nich posiada swoje parametry. W przypadku silnika może to być moc lub pojemność, w przypadku skrzyni biegów można mówić o skrzyni Język obiektowy był krokiem ewolucji w programowaniu komputerów. Powstał w wyniku rozwoju języków strukturalnych i zmiany podejścia do problemów informatycznych. Cały otaczający świat składa się z obiektów.

Bardziej szczegółowo

Projektowanie obiektowe. Roman Simiński Polimorfizm

Projektowanie obiektowe. Roman Simiński   Polimorfizm Projektowanie obiektowe Roman Simiński roman.siminski@us.edu.pl www.siminskionline.pl Polimorfizm Koncepcja polimorfizmu Słowo polimorfizm pochodzi od dwóch greckich słów: poly czyli wiele, morphos czyli

Bardziej szczegółowo

Materiały do zajęć VII

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

1 Podstawy c++ w pigułce.

1 Podstawy c++ w pigułce. 1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,

Bardziej szczegółowo

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 wykładu na temat programowania obiektowego.

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

Podstawy programowania. Wykład: 12. Struktury, unie, pola bitowe. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy programowania. Wykład: 12. Struktury, unie, pola bitowe. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD Podstawy programowania Wykład: 12 Struktury, unie, pola bitowe 1 dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD Podstawy programowania Struktury 2 Struktury Struktury to złożone typy danych

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

Mechanizm dziedziczenia

Mechanizm dziedziczenia Mechanizm dziedziczenia Programowanie obiektowe jako realizacja koncepcji ponownego wykorzystania kodu Jak przebiega proces dziedziczenia? Weryfikacja formalna poprawności dziedziczenia Realizacja dziedziczenia

Bardziej szczegółowo

Zmienne, stałe i operatory

Zmienne, stałe i operatory Zmienne, stałe i operatory Przemysław Gawroński D-10, p. 234 Wykład 2 4 marca 2019 (Wykład 2) Zmienne, stałe i operatory 4 marca 2019 1 / 21 Outline 1 Zmienne 2 Stałe 3 Operatory (Wykład 2) Zmienne, stałe

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

Programowanie obiektowe

Programowanie obiektowe Laboratorium z przedmiotu Programowanie obiektowe - zestaw 03 Cel zajęć. Celem zajęć jest zapoznanie z praktycznymi aspektami projektowania oraz implementacji klas abstrakcyjnych i interfejsów. Wprowadzenie

Bardziej szczegółowo

Wykład 9 2014-06-20 09:37 PP2_W9

Wykład 9 2014-06-20 09:37 PP2_W9 Wykład 9 Przykłady programów z wykorzystaniem klas - przykład funkcji operatorowych - obiektowa implementacja listy jednokierunkowej kopiowanie obiektów - klasa "latający napis" Pozycjonowanie w plikach

Bardziej szczegółowo

Budowa i generowanie planszy

Budowa i generowanie planszy Gra Saper została napisana w. Jest dostępna w każdej wersji systemu Windows. Polega na odkrywaniu zaminowanej planszy tak, aby nie trafić na minę. Gra działa na bardzo prostej zasadzie i nie wymaga zaawansowanego

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

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie Część X C++ Typ znakowy służy do reprezentacji pojedynczych znaków ASCII, czyli liter, cyfr, znaków przestankowych i innych specjalnych znaków widocznych na naszej klawiaturze (oraz wielu innych, których

Bardziej szczegółowo

Spis treści. 1 Java T M

Spis treści. 1 Java T M Spis treści 1 Java T M 1 2 Co to jest Platforma Java T M 1 3 Przygotowanie komputera 2 4 Pierwszy program 2 5 Dokumentacja 3 6 Budowa aplikacji. Klasy. 3 7 Pola i metody 4 8 Konstruktory 5 9 Inne proste

Bardziej szczegółowo

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

Programowanie Obiektowe i C++

Programowanie Obiektowe i C++ Programowanie Obiektowe i C++ Marcin Benke 2.10.2006 Dzisiaj Co umiemy Paradygmaty programowania Co będzie na wykładach Zasady zaliczania Programowanie obiektowe Co umiemy Programowałem w C++ Programowałem

Bardziej szczegółowo

Algorytm. a programowanie -

Algorytm. a programowanie - Algorytm a programowanie - Program komputerowy: Program komputerowy można rozumieć jako: kod źródłowy - program komputerowy zapisany w pewnym języku programowania, zestaw poszczególnych instrukcji, plik

Bardziej szczegółowo

Podstawy Programowania Programowanie Obiektowe

Podstawy Programowania Programowanie Obiektowe Podstawy Programowania Programowanie Obiektowe Michał Bujacz bujaczm@p.lodz.pl B9 Lodex 207 godziny przyjęć: środy i czwartki 10:00-11:00 http://www.eletel.p.lodz.pl/bujacz/ 1 Pytania powtarzające x &

Bardziej szczegółowo

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej. Polimorfizm jest filarem programowania obiektowego, nie tylko jeżeli chodzi o język C++. Daje on programiście dużą elastyczność podczas pisania programu. Polimorfizm jest ściśle związany z metodami wirtualnymi.

Bardziej szczegółowo

KLASY cz.1. Dorota Pylak

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

Wprowadzenie do programowanie obiektowego w języku C++

Wprowadzenie do programowanie obiektowego w języku C++ Wprowadzenie do programowanie obiektowego w języku C++ Część czwarta Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu, lektura

Bardziej szczegółowo

Obiektowość mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2012

Obiektowość mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2012 Obiektowość mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2012 Obiekt jest abstrakcją pewnego konkretnego bytu ze świata rzeczywistego, reprezentujący rzecz (obiekt fizyczny), pojęcie

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

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

Do czego służą klasy?

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

class Student Deklaracja klasy Osoba: Deklaracja klasy Student:

class Student Deklaracja klasy Osoba: Deklaracja klasy Student: Osoba Student Będziemy mieli 2 klasy: Osoba, dla której zapamiętamy dane takie jak: imie, nazwisko i wiek Oraz klasę Student, w której będziemy też dodatkowo pamiętać kierunek studiów. Deklaracja klasy

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

Zaawansowane programowanie w C++ (PCP)

Zaawansowane programowanie w C++ (PCP) Zaawansowane programowanie w C++ (PCP) Wykład 3 - polimorfizm. dr inż. Robert Nowak - p. 1/14 Powtórzenie Powtórzenie: klasy autonomiczne: konstruktor, konstruktor kopiujacy, operator przypisania, destruktor

Bardziej szczegółowo

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów Operatory są elementami języka C++. Istnieje zasada, że z elementami języka, takimi jak np. słowa kluczowe, nie można dokonywać żadnych zmian, przeciążeń, itp. PRZECIĄŻANIE OPERATORÓW Ale dla operatorów

Bardziej szczegółowo

ALGORYTMY I STRUKTURY DANYCH

ALGORYTMY I STRUKTURY DANYCH Akademia Rolnicza im. Augusta Cieszkowskiego w Poznaniu - Instytut Inżynierii Rolniczej - ALGORYTMY I STRUKTURY DANYCH Prowadzący: dr inż. Radosław J. Kozłowski email: rjk@au.poznan.pl www: http://www.au.poznan.pl/~rjk

Bardziej szczegółowo

Iteracyjno-rozwojowy proces tworzenia oprogramowania Wykład 3 część 1

Iteracyjno-rozwojowy proces tworzenia oprogramowania Wykład 3 część 1 Iteracyjno-rozwojowy proces tworzenia oprogramowania Wykład 3 część 1 Zofia Kruczkiewicz 1 Zunifikowany iteracyjno- przyrostowy proces tworzenia oprogramowania kiedy? Przepływ działań Modelowanie przedsiębiorstwa

Bardziej szczegółowo

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

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

Kompilacja javac prog.java powoduje wyprodukowanie kilku plików o rozszerzeniu.class, m.in. Main.class wykonanie: java Main

Kompilacja javac prog.java powoduje wyprodukowanie kilku plików o rozszerzeniu.class, m.in. Main.class wykonanie: java Main Język obiektowy Wykład 13 Programowanie obiektowe z lotu ptaka, str 1 James Gosling, Mike Sheridan, Patrick Naughton Sun Microsystems 1995(20latmłodszyodC) C jest językiem proceduralnym Java jest językiem

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Laboratorium z przedmiotu - zestaw 03 Cel zajęć. Celem zajęć jest zapoznanie z praktycznymi aspektami projektowania oraz implementacji klas abstrakcyjnych i interfejsów. Wprowadzenie teoretyczne. Rozważana

Bardziej szczegółowo

Programowanie w języku Python. Grażyna Koba

Programowanie w języku Python. Grażyna Koba Programowanie w języku Python Grażyna Koba Kilka definicji Program komputerowy to ciąg instrukcji języka programowania, realizujący dany algorytm. Język programowania to zbiór określonych instrukcji i

Bardziej szczegółowo

Pola i metody statyczne. Klasy zawierające pola i metody statyczne

Pola i metody statyczne. Klasy zawierające pola i metody statyczne Instrukcja laboratoryjna nr 1 Programowanie w języku C 2 (C++ poziom zaawansowany) Pola i metody statyczne. Klasy zawierające pola i metody statyczne dr inż. Kaczmarek Tomasz mgr inż. Lasota Maciej dr

Bardziej szczegółowo

Programowanie obiektowe w języku C++

Programowanie obiektowe w języku C++ Programowanie obiektowe w języku C++ Roman Simiński roman.siminski@us.edu.pl www.siminskionline.pl Funkcje wirtualne Wskaźniki do obiektów Polimorfizm Wczesne i późne wiązanie Funkcje wirtualne 2 Rozpoczynamy

Bardziej szczegółowo

C++ Przeładowanie operatorów i wzorce w klasach

C++ Przeładowanie operatorów i wzorce w klasach C++ i wzorce w klasach Andrzej Przybyszewski numer albumu: 89810 14 listopada 2009 Ogólnie Przeładowanie (przeciążanie) operatorów polega na nadaniu im nowych funkcji. Przeładowanie operatora dokonuje

Bardziej szczegółowo

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

Temat 1: Podstawowe pojęcia: program, kompilacja, kod Temat 1: Podstawowe pojęcia: program, kompilacja, kod wynikowy. Przykłady najprostszych programów. Definiowanie zmiennych. Typy proste. Operatory: arytmetyczne, przypisania, inkrementacji, dekrementacji,

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

Programowanie obiektowe Wykład 6. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14

Programowanie obiektowe Wykład 6. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14 Dariusz Wardowski dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14 Wirtualne destruktory class A int* a; A(int _a) a = new int(_a);} virtual ~A() delete a;} class B: public A double* b;

Bardziej szczegółowo