Wprowadzenie do programowanie
Wprowadzenie do programowanie
obiektowego w języku C++
obiektowego w języku C++
Podstawy programowania
obiektowego
Część pierwszaNiniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi uważnego w nim uczestnictwa. Opracowanie to jest chronione prawem autorskim. Wykorzystywanie jakiegokolwiek fragmentu w celach innych niż nauka własna jest nielegalne. Dystrybuowanie tego opracowania lub jakiejkolwiek jego części oraz wykorzystywanie zarobkowe bez zgody autora jest zabronione.
Roman Simiński
roman.siminski@us.edu.pl www.us.edu.pl/~siminski Autor
Od programowanie proceduralnego do obiektowego
Od programowanie proceduralnego do obiektowego
Podstawy programowania obiektowego
Język C++
Język C++ Podstawy i języki programowania
Podstawy i języki programowania
Copyright © Roman Simiński Strona :2
Podejście obiektowe na prostym przykładzie
Napisać program wyświetlający na pustym ekranie tekstowym zadany znak (np. ‘*’), pozwalający na przesuwanie tego znaku przy użyciu klawiszy sterowania kursorem.
Problem
*
1 1 2 2 3 3 4 4 25 . . . . . . . 24 5 . . . 5 . . . . . . . 79 80 X YOd programowanie proceduralnego do obiektowego
Od programowanie proceduralnego do obiektowego
Podstawy programowania obiektowego
Język C++
Język C++ Podstawy i języki programowania
Podstawy i języki programowania
Copyright © Roman Simiński Strona :3
Podejście obiektowe na prostym przykładzie
Pozycja znaku będzie opisana parą zmiennych x i y, znak będzie sparametryzowany i opisany zmienną code.
Przesuwanie znaku polega na wymazywaniu znaku z pozycji poprzedniej i ponownym wyświetlaniu na nowej pozycji, o ile jest ona prawidłowa.
Analiza
*
1 1 2 2 3 3 4 4 25 . . . . . . . 24 5 . . . 5 . . . . . . . 7980 Y X Gdy klawisz : jeżeli y > 1 to y = y - 1 UP Gdy klawisz : jeżeli y < 25 to y = y + 1 DOWN Gdy klawisz : jeżeli x > 1 to x = x - 1 LEFT Gdy klawisz : jeżeli x < 80 to x = x + 1 RIGHTOd programowanie proceduralnego do obiektowego
Od programowanie proceduralnego do obiektowego
Podstawy programowania obiektowego
Język C++
Język C++ Podstawy i języki programowania
Podstawy i języki programowania
Copyright © Roman Simiński Strona :4
Podejście obiektowe na prostym przykładzie
Programista ma do dyspozycji:
Realizacja proceduralna ― założenia wstępne
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ących kursorem.
Stałe określające kody klawiszy, wtym klawiszy sterujących kursorem (dla funkcji getKey):
Od programowanie proceduralnego do obiektowego
Od programowanie proceduralnego do obiektowego
Podstawy programowania obiektowego
Język C++
Język C++ Podstawy i języki programowania
Podstawy i języki programowania
Copyright © Roman Simiński Strona :5
Podejście obiektowe na prostym przykładzie
Znaki sterujące na starszym bajcie, zwykłe na młodszym (notacja szesnastkowa):
Realizacja proceduralna ― obsługa klawiatury
enum KEY_CODES { KEY_UP = 0x4800, KEY_DOWN = 0x5000, KEY_LEFT = 0x4b00, KEY_RIGHT = 0x4d00, KEY_ESC = 0x001b };
int getKey( void ) {
int key = getch();
return ( key == 0 ) ? getch() << 8 : key; }
Od programowanie proceduralnego do obiektowego
Od programowanie proceduralnego do obiektowego
Podstawy programowania obiektowego
Język C++
Język C++ Podstawy i języki programowania
Podstawy i języki programowania
Copyright © Roman Simiński Strona :6
Podejście obiektowe na prostym przykładzie
Wersje wykorzystujące bibliotekę conio (kompilatory firmy Borland)
Realizacja proceduralna ― obsługa ekranu
void clearScreen( void ) {
clrscr(); }
void writeCharXY( int x, int y, char c ) {
gotoxy( x, y ); putch( c );
Od programowanie proceduralnego do obiektowego
Od programowanie proceduralnego do obiektowego
Podstawy programowania obiektowego
Język C++
Język C++ Podstawy i języki programowania
Podstawy i języki programowania
Copyright © Roman Simiński Strona :7
Podejście obiektowe na prostym przykładzie Realizacja proceduralna ― najprostsza wersja
int key, x = 40, y = 12, code = '*'; clearScreen();
do {
writeCharXY( x, y, code ); /* Wy wietl znak na zadanej pozycji */ś key = getKey(); /* Czekaj na naci ni cie klawisza */ś ę writeCharXY( x, y, ' ' ); /* Wyma znak, potencjalny ruch */ż switch( key )
{
case KEY_UP : if( y > 1 ) --y; /* Przeskocz wy ej */ż break;
case KEY_DOWN : if( y < 24 ) ++y; /* Przeskocz ni ej */ż break;
case KEY_LEFT : if( x > 1 ) --x; /* Przeskocz w lewo */ break;
case KEY_RIGHT : if( x < 80 ) ++x; /* Przeskocz w prawo */ break;
} }
Od programowanie proceduralnego do obiektowego
Od programowanie proceduralnego do obiektowego
Podstawy programowania obiektowego
Język C++
Język C++ Podstawy i języki programowania
Podstawy i języki programowania
Copyright © Roman Simiński Strona :8
Podejście obiektowe na prostym przykładzie Realizacja proceduralna ― wady techniczne
Brak jawnego powiązania pomiędzy x, y i code. A przecież te zmienne opisują jeden obiekt.
Brak jawnego powiązania pomiędzy fragmentem wyświetlającym (ukrywającym) punkt. Czy rzeczywiście funkcja writeCharXY dostała prawidłowe parametry? Siermiężne testowanie poprawności współrzędnych.
Realizacja proceduralna ― wady metodyczne
Z kodu programu nie wynika bezpośrednio, jakie jest jego przeznaczenie, brak powiązań pomiędzy akcjami a danymi.
Sam algorytm jest prosty, lecz jego zapis nie wspomaga zrozumienia, jaka jest istota problemu.
Od programowanie proceduralnego do obiektowego
Od programowanie proceduralnego do obiektowego
Podstawy programowania obiektowego
Język C++
Język C++ Podstawy i języki programowania
Podstawy i języki programowania
Copyright © Roman Simiński Strona :9
Podejdźmy do problemu inaczej — spróbujmy zrozumieć jego istotę
Zapraszamy na:
Krótki wywiad z głównym bohaterem
programu!
Fakty IT
Niecodzienny dodatek Gazety Codziennej Wtorek 16 maja 2006 Redaktor Prowadzący Roman Simińskigazeta
c o d z i e n n aT y l k o u n a s , e k s k l u z y w n y
w y w i a d z g ł ó w n y m
b o ha t e r e m P r o g r a m u
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?
— Takich jak ja może być więcej. W tym programie potrzeba tylko jednego Runnera, więc oto jestem.
Powiedz nam coś o sobie...
— 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 wywiadu jest ruchomy punkt ekranowy. Dzięki temu
wyjątkowemu wywiadowi poznamy unikatowe fakty z życia przedstawicieli tego gatunku.
Tajemnice życia Runnerów ujawnione ― prawie wszystkie intymne szczegóły, tylko w dodatku Fakty IT
Wtorek, 16 maja 2006
gazeta
c o d z i e n n aJak to „możesz mi podać”?
— 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 polecenie.
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 Runnerem, 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ł :(.
Jak niby mam Ci przesyłać polecenia?
— Jaki ty jesteś... no, niedoinformowany. Przecież już Ci mówiłem, co potrafię. Dokładnie polecenia 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ć w szufladce code. Chcesz, to mi coś tam wstaw. Co łaska, byle by to było legalne. Wiesz, my gwiazdy programów musimy uważać ... .
Wywiady
Tajemnice życia Runnerów ujawnione ― prawie wszystkie intymne szczegóły, tylko w dodatku Fakty IT
Wtorek, 16 maja 2006
gazeta
c o d z i e n n a— 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ść. To tak, jakbyś mi wkładał tą wartość do kieszeni.
Jeżeli chcesz, żebym pokazał się na ekranie piszesz:
A skoro już tu jesteś... mogę trochę Ciebie poużywać?
— 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:
R.x = 40; R.y = 12;
R.show();
— I znowu, piszesz moje imię, potem po kropce nazwę polecenia, jakie mam wykonać. To tak jakbyś do mnie wysyłał komunikat. To wygląda 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ą.
Wywiady
Tajemnice życia Runnerów ujawnione ― prawie wszystkie intymne szczegóły, tylko w dodatku Fakty IT
Wtorek, 16 maja 2006
gazeta
c o d z i e n n a— 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 prawo ę for( steps = 5; steps > 0 ; steps-- )
R.moveDown(); // Id w dół ę
for( steps = 5; steps > 0 ; steps-- ) R.moveLeft(); // Id w lewo ę
for( steps = 5; steps > 0 ; steps-- ) R.moveUp(); // Id w gór ę ę
— Jeżeli mam się przesunąć o jedno pole do góry, potem o jedno w lewo i jeszcze raz o jedno do góry, to piszesz:
R.moveUp(); R.moveLeft(); R.moveUp();
Wywiady
Tajemnice życia Runnerów ujawnione ― prawie wszystkie intymne szczegóły, tylko w dodatku Fakty IT
Wtorek, 16 maja 2006
gazeta
c o d z i e n n aCzy możesz naszym czytelnikom wyjaśnić jak są zbudowane funkcje składowe, np. show, hide?
— 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ę.
Wywiady
Wprowadzenie do programowania obiektowego
Wprowadzenie do programowania obiektowego
Podstawy programowania obiektowego
Język C++
Język C++ Podstawy i języki programowania
Podstawy i języki programowania
Copyright © Roman Simiński Strona :15
Podejście obiektowe na prostym przykładzie Realizacja obiektowa ― najprostsza wersja
Runner R;
R.x = 40; // Ustal pozycj i wygl d Runneraę ą
R.y = 12; R.code = '*'; clearScreen(); R.show(); do {
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;
} }
Wprowadzenie do programowania obiektowego
Wprowadzenie do programowania obiektowego
Podstawy programowania obiektowego
Język C++
Język C++ Podstawy i języki programowania
Podstawy i języki programowania
Copyright © Roman Simiński Strona :16
Podejście obiektowe na prostym przykładzie Anatomia Runnera — pola
class Runner { public : int x, y, code; void show(); void hide(); void moveUp(); void moveDown(); void moveLeft(); void moveRight(); };
Runner to nazwa klasy obiektów. Wszystkie obiekty klasy Runner będą posiadały te same cechy i umiejętności.
To, co obiekt wie o sobie i swoim otoczeniu pamiętane jest w jego polach. Polami w klasie Runner są x i y — opisujące ekranową pozycję obiektu, oraz code — opisujące wygląd obiektu.
Wszystkie elementy zadeklarowane w sekcji
public są dostępne dla tych, którzy chcą używać
Wprowadzenie do programowania obiektowego
Wprowadzenie do programowania obiektowego
Podstawy programowania obiektowego
Język C++
Język C++ Podstawy i języki programowania
Podstawy i języki programowania
Copyright © Roman Simiński Strona :17
Podejście obiektowe na prostym przykładzie Anatomia Runnera — funkcje składowe
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;
}
Do obiektów można wysyłać komunikaty. Ich nazwy to odpowiednio:
● moveUp, ● moveDown, ● moveLeft, ● moveRight, ● show, ● hide.
Wprowadzenie do programowania obiektowego
Wprowadzenie do programowania obiektowego
Podstawy programowania obiektowego
Język C++
Język C++ Podstawy i języki programowania
Podstawy i języki programowania
Copyright © Roman Simiński Strona :18
Podejście obiektowe na prostym przykładzie Anatomia Runnera — funkcje składowe
Obiekt odpowiada na komunikaty wywołując metody. Metody są implementowane poprzez funkcje składowe, 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(); };
Wprowadzenie do programowania obiektowego
Wprowadzenie do programowania obiektowego
Podstawy programowania obiektowego
Język C++
Język C++ Podstawy i języki programowania
Podstawy i języki programowania
Copyright © Roman Simiński Strona :19
Podejście obiektowe na prostym przykładzie Anatomia Runnera — funkcje składowe
Właściwe definicje (zawierające konkretny kod) umieszczone są zwykle (choć niekoniecznie) poniżej definicji klasy Runner. Nazwa każdej metody jest
kwalifikowana nazwą klasy. void Runner::show() { writeCharXY( x, y, code ); } void Runner::hide() { writeCharXY( x, y, ' ' ); }
Wprowadzenie do programowania obiektowego
Wprowadzenie do programowania obiektowego
Podstawy programowania obiektowego
Język C++
Język C++ Podstawy i języki programowania
Podstawy i języki programowania
Copyright © Roman Simiński Strona :20
Podejście obiektowe na prostym przykładzie Anatomia Runnera — funkcje składowe
void 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ładowej, dostępne są wszystkie pola obiektu i inne funkcje składowe.
Wprowadzenie do programowania obiektowego
Wprowadzenie do programowania obiektowego
Podstawy programowania obiektowego
Język C++
Język C++ Podstawy i języki programowania
Podstawy i języki programowania
Copyright © Roman Simiński Strona :21
Pojęcie obiektu
Obiekt jest abstrakcją pewnego konkretnego bytu ze świata rzeczywistego,
reprezentujący rzecz (obiekt fizyczny), pojęcie (obiekt konceptualny) lub pewny byt
programistyczny nie mający swojego odpowiednika w rzeczywistości.
Istnieje wiele, różniących się od siebie definicji pojęcia obiekt. Tutaj przyjmiemy następującą definicję:
Pojęcie klasy
Klasa określa właściwości i możliwości każdego obiektu do niej należącego, definiuje
zatem to, jak obiekt jest zbudowany i co potrafi.
W szczególności klasa zawiera specyfikację danych i metod, informację o typie i reprezentacji pól, implementację metod, informacje dotyczące relacji i powiązań z innymi klasami.
Istnieje wiele, różniących się od siebie definicji pojęcia klasa. Tutaj przyjmiemy następującą definicję:
Wprowadzenie do programowania obiektowego
Wprowadzenie do programowania obiektowego
Podstawy programowania obiektowego
Język C++
Język C++ Podstawy i języki programowania
Podstawy i języki programowania
Copyright © Roman Simiński Strona :22
Trzy podstawowe cechy obiektu
Tożsamość (ang. identity).
Stan (ang. state).
Wprowadzenie do programowania obiektowego
Wprowadzenie do programowania obiektowego
Podstawy programowania obiektowego
Język C++
Język C++ Podstawy i języki programowania
Podstawy i języki programowania
Copyright © Roman Simiński Strona :23
Tożsamość
Tożsamość (ang. identity), pozwala na odróżnienie danego obiektu od każdego innego.
Programista przypisuje obiektowi unikatową nazwę lub włącza go do identyfikowalnej kolekcji obiektów, lub odwołuje się do obiektu posługując się jego adresem w pamięci.
Wprowadzenie do programowania obiektowego
Wprowadzenie do programowania obiektowego
Podstawy programowania obiektowego
Język C++
Język C++ Podstawy i języki programowania
Podstawy i języki programowania
Copyright © Roman Simiński Strona :24
Stan
Stan (ang. state), opisuje to co obiekt w danym momencie powinien wiedzieć aby sprawnie 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ładowymi danych.
Wprowadzenie do programowania obiektowego
Wprowadzenie do programowania obiektowego
Podstawy programowania obiektowego
Język C++
Język C++ Podstawy i języki programowania
Podstawy i języki programowania
Copyright © Roman Simiński Strona :25
Zdolność do działania
Zdolność do 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ładowymi (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 zostanie o to poproszony.
Wprowadzenie do programowania obiektowego
Wprowadzenie do programowania obiektowego
Podstawy programowania obiektowego
Język C++
Język C++ Podstawy i języki programowania
Podstawy i języki programowania
Copyright © Roman Simiński Strona :26
Najważniejsze cechy podejścia obiektowego
Abstrakcja (ang. abstraction).
Hermetyzacja (ang. encapsulation).
Dziedziczenie (ang. inheritance).
Wprowadzenie do programowania obiektowego
Wprowadzenie do programowania obiektowego
Podstawy programowania obiektowego
Język C++
Język C++ Podstawy i języki programowania
Podstawy i języki programowania
Copyright © Roman Simiński Strona :27
Abstrakcja
Podejście obiektowe eksponuje rolę obiektu – jest on abstrakcją pewnego
konkretnego bytu ze świata rzeczywistego, reprezentującego rzecz (obiekt fizyczny) lub pojęcie (obiekt konceptualny).
Abstrakcja pozwala postrzegać modelowaną rzeczywistość bez wnikania w jej wewnętrzną strukturę.
Elementy, które w danym momencie są nieistotne mogą zostać ukryte lub nawet pominięte.
Obiekty rzeczywiste
Abstrakcyjny model analityczny
Wprowadzenie do programowania obiektowego
Wprowadzenie do programowania obiektowego
Podstawy programowania obiektowego
Język C++
Język C++ Podstawy i języki programowania
Podstawy i języki programowania
Copyright © Roman Simiński Strona :28
Abstrakcja, cd. ... Obiekty rzeczywiste Abstrakcyjny model analityczny Marka Model Rok produkcji Nr rejestracyjny Kolor nadwozia Nr silnika . . . C ec h y
Podaj średnie spalanie Podaj przebieg . . . A kc je Reprezentacja obiektowa
Wprowadzenie do programowania obiektowego
Wprowadzenie do programowania obiektowego
Podstawy programowania obiektowego
Język C++
Język C++ Podstawy i języki programowania
Podstawy i języki programowania
Copyright © Roman Simiński Strona :29
Abstrakcja, cd. ...
Obiekt jest jest dostawcą 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(); };
Wprowadzenie do programowania obiektowego
Wprowadzenie do programowania obiektowego
Podstawy programowania obiektowego
Język C++
Język C++ Podstawy i języki programowania
Podstawy i języki programowania
Copyright © Roman Simiński Strona :30
Hermetyzacja
Hermetyzacja pozwala obiektom kontrolować poprawność swojej reprezentacji zewnętrznej.
Osiąga się to poprzez ukrycie (ang. information hiding) pól obiektu przed użytkownikiem zewnętrznym.
Zastosowanie hermetyzacji wymusza udostępnianie użytkownikowi publicznego interfejsu składającego się metod, które mają publiczny modyfikator widoczności. Ukryte części obiektu są niedostępne na zewnątrz i mogą być tylko wykorzystane przez metody dostępowe.
BigArray addItem getItem findItem sort . . . Ukryta reprezentacja fizyczna Składowe publiczne Składowe prywatne
Wprowadzenie do programowania obiektowego
Wprowadzenie do programowania obiektowego
Podstawy programowania obiektowego
Język C++
Język C++ Podstawy i języki programowania
Podstawy i języki programowania
Copyright © Roman Simiński Strona :31
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, ale również pól i sposobów ich reprezentacji.
Runner R; R.x = 40; R.y = 12; R.code = '*'; . . . cout << "X:" << R.x << endl; cout << "Y:" << R.y << endl; cout << "Kod:" << R.code << endl;
Runner R;
R.setX( 40 );
R.setY( 12 ); R.setCode( '*' ); . . .
cout << "X:" << R.getX() << endl; cout << "Y:" << R.getY() << endl; cout << "Kod:" << R.getCode() << endl;
Wprowadzenie do programowania obiektowego
Wprowadzenie do programowania obiektowego
Podstawy programowania obiektowego
Język C++
Język C++ Podstawy i języki programowania
Podstawy i języki programowania
Copyright © Roman Simiński Strona :32
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; };
Wprowadzenie do programowania obiektowego
Wprowadzenie do programowania obiektowego
Podstawy programowania obiektowego
Język C++
Język C++ Podstawy i języki programowania
Podstawy i języki programowania
Copyright © Roman Simiński Strona :33
Hermetyzacja, cd. ...
Hermetyzacja pól pozwala na kontrolowanie poprawności danych przekazywanych obiektowi. Runner R; R.code = '*'; . . . R.x = -400; R.y = 1200;
?
R.show();Błędna pozycja ekranowa, bezpośredni dostęp do pól obiektu
Wprowadzenie do programowania obiektowego
Wprowadzenie do programowania obiektowego
Podstawy programowania obiektowego
Język C++
Język C++ Podstawy i języki programowania
Podstawy i języki programowania
Copyright © Roman Simiński Strona :34
Hermetyzacja, cd. ... Runner R; R.setCode( '*' ); . . . R.setX( -400 ); R.setY( 1200 ); R.show();
Błędna pozycja ekranowa, dostęp do pól obiektu za pośrednictwem metod
void Runner::setX( int newX ) {
if( isXOnScreen( newX ) ) x = newX;
else
x = 1; // Warto ć domy lnaś ś }
void Runner::setY( int newY ) {
if( isYOnScreen( newY ) ) y = newY;
else
y = 1; // Warto ć domy lnaś ś }
Wprowadzenie do programowania obiektowego
Wprowadzenie do programowania obiektowego
Podstawy programowania obiektowego
Język C++
Język C++ Podstawy i języki programowania
Podstawy i języki programowania
Copyright © Roman Simiński Strona :35
Na zakończenie ...
Dziedziczenie (ang. inheritance).
Polimorfizm (ang. polymorphism)
Osobny wykład