POwyklad15 planowany

background image

Tomasz Marks - Wydział MiNI PW

-1-

Programowanie Obiektowe

(j

ę

zyk C++)

Wykład 15.

Tomasz Marks - Wydział MiNI PW

-2-

hierarchie klas

i

wielodziedziczenie

Tomasz Marks - Wydział MiNI PW

-3-

Hierarchie klas

Dziedziczenie wprowadza relacj

ę

pokrewie

ń

stwa pomi

ę

dzy klasami.

W najprostrzym przypadku mamy do czynienia z dziedziczeniem pomi

ę

dzy

dwiema klasami, co jest opisane zdaniem:

klasa B dziedziczy po klasie A

i co wyra

ż

amy graficznie:

Zbiór klas pokrewnych nazywa si

ę

zwyczajowo hierarchi

ą

klas.

Hierarchia klas mo

ż

e by

ć

zwykle przedstawiona struktur

ą

drzewa lub w bardziej

skomplikowanych przypadkach struktur

ą

grafu:

Tomasz Marks - Wydział MiNI PW

-4-

Hierarchie klas i wielodziedziczenie

Z wielodziedziczeniem mamy do czynienia w sytuacji, gdy klasa dziedziczy
po wi

ę

cej ni

ż

jednej klasie ( ma wi

ę

cej ni

ż

jedn

ą

klas

ę

bazow

ą

).

N.p. jest tak w przypadku klas F, H i M, N na poni

ż

szym rysunku:

background image

Tomasz Marks - Wydział MiNI PW

-5-

Wielodziedziczenie (1)

struct T

//triangle

{

int tcolor;
T( int tc=0 ) : tcolor( tc ) { }
virtual void draw( )
{

cout << " triangle:" << tcolor;

}

};

struct TB : T

//triangle with border

{

int bcolor;
TB( int tc, int bc ) : T( tc ), bcolor( bc ) { }
void draw( )
{

T::draw( );
cout << " border:" << bcolor;

}

};

Tomasz Marks - Wydział MiNI PW

-6-

Wielodziedziczenie (2)

struct TC : T

//triangle with center

{

int ccolor;
TC( int tc, int cc ) : T( tc ), ccolor( cc ) { }
void draw( )
{

T::draw( );
cout << " center:" << ccolor;

}

};

struct TBC : TB, TC

//triangle with border and center

{

TBC( int tc, int bc, int cc ) : TB( tc ,bc ), TC( tc, cc ) { }
void draw( )
{

TB::draw( );
TC::draw( );

}
void info( )
{

//cout << tcolor; //

BLAD!

tcolor niejednoznaczne

cout << TB::tcolor;
cout << TC::tcolor;
cout << bcolor << ccolor;

}

};

Tomasz Marks - Wydział MiNI PW

-7-

Wielodziedziczenie (3)

int main ( )
{

TBC tr( 1, 2, 3 );

tr.info( );

// 1 1 2 3

tr.draw( );

// triangle:1 border:2 triangle:1 center:3

//tr.tcolor = 4; //

BLAD!

tcolor niejednoznaczne

tr.TB::tcolor = 5;
tr.TC::tcolor = 6;

tr.info( );

// 5 6 2 3

tr.draw( );

// triangle:5 border:2 triangle:6 center:3

}

Komentarz:

Obiekt tr faktycznie zawiera dwa trójk

ą

ty ( b

ę

d

ą

ce podobiektami typu T

zawartymi w składowych typów TB i TC ), które mog

ą

mie

ć

ż

ne kolory,

co jest sprzeczne z intencjami projektowymi.

Aby usun

ąć

ten kłopot mo

ż

na zastosowa

ć

wirtualne dziedziczenie bazy T

(patrz nast

ę

pny przykład).

Tomasz Marks - Wydział MiNI PW

-8-

Wielodziedziczenie (4)

Komentarz:

Aby usun

ąć

ten kłopot mo

ż

