Wprowadzenie do programowanie obiektowego w języku C++



Podobne dokumenty
Programowanie obiektowe w języku C++

Podstawy Programowania Obiektowego

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

Podstawy programowania w języku C i C++

Podstawy programowania w języku C++

TEMAT : KLASY DZIEDZICZENIE

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Wprowadzenie do programowanie obiektowego w języku C++

Laboratorium 1 - Programowanie proceduralne i obiektowe

Technologie obiektowe

Programowanie w języku C++

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

class Student Deklaracja klasy Osoba: Deklaracja klasy Student:

Podstawy programowania w języku C++

Technologie i usługi internetowe cz. 2

Podstawy programowania w języku C++

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

Szablony funkcji i szablony klas

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

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

Podstawy programowania w języku C++

Wprowadzenie do programowanie obiektowego w języku C++

Do czego służą klasy?

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

Wstęp do programowania obiektowego. Wykład 2

Problem Próby rozwiązania Maszyna stanów Inne zastosowania Podsumowanie. Maszyny stanów. Programowanie gier bez Unity, cz. 3.

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

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

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

Programowanie w języku C++

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

Programowanie obiektowe w języku C++

Wprowadzenie do obiektowości

Diagramy klas. dr Jarosław Skaruz

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

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

Mechanizm dziedziczenia

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

Wykład 5: Klasy cz. 3

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

KLASY cz.1. Dorota Pylak

Materiały do zajęć VII

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

Podstawy programowania

Programowanie obiektowe - 1.

Wstęp do Programowania 2

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

Podstawy programowania w języku C++

Mechanizm dziedziczenia

Język programowania. Andrzej Bobyk

Do czego służą klasy?

Różne właściwości. Różne właściwości. Różne właściwości. C++ - klasy. C++ - klasy C++ - KLASY

Klasy i obiekty. Programowanie zorientowane obiektowo. Case study: Filmoteka Case study: Klasa Akademik

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

1 Podstawy c++ w pigułce.

Klasy abstrakcyjne, interfejsy i polimorfizm

Rozdział 4 KLASY, OBIEKTY, METODY

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

Definiowanie własnych klas

Ćwiczenia podstawowe, zestaw 5, część 1

Podstawy programowania w języku C++

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

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

1 Definiowanie prostych klas

Deklaracja struktury w C++

Wykład :37 PP2_W9

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

Programowanie obiektowe

Listy powiązane zorientowane obiektowo

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

Programowanie II. Lista 3. Modyfikatory dostępu plik TKLientBanku.h

1 Podstawy c++ w pigułce.

Funkcje. Spotkanie 5. Tworzenie i używanie funkcji. Przekazywanie argumentów do funkcji. Domyślne wartości argumentów

Paweł Kurzawa, Delfina Kongo

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

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

Modelowanie obiektowe

Wykład 8: klasy cz. 4

Podstawy algorytmiki i programowania - wykład 4 C-struktury

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady

Podstawy programowania

Języki C i C++ Wykład: 2. Wstęp Instrukcje sterujące. dr Artur Bartoszewski - Języki C i C++, sem. 1I- WYKŁAD

Wstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this

Podstawy programowania. Wykład: 5. Instrukcje sterujące c.d. Stałe, Typy zmiennych c.d. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Modelowanie i Programowanie Obiektowe

Projektowanie obiektowe

Ćwiczenie 7 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz

Programowanie, część I

Informatyka II. Laboratorium Aplikacja okienkowa

C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie C++ - DZIEDZICZENIE.

Projektowanie obiektowe. Roman Simiński Polimorfizm

Podstawy Programowania Programowanie Obiektowe

Warunek wielokrotnego wyboru switch... case

Wprowadzenie do obiektowości

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

Podstawy Języka Java

XII. Warunek wielokrotnego wyboru switch... case

Programowanie obiektowe

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

kodowanienaekranie.pl

Transkrypt:

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

Od programowanie proceduralnego do obiektowego Podejście obiektowe na prostym przykładzie Problem Napisać program wyświetlający na pustym ekranie tekstowym zadany znak (np * ), pozwalający na przesuwanie tego znaku przy użyciu klawiszy sterowania kursorem X 1 2 3 4 5 1 2 3 4 5 7980 Y * 24 25 Copyright Roman Simiński Strona : 2

