Wprowadzenie do programowania obiektowego

Wprowadzenie do programowania obiektowego Wprowadzenie do programowania obiektowego

prac.us.edu.pl
from prac.us.edu.pl More from this publisher

Podstawy i języki <strong>programowania</strong>Język C++Od programowanie proceduralnego <strong>do</strong> <strong>obiektowego</strong>Podstawy <strong>programowania</strong> <strong>obiektowego</strong>Podejście obiektowe na prostym przykładzieProblemNapisać program wyświetlający na pustym ekranie tekstowym zadany znak (np. ‘*’),pozwalający na przesuwanie tego znaku przy użyciu klawiszy sterowania kursorem.X12345....123 45 . . . . . . . . . .. . . . . . . . . . . 7980Y*.......2425Copyright © Roman Simiński Strona : 2


Podstawy i języki <strong>programowania</strong>Język C++Od programowanie proceduralnego <strong>do</strong> <strong>obiektowego</strong>Podstawy <strong>programowania</strong> <strong>obiektowego</strong>Podejście obiektowe na prostym przykładzieRealizacja proceduralna ― założenia wstępneProgramista ma <strong>do</strong> dyspozycji:Funkcję clearScreen, czyszczącą ekran tekstowy.Funkcję writeCharXY, wyświetlającą na ekranie znak na określonej pozycji.Funkcję getKey, której rezultatem jest kod klawisza, w tym tzw. klawiszy sterującychkursorem.Stałe określające kody klawiszy, wtym klawiszy sterujących kursorem (dla funkcjigetKey):KEY_UP, KEY_DOWN, KEY_LEFT, KEY_RIGHT, KEY_ESC.Copyright © Roman Simiński Strona : 4


Podstawy i języki <strong>programowania</strong>Język C++Od programowanie proceduralnego <strong>do</strong> <strong>obiektowego</strong>Podstawy <strong>programowania</strong> <strong>obiektowego</strong>Podejście obiektowe na prostym przykładzieRealizacja proceduralna ― wady techniczneBrak jawnego powiązania pomiędzy x, y i code. A przecież te zmienne opisują jedenobiekt.Brak jawnego powiązania pomiędzy fragmentem wyświetlającym (ukrywającym)punkt. Czy rzeczywiście funkcja writeCharXY <strong>do</strong>stała prawidłowe parametry?Siermiężne testowanie poprawności współrzędnych.Realizacja proceduralna ― wady metodyczneZ kodu programu nie wynika bezpośrednio, jakie jest jego przeznaczenie, brakpowiązań pomiędzy akcjami a danymi.Sam algorytm jest prosty, lecz jego zapis nie wspomaga zrozumienia, jaka jest istotaproblemu.Copyright © Roman Simiński Strona : 8


Podstawy i języki <strong>programowania</strong>Język C++Od programowanie proceduralnego <strong>do</strong> <strong>obiektowego</strong>Podstawy <strong>programowania</strong> <strong>obiektowego</strong>Podejdźmy <strong>do</strong> problemu inaczej — spróbujmy zrozumieć jego istotęZapraszamy na:Krótki wywiad z głównym bohateremprogramu!Copyright © Roman Simiński Strona : 9


Wtorek, 16 maja 2006Tajemnice życia Runnerów ujawnione ― prawie wszystkie intymne szczegóły, tylko w <strong>do</strong>datku Fakty ITgazetac o d z i e n n a— Jeżeli mam się przesunąć o jedno pole <strong>do</strong> góry, potem o jedno w lewo i jeszcze razo jedno <strong>do</strong> góry, to piszesz:R.moveUp();R.moveLeft();R.moveUp();— 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.:int steps;R.x = 1; // Powiedz mi, skąd mam wystartowaćR.y = 1;R.show();for( steps = 5; steps > 0 ; steps-- )R.moveRight(); // Id ę w prawofor( steps = 5; steps > 0 ; steps-- )R.moveDown(); // Id ę w dółfor( steps = 5; steps > 0 ; steps-- )R.moveLeft(); // Id ę w lewofor( steps = 5; steps > 0 ; steps-- )R.moveUp(); // Id ę w gór ęStrona 4Wywiady


