po w1 id 557610 Nieznany

background image

Programo

w

anie

obiekto

w

e

W

ykª

ad

1.

W

p

ro

w

adzenie,

p

o

dsta

w

o

w

e

p

oj ia

p

rogramo

w

ania

obiekto

w

ego

w

jzyku

C++

background image

Program

wykª

adu

Programo

w

anie

obiekto

w

e

w

jzyku

C++

Java

Rub

y

background image

Literatura

C++

Jerzy

Grb

osz

Symfonia

C++,

T

om

I,

I

I,

I

I

I,

O yna

Kallima h,

Krak

ó

w

Jerzy

Grb

osz

P

asja

C++,

T

om

I,

I

I,

O yna

Kallima h,

Krak

ó

w

Java

Bru e

E k

el

Thinking

in

Java,

Helion,

2001,

wnie»

wydania

p

ó¹niejsze

(versja

angielsk

a

Thinking

in

Java

dostpna

b

ezpª

atnie

w

Internie ie)

Rub

y

Dave

Thomas

Chad

F

o

wler,

Andy

Hunt,

Programo

w

anie

w

jzyku

Rub

y,

(w

ersja

angielsk

a

Programming

Rub

y:

The

Pragmati

Programmers.

dostpna

b

ezpª

atnie

w

Internie ie)

background image

C++

najp

o

wsze hniejszy

jzyk

obiekto

wy

k

ompilo

w

any

jzyk

hyb

rydo

wy

(wielopa

radygmat

y zny):

umo»liwia

p

rogramo

w

anie

za

wno

w

pa

radygma ie

p

ro

eduralnym

jak

i

obiekto

wym

ª

at

wy

do

ª

¡ zenia

z

C

-

p

rogram

w

C

jest

p

rogramem

w

C++

jzyk

sk

omplik

o

w

any

,

zdaniem

niektó

ry h



nadmiernie

sk

omplik

o

w

any

background image

Java

jzyk

ba

rdziej

p

rzeno±ny

ni»

C++,

k

ompilo

w

any

do

k

o

du

p

o±redniego

zystszy

jzyk

obiekto

wy

ni»

C++,

zap

rojekto

w

any

jak

o

obiekto

wy

(a

nie

jak

o

rozszerzenie

obiekto

w

e

innego

jzyk

a),

ba

rdziej

sp

ójny

,

p

rostszy

background image

Rub

y

obiekto

wy

jzyk

skrypto

wy

zdob

yw

aj¡ y

aktualnie

ogromn¡

p

opula

rno±¢

na

±wie ie

jzyk

wy»szego

p

oziomu

ni»

C++

i

Java,

zego

skutkiem

jest

istotne

skró

enie

p

ro

esu

p

rogramo

w

ania

(kilku-kilkunasto-kilkudziesi iokrotne,

w

zale»no± i

o

d

p

roblemu)

jzyk

interp

reto

w

any

,

istotnie

w

olniejszy

o

d

C++

i

Javy

idealny

do

p

rotot

yp

o

w

ania

background image

P

a

radygmat

p

ro

eduralny

Przykª

ad:

implementa ja

stosu

w

C

#in lude

<stdio.h>

stru t

Stos

