• Nie Znaleziono Wyników

Wprowadzenie do programowania obiektowego

N/A
N/A
Protected

Academic year: 2021

Share "Wprowadzenie do programowania obiektowego"

Copied!
35
0
0

Pełen tekst

(1)

Wprowadzenie do programowanie

Wprowadzenie do programowanie

obiektowego w języku C++

obiektowego w języku C++

Podstawy programowania

obiektowego

Część pierwsza

Niniejsze 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

(2)

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 Y

(3)

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

(4)

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

(5)

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

(6)

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

(7)

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;

} }

(8)

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.

(9)

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!

(10)

Fakty IT

Niecodzienny dodatek Gazety Codziennej Wtorek 16 maja 2006 Redaktor Prowadzący Roman Simiński

gazeta

c o d z i e n n a

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

(11)

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

Jak 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

(12)

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

(13)

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

(14)

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

Czy 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

(15)

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;

} }

(16)

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ć

(17)

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.

(18)

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(); };

(19)

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, ' ' ); }

(20)

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.

(21)

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

(22)

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

(23)

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.

(24)

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.

(25)

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.

(26)

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

(27)

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

(28)

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

(29)

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(); };

(30)

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

(31)

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;

(32)

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

(33)

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

(34)

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

(35)

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

Cytaty

Powiązane dokumenty

(metoda operatorowa) jest wywoływana na rzecz obiektu, który jest po lewej od operatora (dane tego obiektu są dostępne przez this, albo bezpośrednio przez nazwę). Drugi argument

wsk jest stałym wskaźnikiem do stałej int, ani nie można modyfikować obiektu pokazywanego przez wskaźnik, ani nie można pokazać tym wskaźnikiem na inny obiekt... PRZEŁADOWYWANIE

 Standardowo wywoływany jest konstruktor bezparametrowy (lub domyślny) klasy nadrzędnej..  Aby do konstrukcji podobiektu klasy bazowej

 Przeszukiwany jest stos wywołań funkcji w poszukiwaniu takiej, która zawiera obsługę wyjątku danego typu (czyli odpowiednią instrukcję catch).. ◦ Jeżeli

• Parametrami szablonów mogą być również szablony klas, jako tak zwane szablony parametrów szablonów.. Stack&lt;int, std::vector&gt;

 OutputIterator set_union (InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result);.  OutputIterator

Model dziedziny (uzupełniony): klasy, atrybuty klas oraz

 Jednostka programu, która zadeklarowała instancję klasy (obiekt), ma dostęp do publicznych bytów tej klasy, ale tylko poprzez tę instancję.  Każda instancja klasy ma