background image

Wykład 3



Koncepcja obiektowo

ś

ci



Poj

ę

cie klasy



Własno

ś

ci klasy

Programowanie obiektowe

1



Własno

ś

ci klasy



Obiekty



Paradygmat programowania obiektowego



Hermetyzacja



Dziedziczenie



Polimorfizm

background image

Koncepcja obiektowości



Obiektowo

ść

 - cecha naturalnego postrzegania 

ś

wiata - analiza 

otoczenia poprzez analiz

ę

 wzajemnych zwi

ą

zków mi

ę

dzy 

wyst

ę

puj

ą

cymi w tym 

ś

wiecie obiektami;



Obiektami s

ą

 ludzie, pa

ń

stwa, domy, samochody, ale tak

Ŝ

e płace, 

zadania, decyzje itp.



Koncepcja obiektowo

ś

ci jest podstaw

ą

 obiektowej analizy, 

Programowanie obiektowe

2



Koncepcja obiektowo

ś

ci jest podstaw

ą

 obiektowej analizy, 

projektowania i programowania SI;  

background image

Koncepcja obiektowości



Poj

ę

cie jest terminem, który 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 

Programowanie obiektowe

3

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.

background image

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:

Programowanie obiektowe

4



charakteryzuj

ą

 go:



Atrybuty – reprezentuj

ą

 stan obiektu i zwi

ą

zki z innymi obiektami, 

np. kolor, rozmiar, przynale

Ŝ

no

ść



Funkcje (metody) – operacje, które obiekt mo

Ŝ

e wykonywa

ć

, np. 

przemieszczanie, całkowanie, wyznaczanie stanu konta itp.



Zasady u

Ŝ

ycia – niezmiennicze reguły okre

ś

laj

ą

ce zasady u

Ŝ

ycia 

(w trym tzw. widzialno

ść

 obiektu) i sposób powi

ą

zania z innymi 

obiektami.

background image

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

5

wyró

Ŝ

nionych na podstawie wspólnych cech

background image

Klasa w programowaniu



Klasa w programowaniu — uogólniony typ zdefiniowany przez 
programist

ę



Słu

Ŝ

y do definiowania typów obiektów (uogólnionych  typów 

zmiennych)

Programowanie obiektowe

6



Dostarcza wielu nowych mo

Ŝ

liwo

ś

ci (o czym pó

ź

niej)



Pojedyncza klasa powinna jasno reprezentowa

ć

 okre

ś

lone 

poj

ę

cie, dla którego nie istnieje (jeszcze) odpowiedni typ

background image

Koncepcja obiektowości



Klasa:



pozwala na utworzenie zbioru obiektów, maj

ą

cych tak samo 

okre

ś

lone dane i metody;



wzorzec dla konkretnych obiektów;



wyra

Ŝ

enie j

ę

zykowe specyfikuj

ą

ce budow

ę

 obiektów, 

dozwolone operacje na obiektach, ograniczenia dost

ę

pu, 

Programowanie obiektowe

7

dozwolone operacje na obiektach, ograniczenia dost

ę

pu, 

wyj

ą

tki itd.

background image

Przykład – osoba strukturalnie

struct osoba {

int wiek;
char imi

ę

[20], nazwisko[30];

};

void wczytaj_osobe(osoba *o);

Programowanie obiektowe

8