Od programowanie proceduralnego do obiektowego Podejście obiektowe na prostym przykładzie Analiza 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 X Y 1 2 3 4 5 24 25 1 2 3 4 5 Gdy klawisz LEFT: jeżeli x > 1 to x = x - 1 Gdy klawisz DOWN: jeżeli y < 25 to y = y + 1 * 7980 Gdy klawisz UP: jeżeli y > 1 to y = y - 1 Gdy klawisz RIGHT: jeżeli x < 80 to x = x + 1 Copyright Roman Simiński Strona : 3

Od programowanie proceduralnego do obiektowego Podejście obiektowe na prostym przykładzie Realizacja proceduralna założenia wstępne Programista ma do 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ących kursorem 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 Copyright Roman Simiński Strona : 4

Od programowanie proceduralnego do obiektowego Podejście obiektowe na prostym przykładzie Realizacja proceduralna obsługa klawiatury Znaki sterujące na starszym bajcie, zwykłe na młodszym (notacja szesnastkowa): enum KEY_CODES KEY_UP = 0x4800, KEY_DOWN = 0x5000, KEY_LEFT = 0x4b00, KEY_RIGHT = 0x4d00, KEY_ESC = 0x001b }; Przykładowa implementacja funkcji getkey (biblioteka conio firmy Borland): int getkey( void ) int key = getch(); return ( key == 0 )? getch() << 8 : key; } Copyright Roman Simiński Strona : 5

Od programowanie proceduralnego do obiektowego Podejście obiektowe na prostym przykładzie Realizacja proceduralna obsługa ekranu Wersje wykorzystujące bibliotekę conio (kompilatory firmy Borland) void clearscreen( void ) clrscr(); } void writecharxy( int x, int y, char c ) gotoxy( x, y ); putch( c ); } Copyright Roman Simiński Strona : 6

Od programowanie proceduralnego do obiektowego 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; } } while( key!= KEY_ESC ); Copyright Roman Simiński Strona : 7

Od programowanie proceduralnego do obiektowego 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 Copyright Roman Simiński Strona : 8

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! Copyright Roman Simiński Strona : 9

Wtorek 16 maja 2006 Redaktor Prowadzący Roman Simiński Bohaterem dzisiejszego wywiadu jest ruchomy punkt ekranowy Dzięki temu wyjątkowemu wywiadowi poznamy unikatowe fakty z życia przedstawicieli tego gatunku Fakty IT gazeta c o d z i e n n a 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? 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ć

Wtorek, 16 maja 2006 Jak to możesz mi podać? Tajemnice życia Runnerów ujawnione prawie wszystkie intymne szczegóły, tylko w dodatku Fakty IT gazeta c o d z i e n n a 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 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ć 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ł :( Strona 2 Wywiady

Wtorek, 16 maja 2006 Tajemnice życia Runnerów ujawnione prawie wszystkie intymne szczegóły, tylko w dodatku Fakty IT gazeta c o d z i e n n a 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: 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ść 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 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

Wtorek, 16 maja 2006 Tajemnice życia Runnerów ujawnione prawie wszystkie intymne szczegóły, tylko w dodatku Fakty IT gazeta c o d z i e n n a 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: 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: int steps; Rx = 1; // Powiedz mi, ską d mam wystartować Ry = 1; Rshow(); for( steps = 5; steps > 0 ; steps-- ) RmoveRight(); // Id ę w prawo for( steps = 5; steps > 0 ; steps-- ) RmoveDown(); // Id ę w dół for( steps = 5; steps > 0 ; steps-- ) RmoveLeft(); // Id ę w lewo for( steps = 5; steps > 0 ; steps-- ) RmoveUp(); // Id ę w gór ę Strona 4 Wywiady

Wtorek, 16 maja 2006 Tajemnice życia Runnerów ujawnione prawie wszystkie intymne szczegóły, tylko w dodatku Fakty IT 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ę Strona 5 Wywiady

Podejście obiektowe na prostym przykładzie Realizacja obiektowa najprostsza wersja Runner R; Rx = 40; // Ustal pozycj ę i wygląd Runnera Ry = 12; Rcode = '*'; clearscreen(); Rshow(); do switch( key = getkey() ) case KEY_UP : RmoveUp(); break; case KEY_DOWN : RmoveDown(); break; case KEY_LEFT : RmoveLeft(); break; case KEY_RIGHT : RmoveRight(); break; } } while( key!= KEY_ESC ); Copyright Roman Simiński Strona : 15

Podejście obiektowe na prostym przykładzie Anatomia Runnera pola 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 class Runner public : int x, y, code; Wszystkie elementy zadeklarowane w sekcji public są dostę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

Podejście obiektowe na prostym przykładzie Anatomia Runnera funkcje składowe Do obiektów można wysyłać komunikaty Ich nazwy to odpowiednio: moveup, movedown, moveleft, moveright, show, hide switch( key = getkey() ) case KEY_UP } : RmoveUp(); break; case KEY_DOWN : RmoveDown(); break; case KEY_LEFT : RmoveLeft(); break; case KEY_RIGHT : RmoveRight(); break; Copyright Roman Simiński Strona : 17

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(); Copyright Roman Simiński Strona : 18

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, ' ' ); } Copyright Roman Simiński Strona : 19

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 Copyright Roman Simiński Strona : 20