na zastosowa

ć

wirtualne dziedziczenie bazy T

(patrz nast

ę

pny przykład).

Hierarchia klas

zrealizowana: oczekiwana:

background image

Tomasz Marks - Wydział MiNI PW

-9-

Wielodziedziczenie – baza wirtualna (1)

struct T

//triangle

{

int tcolor;
T( int tc=0 ) : tcolor( tc ) { }
virtual void draw( )
{

cout << " triangle:" << tcolor;

}

};

struct TB :

virtual

T

//triangle with border

{

int bcolor;
TB( int tc, int bc ) : T( tc ), bcolor( bc ) { }
void draw( )
{

T::draw( );
cout << " border:" << bcolor;

}

};

Tomasz Marks - Wydział MiNI PW

-10-

Wielodziedziczenie – baza wirtualna (2)

struct TC :

virtual

T

//triangle with center

{

int ccolor;
TC( int tc, int cc ) : T( tc ), ccolor( cc ) { }
void draw( )
{

T::draw( );
cout << " center:" << ccolor;

}

};

struct TBC : TB, TC

//triangle with border and center

{

TBC( int tc, int bc, int cc ) :

T( tc ),

TB( tc, bc ), TC( tc, cc ) { }

void draw( )
{

TB::draw( );
TC::draw( );

}
void info( )
{

cout << tcolor;

// teraz O.K.

cout << TB::tcolor;
cout << TC::tcolor;
cout << bcolor << ccolor;

}

};

Tomasz Marks - Wydział MiNI PW

-11-

Wielodziedziczenie – baza wirtualna (3)

int main ( )
{

TBC tr( 1, 2, 3 );

tr.info( );

// 1 1 1 2 3

tr.draw( );

// triangle:1 border:2 triangle:1 center:3

tr.tcolor = 4;

// teraz O.K.

tr.TB::tcolor = 5;
tr.TC::tcolor = 6;

tr.info( );

// 6 6 6 2 3

tr.draw( );

// triangle:6 border:2 triangle:6 center:3

}

Komentarz:

Obiekt tr zawiera teraz tylko jeden trójk

ą

t ( b

ę

d

ą

cy wirtualnie dziedziczonym

podobiektem typu T w składowych typów TB i TC ). W ten sposób nie ma
ju

ż

sprzeczno

ś

ci z intencjami projektowymi.

Ale metoda TBC::draw wypisuje dwa razy informacj

ę

o trójk

ą

cie bazowym.

Ten kłopot usuniemy przez wprowadzenie w ka

ż

dej klasie metody Draw,

która wyprowadza tylko informacje specyficzne dla tej klasy
(patrz nast

ę

pny przykład).

Tomasz Marks - Wydział MiNI PW

-12-

Wielodziedziczenie – baza wirtualna (1a)

struct T

//triangle

{

int tcolor;
T( int tc=0 ) : tcolor( tc ) { }

void Draw( )
{

cout << " triangle:" << tcolor;

}
virtual void draw ( ) { Draw( ); }

};

struct TB : virtual T

//triangle with border

{

int bcolor;
TB( int tc, int bc ) : T( tc ), bcolor( bc ) { }

void Draw( ) { cout << " border:" << bcolor; }
void draw( )
{

T::Draw();
Draw( );

}

};

background image

Tomasz Marks - Wydział MiNI PW

-13-

Wielodziedziczenie – baza wirtualna (2a)

struct TC : virtual T

//triangle with center

{

int ccolor;
TC( int tc, int cc ) : T( tc ), ccolor( cc ) { }

void Draw( ) { cout << " center:" << ccolor; }
void draw( )
{

T::Draw();
Draw( );

}

};

struct TBC : TB, TC

//triangle with border and center

{

TBC( int tc, int bc, int cc ) : T( tc ), TB( tc, bc ), TC( tc, cc ) { }

void Draw( ) { cout << " ....."; }
void draw( )
{

T::Draw( ); TB::Draw(); TC::Draw();
Draw( );

}

};