void wczytaj_osobe(osoba *o);
void zapisz(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

background image

Przykład – osoba obiektowo

class osoba {

int wiek;

// składowe klasy – zmienne klasy

char imi

ę

[20], nazwisko[30];

public:

void wczytaj(); 

// składowe klasy – metody klasy

void zapisz(int wiek, char *p_imi

ę

, char *p_nazwisko);

Programowanie obiektowe

9

void zapisz(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

background image

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

Programowanie obiektowe

10

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;

background image

Deklaracja klasy



Deklaracja klasy 

class Klasa {

public: 

Klasa(); 

// Konstruktor (domy

ś

lny) klasy 

~Klasa();

// Destruktor klasy

// składowe dost

ę

pne dla innych klas

private:

// składowe dost

ę

pne tylko dla metod tej klasy

Programowanie obiektowe

11

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

background image

Deklaracja klasy - przykład

#define SIZE 100
class stack {

int stck[SIZE];
int tos;

public:

Programowanie obiektowe

12

public:

void init();
void push(int i);
int pop();

};

background image

Deklaracja klasy - przykład

void stack::init() 

{

tos=0;

}

void stack::push(int i)
{

if (tos==SIZE) {

cout << „Stos jest pełny.\n”;

Programowanie obiektowe

13

cout << „Stos jest pełny.\n”;

}
stck[tos]=i;
tos++;

}

background image

Deklaracja klasy - przykład

int stack::pop()  {

if (tos==0) {

cout << „Stos jest pusty.\n”;
return 0;

}

Programowanie obiektowe

14

}
tos--;
return stck[tos];

}

background image

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

Programowanie obiektowe

15

cout << stos1.pop() << „   „;
cout << stos2.pop() << „   „;
cout << stos2.pop() << „   „;
return 0;

}



Wynik działania programu:

3   1   4   2

Program 3.1

background image

Wprowadzenie do języka C++



Operatory dost

ę

pu do składowych i zakresu klasy



sposób dost

ę

pu zgodny z dost

ę

pem do zmiennej typu 

„struct”;



operator dost

ę

pu „kropka” (.)dotyczy:



składowych obiektów,



funkcji (metod) obiektów;

Programowanie obiektowe

16



funkcji (metod) obiektów;



np. 

obiekt.pole;
obiekt.metoda();



operator dost

ę

pu „strzałka” (->) dotyczy:



wska

ź

ników;



np.

wsk_na_obiekt -> metoda();



operator zakresu „ :: ”



klasa::pole;



klasa::metoda();

background image

Wprowadzenie do języka C++

Definicja funkcji (metody) klasy



Definicja funkcji (metody) wewn

ą

trz deklaracji klasy:

class Moja_Klasa  {

public: 

TypZwrotnejWarto

ś

ci NazwaMetodySkładowej()       

{…};

Programowanie obiektowe

17

{…};

};



Definicja funkcji (metody) poza deklaracj

ą

klasy:

TypZwrotnejWarto

ś

ci Moja_Klasa :: NazwaMetodySkładowej( )

{

};



Operator zakresu „::” wi

ąŜ

e metod

ę

 z klas

ą

;



Ŝ

ne klasy mog

ą

 mie

ć

 metody o tej samej nazwie;

background image

Wprowadzenie do języka C++

Definicja funkcji (metod) klasy



Przykład poza deklaracj

ą

 klasy: 

void osoba::ustaw(int wiek, char *p_imie, char *p_nazwisko)

{

osoba::wiek = wiek;   

operator zakresu w nagłówku

Programowanie obiektowe

18

osoba::wiek = wiek;   

strcpy(imie, p_imie);

strcpy(nazwisko, p_nazwisko);

};

operator zakresu w nagłówku

tu teŜ operator zakresu,

bo „wiek” jest przysłonięty

background image

Obiekt – uogólniona struktura



Deklaracja obiektów

class osoba  ja, Ty;

osoba szef;

// w deklaracji/definicji obiektu mo

Ŝ

na

// pomija

ć

 „class”, „struct” i „union”

Programowanie obiektowe

19



U

Ŝ

ycie obiektów

szef.wczytaj();

szef.wypisz();

background image

Jak definiować metody klasy?



Wewn

ą

trz deklaracji klasy

class osoba {


inline void wczytaj()
{

Programowanie obiektowe

20

{

cin>>wiek>>imie>>nazwisko;

}

// tu nie musi by

ć

 

ś

rednika

};



Taka funkcja jest funkcj

ą

 inline (wplatan

ą

)



Specyfikator inline mo

Ŝ

e by

ć

 (tutaj, tzn. w obr

ę

bie klasy) pomini

ę

ty

background image

Jak definiować metody klasy?



Poza klas

ą

 trzeba u

Ŝ

y

ć

 operatora zakresu w nagłówku

void osoba::zapisz (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);

}

Programowanie obiektowe

21

}



Metoda ma by

ć

 inline?

inline void osoba::wypisz()
{

cout<<"wiek: "<<wiek<<" imie: "<<imie<<

" nazwisko: "<<nazwisko<<"\n";

}

background image

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

Programowanie obiektowe

22

szef. znajdz(50, „Adam”, „Nowak”); 
szef. znajdz(50, „Adam”);
szef. znajdz(50);
// ale nie: szef. znajdz(); 

Dlaczego?

background image

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:

Programowanie obiektowe

23

public:

void wczytaj()
{

cin>>i;

// deklaracja  zmiennej „i” jest wewn

ą

trz klasy

wypisz();

// funkcja „wypisz” jest wewn

ą

trz klasy

}
int i;
void wypisz();

};

background image

Paradygmat programowania obiektowego



Paradygmat (encyklopedia PWN) — ogólnie uznane 
osi

ą

gni

ę

cie naukowe (teoria naukowa); dostarcza modelowych 

rozwi

ą

za

ń

 w danej dziedzinie nauki .

Programowanie obiektowe

24



Przykładowe paradygmaty programowania



programowanie strukturalne



programowanie obiektowe