Podstawy i języki <strong>programowania</strong>Język C++<strong>Wprowadzenie</strong> <strong>do</strong> <strong>programowania</strong> <strong>obiektowego</strong>Podstawy <strong>programowania</strong> <strong>obiektowego</strong>Podejście obiektowe na prostym przykładzieRealizacja obiektowa ― najprostsza wersjaRunner R;R.x = 40; // Ustal pozycj ę i wygląd RunneraR.y = 12;R.code = '*';clearScreen();R.show();<strong>do</strong>{switch( key = getKey() ){case KEY_UP: R.moveUp();break;case KEY_DOWN : R.moveDown();break;case KEY_LEFT : R.moveLeft();break;case KEY_RIGHT : R.moveRight();break;}}while( key != KEY_ESC );Copyright © Roman Simiński Strona : 15


Podstawy i języki <strong>programowania</strong>Język C++<strong>Wprowadzenie</strong> <strong>do</strong> <strong>programowania</strong> <strong>obiektowego</strong>Podstawy <strong>programowania</strong> <strong>obiektowego</strong>Podejście obiektowe na prostym przykładzieAnatomia Runnera — polaRunner to nazwa klasy obiektów. Wszystkie obiekty klasy Runner będą posiadały tesame cechy i umiejętności.To, co obiekt wie o sobie i swoim otoczeniu pamiętane jest w jego polach. Polamiw klasie Runner są x i y — opisujące ekranową pozycję obiektu, oraz code —opisujące wygląd obiektu.class Runner{public :int x, y, code;Wszystkie elementy zadeklarowane w sekcjipublic są <strong>do</strong>stępne dla tych, którzy chcą używaćobiektu klasy Runner.void show();void hide();};void moveUp();void moveDown();void moveLeft();void moveRight();Copyright © Roman Simiński Strona : 16


Podstawy i języki <strong>programowania</strong>Język C++<strong>Wprowadzenie</strong> <strong>do</strong> <strong>programowania</strong> <strong>obiektowego</strong>Podstawy <strong>programowania</strong> <strong>obiektowego</strong>Podejście obiektowe na prostym przykładzieAnatomia Runnera — funkcje skła<strong>do</strong>weDo obiektów można wysyłać komunikaty. Ich nazwy to odpowiednio:●●●●●●moveUp,moveDown,moveLeft,moveRight,show,hide.switch( key = getKey() ){case KEY_UP}: R.moveUp();break;case KEY_DOWN : R.moveDown();break;case KEY_LEFT : R.moveLeft();break;case KEY_RIGHT : R.moveRight();break;Copyright © Roman Simiński Strona : 17


Podstawy i języki <strong>programowania</strong>Język C++<strong>Wprowadzenie</strong> <strong>do</strong> <strong>programowania</strong> <strong>obiektowego</strong>Podstawy <strong>programowania</strong> <strong>obiektowego</strong>Podejście obiektowe na prostym przykładzieAnatomia Runnera — funkcje skła<strong>do</strong>weObiekt odpowiada na komunikaty wywołując metody. Metody są implementowanepoprzez funkcje skła<strong>do</strong>we, których prototypy są zadeklarowane w definicji klasy:class Runner{public :int x, y, code;void show();void hide();};void moveUp();void moveDown();void moveLeft();void moveRight();Copyright © Roman Simiński Strona : 18


Podstawy i języki <strong>programowania</strong>Język C++<strong>Wprowadzenie</strong> <strong>do</strong> <strong>programowania</strong> <strong>obiektowego</strong>Podstawy <strong>programowania</strong> <strong>obiektowego</strong>Podejście obiektowe na prostym przykładzieAnatomia Runnera — funkcje skła<strong>do</strong>weWłaściwe definicje (zawierające konkretny kod) umieszczone są zwykle (choćniekoniecznie) poniżej definicji klasy Runner. Nazwa każdej metody jestkwalifikowana nazwą klasy.void Runner::show(){writeCharXY( x, y, code );}void Runner::hide(){writeCharXY( x, y, ' ' );}Copyright © Roman Simiński Strona : 19