Pojęcie obiektu Istnieje wiele, różniących się od siebie definicji pojęcia obiekt Tutaj przyjmiemy następującą definicję: 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 Pojęcie klasy Istnieje wiele, różniących się od siebie definicji pojęcia klasa Tutaj przyjmiemy następującą definicję: 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 Copyright Roman Simiński Strona : 21

Trzy podstawowe cechy obiektu Tożsamość (ang identity) Stan (ang state) Działanie, zachowanie (ang behavior) Copyright Roman Simiński Strona : 22

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 Copyright Roman Simiński Strona : 23

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 Wartości atrybutów mogą się zmieniać w czasie wykonania programu Copyright Roman Simiński Strona : 24

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 Wykonanie metod zwykle zmienia stan obiektu a więc wartości jego pól Copyright Roman Simiński Strona : 25

Najważniejsze cechy podejścia obiektowego Abstrakcja (ang abstraction) Hermetyzacja (ang encapsulation) Dziedziczenie (ang inheritance) Polimorfizm (ang polymorphism) Copyright Roman Simiński Strona : 26

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 Copyright Roman Simiński Strona : 27

Abstrakcja, cd Cechy Akcje Marka Model Rok produkcji Nr rejestracyjny Kolor nadwozia Nr silnika Podaj średnie spalanie Podaj przebieg Reprezentacja obiektowa Obiekty rzeczywiste Abstrakcyjny model analityczny Copyright Roman Simiński Strona : 28

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(); Copyright Roman Simiński Strona : 29

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 Składowe publiczne Składowe prywatne BigArray additem getitem finditem sort Ukryta reprezentacja fizyczna Copyright Roman Simiński Strona : 30

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 Szczegóły widoczne Szczegóły ukryte Runner R; Rx = 40; Ry = 12; Rcode = '*'; cout << "X:" << Rx << endl; cout << "Y:" << Ry << endl; cout << "Kod:" << Rcode << endl; Runner R; RsetX( 40 ); RsetY( 12 ); RsetCode( '*' ); cout << "X:" << RgetX() << endl; cout << "Y:" << RgetY() << endl; cout << "Kod:" << RgetCode() << endl; Copyright Roman Simiński Strona : 31

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

Hermetyzacja, cd Hermetyzacja pól pozwala na kontrolowanie poprawności danych przekazywanych obiektowi Runner R; Rx = -400; Ry = 1200; Błędna pozycja ekranowa, bezpośredni dostęp do pól obiektu Rcode = '*'; Rshow();? Copyright Roman Simiński Strona : 33

Hermetyzacja, cd Runner R; RsetX( -400 ); RsetY( 1200 ); Błędna pozycja ekranowa, dostęp do pól obiektu za pośrednictwem metod RsetCode( '*' ); Rshow(); 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 } Copyright Roman Simiński Strona : 34

Na zakończenie Osobny wykład Dziedziczenie (ang inheritance) Polimorfizm (ang polymorphism) Osobny wykład Copyright Roman Simiński Strona : 35