Tomasz Marks - Wydział MiNI PW

-14-

Wielodziedziczenie – baza wirtualna (3a)

int main ( )
{

TBC tr( 1, 2, 3 );

tr.draw( );

// triangle:1 border:2 center:3 .....

tr.tcolor = 4;

// teraz O.K.

tr.TB::tcolor = 5;
tr.TC::tcolor = 6;

tr.draw( );

// triangle:6 border:2 center:3 .....

}

Komentarz:

Metoda TBC::info została usuni

ę

ta, bo nic nowego tu nie poka

ż

e.

Metoda TBC::draw wypisuje teraz ka

ż

d

ą

potrzebn

ą

informacj

ę

o trójk

ą

cie

tylko jeden raz, korzystaj

ą

c ze specyficznych wersji metody Draw

okre

ś

lonych w poszczególnych klasach.

Tomasz Marks - Wydział MiNI PW

-15-

paradygmat

obiektowy

Tomasz Marks - Wydział MiNI PW

-16-

Co to jest Paradygmat ?

W

Oxford English Dictionary

paradygmat jest zdefiniowany jako

wzorzec lub najogólniejszy model lub jako wzorcowy przykład.

Paradygmat ... -

w rozumieniu wprowadzonym przez

filozofa Thomasa

Kuhna

w ksi

ąż

ce Struktura rewolucji naukowych (The Structure of Scientific

Revolutions) opublikowanej w

1962

r.

... to zbiór poj

ęć

i teorii tworz

ą

cych podstawy danej nauki.

Teorii i poj

ęć

tworz

ą

cych paradygmat raczej si

ę

nie kwestionuje,

przynajmniej do czasu kiedy paradygmat jest twórczy poznawczo -
tzn. za jego pomoc

ą

mo

ż

na tworzy

ć

teorie szczegółowe zgodne z

danymi do

ś

wiadczalnymi (historycznymi), którymi zajmuje si

ę

dana

nauka.

background image

Tomasz Marks - Wydział MiNI PW

-17-

Podstawowe zało

ż

enia

paradygmatu obiektowego

Powszechnie uwa

ż

a si

ę

,

ż

e najwa

ż

niejsze s

ą

nast

ę

puj

ą

ce cechy:

Abstrakcja

Enkapsulacja (hermetyzacja)

Polimorfizm

Dziedziczenie

Tomasz Marks - Wydział MiNI PW

-18-

Abstrakcja

Rozpatrujemy pewien system rozumiany jako układ obiektów.

Ka

ż

dy obiekt w systemie mo

ż

na rozpatrywa

ć

jako model

abstrakcyjnego elementu, który mo

ż

e:

– opisywa

ć

i zmienia

ć

swój stan,

– komunikowa

ć

si

ę

z innymi obiektami w systemie,

– wykonywa

ć

pewne czynno

ś

ci na rzecz innych obiektów,

bez ujawniania, w jaki sposób zaimplementowano dane cechy.

UWAGA: Procesy, funkcje i/lub metody mog

ą

by

ć

równie

ż

abstrahowane.

W taki przypadku konieczne s

ą

ż

ne techniki rozszerzania abstrakcji.

Tomasz Marks - Wydział MiNI PW

-19-

Enkapsulacja (hermetyzacja)

Polega na ukrywaniu szczegółów implementacji.

Ma to zapewni

ć

,

ż

e obiekt nie mo

ż

e zmienia

ć

stanu wewn

ę

trznego

innych obiektów w nieoczekiwany sposób.

Tylko wewn

ę

trzne metody obiektu s

ą

uprawnione do zmiany jego stanu.

Ka

ż

dy typ obiektu dostarcza innym obiektom swój "interfejs", który

okre

ś

la dopuszczalne metody współpracy.

UWAGA: Pewne j

ę

zyki programowania (n.p. C++) nie realizuj

ą

