PO W3 id 364241 Nieznany

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

ż

e

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ł (program, unit,

Programowanie obiektowe

33

podstawow

ą

jednostk

ą

syntaktyczn

ą

jest moduł (program, unit,

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


Wyszukiwarka

Podobne podstrony:
po w3 id 557613 Nieznany
PO lab 5 id 364195 Nieznany
po modernizacji id 364203 Nieznany
po w2 id 557612 Nieznany
PodstEle w3 id 369043 Nieznany
PC w3 id 351840 Nieznany
po w1 id 364234 Nieznany
ALF po paracetamolu id 55196 Nieznany
PO W1 2 id 364238 Nieznany
IiP z w3 id 210528 Nieznany
PK W3 id 359504 Nieznany
Lunar 100 dzien po dniu id 2739 Nieznany
Oe i To1 w3 id 333221 Nieznany
IiP z w3 2 id 210529 Nieznany
Analiza finansowa w3 id 60386 Nieznany
po w4szablony id 557614 Nieznany
po w1 id 557610 Nieznany
4OS 2011 w3 id 39383 Nieznany (2)
PO lab 6 id 364196 Nieznany

więcej podobnych podstron