Podstawy i języki <strong>programowania</strong>Język C++<strong>Wprowadzenie</strong> <strong>do</strong> <strong>programowania</strong> <strong>obiektowego</strong>Podstawy <strong>programowania</strong> <strong>obiektowego</strong>Podejście obiektowe na prostym przykładzieAnatomia Runnera — funkcje skła<strong>do</strong>wevoid Runner::moveUp(){hide();if( y > 1 )--y;show();}void Runner::moveDown(){hide();if( y < 24 )++y;show();}void Runner::moveLeft(){hide();if( x > 1 )--x;show();}void Runner::moveRight(){hide();if( x < 80 )++x;show();}Wewnątrz każdej funkcji skła<strong>do</strong>wej, <strong>do</strong>stępne są wszystkie pola obiektu i inne funkcjeskła<strong>do</strong>we.Copyright © Roman Simiński Strona : 20


Podstawy i języki <strong>programowania</strong>Język C++<strong>Wprowadzenie</strong> <strong>do</strong> <strong>programowania</strong> <strong>obiektowego</strong>Podstawy <strong>programowania</strong> <strong>obiektowego</strong>Pojęcie obiektuIstnieje wiele, różniących się od siebie definicji pojęcia obiekt. Tutaj przyjmiemynastępującą definicję:Obiekt jest abstrakcją pewnego konkretnego bytu ze świata rzeczywistego,reprezentujący rzecz (obiekt fizyczny), pojęcie (obiekt konceptualny) lub pewny bytprogramistyczny nie mający swojego odpowiednika w rzeczywistości.Pojęcie klasyIstnieje wiele, różniących się od siebie definicji pojęcia klasa. Tutaj przyjmiemynastępującą definicję:Klasa określa właściwości i możliwości każdego obiektu <strong>do</strong> niej należącego, definiujezatem to, jak obiekt jest zbu<strong>do</strong>wany i co potrafi.W szczególności klasa zawiera specyfikację danych i metod, informację o typie ireprezentacji pól, implementację metod, informacje <strong>do</strong>tyczące relacji i powiązań zinnymi klasami.Copyright © Roman Simiński Strona : 21


Podstawy i języki <strong>programowania</strong>Język C++<strong>Wprowadzenie</strong> <strong>do</strong> <strong>programowania</strong> <strong>obiektowego</strong>Podstawy <strong>programowania</strong> <strong>obiektowego</strong>Trzy podstawowe cechy obiektuTożsamość (ang. identity).Stan (ang. state).Działanie, zachowanie (ang. behavior).Copyright © Roman Simiński Strona : 22


Podstawy i języki <strong>programowania</strong>Język C++<strong>Wprowadzenie</strong> <strong>do</strong> <strong>programowania</strong> <strong>obiektowego</strong>Podstawy <strong>programowania</strong> <strong>obiektowego</strong>TożsamośćTożsamość (ang. identity), pozwala na odróżnienie danego obiektu od każdegoinnego.Programista przypisuje obiektowi unikatową nazwę lub włącza go <strong>do</strong> identyfikowalnejkolekcji obiektów, lub odwołuje się <strong>do</strong> obiektu posługując się jego adresem w pamięci.Copyright © Roman Simiński Strona : 23


Podstawy i języki <strong>programowania</strong>Język C++<strong>Wprowadzenie</strong> <strong>do</strong> <strong>programowania</strong> <strong>obiektowego</strong>Podstawy <strong>programowania</strong> <strong>obiektowego</strong>StanStan (ang. state), opisuje to co obiekt w danym momencie powinien wiedzieć abysprawnie działać.Stan obiektu w danym momencie opisany jest zestawem atrybutów i ich wartości.Atrybuty są nazwami wewnętrznych danych obiektu, opisujących jego stan.Atrybuty zwane są polami (ang. fields) lub skła<strong>do</strong>wymi danych.Wartości atrybutów mogą się zmieniać w czasie wykonania programu.Copyright © Roman Simiński Strona : 24


