PO W3 II ZIN


Wykład 3
Koncepcja obiektowości
Pojęcie klasy
Własności klasy
Obiekty
Paradygmat programowania obiektowego
Hermetyzacja
Dziedziczenie
Polimorfizm
Programowanie obiektowe
1
Koncepcja obiektowości
Obiektowość - cecha naturalnego postrzegania świata - analiza
otoczenia poprzez relacje między obserwatorem a otaczającymi
obiektami;
Świat jest zło\ony - składa się z wielu funkcjonujących obiektów,
pozostających w pewnych relacjach względem siebie;
Obiektami są ludzie, państwa, domy, samochody, ale tak\e płace,
zadania, decyzje itp.
Koncepcja obiektowości jest podstawą obiektowej analizy,
projektowania i programowania systemów;
Programowanie obiektowe
2
Koncepcja obiektowości
Pojęcie jest wyobra\eniem lub oznaczeniem, które stosujemy do
rzeczy lub wyobra\eń abstrakcyjnych.
Termin pojęcie zawiera intensję (treść pojęcia) i ekstensję (zakres
pojęcia).
Intensja jest pełną definicją pojęcia i testu określającego, czy
dane pojęcie odnosi się do danej rzeczy lub wyobra\enia
abstrakcyjnego.
Ekstensja jest zbiorem wszystkich rzeczy i wyobra\eń
abstrakcyjnych do których stosuje się dane pojęcie.
Trójka pojęciowa = (nazwa, intensja, ekstensja)
Obiektem jest coś, do czego da się zastosować jakieś pojęcie.
Obiekt jest egzemplarzem pojęcia.
Programowanie obiektowe
3
Koncepcja obiektowości
Obiekt:
podstawowa jednostka konstrukcyjna programu;
konkretny lub abstrakcyjny byt (wyró\nialny w modelowanej
rzeczywistości), posiadający nazwę, określone granice, atrybuty
i inne własności;
charakteryzują go:
Atrybuty  reprezentują stan obiektu i związki z innymi obiektami,
np. kolor, rozmiar, przynale\ność&
Procedury (usługi, metody)  operacje, które obiekt mo\e
wykonywać, np. przemieszczanie, całkowanie, wyznaczanie stanu
konta&
Zasady  niezmiennicze reguły określające widzialność obiektu
i sposób powiązania z innymi obiektami.
Programowanie obiektowe
4
Koncepcja obiektowości
Klasa:
zbiór obiektów, mających wspólne atrybuty i metody;
wzorzec dla konkretnych egzemplarzy klasy  obiektów;
intensja typu obiektowego - definicja pojęcia, pewna
koncepcja, idea stosująca się do określonej grupy obiektów,
np. środek umo\liwiający transport ludzi i rzeczy;
ekstensja typu obiektowego - zbiór konkretnych typów (klas,
pojęć), np. pojazdy lądowe, statki powietrzne i wodne;
wyra\enie językowe specyfikujące budowę obiektów,
dozwolone operacje na obiektach, ograniczenia dostępu,
wyjątki, itd.
Programowanie obiektowe
5
Pojęcie klasy
Zazwyczaj wiele obiektów ma taki sam zbiór cech, wskazane
jest, aby te cechy zdefiniować raz, a potem wielokrotnie
wykorzystywać
klasa (słownik PWN)  kategoria przedmiotów lub zjawisk
wyró\nionych na podstawie wspólnych cech
Programowanie obiektowe
6
Klasa w programowaniu
Klasa w programowaniu  uogólniony typ zdefiniowany przez
u\ytkownika języka
Słu\y do definiowania obiektów (uogólnionych zmiennych)
Dostarcza wielu nowych mo\liwości (o czym pózniej)
Pojedyncza klasa powinna jasno reprezentować określone
pojęcie, dla którego nie istnieje (jeszcze) odpowiedni typ
Programowanie obiektowe
7
Przykład  osoba strukturalnie
struct osoba
{
int wiek;
char imię[20], nazwisko[30];
};
void wczytaj_osobe(osoba *o);
void ustaw(osoba *o, int wiek, char *imię, char *nazwisko);
void wypisz(osoba *o);
Wady:
brak kontroli dostępu do pól struktury
programista musi pamiętać, których funkcji u\ywać na rzecz
których struktur
Programowanie obiektowe
8
Przykład  osoba obiektowo
class osoba
{
int wiek; // składowe klasy  zmienne klasowe
char imię[20], nazwisko[30];
public:
void wczytaj(); // składowe klasy  metody klasy
void ustaw(int wiek, char *p_imię, char *p_nazwisko);
void wypisz();
}; // średnik kończący deklarację klasy
Korzyść
dane i metody razem
dostęp do danych: poprzez funkcje publiczne
Programowanie obiektowe
9
Deklaracja klasy
class nazwa_klasy
{
prywatne dane i funkcje;
określenie_dostępu: // public, protected lub private
dane i funkcje;
określenie_dostępu: // public, protected lub private
dane i funkcje;
...
określenie_dostępu: // public, protected lub private
dane i funkcje;
} lista nazw obiektów;
Programowanie obiektowe
10
Deklaracja klasy
Deklaracja klasy
class Klasa
{
public:
Klasa(); // Konstruktor domyślny klasy  bezparametrowy
~Klasa(); // Destruktor klasy
// składowe dostępne dla innych klas
private:
// składowe dostępne tylko dla metod tej klasy
protected:
// składowe dostępne dla składowych klas potomnych
};
Uwagi:
Domniemanie: wszystkie składowe klasy są prywatne
Nie ma ograniczeń na liczbę określeń dostępu w definicji klasy
Programowanie obiektowe
11
Deklaracja klasy - przykład
#define SIZE 100
class stack
{
int stck[SIZE];
int tos;
public:
void init();
void push(int i);
int pop();
};
Programowanie obiektowe
12
Deklaracja klasy - przykład
void stack::init()
{
tos=0;
}
void stack::push(int i)
{
if (tos==SIZE) {
cout <<  Stos jest pełny.\n ;
}
stck[tos]=i;
tos++;
}
Programowanie obiektowe
13
Deklaracja klasy - przykład
int stack::pop()
{
if (tos==0) {
cout <<  Stos jest pusty.\n ;
return 0;
}
tos--;
return stck[tos];
}
Programowanie obiektowe
14
Deklaracja klasy - przykład
int main()
{
stack stos1, stos2; //utworzenie dwóch obiektów typu stack
stos1.init(); stos2.init();
stos1.push(1); stos2.push(2);
stos1.push(3); stos2.push(4);
cout << stos1.pop() <<   ;
cout << stos1.pop() <<   ;
cout << stos2.pop() <<   ;
cout << stos2.pop() <<   ;
return 0;
Program 3.1
}
Wynik działania programu: 3 1 4 2
Programowanie obiektowe
15
Wprowadzenie do języka C++
Operatory dostępu do składowych i zakresu klasy
sposób dostępu zgodny z dostępem do  struct ;
operator dostępu  kropka :  .  dotyczy:
składowych obiektów,
funkcji (metod) obiektów;
np. obiekt.pole;
obiekt.metoda();
operator dostępu  strzałka :  ->  dotyczy:
wskazników;
np. wsk_na_obiekt -> metoda();
operator zakresu  :: 
klasa::pole;
klasa::metoda();
Programowanie obiektowe
16
Wprowadzenie do języka C++
Definicja funkcji (metody) klasy
Definicja składowej wewnątrz deklaracji klasy:
class Moja_Klasa
{ public:
TypZwrotnejWartości NazwaMetodySkładowej()
{& };
};
Definicja funkcji (metody) poza deklaracją klasy:
TypZwrotnejWartości Moja_Klasa :: NazwaMetodySkładowej( )
{
&
};
Operator zakresu  :: wią\e metodę z klasą;
Ró\ne klasy mogą mieć metody o tej samej nazwie;
Programowanie obiektowe
17
Wprowadzenie do języka C++
Definicja składowych klasy
Przykład poza deklaracją klasy:
void osoba::ustaw(int wiek, char *p_imie, char *p_nazwisko)
{
operator zakresu w nagłówku
osoba::wiek = wiek;
strcpy(imie, p_imie);
strcpy(nazwisko, p_nazwisko);
};
tu te\ operator zakresu,
bo  wiek jest przysłonięty
Programowanie obiektowe
18
Obiekt  uogólniona struktura
Deklarujemy
class osoba ja, Ty;
osoba szef; // w deklaracji/definicji obiektu mo\na
// pomijać  class ,  struct i  union
U\ywamy
szef.wczytaj();
szef.wypisz();
Programowanie obiektowe
19
Jak definiować metody klasy?
Wewnątrz deklaracji klasy
class osoba
{
&
inline void wczytaj()
{
cin>>wiek>>imie>>nazwisko;
} // tu nie musi być średnika
&
};
Taka funkcja jest funkcją inline (wplataną)
Specyfikator inline mo\e być (tutaj) pominięty
Programowanie obiektowe
20
Jak definiować metody klasy?
Poza klasą trzeba u\yć operatora zakresu w nagłówku
void osoba::ustaw(int wiek, char *p_imię, char *p_nazwisko)
{
osoba::wiek=wiek; // tu te\ operator zakresu bo wiek przesłonięty
strcpy(imię, p_imię);
strcpy(nazwisko, p_nazwisko);
}
Metoda ma być inline?
inline void osoba::wypisz()
{
cout<<"wiek: "<" nazwisko: "<}
Programowanie obiektowe
21
Jak definiować metody klasy?
Metody (funkcje) mogą mieć argumenty domyślne i być przecią\ane
void znajdz(int wiek, char *pi="Jan", char *pn="Kowalski");
szef. znajdz(50,  Adam ,  Nowak );
szef. znajdz(50,  Adam );
szef. znajdz(50);
// ale nie: szef. znajdz();
Dlaczego?
Programowanie obiektowe
22
Jak definiować metody klasy?
Metody i zmienne zadeklarowane wewnątrz klasy są widoczne od
początku definicji klasy oraz wewnątrz ciał funkcji zadeklarowanych
wewnątrz klasy
class A
{
public:
void wczytaj()
{
cin>>i; // deklaracja  i jest wewnątrz klasy
wypisz(); //  wypisz jest wewnątrz klasy
}
int i;
void wypisz();
};
Programowanie obiektowe
23
Paradygmat programowania obiektowego
Paradygmat (encyklopedia PWN)  ogólnie uznane
osiągnięcie naukowe (teoria naukowa); dostarcza modelowych
rozwiązań w danej dziedzinie nauki
Paradygmaty programowania
programowanie strukturalne
programowanie obiektowe
Programowanie obiektowe
24
Paradygmat programowania obiektowego
Programowanie obiektowe:
metoda rozwiązywania problemów programistycznych
z wykorzystaniem obiektów;
sposób interpretacji problemu jako zbioru obiektów
i relacji pomiędzy nimi
Programowanie obiektowe
25
Paradygmaty programowania obiektowego
Hermetyzacja
Dziedziczenie
Polimorfizm
Programowanie obiektowe
26
Hermetyzacja
Hermetyzacja (ang. encapsulation) oznacza połączenie danych i instrukcji
programu w jednostkę programową, zwaną obiektem
Zamknięcie pewnego zestawu bytów programistycznych w  kapsułę o dobrze
określonych granicach
Informacja o wewnętrznej budowie obiektu nie jest dostępna poza jego
definicją  oddzielenie specyfikacji obiektu (tak\e klasy) od implementacji
Podstawową zaletą hermetyzacji jest mo\liwość zabezpieczenia danych przed
równoczesnym dostępem ze strony ró\nych fragmentów kodu programowego.
W tym celu wszystkie dane (pola w obiekcie) i zapisy instrukcji (metody w
obiekcie) dzieli się na ogólnodostępne (interfejs obiektowy) i wewnętrzne
(implementacja obiektu).
Dostęp do pól i metod wewnętrznych jest mo\liwy tylko za pośrednictwem
"łącza obiektowego" - pól i metod ogólnodostępnych.
Wybrane pola i metody mo\na ukryć przed określonymi (tak\e wszystkimi)
obiektami zewnętrznymi.
Hermetyzacja ma ogromne znaczenie dla przenośności programów i
optymalizowania nakładów potrzebnych na ich modyfikacje.
Wpływa tak\e dodatnio na osiąganie niezawodności w projektach
programistycznych.
Programowanie obiektowe
27
Dziedziczenie
Dziedziczenie (ang. inheritance) oznacza związek pomiędzy klasami
obiektów, określający przekazywanie cech (pól i metod) z klasy do jej
podklas;
np. obiekt klasy Samochód dziedziczy wszystkie własności (atrybuty i
metody) określone w klasie Pojazd;
Mechanizm dziedziczenia słu\y w językach obiektowych do odwzorowania
występujących często w naturze powiązań typu generalizacja 
specjalizacja (uszczegółowienie).
Umo\liwia programiście definiowanie potomków istniejących obiektów.
Ka\dy potomek dziedziczy przy tym (wszystkie lub wybrane) pola i metody
obiektu bazowego, lecz dodatkowo uzyskuje pewne pola i własności
unikatowe, nadające mu nowy charakter.
Typ takiego obiektu potomnego mo\e stać się z kolei typem bazowym do
zdefiniowania kolejnego typu potomnego.
Dziedziczenie jest podstawowym mechanizmem sprzyjającym ponownemu
u\yciu i rozszerzaniu klas;
Programowanie obiektowe
28
Polimorfizm
Polimorfizm nazw funkcji
mo\liwość istnienia wielu funkcji o tej samej nazwie, powiązana
z mo\liwością wyboru konkretnej funkcji podczas wykonania
programu;
uto\samiany jest z przecią\aniem funkcji lub operatorów
(overloading);
np. metoda Jedz inaczej będzie się zachowywała dla
Samochodu a inaczej dla Wozu Bojowego;
zasięg polimorfizmu ograniczony jest do poddrzewa hierarchii
dziedziczenia;
Programowanie obiektowe
29
Polimorfizm
Polimorfizm umo\liwia tworzenie w klasach potomnych tzw. metod
wirtualnych, nazywających się identycznie jak w typach bazowych,
lecz ró\niących się od swych odpowiedników pod względem
znaczeniowym.
Polimorfizm, stanowiący uzupełnienie dziedziczenia sprawia, \e
mo\liwe jest pisanie kodu, który w przyszłości będzie
wykorzystywany w warunkach nie dających się jeszcze przewidzieć.
Ka\dy obiektowy język programowania definiuje pewne ograniczenia
składniowe związane z u\ywaniem metod wirtualnych.
We wszystkich wypadkach dotyczą one sygnatury metody
(identyczna liczba parametrów formalnych, zgodność typów
odpowiadających sobie parametrów), a często tak\e typu wyniku
funkcji.
Programowanie obiektowe
30
Wielokrotne stosowanie nazw - polimorfizm
Opisane postępowanie nazywa się przecią\aniem nazwy.
Funkcje noszące takie same nazwy nazywamy funkcjami przecią\onymi
Tworzenie funkcji przecią\onych nazywamy przecią\aniem funkcji
Mo\emy nazwy tej samej funkcji u\ywać w wielu miejscach w programie
bez obawy o błędne działanie tego programu.
Programowanie obiektowe
31
Koncepcja obiektowości
klasy
Pojazd Broń
Koła Rodzaj amunicji
Kolor Szybkostrzelność
Jedz Strzelaj
Samochód Wóz bojowy
Koła Koła
metody
Kolor Kolor
dziedziczone
Rodzaj paliwa Rodzaj amunicji
Jedz
Szybkostrzelność
Tankuj
Jedz
Strzelaj
nowa
metoda podklasy
Programowanie obiektowe
32
Języki programowania - klasyfikacja
Stricte obiektowe języki programowania (OPL)  podstawową
jednostką syntaktyczną jest klasa obiektów:
Simula 67,
Smalltalk.
Języki programowania zorientowane obiektowo (OOPL) -
podstawową jednostką syntaktyczną jest moduł (program, unit,
package), w którym umieszczane są definicje klas, obiektów:
C++,
Java,
Borland Pascal (Delphi),
TopSpeed Modula2,
ModSim II,
Visual C++,
Visual Basic.
Programowanie obiektowe
33
Zastosowanie koncepcji obiektowości
Języki programowania (Simula, Smalltalk, C++, Java, Eiffel, Beta,
OO-COBOL, Ada, Object Pascal, Visual Basic i inne)
języki te wprowadzają nowe pojęcia, bezpośrednio odnoszące
się do obiektowości, tzn. klasy, dziedziczenie, hermetyzacja i
polimorfizm;
trudności w projektowaniu i wypromowaniu nowego języka
programowania skutkują tendencją do rozszerzania
klasycznych języków programowania w kierunku obiektowości;
Programowanie obiektowe
34
Ewolucja języków programowania
1950 1960 1970 1980 1990
2000
PL/I(66)
Ada(95)
Ada(83)
Cobol(58)
Eiffel (86)
Pascal(70)
Java(96)
Algol(60)
C(72)
C++(89)
Fortran(54)
Simula(67) Smalltalk(80)
Basic(66)
Programowanie obiektowe
35
A S S E M B L Y
Programowanie obiektowe
36


Wyszukiwarka

Podobne podstrony:
PO W3 II ZIN
PO W1 2 II ZIN
PO W7 8 II ZIN
PO W4 II ZIN
PO W3 IV ZIN
PO W 5 6 II ZIN
PO W4 IV ZIN
Matematyka krok po kroku II
PO W2 IV ZIN
informatyka II w3
(Ekumenizm przed i po Soborze Watykańskim II)
02 Stalinizacja życia w Polsce po II Wojnie Światowej
Zimna wojna, konferencje, sprawa niemiec po II wojnie swiatowej
Slowo Abp A Dzięgi po Beatyfikacji JP II
Świat po II Wojnie Światowej, prezentacja

więcej podobnych podstron