background image



Programowanie obiektowe:



metoda rozwi

ą

zywania problemów programistycznych 

z wykorzystaniem obiektów;



sposób interpretacji problemu jako zbioru obiektów

Paradygmat programowania obiektowego

Programowanie obiektowe

25



sposób interpretacji problemu jako zbioru obiektów
i relacji pomi

ę

dzy nimi

background image



Hermetyzacja



Dziedziczenie



Polimorfizm

Paradygmaty programowania obiektowego

Programowanie obiektowe

26

background image



Hermetyzacja (ang. encapsulation) oznacza poł

ą

czenie danych i funkcji 

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 skladowych programu. 

Hermetyzacja

Programowanie obiektowe

27

równoczesnym dost

ę

pem ze strony ró

Ŝ

nych skladowych programu. 



W tym celu wszystkie dane (pola w obiekcie) i zapisy instrukcji (metody 
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 optymali-

zowania nakładów potrzebnych na ich modyfikacje. 



Wpływa tak

Ŝ

e dodatnio na osi

ą

ganie niezawodno

ś

ci w projektach 

programistycznych.

background image

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 (klas pochodnych); 



np. obiekt klasy Samochód dziedziczy wszystkie własno

ś

ci (dane i 

metody) okre

ś

lone w ogólniejszej klasie Pojazd;



Mechanizm dziedziczenia słu

Ŝ

y w j

ę

zykach obiektowych do odwzorowania 

wyst

ę

puj

ą

cych cz

ę

sto w naturze powi

ą

za

ń

 typu generalizacja –

Programowanie obiektowe

28

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;

background image

Koncepcja obiektowości - dziedziczenie

Pojazd 

Koła

Kolor 

Jedź 

Broń 

Rodzaj amunicji 

Szybkostrzelność

Strzelaj 

klasy

Programowanie obiektowe

29

Samochód 

Koła 

Kolor 

Rodzaj paliwa
Jedź 

Tankuj

WózBojowy 

Koła 

Kolor 

Rodzaj amunicji

Szybkostrzelność

Jedź 

Strzelaj

podklasy (klasy pochodne)

nowa 

metoda

metody

dziedziczone

background image



Polimorfizm:



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

Polimorfizm

Programowanie obiektowe

30

(overloading);  



np. metoda Jed

ź

inaczej b

ę

dzie si

ę

 zachowywała dla 

Samochodu a inaczej dla WozuBojowego;



zasi

ę

g polimorfizmu ograniczony jest do poddrzewa hierarchii 

dziedziczenia;

background image

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, 

Ŝ

mo

Ŝ

liwe jest pisanie kodu, który w przyszło

ś

ci (na etapie wykonania 

Programowanie obiektowe

31

mo

Ŝ

liwe jest pisanie kodu, który w przyszło

ś

ci (na etapie wykonania 

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

background image



Funkcje nosz

ą

ce takie same nazwy nazywamy funkcjami 

przeci

ąŜ

onymi



Tworzenie funkcji przeci

ąŜ

onych nazywamy przeci

ąŜ

aniem funkcji

Wielokrotne stosowanie nazw - polimorfizm

Programowanie obiektowe

32



Mo

Ŝ

emy nazwy tej samej funkcji u

Ŝ

ywa

ć

 w wielu miejscach w 

programie bez obawy o bł

ę

dne działanie tego programu. 

background image

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ł (programunit

Programowanie obiektowe

33

podstawow

ą

 jednostk

ą

 syntaktyczn

ą

 jest moduł (programunit

package), w którym umieszczane s

ą

 definicje klas i deklaracje  

obiektów:



C++,



Java,



Borland Pascal (Delphi),



TopSpeed Modula2, 



ModSim II, 



Visual C++, 



Visual Basic.

background image

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;

Programowanie obiektowe

34



trudno

ś

ci w projektowaniu i wypromowaniu nowego j

ę

zyka 

programowania skutkuj

ą

 tendencj

ą

 do rozszerzania 

klasycznych j

ę

zyków programowania w kierunku obiektowo

ś

ci;

background image

Ewolucja języków programowania

1950

1960

1970

1980

1990

2000

PL/I(66)

Ada(95)

Pascal(70)

Cobol(58)

A

  

S

  

S

  

E

  

M

  

B

  

L

  

Y

Eiffel (86)

Ada(83)

Programowanie obiektowe

35

Fortran(54)

Java(96)

Basic(66)

C(72)

Pascal(70)

Algol(60)

Simula(67)

Smalltalk(80)

C++(89)

A

  

S

  

S

  

E

  

M

  

B

  

L

  

Y

Eiffel (86)

background image

Programowanie obiektowe

36