Podstawy i języki <strong>programowania</strong>Język C++<strong>Wprowadzenie</strong> <strong>do</strong> <strong>programowania</strong> <strong>obiektowego</strong>Podstawy <strong>programowania</strong> <strong>obiektowego</strong>Z<strong>do</strong>lność <strong>do</strong> działaniaZ<strong>do</strong>lność <strong>do</strong> działania (ang. behavior) opisuje operacje, które obiekt może wykonać.Operacje są realizowane poprzez wykonanie metod (ang. methods) zwanych w C++funkcjami skła<strong>do</strong>wymi (ang. member functions).Metody są jak procedury lub funkcje w programowaniu proceduralnym — mogąotrzymywać parametry, mogą zwracać wartości.Metody są jednak częścią obiektu i mogą być aktywowane wtedy, gdy obiekt zostanieo to poproszony.Wykonanie metod zwykle zmienia stan obiektu a więc wartości jego pól.Copyright © Roman Simiński Strona : 25


Podstawy i języki <strong>programowania</strong>Język C++<strong>Wprowadzenie</strong> <strong>do</strong> <strong>programowania</strong> <strong>obiektowego</strong>Podstawy <strong>programowania</strong> <strong>obiektowego</strong>Najważniejsze cechy podejścia <strong>obiektowego</strong>Abstrakcja (ang. abstraction).Hermetyzacja (ang. encapsulation).Dziedziczenie (ang. inheritance).Polimorfizm (ang. polymorphism)Copyright © Roman Simiński Strona : 26


Podstawy i języki <strong>programowania</strong>Język C++<strong>Wprowadzenie</strong> <strong>do</strong> <strong>programowania</strong> <strong>obiektowego</strong>Podstawy <strong>programowania</strong> <strong>obiektowego</strong>AbstrakcjaPodejście obiektowe eksponuje rolę obiektu – jest on abstrakcją pewnegokonkretnego bytu ze świata rzeczywistego, reprezentującego rzecz (obiekt fizyczny)lub pojęcie (obiekt konceptualny).Abstrakcja pozwala postrzegać modelowaną rzeczywistość bez wnikania w jejwewnętrzną strukturę.Elementy, które w danym momencie są nieistotne mogą zostać ukryte lub nawetpominięte.Obiekty rzeczywisteAbstrakcyjnymodel analitycznyCopyright © Roman Simiński Strona : 27


Podstawy i języki <strong>programowania</strong>Język C++<strong>Wprowadzenie</strong> <strong>do</strong> <strong>programowania</strong> <strong>obiektowego</strong>Podstawy <strong>programowania</strong> <strong>obiektowego</strong>Abstrakcja, cd. ...CechyAkcjeMarkaModelRok produkcjiNr rejestracyjnyKolor nadwoziaNr silnika. . .Podaj średnie spalaniePodaj przebieg. . .ReprezentacjaobiektowaObiekty rzeczywisteAbstrakcyjnymodelanalitycznyCopyright © Roman Simiński Strona : 28


Podstawy i języki <strong>programowania</strong>Język C++<strong>Wprowadzenie</strong> <strong>do</strong> <strong>programowania</strong> <strong>obiektowego</strong>Podstawy <strong>programowania</strong> <strong>obiektowego</strong>Abstrakcja, cd. ...Obiekt jest jest <strong>do</strong>stawcą pewnych informacji oraz usług.Nie musimy wiedzieć jak obiekt coś robi ale co robi.Nie musimy wiedzieć jak obiekt coś przechowuje ale co przechowuje.class Runner{public :. . .void show();void hide();};void moveUp();void moveDown();void moveLeft();void moveRight();Copyright © Roman Simiński Strona : 29