tego

zało

ż

enia zbyt rygorystycznie, dopuszczaj

ą

c pewien poziom

bezpo

ś

redniego dost

ę

pu do szczegółów implementacyjnych obiektu.

Prowadzi to do ograniczenia poziomu abstrakcji.

Tomasz Marks - Wydział MiNI PW

-20-

Polimorfizm (1)

W krystalografii: Polimorfizm (ró

ż

nopostaciowo

ść

) – zjawisko

wyst

ę

powania ró

ż

nych odmian tej samej substancji. Wyst

ę

puje ono

wtedy, gdy ta sama substancja mo

ż

e wyst

ę

powa

ć

w dwóch lub

nawet kilku formach krystalicznych.

W takim sensie mo

ż

na uwa

ż

a

ć

,

ż

e polimorfizm

jest opisany stwierdzeniem: " B i C s

ą

A" dla

klas B i C dziedzicz

ą

cych z klasy:

W programowaniu rozumie si

ę

to na ogół w w

ęż

szym sensie,

patrz nast

ę

pna strona:

background image

Tomasz Marks - Wydział MiNI PW

-21-

Polimorfizm (2)

Referencje i kolekcje obiektów mog

ą

dotyczy

ć

obiektów ró

ż

nego

typu, a wywołanie metody dla referencji spowoduje zachowanie
odpowiednie dla pełnego typu obiektu wywoływanego.

Polimorfizm w programowaniu obiektowym to wykazywanie ró

ż

nych

form działania podczas wywoływania metody w zale

ż

no

ś

ci od tego

jakiego typu obiekt jest wskazywany przez wska

ź

nik lub referencj

ę

.

Typ z funkcjami wirtulnymi nazywa si

ę

typem polimorficznym

(B. Stroustrup str. 345)

UWAGA:

Polimorfizm

dotyczy kilku podklas tej samej klasy bazowej,

które maj

ą

metody o takiej samej sygnaturze lecz ró

ż

nych

implementacjach.

Przeci

ąż

anie

dotyczy metod tej samej klasy, które

maj

ą

t

ę

sam

ą

nazw

ę

, lecz ró

ż

ne sygnatury.

Tomasz Marks - Wydział MiNI PW

-22-

Dziedziczenie

Dziedziczenie porz

ą

dkuje i wspomaga polimorfizm i enkapsulacj

ę

.

Osi

ą

ga to dzi

ę

ki umo

ż

liwieniu definiowania i tworzenia specjalizowanych

obiektów na podstawie bardziej ogólnych.

Dla obiektów specjalizowanych nie trzeba redefiniowa

ć

całej

funkcjonalno

ś

ci, lecz tylko t

ę

, której nie maj

ą

obiekty ogólniejsze.

UWAGA: W typowych przypadkach powstaj

ą

grupy obiektów zwane

klasami, oraz grupy klas zwane drzewami. Odzwierciedlaj

ą

one wspólne

cechy obiektów.

Tomasz Marks - Wydział MiNI PW

-23-

Koniec wykładu 15.


Wyszukiwarka

Podobne podstrony:
POwyklad15 planowany
PIT wyklad 1 planowanie infrastuktury technicznej
Planowanie strategiczne i operac Konferencja AWF 18 X 07
Planowanie pracy w placówkach opiekuńczo wychowawczych
Planowanie rodziny
Wyklad 7 Zarzadzanie strategia i planowanie
Metody planowania rodziny 3
PROCES PLANOWANIA BADANIA SPRAWOZDAN FINANSOWYC H
Planowanie zadan
PLANOWANIE LOGISTYKI 4 10 2009
Modul 1 Misja, strategia, planowanie
2 Planowanie produkcji SOP
Analiza planów zagospodarowania przestrzennego
W2 , inform locyjne,PLANOWANIE i monitorowanie
zastosowanie skal do oceny sprawnosci psychoruchowej w planowaniu

więcej podobnych podstron