{

int

dane[100℄;

int

n;

};

void

init(stru t

Stos*

s)

{

s->n=0;

}

void

push(stru t

Stos*

s,

int

e)

{

s->dane[s->n++℄

=

e;

}

int

pop(stru t

Stos*

s)

{

return

s->dane[s->n℄;

}

int

empty(stru t

Stos*

s)

{

return

s->n==0;

}

main()

{

stru t

Stos

stos;

init(&stos);

push(&stos,2);

push(&stos,5);

push(&stos,3);

while(!empty(&stos))

printf("%d\n",

pop(&stos));

}

background image

P

a

radygmat

p

ro

eduralny

Przykª

ad:

implementa ja

stosu

w

C++

#in lude

<iostream>

stru t

Stos

{

int

dane[100℄;

int

n;

};

void

init(Stos&

s)

{

s.n=0;

}

void

push(Stos&

s,

int

e)

{

s.dane[s.n++℄

=

e;

}

int

pop(Stos&

s)

{

return

s.dane[s.n℄;

}

int

empty(Stos&

s)

{

return

s.n==0;

}

main()

{

Stos

stos;

init(stos);

push(stos,2);

push(stos,5);

push(stos,3);

while(!empty(stos))

std:: out

<<

pop(stos)

<<

std::endl;

}

background image

P

a

radygmat

p

ro

eduralny

struktura

k

o

du

p

rogramu

Program

skª

ada

si

(w

p

ewnym

up

rosz zeniu)

ze

zbio

ru

dekla

ra ji

ro

dzajó

w

dany h,

na

któ

ry h

b

dziemy

p

ro

w

adzi¢

obli zenia

(w

p

rzykª

adzie:

struktura

Stos)

zbio

ru

funk

ji

(p

ro

edur)

za

p

omo

¡

któ

ry h

op

erujemy

na

t

y h

dany h

(w

p

rzykª

adzie:

funk

je

init,

push,

.

.

.

)

Element

y

te

nie

ze

sob¡

p

o

wi¡zane

skª

adnio

w

o

w

jzyku

(mog¡

np.

znajdo

w

si

w

ró»ny h

plik

a h,

mo

duª

a h

p

rogramo

wy h)

background image

P

a

radygmat

obiekto

wy

W

pa

radygma ie

obiekto

wym

ª

¡ zy

si

opis

struktury

dany h

z

opisem

op

era ji

na

nej

wyk

onyw

any h

w

jedn¡

jednostk



k

o

du

p

rogramu:

klas.

P

osz zególne

egzempla

rze

tej

struktury

dany h

(p

o

wi¡zanej

z

o

dp

o

wiednimi

dla

niej

op

era jami)

nazyw

a

si

obiektami

lub

instan jami

klasy

.

P

oj ie

klasy

jest

bliskie

p

oj iu

t

ypu

z

jzyk

ó

w

p

ro

eduralny h.

Jest

jednak

szersze.

background image

Implementa ja

stosu

w

pa

radygma ie

obiekto

wym

(C++)

#in lude

<iostream>

lass

Stos

{

publi :

int

dane[100℄;

int

n;

void

init()

{

n=0;

}

void

push(int

e)

{

dane[n++℄

=

e;

}

int

pop()

{

return

dane[n℄;

}

int

empty()

{

return

n==0;

}

};

main()

{

Stos

stos;

stos.init();

stos.push(2);

stos.push(5);

stos.push(3);

while(!stos.empty())

std:: out

<<

stos.pop()

<<

std::endl;

}

background image

Skª

ado

w

e

klasy

Dekla

ra ja

klasy

opisuje

skª

ado

w

e

klasy:

dane

skª

ado

w

e



atrybut

y

to

w

a

rto± i

p

rze ho

wyw

ane

w

obiekta h

klasy

,

mog¡

b

do

w

olnego

t

ypu

(mog¡

b

wnie»

obiektami)

funk

je

skª

ado

w

e



meto

dy

to

op

era je,

jakie

mo»na

wyk

onyw

na

obiekta h

klasy

,

dekla

ra ja

i

deni ja

funk

ji

skª

ado

w

ej

klasy

nie

ró»ni

si

o

d

deni ji

'zwykª

ej'

funk

ji

w

jzyku

C++;

w

inny

sp

osób

si

wyw

oªuje,

miano

wi ie

wyw

oªuje

si

dla

okre±lonego

obiektu

background image

K

onstrukto

r

K

onstrukto

r

to

sp

e jalna

meto

da

wyw

oªyw

ana

automat

y znie

w

momen ie

t

w

o

rzenia

obiektu.

F

unk

k

onstrukto

ra

jest

ini jaliza ja

obiektu;

w

sz zególno± i

w

k

onstrukto

rze

nadaje

si

w

a

rto± i

p

o

z¡tk

o

w

e

skª

ado

wym

klasy

(nie

ma

innego

sp

osobu

nadania

w

a

rto± i

p

o

z¡tk

o

wy h,

jak

t

ylk

o

w

k

onstrukto

rze).

k

onstrukto

r

deniuje

si

jak

o

meto

d

(publi zn¡)

o

nazwie

takiej

samej

jak

nazw

a

klasy

mo»e

mie¢

a

rgument

y

k

onstrukto

r

nie

zwra a

w

a

rto± i

dekla

ra ji

ani

deni ji

nie

p

op

rzedza

si

jednak

o

w

em

void

background image

K

onstrukto

r

p

rzykª

ad

#in lude

<iostream>

lass

Stos

{

publi :

int

dane[100℄;

int

n;

Stos()

{

n=0;

}

//

konstruktor

void

push(int

e)

{

dane[n++℄

=

e;

}

int

pop()

{

return

dane[n℄;

}

int

empty()

{

return

n==0;

}

};

main()

{

Stos

stos;

//

niejawne

wywoªanie

konstruktora

stos.push(2);

stos.push(5);

stos.push(3);

while(!stos.empty())

std:: out

<<

stos.pop()

<<

std::endl;

}

background image

K

onstrukto

r

z

a

rgumentami

K

onstrukto

r,

jak

k

a»da

funk

ja,

mo»e

mie¢

a

rgument

y

.

lass

Zespolona

{

publi :

Zespolona(float

r,

float

i)

{

re=r;

im=i;

}

...

private:

float

re,im;

...

}

main()

{

Zespolona

x(1.5,2.0);

//

Argumenty

dla

konstruktora

podajemy

tak

...

Zespolona

y

=

Zespolona(0,1,34);

//

...

lub

tak.

...

}

background image

Destrukto

r

Destrukto

r

to

sp

e jalna

meto

da

wyw

oªyw

ana

automat

y znie

w

momen ie

likwida ji

obiektu.

F

unk

destrukto

ra

jest

m.in.

'p

osp

rz¡tanie'

p

o

obiek

ie,

np.

je±li

obiekt

k

o

rzystaª

z

dynami znie

p

rzydzielonej

mu

pami i,

w

destrukto

rze

p

o

winno

si

t

pami¢

zw

olni¢.

destrukto

r

deniuje

si

jak

o

meto

d

(publi zn¡)

o

nazwie

takiej

samej

jak

nazw

a

klasy

p

op

rzedzonej

znakiem

~

(t

ylda)

destrukto

r

nie

ma

a

rgumentó

w

i

nie

zwra a

w

a

rto± i

dekla

ra ji

ani

deni ji

nie

p

op

rzedza

si

jednak

o

w

em

void

background image

Deni je

funk

ji

skª

ado

wy h

Deni je

funk

ji

skª

ado

wy h

mo»na

umie± i¢:

w

ewn¡trz

deni ji

klasy



wtedy

k

ompilo

w

ane

jak

o

inline

p

oza

dekla

ra j¡

klasy



wtedy

k

ompilo

w

ane

jak

o

zwykª

e

funk

je,

hyba

»e

zostan¡

p

op

rzedzone

o

w

em

'inline',

w

ewn¡trz

deni ji

klasy

umiesz za

si

dekla

ra j

takiej

fuk

ji.

F

unk

ja

t

ypu

inline

jest

trakto

w

ana

p

rzez

k

ompilato

r

w

sp

osób

sp

e jalny:

k

o

d

b

d¡ y

wynikiem

k

ompila ji

takiej

funk

ji

jest

wp

rost

wsta

wiany

(zamiast

no

rmalnego

wyw

ania)

w

e

wszystkie

miejs a

wyw

ania

funk

ji.

background image

Deni je

funk

ji

skª

ado

wy h

p

rzykª

ad

#in lude

<iostream>

lass

Stos

{

publi :

int

dane[100℄;

int

n;

Stos()

{

n=0;

}

//

inline

void

push(int

e);

int

pop();

int

empty()

{

return

n==0;

}

//

inline

};

void

Stos::push(int

e)

{

dane[n++℄

=

e;

}

//

zwykªa

inline

int

Stos::pop()

{

return

dane[--n℄;

}

//

inline

main()

{

...

(j.w.)

}

background image

Wido

zno±¢

skª

ado

wy h

klasy

Ze

wzgldu

na

p

ra

w

a

dostpu

do

skª

ado

wy h

(wido

zno±¢)

dziel¡

si

one

na

trzy

ro

dzaje:

p

ryw

atne

(private)

skª

ado

w

e

p

ryw

atne

dostpne

t

ylk

o

w

ob

rbie

klasy

,

widziane

t

ylk

o

p

rzez

inne

skª

ado

w

e

tej

samej

klasy

np.

meto

d

p

ryw

atn¡

klasy

mo»na

wyw

jedynie

w

inny h

meto

da h

tej»e

klasy

publi zne

(publi )

skª

ado

w

e

publi zne

dostpne

wnie»

sp

oza

klasy

,

dla

obiektó

w

i

meto

d

inny h

klas,

dla

inny h

funk

ji.

hronione

(prote ted)

skª

ado

w

e

hronione

p

oza

ob

rb

em

klasy

wido

zne

t

ylk

o

w

klasa h

p

o

ho

dny h,

p

oza

nimi

za ho

wuj¡

si

jak

p

ryw

atne

wyja±nienie

nast¡pi

p

ó¹niej,

p

rzy

omó

wianiu

dziedzi zenia

Domy±lnie,

je±li

nie

okre±limy

p

oziomu

dostpu,

skª

ado

w

a

trakto

w

ana

jest

ona

jak

o

p

ryw

atna.

Skª

ado

w

e

publi zne

to

te

element

y

klasy

p

rzez

któ

re

k

omunikuje

si

ona

z

reszt¡

p

rogramu.

background image

Hermet

yza ja

p

oj ie

hermet

yza ji

Hermet

yza ja

to

te hnik

a

p

rogramist

y zna

p

olegaj¡ a

na

t

ym,

»e

jednostki

p

rogramu

(w

zale»no± i

o

d

jzyk

a:

mo

duªy

,

klasy

,

pakiet

y

,

...)

o

rganizuje

si

w

taki

sp

osób,

»e

na

zewn¡trz

takij

jednostki

wido

zne

t

ylk

o

te

element

y

,

któ

re

p

otrzebne

do

wyk

o

rzystania

jej

funk

jonalno± i.

Zasada

hermet

yza ji

osi,

»e

p

rogramista

ma

t

yle

wiedzie¢

o

danej

jednost e

p

rogramist

y znej

ile

mu

p

otrzeba,

ab

y

jej

efekt

ywnie

u»yw

a¢.

W

szystk

o,

o

mo»e

b

p

rzed

nim

ukryte,

ma

b

ukryte

ab

y

efekt

ywnie

k

o

rzysta¢

z

funk

ji

sin(x)

p

rogramista

nie

musi

zna¢

zastoso

w

anego

algo

rytmu

wyli zania

sinusa.

ab

y

efekt

ywnie

k

o

rzysta¢

z

klasy

Stos

p

rogramista

nie

musi

wiedzie¢

w

jaki

dokª

adnie

sp

osób

element

y

stosu

p

rze ho

wyw

ane

w

pami i.

background image

Hermet

yza ja

Hermet

yza ja

w

jzyk

a h

obiekto

wy h

W

jzyk

a h

obiekto

wy h

p

o

dsta

w

o

w

¡

jednostk

¡

p

rogramist

y zn¡

jest

klasa,

a

hermet

yza j

uzyskuje

si

p

rzez

wydzielenie

z± i

publi znej

i

p

ryw

atnej

skª

ado

wy h

klasy

.

background image

Hermet

yza ja

p

rzykª

ad

#in lude

<iostream>

lass

Stos

{

publi :

Stos()

{

n=0;

}

void

push(int

e)

{

dane[n++℄

=

e;

}

int

pop()

{

return

dane[n℄;

}

int

empty()

{

return

n==0;

}

private:

int

dane[100℄;

int

n;

};

main()

{

Stos

stos;

stos.push(2);

stos.push(5);

stos.push(3);

while(!stos.empty())

std:: out



stos.pop()



std::endl;

}

background image

Hermet

yza ja

el

zab

ezpie zenie

obiektó

w

klasy

p

rzed

niedozw

olonymi

op

era jami

(w

p

rzykª

adzie:

np.

uniemo»liwiamy

b

ezp

o±rednie

manipulo

w

anie

w

a

rto± i¡

zmiennej

n)

ukry ie

sz zegóª

ó

w

implementa yjny h

p

rzed

u»ytk

o

wnik

ami

klasy

,

(w

z± i

p

ryw

atnej

k

o

du

klasy

mo»na

dok

onyw

do

w

olny h

mo

dyk

a ji,

któ

re,

o

ile

interfejs

klasy

p

ozostaje

b

ez

zmian,

nie

zmieniaj¡

asno± i

skª

ado

wy h

publi zny h)

background image

Mo»emy

np.

w

implementa ji

stosu

zast¡pi¢

tabli 

list¡.

background image

Hermet

yza ja

Przykª

ad:

aªk

o

wita

zmiana

implementa ji

stosu

b

ez

zmiany

jej

interfejsu:

w

funk

ji

main()

nie

ma

»adny h

zmian

lass

Stos

{

publi :

Stos()

{

top=NULL;

}

~Stos()

{

while(top!=NULL)

{

Elem*

e=top;

top=top->poprz;

delete

e;

}

}

void

push(int

i)

{

Elem*

e=new

Elem;

e->dane=i;

e->poprz=top;

top=e;

}

int

pop()

{

int

ret=top->dane;

Elem*

e=top;

top=top->poprz;

delete

e;

return

ret;

}

int

empty()

{

return

top==NULL;

}

private:

stru t

Elem

{

int

dane;

Elem*

poprz;

};

Elem*

top;

};

main()

{

Stos

stos;

stos.push(2);

stos.push(5);

stos.push(3);

while(!stos.empty())

std:: out

<<

stos.pop()

<<

std::endl;

}

background image

W

p

op

rzednim

p

rzykª

adzie

k

onie zne

b

o

zdenio

w

anie

destrukto

ra,

p

oniew

w

trak

ie

»y ia

obiektu

klasy

Stos

dynami znie

t

w

o

rzone

element

y

list

y

.

Kiedy

obiekt

taki

ma

p

rzestaje

istnie¢,

musi

sam

zadba¢

o

to

b

y

zw

olni¢

pami¢

zajmo

w

an¡

p

rzez

ew

entualne

p

ozostaª

e

jesz ze

element

y

list

y

.

Uw

aga:

Systemy

wyk

ona

w

ze

niektó

ry h

jzyk

ó

w

za

wieraj¡

me hanizmy

automat

y znego

wykryw

ania

i

zw

alniania

pami i

zajmo

w

anej

p

rzez

nie

u»yw

ane

ju»

dane

(tzw.

zbieranie

±mie i,

ang.

ga

rbage

olle tion),

w

jzyk

a h

C

i

C++

nie

ma

taki h

me hanizmó

w.


Wyszukiwarka

Podobne podstrony:
po w1 id 364234 Nieznany
PO W1 2 id 364238 Nieznany
PO lab 5 id 364195 Nieznany
MSI w1 id 309783 Nieznany
po modernizacji id 364203 Nieznany
po w2 id 557612 Nieznany
po w3 id 557613 Nieznany
ALF po paracetamolu id 55196 Nieznany
4OS 2011 w1 id 39381 Nieznany (2)
PO W3 id 364241 Nieznany
Lunar 100 dzien po dniu id 2739 Nieznany
bd w1 id 81977 Nieznany (2)
Analiza finansowa w1 id 60384 Nieznany
po w4szablony id 557614 Nieznany
MSIZ w1 id 309829 Nieznany
PO lab 6 id 364196 Nieznany
Fund w1 2 id 181442 Nieznany
PO lab 5 id 364195 Nieznany
MSI w1 id 309783 Nieznany

więcej podobnych podstron