Podstawy i języki <strong>programowania</strong>Język C++<strong>Wprowadzenie</strong> <strong>do</strong> <strong>programowania</strong> <strong>obiektowego</strong>Podstawy <strong>programowania</strong> <strong>obiektowego</strong>HermetyzacjaHermetyzacja pozwala obiektom kontrolować poprawność swojej reprezentacjizewnętrznej.Osiąga się to poprzez ukrycie (ang. information hiding) pól obiektu przedużytkownikiem zewnętrznym.Zastosowanie hermetyzacji wymusza u<strong>do</strong>stępnianie użytkownikowi publicznegointerfejsu składającego się metod, które mają publiczny modyfikator wi<strong>do</strong>czności.Ukryte części obiektu są nie<strong>do</strong>stępne na zewnątrz i mogą być tylko wykorzystaneprzez metody <strong>do</strong>stępowe.Skła<strong>do</strong>wepubliczneSkła<strong>do</strong>weprywatneBigArrayaddItemgetItemfindItemsort. . .UkrytareprezentacjafizycznaCopyright © Roman Simiński Strona : 30


Podstawy i języki <strong>programowania</strong>Język C++<strong>Wprowadzenie</strong> <strong>do</strong> <strong>programowania</strong> <strong>obiektowego</strong>Podstawy <strong>programowania</strong> <strong>obiektowego</strong>Hermetyzacja,cd. ...Klasa powinna ukrywać przed jej użytkownikiem szczegóły implementacyjne.Zmiana implementacji powinna być dla użytkownika klasy przeźroczysta.Zasada hermetyzacji postuluje ukrywanie nie tylko szczegółów realizacyjnych, alerównież pól i sposobów ich reprezentacji.Szczegóły wi<strong>do</strong>czneSzczegóły ukryteRunner R;R.x = 40;R.y = 12;R.code = '*';. . .cout


Podstawy i języki <strong>programowania</strong>Język C++<strong>Wprowadzenie</strong> <strong>do</strong> <strong>programowania</strong> <strong>obiektowego</strong>Podstawy <strong>programowania</strong> <strong>obiektowego</strong>Hermetyzacja, cd. ...class Runner{public :int x, y, code;};void show();void hide();void moveUp();void moveDown();void moveLeft();void moveRight();class Runner{public :void setX( int newX );void setY( int newY );void setCode( int newCode );int getX();int getY();int getCode();void show();void hide();void moveUp();void moveDown();void moveLeft();void moveRight();private:int x, y, code;};Copyright © Roman Simiński Strona : 32


Podstawy i języki <strong>programowania</strong>Język C++<strong>Wprowadzenie</strong> <strong>do</strong> <strong>programowania</strong> <strong>obiektowego</strong>Podstawy <strong>programowania</strong> <strong>obiektowego</strong>Hermetyzacja, cd. ...Hermetyzacja pól pozwala na kontrolowanie poprawności danych przekazywanychobiektowi.Runner R;R.x = -400;R.y = 1200;Błędna pozycja ekranowa, bezpośredni <strong>do</strong>stęp<strong>do</strong> pól obiektuR.code = '*';. . .R.show();?Copyright © Roman Simiński Strona : 33


Podstawy i języki <strong>programowania</strong>Język C++<strong>Wprowadzenie</strong> <strong>do</strong> <strong>programowania</strong> <strong>obiektowego</strong>Podstawy <strong>programowania</strong> <strong>obiektowego</strong>Hermetyzacja, cd. ...Runner R;R.setX( -400 );R.setY( 1200 );Błędna pozycja ekranowa, <strong>do</strong>stęp <strong>do</strong> pólobiektu za pośrednictwem metodR.setCode( '*' );. . .R.show();void Runner::setX( int newX ){if( isXOnSreen( newX ) )x = newX;elsex = 1; // Wartość <strong>do</strong>myślna}void Runner::setY( int newY ){if( isYOnSreen( newY ) )y = newY;elsey = 1; // Wartość <strong>do</strong>myślna}Copyright © Roman Simiński Strona : 34


Podstawy i języki <strong>programowania</strong>Język C++<strong>Wprowadzenie</strong> <strong>do</strong> <strong>programowania</strong> <strong>obiektowego</strong>Podstawy <strong>programowania</strong> <strong>obiektowego</strong>Na zakończenie ...Osobny wykładDziedziczenie (ang. inheritance).Polimorfizm (ang. polymorphism)Osobny wykładCopyright © Roman Simiński Strona : 35

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!