Sunteți pe pagina 1din 40

Tt'Put

c&

Program area
I
1V.1. Notiunile de obiect qi

metodi

(@

Ideea de obiect arelabazd o noliune mai simpl6, deja cunoscutd, gi


aceea de inregistrare (record). Aga cum gtim, o inregistrare este o coleclie &
de tipuri diverse, pe care programatorul le reunegte sub un singur nume
unor anumite scopuri. Spre deosebire de inregistriri, obiectele pot contine,
date, funcfii gi proceduri.
Una dintre cele mai simple definilii de obiect este urmitoarea:

pel

ia^21

itt
a) /l.r*tz,
/*-

,r)%
uffi

tl4)e complex=object
re, im:real;
funct,ion nodul:rea1i
end;

/o0/^

function complex.modul : real


begin

modul: =Eqrt (egr (re) +eqr (in) ) ;


end;

Yt

all

Pe mdsurd ce vom explica noliunile, definilia de mai sus va c6pdta


Deocamdati, precizim cd urmlrim sI introducem un tip de date care sI

,''

numerelor complexe.

Cea mai simpld cale de definire a numerelor complexe ar pulEf


porneasci de la tipul de date record. Astfel, putem si gdndim un numdr
ca fiind bine determinat de doui numere reale: partea real6 gi partea imagi

'7'o@''

AlLd

xr

inregistrare de acest tip va avea definilia:

t)T)e complex=record
re, im: real;
end;

Am definit aqadar un tip nou de inregistrare, numitd complex, asdel


ft caracterizatd, de dou6 variabile de tip
Evident, declararea unei astfel de variabile se face obignuit:
var z: corrplex;
Vom avea acces la componenta re a lui z in forma. z . re iar la
in forma z. in.

o variabil[ de tip complex va

Definilie

Nofiunea de obiect reprezinti un concept superior celd


inregistrare prin faptul cI poate confine rtit date (variabile) cAt 9i
170

{*^ffi.,t;
l*v,

L,>ffi

) cAfi a- (1b4 .A/ { qcluhtk


ruteanzk c,rV/VPq4' / u /)"4r* bAa? al^t-/4.t*2t
f7 :-7oA'
"--e drrrr-r'*

'{ att

Metodele sunt func{ii sau proceduri care fac parte din definifia
obiectului gi care sunt concepute de programator in aqa fel incAt si
reprezinte cAt mai bine o anumiti no{iune.
Metodele au acces la membrii obiectului in mod implicit.
Parametrii formali ai metod:lor
*-- =' _nu _p9t_ coincide cu variabilele
cuprinieTiTdflnifia- o-biecTulu i:
Sd revenim la nofiunea de numdr complex gi sd ne g6ndim cd, de fapt,
prin dou[ numere reale, degi corectd, este insuficientd. De ce ? pentru
a$a cum gtim, numerele complexe au gi alte rndrimi caracteristice. Una dintre ele
modulul. Va fi de dorit sd completdm definilia cu o metodi care sd reprezinte
lul modulului numdrului complex. Asta vom face, specificAnd faptul c5,

ic,definiliaunui.glj

yffi

Obiectul nostru va avea definilia:

tfrlre comlrlex = object


fer irn : real;
function modul:rea1;
endi

Ce fel de func1ie este modul ? Evident, dupi cum se vede, este o funcfie
Fare nu are nici un argument gi care intoarce o valoare reald. Sd descriem cornplet
te:

eal i

+sqr(im) );
td de funclie cu difcrenfa_cd numele
ruiaii aparJine. Nirnic surprinzdtor, in
e membre prin intcrmediul numelui

prelucreazl datele comporrente ale lui z,

lui complex z.
Sd observdm ca funclia are acces la variabilele re gi im in mod implicit ({ErI o
calificare suplimentari). Apelul funcliei modul in forma z.modul face ca variabilele re gi
l.n sa fie exact datele membre ale lui z.

Definilie

Funcfiile membre ale unui obiect prelucreazl datele membre ale


obiectului care apeleazi metoda.

in continuare vom prezenta modul in care se face inilializarea


membre ale obibctelor, numite gi membrii de tip date ai obiectului. Li
Pascal pune la dispozilie o metodd special[ gi anume metoda constructor.

care constructorul

geaerl

congtructor

begia
re: =Xi ir
end;

1V.2. Metoda

constructor

Observali

ci

acest co

z . generare

Aceasta este o metodd in sens obignuit, care poate fi inclusl in


shiechrlui. Lafel ca qi alte metode, ea poate avea sau nu parametri. In cazul in
dorim sd aibi parametri acegtia trebuie sd difere de datele componente'
obiectului pentru a se elimina pericolul de 3mbiguitate (deoarece metodelc

mulfimea numerelor compl

oricum acc-es la datele membre ile obiectuluilMmf&finirii unui


este aceeagi cu a unei funcfli sau proceduri, cu deosebirea cI antetul este
de cuvAntul

-r,

const,ructor

(cuvAnt rezervat

Iatd cum aratd cel mai

4limbajului)t

zt\ Putem introduce in definifia obiectului complex, urmltoarea declara[ie


-2F*.-^^-.)-E-.:L:^-t.:--!-t-.:---J.^t^..-,
consEructor Lnlt (a,b:real)

re, ln: real i

;
de

constructorului.

conatructor complex. init (a,b : real)


Lm:

end;

=bi

begln

complex.

lult(,

res=ai Lu:=bi

eod;

" r.r1"

Apelul constructorului se iace prin calificarea obignuitd. Astfel, daci z

este

obiect de tip courplex, atunci instrucfiunea:

tructor conplex. geucr,


begln
rs=Xi Lu:=0i
ead;

z.cggpl6x(10,12);
va avea drept efect inilializarea datelor componente ale
valoarea 10 iar z. Lm va avea valoarea 12.

congtructor init(a,b:
conEtructor generare(
funcELoa modul:real;
cndt

in exteriorul dehni{iei obiectului complex urmeazl sI descriem modul

begln
re: =ai

complex=obJect,

Exemolu

constructor:

(-

fi cd vom ol
in forma z=x+0ti, regesit
efectul siu va

lui z

astfel incdt z.

re

va

tLoa comple*.nodul:ro
begln
uodul ! -Eqrt (eqr (re) +gq
end;

Initia-lizar< membrilor de tip date reprezintl numai aspectul


funclionErii constructorului. Apelul constructorului mai are un efect
vom discuta separat, gi anume asocD
cu obiectul declaral
Vom analiza nofiunea de fuetodd virtualA intr-un alt paragraf.
Un obiect poate avea mai multe metode constructor, singura restricfie
aceeacd acegti constructori trebuie s[ difere prin nume. Am folosit gi vom
general, denumirea
pentru c[ cei mai multi programatori desemneazd

init

constructorul, dar evident, gi alte denumiri sunt permise. Am completat

obiectului complex prin includerea a incd unei metode constructor,


generare. Obiectul courplex va avea acum definilia:
t)G)e complex=object
re, im: real;

conEtrucEor init (a,b:real) ;


constructor generare (x:rea1)

function modul:reali

end;
172

z, u: complex;
Ln

z. lnlE (3,4) ; writela (z


u.gcnerare (4) ; u. la:.3
E

Relinem:

Definilia unui ot
utilizator (progran
D:[tn,|1ie._unni_or

limbaiului r.t"Jaci

Un obiect

poate

proceduri).
Metodele sunt'ar
explicit in exteriol
Metodele au aooes

;e

inilializarea vari

care constructorul

generare

este descris prin:

conBtructor complex. generare (x: real ) ;

e ai obiectului. Li
cda constructor.

begia
re: =xi im: =g;
end;

Observali cd acest constructor va fi apelat in forma

z.generare (x) ;
ci vom obline un num6r complex z pornind

efectul siu va fi

)ate

parametri. In cazul in
: datele componente'
e (deoarece metodele

de la un numer real

in forma z=xi0*i, regisind astfel incluziunea gtiut[ a mullimii

-rlefinirii unui

Exemplu

:a cd antetul este

IatI cum arati cel mai simplu program "cu obiecte" in limbajul

numerelor reale

mullimea numerelor complexe.

Pascal:

complex-obJ ect

re,
rmitoarea declaralie

Lm:

real i

conatructor lnlt

1q,b

real)

conatrucEor gBerar (x: real) ;

functloa nodul:reali

i descriem

endl
modul de

tructsor coryIex. lnl,t (a,b : real)

begJ.a

f:=ai ln:-bi

cadi

tructor

,uitd. Astfel, dacE z estc

begin

eomplex. genrar (*: real ) ;

fe:-:ti im:.0i

cndi

z astfel incdt z. re

va

tJ.on eomplex.uodul : real;


begln
nodul: =aqrE (sqr (re) +eqr (ln) ) ;
ead;

umai aspectul "v!4bil-are un efect despre


le cu obiectul .--:
declarat
alt paragraf.

tor, singura restricfie


,rn folosit gi vom
lmatori desemneazi

Am completat
tode constructor,

,'.

z, u:

conplex;

z.lait (3,41 t wrltelu(z.nodul);

u.genrare(4) ; u.inr-3; wrlteln(u.nodul)

Reginem:

Definitia unui obiect in Pascal reprezintii un tip de date creat de


utilizator (programator) conform propriului scop.
insd intre cuvintele rezervate ale
i end.
poate confine date (variabile) 9i metode (funcfii sau
proceduri).
Metodele sunt "anunfate" in definilia tipului de obiect gi sunt descrise
explicit in exteriorul acesteia.
Metodele au acces implicit la restul membrilor obiectului.
173

u-t

o
o
o

Metodele (funcfii sau proceduri) pot avea parametrii formali


acegtia trebuie si difere de datele membre ale o-biectului.
Metoda constructor permite inifializarea membrilor de tip date
obiectului.
Un obiect poate avea mai multe metode constructor.

Preciza(i mod;

Dupd cum s-a p


ajutorul operatorului p

- X.a
x.b
- X.c
- X.lnit,

O procedur[ poate fi inclusi in definilia unui obiect. De exemplu,


obiect de tipul eoarprex ii putem asocia o metod[ de afigare care sr ti
numdrul in forma re+iur*i. Putem agadar sd completim definilia obiectului la:

modul corect d

tlpe complex=crljgqg
f, iu: real;
congtruetor init (a,b:real) ;
conetructor SJenerare (x: real) ;
function nodul: real ,
_'2
procedure .cargf=Hffgefg, 14.h
I
end;

R,3. Fraclir

Defindi un ob
metodd care sI detem

in care procedura de afigare poate descrisd prin:


procedure corrplex. af isarei

begin

writeln(re:

5 z2

end;

O fracfie ordinar
notat cu q. O

r. +r, imi 522, .*i, ),

rea numdrltorului

date (cei doi intre

obiectului 1
ordinarl cu numitor

Probleme rezolvate

fractLe-obJ ect

lnteger;
couatructor luLl
functlon zecioal

pr (t:
Ce valori vor avea componentele obiectelor de tip

complex u si v in

end;

instrucliunilor:
u.

tsructor fracEie.

init (L,2) i
v. init (3, 5) ;

begln

P:Eai q:=1i

end;
Obiectul u va avea componentele re gi irn egale cu
re gi tn egale cu 3 respectiv s.

avea componentele

respectiv 2. Obiectul

begln

fractie.

zec

zeciural .=p/q,
end;

R.4. Punct tn r

Considerim urmitoarea definilie de obiect:

tlpe obiect=object
a: real;
b: int,eger;
e: char;

Definili un tip d
cartezian gi o metodi
sistemului de coordon:

conEtructor init;

endi

var X:obieet;

Un punct in plan

ii

putem asocia dista

parametrii formali

Precizafi modul de acces la membrii obiectului x.

rbiectului.

mbrilor de tip

date
Dupd cum s-a precizat in partea de teorie, accesul la membrii unui obiect se face
ajutorul operatorului punct. Astfel:

uctor.

- X.a
- x.b
- X.c
- X.lnLt

,iect. De exemplu,
igare care sd ti
rfinilia obiectului la:

modul corect de acces al membrilor obiectului X.

Definili un obiect care sd reprezinte noliunea de fractie ordinari qi


si determine fraclia zecimald echivalentd.

metodd care

rrir);

O fracfie ordinard P este caracterizatd, de doi intregi, numiritorul notat cu p gi


q
nocat cu q. O fracfie poate insd fi privitd gi ca un numdr zecimal obfinut prin
numdrdtorului la numitor. Agadar, putem gandi o fracfie ca fiind compus[ din
date (cei doi intregi) gi o metoda care asociazd fracfiei, scrierea sa zecimald.
lctorul obiectului poate reflecta, de exemplu, faptul cd orice num6r intreg este o
ordinard cu numitorul 1.

fractie=obJ ect

p, q: Lnteger;

conet,rucEor lnlt (a: lnteger) ;

rqrlex usivin

functlon zeclmal:real;

ead;

tsructor fractie. init (a : lnteger) ;


begln
P:Eai qs=1i
endl

tLon fractie. zecinal : real

begJ.n

zeclmal z=p/qi
endi
il

H+

Definili un tip de obiect care sA reprezinte noliunea de punct intr-un reper


cartezian gi o metodd prin care sI se determine distanfa de la el la originea
sistemului de coordonate.

Un punct in plan este reprezentat de coordonatele sale, x $i y. De asemenea, unui

ii putem

asocia distanfa pdna la origine, uOl.a

fitT 7

. Constructorul obiectului

t75

punct are numele generare gi asigurd construirea impliciti a punctului

care

originea sistemului de coordonate.

end;

type punet=objects
x, y: real ;
cons trucEor Srenerare i
funcEion distantsa : real

function drepEunghi
begin

aria:

endi

end;

conatructor punct. generare

=abs ( (u-x-v

rrar a,b:punct;

begin

x: drepEunghi;

x:=0; y:=0;

begin

end;

function

u.X:=a.Xi u.y:=a
v.x:=b.xi v.)r:=b

a.generarei a.x:
b.generare; b.x:
x.generare (a,b) ;

puncE. diBtanta : real ;

begin
distantsa: =aqrt (sqr (x) +aqr (y) ) ;
end;

R.6.

Erori
]fl

Descrieli eroril

Definili un tip de obiect care se reprezinte notiunea

geometrice
dreptunghi avend laturile paralele cu axele de coordonate $i ata$ati o metode
sd furnizeze aria sa.

type fraeti

P' 9: inE

functio

endi

function fr
Un astfel de dreptunghi poate fi caracterizat prin doud puncte, de exemplu
din stdnga sus $i cel din dreapta jos. in plus, putem asocia unui dreptunghi gi alte miri

de exemplu aria. Desigur cd putem utiliza tipul punct deja definit. Constructorul obi
drepEunghi va genera un dreplunghi pomind de la doud puncte. Iat[ programul complC

progra.n teEEi
t)T)e punct=object

begin
zecimal:

end;

var f: fract
p: integ
begin

x,y:real;

congEructor generarei
function dlstanEa : real

f.P:=1;
writeln

end.

end;

conEtruetor puncE. generarei


begin

x:=0; y:=0;

Atribuirea f .p:

endi

function

Pascal, este $i unndtoareu


dat-o obiectului, acea de I
nul ! Atribuirea urrndtoiur
de tip intreg gi nu poate fr

puncE. disEanEa : real i

begi.n

dieEanta: =Bqrt (sqr (x) +eqr (y) ) ;

end;

type dreptsunghi=obj ect


u,v:punct;
conEtructor generare
function aria:reali

(a, b

:punct)

forma f . p. UrmStoarea ir
declaratd (nu poate fi co
lnstrucfiunea de scriere r

end;

conatructsor dreptunghi. generare (a,b:punct)


begin
t76

Funcfia membr5 a obiechr


in sfhrgit, degi r
vedea cd el are un rol imq

punctului care rcprezi

u.x:=a.xi u.y:=a.yi
v.x:=b.x; v.y:=b.y;
endi

function dreptunghi. aria : real


begin

aria:

=abs ( (u.

x-v. x) * (u, y-v. y) ) ;

endr'

var a,b:puncE;
x: dreptunghi;
begin

a.generarei a.x:=1; a.y:=1;


b.generare; b.x: =2i b.y:=0,
x.generare (a,b) ; writeln(x.aria)
R.6. Erori in fraclie

Descrieli erorile din prograrnul urmdtor:

noliunea geometrice
e $i ata$ati o metod[

i puncte, de exemplu
i dreptunghi gi alte m
nit. Constructorul
"'. Iatd prograulul colnplet

ts1pe f racLie=obj ect


P, g: integer;
funct,ion zeclmal: real i
endi

functsion fractie. zecimal : real


begin

zecimal z=P/qi
end;

var f:fractie;
p: integer;
begin

f.p:=1, f.q:=0; p:=1; p:=qi

writseln ( zecimal ) ;
end.
*r.

"'"1 Rezolvare :
a.--.*:**=*' 'r,
Atribuirea f .p:=1;

este corecte. Tot corecti, din punctul de vedere al limbajului


gi
Pascal, este
unn[toarea atribuirg, f .q:=o; tofugi ea nu respecti semnificafia pe care am
dat-o obiectului, acea de frac{ie, deoarece, dupd cum se $tie, o fracfie nu poate avea numitorul
nul ! Atribuirea unnltoare, p:=1; este corectd deoarece variabila p este definiti ca variabil5
de tip intreg gi nu poate fi confundatd cu data rnembru a frac{iei, numit[ tot p dar accesibila in
forma f . p. Urmdtoarea instrucfiune este insd gregita; p: =q, nu are sens pentru ci q nu este
declarati (nu poate fi confundat5 cu data q componentl a fracfiei t, identificatl prin f .q).
Instrucliunea de scriere con{ine un apel eronat, identificatorul zecimal fiind necunoscut.
Funcfia membr[ a obiectului f este identificati pnn f . zecimal.
in sf6r9it, degi sintactic prezenla constructorului nu este obligatorie, totugi, vom
yedea cd el are un rol important, absenfa sa putdnd duce la erori imprevizibile.

177

conaEructor trnu.t
begln a:=cbar(a

a)
b)
c)
d)
e)

I
',

1)

Precizafi care dintre afirmafiile urmdtoare sunt corecte.


Un obiect poate confine date gi metode.
O funclie poate fi metodd inclusd in definifia obiectului.
Parametrii unei metode coincid cu datele membre ale obiectului.
Acfiunea unei metode este descris[ in interiorul definiliei obiectului.
Datele membre sunt recunoscute in afara definifiei obiectului.

2l Alegefi corespondentele corecte intre urmdtorele nofiuni 9i definifii.


A1. Metodd 81. Variabile definite in interiorul unui obiect.
A2. Obiect
82. Metodd prin intermediul cdreia pot fi inifializate datele unui obiect
A3. Date
83. Funcfie sau proceduri.
A4. Constructor 84. Tip definit de utilizator, conform propriilor scopuri gi care poate
confine date qi metode,

a) A1 cu 81, A2 cuB2, A3 cu B3, A4 cu 84


b) Al cu 83, A2 cu 81, A3 cu 84, A4 ctB2
c) A1 cu 83, A2 ctB4, A3 cu 81, A4 cu 82
d) A1 cu 84, A2 cu 83, A3 cu 81, A4 cu 82
3) Precizali daci urmitoarele definifii de obiecte sunt corecte:

conatrucEor iul
endi

congtructor char.
begln c3-rari

4l

Consider5m d

tlpe obiect-object
x: real i
conBtructsor ial,l
function put,ere
trdi

congtructor oblect.fu
beg!.n x: rai eudi
functl,on oblect.puter
begin putere:=sqrl
Alegeli exprimarea corectii

x.x

b) x.putere

5) Precizali ce ac

a ; Lnteger;
congt,ructor geDrari

tlrfre unu-obJ ect


x: real ,
a: Lnteger;

endt

conatruetor oblect. generare i


begin a:E0i end;
b) type tegt=object,
a: chari
conEtructor lnlt, (b:char) I

conEtructor intsr

ead;

coDBtructor unu.intre
begLn

](:=ai

end;

C)

c: char;

a)

a) tygte obLec!=object

cotrgt,ructor teat,. InLt (b: char)


begJ,n a:=bi endi

e) tyan char-object

Lfx>=0thent
else n:=trunc(x)

end;

tlpe duiblet=obJecE
a: chari
b : lnteger;
constructor lniE;

procedure converEiei

endi

Prin cele spuse p


a obilctelor. intr-o exprir
al progamdrii pe obiect

conatructor dublet. Lnltt


begtn a:=rat; b:=Q; end;
proeedure dublet. convereJ.e ;

begln b3=ord(a), end;


d/ type unu=object
a:

178

incluse date gi metodq

char;

congtructor lul,u (a: Lnteger)


end;

Proprietatea
;

Programarea pe

obignuit, programatorii

conatructsor unu. init (a: integer)

begin a:=char(a);
e) qa,e char=object
c: chari
conaEructor iniE;

end;

endi
lui.
qi defini1ii,

conEtructor char. inlt ;


begJ,n e3=rari endi
4l Considerdm defini{ia
tlpe obJ.ect=ob j ect

x: real i
conBtruet,or init. (a : real) ;

tte datele unui obiect

opuri gi care poate

de obiect:

functlon putere : reali

endi

conatructor obLect. Lnit (a:real)


begin x:=a; end;
functsion obiect.putere : real;
begin puEere:=Eqr(x) ; end;

Alegefi exprimarea corectd a accesuhii la membrii obiectului x.

a)

x.x

b/ x.putere

5)

c)

putere(X)

d)putere(x);

Preciza[i ce ac[iune realizeazd metoda conaEructor a obiectului unu:

E)T)e unu=obJ ects

x: real i

n : J.nteger;

conatructor intreg(a:real)

end;

congtrucEor unu. LnEreg (a : real)


begin

,(: =ai

1f x >= 0 then n:=trunc(x)


elee n:=Erunc (x) -1;

end;

tV.3. incapsulare
Prin cele spuse pan6 acum, am descris de fapt prima proprietate importantd
a obiectelor. intr-o exprimare mai generald, este vorba chiar de un concept de bazd

Definilie

Proprietatea obiectelor, prin care intr-o singuri definifie sunt


incluse date gi metode, poartl numele de incapsulare.
Programarea pe obiecte cere o disciplind deosebitd, astfel inc6t, in mod
obignuit, programatorii nu includ in acelagi text surs[ definiliile de obiecte gi
179

programele de aplicatie. Pentru definilii de obiecte este de dorit si


unlt-uri. Desigur, am folosit gi p0n6 acum uniE-uri ale mediului de
ln programarea pe obiecte, programatorul trebuie sd-gi creeze propriile unit-uri.

8.

intr-un uait
leglturd cu ti
secliunea

intr

(a se vedea gi

Cum se construieste un unit ?

Simplu, un unit este descris printr-un text _!E$


,Pascal,intr-un filier cu extensja_E! gi av6nd numele ales exact la fel cusel
' u-. t-ulHiJre F-vremjtr-t creira. Astfel, si ne propunem sd creEm un unlts
s[ confini definilia'tipului complex, construit de noi anterior. Pentnr aceasta
scrie un text ca cel de mai jos, qi-l vom salva sub numele de irnaglnar . paa:

unlE lmaginar;
iaterface
tlpe couplex=eljssg
re, iu: real i
conEtruqtor LnLt (a,b : real) ;
congtsrucLgr generare (x: real)
fuuctsion modul:real i
procedure aflgare;

Dupi ce si
astfel incit ob[inen
Putem incl
condifia ca declan
luterface) iar de

Simplu, pri

unit-ul inaginai
ua

'va

be
z

;
.

I
Ell

sndi

lmplenentatioa
conaEructor complex. init, (a,b : real)

begin re:=ai in:=b; end;


constructor conplex. generare
begin re: =xi igr: -0; end;

(x

Vom ob[in
;

real) i

funcELon conplex.zrodul : real ;


begin modul ! Esqrt (eqr (re) +sqr (ln) ) ;
procedure complex. af igare ;

begln writeln(re:522,1+t,im:522r'*it)

end;

; end;

begia
end.
Urmdndrcl

unit-ul (inaginar,

1.

2.

cazul exemplului anterior).


lnainte de prima definilie trebuie plasat cuvdntul
tezer,t at al limbaj ului).

interface

(care este

3.

Dupi

4.
5.

Urmeazd definifiile tipurilor de obiecte (in exemplul nostru, tipttl

6.

7.

iuterf

aee pot fi plasate directive usee cu sensul cunoscut, de utili


a unor anumite funclii, definilii sau proceduri (cum este cazul unit-ului

coryrlex).

Sect'unea care confine definifia sau defini;iile de obiecte, se incheie


cuv6ntul implenent,aElon (qi acesta este cuvdnt rezewat al limbajului).
Urmeazd descrierea propriu-zise a metodelor.
In final, intre begin gi end pot fi plasate instrucfiuni prin care, de
pot fi atribuite valori unor variabile anterior definite in unit-ul respectiv.

unlt def;
latcrtace
type fractLe=oh
p, q: lnteger
conEtsructsor
functlon zc

end;

tlpe punct=obJc
*ry:real;
consEructor
function di
ondi

tlpe dreptungh!

urvspuact;

180

este de dorit sd utilizdm


ile mediului de programare.
)reeze proprii le uni t-uri.

sursd obr
: ales exact la fel cu cel aI
nem sd credm un unit care
mterior. Pentru aceasta vom
e de imaginar.pas:

8.

Intr-un unit pot fi incluse gi alte definilii de funcfii sau proceduri, flrd
leglturd cu tipul objects, respectdnd condilia de anun{are a antetului in
secliunea interface gi descrierea completd in secliunea impleurentsation
(a se vedea gi exerciliul rezolvat numdrul5).

Dupi ce salvlm textul in fiqierul irnaginar.pae il cornpildm (art+rs)


astfel incdt oblinem unit-ul iuraginar. tpu.
Putem include in unit-ul deja creat constructorul de mai sus, respectAnd
condilia ca declaralia si fie inclusd in definilia obiectului complex (secliunea
intserf ace) iar descrierea modului sdu de lucru in secliunea implementation.
Cum se foloseste unit-ul creat ?
Sinrplu, prin includerea unei directive uses. De exemplu, dup[ ce arn creat
unit-ul imaginar. tpu, programul urrndtor poate sI tttlizeze tipul complex:

uses imaginar;

var

z: complex;

begin

z.rez=3i z.Lmz=4i
writseln('Modulul esEe:', z.modul) i

end.
Vom obfine afigarea modului nurndrului complex 3+4i, adicd s.

Probleme rezolvate

ad;
definitiile obiectelor:

fractie,

puncts si

end;

Umrind regulile prezentate in teorie oblinem urmltorul unit.:

u.rrit-ul (imaginar, in

:erf ace (care

este cuvA.il

nsul cunoscut, de utiliz:re


ste cazul unit-ului crt)nostru, tipui courplex).

obiecte, se incheie prin


ervat al limbajului).

ri prin care, de exemph4


r

uait-ul

respectiv.

unlt def;

interface
tlpe fractle=objecE
P, {: integer;

congEructor init (a: integer)


funetion zecimal : real i

endr.

E)rpe

punct=object

real;
congtructor geDerarei
function distanEa : real

x, y:

endi
t14pe drepEunghi=obJ
u, v: punct i

ect

l8l

conatructor generare (a,b :prmct)


functlon arla:real;

laterface
tlpe unu=obJect

char;
conetsrucEor It
end;

end;

a:

J.mpleurentat,lon

constructor fractie. Lnlt (a: lnteEcr) I


begln ps.ai q:=1, 6ndi
functLon fracLLe. zecimal : real i
begln zecLnal r-g/q, end;
const,ructor punct. generlr,
begln ,a:E0i y:EOi end;
funct,Lon punct,. dJ.atanta: real i
begln dlet,anta:=eqrt(aqr(x)+egr(y))r

tlpe caraeter-objc<
c: chari
const,ructor t-!
end;

eadt

conEtruct,or dreptunghJ.. generare (a,b :puact) ;

bcgln u.xr.e.x, u.y:Ea.yi v.x!Eb.ni v.y:.b.y1 endl


functlon drcptunghJ. . arLa r ral i
begln arLa: -abg ( (u.x-v.x) * (u.y-v.y) ) ; eDdi

begLn
end.
Utilizarea

progr.n tEt,i
usea def;
var alfraetlc;
begla

untr-ului

se face

lmplemeatatloa
coBgtructsor uuu.ia.l

begln a:ichar(a1)
coDEtruct,or caract
begln c: =ra I i

begln
ead.

in mod obignuit:

b:puncE;
c: dreptunghl;
Conjugatul numi
intoarcd o variab
funcfiile nu pot intoarce
Agadar definim o proce(
care

end.
R.2.

Eroriin unit

Descriefi erorile din

si

complex prin linia:

urmdtorului

procedurr

unl.t:

unit teet;
tlPe EeeE = obJecE
n: integer;
end;

in

exteriorul d

descrierea procedurii:

procedu.rr

bcgln

Z. fe: =I

endi
Numele unui obiect nu poate coincide cu cel al

secfiunile

begln

untt-ului care-l contine.


J.aterfacc, iuprencntatton gi begLn cnd. Eventual, absenfa

end poate fi suplinitd printr-o line care confine numai textul end.

Corectafi definiliile eronate de la exercifiul 3 din tema anterioar[,


nniE cu definifiile lor.

d) si e),realizdndun

unlt eoreet,a!;
182

eD

lnterface
type unu=obJect,

char;
conet,ructor tnlt (a1: integer)
a:

eadi

t)Gre caract,er=obj ect


c: chari

conaEruct,or lnlts;

endi

Lmplementati.on

t;

r.yi

ead,

rd;

coaEtruct,or unu.lnlt (al : integer) ;


begLn a:.char(a1) I end;
coneEructor caracter. lnlt;
beEin c:=tar 7 end;
begJ.n

end.

Addugali definiliei obiectului complex

procedure care

si

reflecte

operatia de conjugare a numerelor complexe.


I
t

bl

Conjugatul numSrului complex a +


este a bi. Nu putem defini o funcfie
care sA intoarcd o variabil[ de tip conprex deoarece acesta este un tip definit de noi iar
funcfiile nu pot intoarce in Pascal decdt tipurile ordinal, real, $ir de caractere sau pointer.
Agadar definim o procedurl. Antetul sdu va fi anunfat in interiorul definiliei obiectului

courplex prin linia:

procedure conJrigat (vat z:conplex)

Lr:

in

exteriorul definiliei (sau

in

sectiunea

lnplemenlatton) vom

introduce

descrierea procedurii:

procedure complex.conJugat(var z:conplex) ;


begln
z.re:=rei Z.Ln:=-irni
endl

alt-ului

care-l confine. Lipsec


rd- Eventual, absenfa secfftd
ni textul ena.

din tema anterioard, puncteb

R.5. Sumo a doud polinoame

Descrieli printr-o definilie de obiect notiunea de polinom cu


reali gi construifi o proceduri carc realizeaz6 suma a doui polinoame.

Un polinom poate

de coificienli.

fi

descris printr-un intreg care reprezintd gradul siu gi un vector


Reprezentarea unui polinom se va face pomind de la scrierea generald:

p=aLlarx*ar*z+..,+ar-lr'-l

anxn.

Agadar vom reprezenta gradul polinomului

prin idtregul n iar coeficienfii prin vectorul a. Suma a doud polinoame se face obignuit,
183

adundnd coeficienlii termenilor asemenea. Evident, coeficienfii termenilor cupringi intre


mai mic grad plus I 9i cel mai mare grad al celor doud polinoame, se reglsesc nemodifi

ln suma.

in untt-ul urmetor am inclus gi definilia procedurii euna, degi acbasta nu


membrl al obiectului polinom:

unlt _polinom;

endi

4
b)
c)
d)

intserface
Elpe polinon=objects
n : i,nteger;

a:arrayt0..10l of real;
conatrucEor init (g:integer)

1)

2l
a)
b)
c)
d)

procedure auma(p,q:polinom; var r:polinom)


implementation
conBtructor polinom. init;

Numele

n:=gi for i:=0 to n do a[tl:=0;

proeedure auna(p,q:polinon; var r:pollnom)


vaf rnax,min, 1 : inEegeri
begln
lf p.n<g.n then
begin
maxs =q.ni
for l.:=0 to p.n do r.alil:=p.a[l]+9.a[i];
for L3=p.n+1 to q.n do r.a[i]:=q.atll;

Numele

3)

Realiza[i

4)

Introducefi intr-

unit

ni
for i:=0 t.o q.n do r.a[i] :=p.alil +q.alil
for j.:=q.n+l to p.n do r.alil:=p.ali);

conBtrucEor intreg. iai


begJ.n n: =ai end;
tl4re f Iot.ant=obJ ect
x: real i
construcEor inits(
end;

max: =p.

consEructsor f lotsaut. la

beS\n x:=Yi

end

5)

end;

end;

Descrie{i un rn

urmetoare:

begin

tl4pe liEeracobject
c: chari

end.
Un program exemplificativ poate fi urmarit in continuare:

usee 3olinom;

var p,q,r:polinom,
i: integer;
lnit (21 t 5,. tntt (3 ) ;
for i:=0 Eo 2 do p.a[i]:=i;
for 1:=0 to 3 do q.a[i]:=2*i+1;
suma (p, q, r) ;
for i:=0 to 3 do write(r.alil z5z2l i

184

tpr
unit-ului poatt

end;

end

end.

trrebo

tlpe lntreg=obJects
n: integer;
conBtructor Lnl,t

else
begin

p.

unit-ului

Realizarea figierului

ior.

end;

begJ.n

Alegefi afirrnati

Descrierea actiunii meto

var L:integer;
begin

Alegefi afirmaf

tnE-un unLts pot fi intro


Definifia obiectelor in u
Definifia obiectelor in ru
Descrierea actiunii meto

congtructor

gea(a

end;

6)

Descrieli o proc

trt
t)rpe reprezentare=obje
x: real ;

de tipul definit mai jos, cu

congtructor init;

procedure afia;
end;

7l
numdru[ui.

Addugali defini

ii termenilor cupringi intre cd

lme, se regdsesc nemodificati

suna, degi aceasta nu

estc

1) Alegeli afirmafiile
^Intr-un unlE pot fi introduseadevirate:
instruc{iuni

c)

in sec{iunea begln end.


este precedatl de cuvdntul Lnterf ace.
Definifia obiectelor in units este precedatd de cuvdntul implementation.

d)

Descrierea acfiunii metodelor se face in secfiunea

a)
b)
c)

2) Alegefi afirmafiile false:


Descrierea acliunii metodelor se face in secliunea implenent.ation.
Numele unit-ului trebuie precizatin prima linie a descrierii.
Realizarea figierului tpu se face prin comanda compile.
Numele unit-ului poate coincide cu cel al definitiei obiectului inclus.

a)
b)

d)

Definilia obiectelor in

unit

Lnrerface.

3)

Realizali uniE-uri pentru definiliile corecte de la exerci{iul 3 din paragraful

4l

Introducefi intr-un singur

anterior.

t1rye

lntreg=object
n: integer;

conEtrucEor init

(a

unlt

lnteger)

urmdtoarele definilii de obiecte:

end;

conetructor intreg. init


begln n:=ai end;
tlpe f lot.ant=obJ ect

(a : integer) i

x: real i

conEtructor inits (y: real)

end;

conatsructor flotant. lnit (y: real

beS(n x.=yi end;


5) Descrieli un mod

);

de funcfionare adecvat pentru constructorul din definilia

urmAtoare:

tlpe lltera=obJ ect


c: chari

construcEor gen (a: char)

end;

6)

Descrieli o procedur[ de afigare care

sA

dpireascl data de tip real a obiectulul

de tipul definit mai jos, cu trei zecimale.

type reprezentare=obJ ecE


x: real;
constructor lnit;
procedure afis;
endi

7')

Addugafi definiliei obieclului complex o procedurd carc sa producd inversul

numdrului.

185

clae
bcgla
It E.bs (P) ; b:.
whl.le (a<>b) do
pr 'aeun*rouad(

1V.4. Mostenire

endt
cndr

Ca orice alt tip, un obiect poate fi folosit in alte definifii, de date sau
ale unui_ altOllgct. Ceea ce este deosebit insi in cazul obiectelor Esfe a
limbajul Pascal oferi o cale de reutilizare gi extindere a insigi definitiei unui
Avem posibilitatea ca, pornind de la o definilie de obiect, sd o imbogitlm
noi date gi metode. Aceastd posibilitate este in
ele

delmostEnEl--

rea chrar pnn spnsul onglnar


cuvdntului. Vom vorbi agadar de strdmoSi gi urmasi. Urmasii preiau caracteri
ale stramoSilor dar le pot modifica sau pot adduga achizilii noi.

Definilie
Mogtenirea reflecti preluarea tuturor datelor gi metodelor unui
strimog la care se pot adiuga alte date gi metode noi, rezultind un urmar.
Metodele mogtenite pot fi modificate de urmat.

Vom vedea, intr-un paragraf separat, cd modificarea modului


funcfionare a metodelor conduce la un al treilea concept fundamental
program[rii pe obiecte, gi anume acela de polimorfism.

bcgln
end.
Textul anterio
complle, prin care rned

Unprogramc
ueee _raEi

ver f:fracEle;
r: ratlonal;
bcgtn

f. tnlt ( 10, 12 ) ;
r.lnlt(10,12); r.
wrlteln(r.p,. /,,r

ead.

Vom analiza il
in primul r6nd, am utilir

tlpe fractie - q51


P,9 t LnEeger

coaetructor I

end;

A
-.*-ru-

Pornind de la

Dim in continuare un exemplu de aplicare a mecanismului de mogtenire pentru

obline dintr-o

fractl.e

(strlmog) un urma$ numit

ratlonal.

unlt rat;
Lnterface

stirn un numdr rational

aceste ftactll, una este u

obfinutd prin simplifica


cunoscut gr consti din

numitorului urmatE de s
iei, amf,

*X.ryj1

Definifia obiec

conatruct,or inlt (n,m: J.nteger) ;

avAnd semnificafia de

end;

confine metoda constu.

end;

p, respectiv q ale obiect


in plus fap de

tlEr rational = obJeets (fractie)


procedure elnplifie;
lmplementatJ,on

conBtructor f ractJ,e. J.nJ.t;


begln p:-rriqs=D; end;
procedure ratlonal . alnpllf ic;
var EelEl, a,b : Lnteger;
begLn

if p*q < 0 Ehen eemn:=-1 elge Eeun:=li


tf P=9 tshen q:=1

r86

va declanga execufia pm

metoda

aluplJ.flc,

ireductibild echivalenii,
(minus) la numirltor.

elee
(' Llt
begln
ea/'
/
(p)
.ebs
(q)
a:
; b: -abe
i
,A
whlle(a<>b) do tf a<b then b:=b-a elee a:=a-b;
p:=aemn*round(abe (p) /a) i q:=round(abe (q) /a) ;

'1u'''

.^.

end;

.,,,)

,/
L<-rf.-.

,i

end;

lefini1ii, de date sau metodg


ul obiecteloi Este acbea ci
insdgi definitiei unui obiect

t,seo
prin sensul originar aI
Irmasii preiau caracteristici
ilii noi.

begln
end.
Textul anterior va fi salvat cu numele _rat.paa dupd care se va cere op[iunea
compile, prin care mediul de programare va creea unlt-ul _rat. tpu
Un program care ttilizeazi definiliile de mai sus este:

uEes raE;
var f :fractJ,e;
r: ratlonal;
begln

f.lntt (L0,121,
r.Lnlt (10, 12) ; r.elmplJ.fLc;
wrLteln(r.p,, / r,r.ql i

telor gi metodelor unui


noi, rezultdnd un urmag.

end.

modificarea modului de
1 concept fundamental aI
:u un apel de

't,t

funcfie:

Vom analiza in continuare procesul de mogtenire descris de definiliile anterioare.


in primul rdnd, am utilizat urmltoarea defini{ie a obiectului f racr,ie:

tlpe fractle = obJect


P,g s lnteger;
coneErucEor lnLt (n,n: J.nteger)

end;

Lismului de mogtenire pentm

Pornind de la aceastd definitie am introdus no[iunea de numir rafional. Aga cum


dat6. intre
aceste fi6E[ii, una este rrecluctrbtlS, decr vom infele
dt
--I:'
obfinutl prin simplificarea fracfei date. Procedeul
e
cfrho-sCut 9i constd din determinarea celui mai mare divizor comun al numlritorului gi al
numitorului urmati de simplificarea fracfiei prin acesta. Deoarece nu am previzut aq_ocierea
unq s:IT frac{iei, am fEcut
gtim, un

num

Definilia obiectului ratilo-nE1

utu].

Arr.le

ft;'ilit.,

p $i

;;

doi intregi

"*firr
avdnd semnificafia de numdrdtor respectiv
numitor. Ca metode, un obiect de tip ratlonal
confine metoda constructor tnit mo$tenitd de la f ractie. in consecinfd r. init (:.o,L2)
va declanga execu[ia procedurii iniE care va asocia valorile 10. rspectiv 12 componentelor
p, respectiv q ale obiectului r.
in plus fa(a de datele 9i metodele mogtenite, un obiect de tipul

alnprlfJ.c, metod[

rarional

con{ine

care face ca datele membre p gi s sd reprezinte fracfia


ireductibild echivalentd cu fraclia dat6, in cazul unei fraclii negative, am asociat semnul "-"

metoda

(minus) la numdrdtor.

187

rl-

func

Probleme rezolvate

ead;

tunctioa
begiu

R.4. Addugarc

Creafi un urma; al obiectului urmdtor prin addugarea unui intreg.

tlpe unu = object

Creali rtn urma$

x: real i

tlpe A=o!j6g
n: iut

constructor init;

end;

coD,at

congtruct,or unu. init;

begin x:=1i

end;

end;

conat,ructor

begin

Rezolvare

tlpe doi = object(unu)


n: integer;

raz=7

tlpe Brob{

end;

Pro

end;

R.2. Addugsrea unui constructor

procedure

begin r

Creafi un urma$ al obiectului urmdtor prin addugarea unui constructor.

tlT)e tegtl=object
i: int,eger;

conEtrucEor init (a:integer)

1)

end;

const,ruct,or teEE1. init (a: integer)


=ai end;
tl4)e

a)

Constructorul unui sa

b)
c)
d)

In definilie :untui urmag


In definilia unui srrdrfl

conatructor test2 . gen;


begin i: =Q; end;

3)

Creali tn urma; al obiectului urmdtor prin addugarea unei funcfii care


realizeze suma membrilor de tip datd.

tlpe dublEt=object

int,eger;

end;

end;

188

sd

Considerdm ur

progrrh mostenLre;
typ StraDoa = object
n: integer;
constrrucEor tnl,t

congt,ructor St,raros.l
begJ,n o.z -7 i eud;
blpe Uraaa r obJect(E
procedure afl.e;
end;

procedure

Rezolvare

tlpe

Specificati car

end;

(a: intseger) ;

conatruct,or dublet. init (a: integer)

begin n:=ai m:=ai

obiect urmasprine
obiect stramoS tran
obiect urmas trafi$

Strdmogul are mai mull

R.3. Addugarea unei funcyii

constructor init

obiect strdmoS

atunci cdnd este apelat

end;

n, ur:

pin

Un
Un
Un
Un

2l

= object(teEtl)
conatructor geni
tseaE2

Specificali car

a)
b)
c)
d)

urmae=obj ect (dublet)

Irr,DaE. afla;
begin wrl.teln(n);
var asStraDog; b:Ulra

funcElon

eu.ura :

inEeger;

end;

functl-on urnas. Er.rmai


begin Bumas=n+mi end;
R.4. Addugarea unei proceduri

r unui intreg.

Crea[i \nurma$ al prin addugarea unei proceduri de afigare.

tlpe A=object
n: integer;
conatructor init;
end;

con8tructor A.init;
begin rtt=7 i end;
tlpe

B=obJecE (A)

procedure af i.a;

end;

procedure B.af1s;
a

begin wrlteln(n);

unui constructor.

end;

1)

a)
b)
c)
d)

a)
b)
c)
d)

Un
Un
Un
Un

Specifica[i care dintre afirmafiile de mai jos sunt adevdrate.


obiect strdmoS primegte date gi metode de la urma;.
obiect urmas primeSte date 9i metode dela strdmoS.
obiect s/rarnoq transmite date gi metode unui obiect urmaS.
obiect urmq; lramsmite unui obie,ct slrdmo,y date gi metode.

2l Specificati care dintre afirmafiile de mai jos sunt false.


Constructorul unui strdmot poate fi folosit pentru inifializarea datelor sale chiar gi
atunci cdnd este apelat de un unna; al slu.
In definifie :uilJi urmat trebuie specificat strdmoSul.
In definifia unui strdmoS trebuie specihcat urmasul.
Strlmogul are mai multe date gi metode decdt orice urmag al siu.

3)
l unei functii care si

Consider[m urmdtorul program:

prograD moatenJ.re;
tl4)e Strarnoe = objecE
n: lnteger;
conatrucEor lnlt;
end;

construcEor Stramoe. J,nJ.t ;


begln tt=7 i end;
tlpe Unraa = obJect(Stra.moe)
procedure af J.s;
end;

procedure Urmas. af Lg;


begin wrl.teln (n) ; end;
var a!Stramosi b:Urmae;
189

tlpe pua

begin

ItrY :
coDStr
fuactLr
proced
elrdi
Un numdr oo

end.
sA

Precizali care dintre urmltoarele instrucfiuni pot


nu se producd o eroare sintactic[:

a) a.jrr.LLi
) a.afLe;

c) u.init;
9) b.n'=a.n;

b) a.n'=n,'
f) writseln(n);

fi plasate in program astfel

d) a.n,=b.n;
h) U.atial

trel
Construifi prin mogtenire tipurile de obiecte numite unu, doi
doi iar trel s[ fre urmas al lui aoi
Indicalii: Datele Si metodele moStenite de doi de la unu fac parte
din acesta deci se vor lransmite mai departe devenind membre Si in obiectele de
4l

gi

incdt unu sd fie strdmog al lui

Erei.

5) Adiuga(i prin mogtenire o datl obiectului punct definit in continuare,


incdt si modeleze un punct din spafiu (cu trei dimensiuni).
E)G)e

puncE=object

xry:real;
conatructor generare;

reprezentare de puncurl
vom considera un numSt
considerdnd axa vertical
obfinem exact aceea$i r
mult, distanfa pdn[ la or
ro va fumiza valoarea I
este afi$area. Este natura

natural sI afigdm un nug


datele gi metodele de la

funcfiei

end,'

procedr
end;

con8trucEor puncb. generare i

begin x:=0; Y:=0;

end;

6) Adiuga(i, prin moqtenire, obiectului punct defint anterior (in plan), un


membru de tip dat5, care prin inilializarea facutd de constructor si primeascd drept
distanla de la punct la originea sistemului de coordonate.

afiE.
tl4)e coq

Urmeazd, descrir

nou

ci un obiect de tipu

cuprinse in definifia tipu


al funcfiei de tiparire.
Metoda constnr

1V.5.

Polimorfism

conBtruct
begl-a
Nu este nevoie

IV.s.1. Rescrierea metodelor


Urmasii pot modifica metodele mogtenite. Simpla reanunlare a metodei
definilia urmasului conduce la inlocuirea metodei mogtenite cu una noud.
Vom ilustra conceptul de polimorfism pe un caz foarte simplu.
presupunem cd definim noliunea de punct intr-un sistem cartezian in plan.
punct este caracterizat de cele dou[ coordonate, x $i y. Apoi mogtenim nofiun
de punct,

in aceeq_de complex.
-ffi.t va conline pe l6ngd cele doul date, u
--rc-Uie6tul d; tip
metode: constructor, distanfa pflni la origine gi afigare.
Metoda constructor init are doi parametri ale cdror valori se
coordonatelor, cu alte cuvinte, prin inilializare, specificdm coordonatele punctului"
Metoda ro furnizeaz[ distanla pdn[ la origine cu formula deja c
iar metoda de afigare aftseazd punctul in forma (x,y).Avem toate premizele
acceptdm cd noliunea introdusi reprezinti intr-adevir punctul geometric

formula cunoscutS: p

=.
funct,ioa
begia

Aceeagi metodi
deci nu este nevoie de o r

Metoda de tioari

ocedrfe

blci

Proceqtrag

begln

wrl.telu

ead;
190

pentru ca cel deja definit


Metoda ro, calc

fr plasate

in program astfel

type punct, = object


xrY : reali
congtructor init (a, b : real)
funct,ion ro : real;
procedure afig;

incl

end;

d) a.n: =b.n;
h) a.attat

Un num6r

dol gi trel asfd


aot
lui
'. de la uau fac parte integranfi
membre Si in obiectele de
numite unu,

rnct definit in continuare, asfd

complex este foarte apropiat

ca

reprezentare de punctul descris mai sus. intr-adevdr daci


vom considera un numdr complex in forma 2=x+iy atunci
considerend axa verticald ca fiind axa imaginard iar cea orizontali drept axa real[,
obfinem exact aceea$i reprezentare geometrice a punctului de coordonate x gi y. Mai
mult, distanfa pini la origine coincide cu modulul num[rului complex deci funcfia
ro va fumiza valoarea modulului. Singura diferenld pe care trebuie si o impunem
este afigarea. Este natural sI afigim un punct in plan in forma (x,y) la fel cum este
natural sE afig5m un numlr complex in forma x+iy sau x+y*i. Agadar vom mogteni
datele gi metodele de la pnnct la conplex, dar vom redefini modul de lucru al

functiei

afie.
Elpe courplex = object(punct)
procedure afls;
end;

def,rnt anterior (in plan), un al


mctor sd primeascd drept valoare

Urmeazd descrierea efectivi a metodelor celor dou[ obiecte. Precizlm din


conplex confine prin mogtenire toate datele gi metodele
cuprinse in definilia tipului puncts; singura deoasebire va consta in modul de lucru

nou cd un obiect de tipul

al funcfiei de tiparire.
Metoda constructor, numitd in definilie

inits,

este:

conetructor punct. init (a,b : real)

begin x:=ai y:=bi

endi

Nu este nevoie de o definilie separat6 a unui constructor pentru compJ.ex


pentru ca cel deja definit in punct este conlinut prin mogtenire gi de complex.
Metoda ro, calculeazd distanta de la punctul din plan p6nd la origine pnn
ifoipla reanunfare a metodei
Eenite cu una noue.

) tt

caz foarte simplu. Si

sistem cartezian in plan. Ur


;i y. Apoi mogtenim !g!*-oo
cele doui date, urmitoareb
ilre.
ale ciror valori se transferi
cim coordonatele punctului.
rc cu formula deja cunoscuE
r). Avem toate Premizele 5
prnctul geometric

formula cunoscutE: p =

funct,Lon

+y'
punct,.ro: reali

ros =aqrE (Eqr (x) +sqr (y) ) I end;


Aceeagi metodd este confinutd de complex, prin mecanismul de mogtenire
deci nu este nevoie de o definifie separati.
Meloda de tipapire va fi diferiti. Pentru punct, considerlm:

begln

e complex.afiE;

d,

eln( tnurtar complex:',x.25a2,. +, ry!522 r.*i,

);

frocedure courplex. af iE ;
begln

writeln('nunar conplex:',r<.5t2r' +t,yi5z2,'*i'

and;

)i

l9l

in
sus intr-un

sfArgit, este recomandabil5 cuprinderea tuturor clementelor definitc rnai


unit, denumit in continuale p_c:

unit p_ci
interface
tfrpe punct = objects
t,y z reali
constructor init (a,b: real)
function ro : reali
procedure afis;

degi numele procedurii nu s-,


fundamental al programlrii

Numim polimorfs
prin acela$i nume, poate
;

endi

tylre complex = object(punct)


procedtre afis;
endi

er

in sfhrgit, din cele pn


importanti gi anume cd ma
constituie o "reletd" unicd. I
de reprezentare. Astfel, referir
un programator s[ desemnez
toate cazurile fiind vorba de d
util5 introducerea ca metod5
procedure independente. Der
poate fi gandit fie ca funr
independent. Unui programat(
modul prin cuv6ntul uodul
dietanta gAndindu-se la c
geometrice a numirului corrUl
aceasti flexibilitate se regdseg
r

imlrlementatsion

constructor puncU . init ( a, b: real ) ;


begin x:=ai y:=b; endi
function punct.ro : real;
begin ro: =sqrt ( sqr (x) +sqr (y) ) ; endi
procedure punct.afis;
begin

writeln('puncts (t,><2522,,,',y,2522,, )');

endi

procedure
begin

compJ-ex.

if is;

writeln('numar cornplex:, ,2ti522r, t, ,y25t2,, *i, );

end;

begin
end.

obi

laa

Cum utilizlm definiliile de mai sus intr-un program ? Simplu, putem


declara obiecte de tipurile punct gi complex iar cornpilatorul va "gti" sd asocieze
datele gi metodele descrise. Sd urmdrim:

progrErm tegti
uEeE p_ci

Metodapoatefiofirs
urmltorul tabel:

x>0,
x<0,
x<0,
x>0,

var p:puncti
z: congrlex;

begin

init ( 3, 4 ) ; z. init
p.afis; z.afi-ei

p.

(3

,4) i

end.

Am definit p de tip punct $i z de tip cornplex. in program,


init ( 3, { ) apeleazd constructorul (metoda) init cu parametrii actuali 3 gi r
Agadar D va reprezenta punctul din plan de coordonate 3 qi 4. Variabila z este &
tipul conptex iar metoda constructor, apelat[ in forma z . init ( 3, 4 ) face ca x gi
y sd aibd valorile 3 respectiv 4. Evident ce pentru un numer complex aceste date, r
p.

gi

'

y, au semnificatia de parte real6, respectiv imaginard. Afiqarea se va face distincr

192

y>0
y>0
y<0
y<0

Apartenenfa la axe o von


Oy (simbolizind frontiera dintre c
plasa in nici un cadran deci vom ir

funcEion punct. cadr.- i

begLn

if
tf
if
tf

(x>0)
(x<0)
(x<0)
(x>0)

and
and
and
and

(y>0) tben
(y>0) tshen
(y<0) tshea
(y<0) theo

or clcmcntclor dcflnitc rra:

degi numele procedurii nu s-a schimbat. Extragem de aici


fundamental al programirii pe obiecte, gi anume acela de p

Definilie

Numim polimofiism, acea proprietate prin care o funcfie apelati


prin acelagi nume, poate avea acfiuni diferite de h strdmog la urmaS.
in sffirgit, din cele prezentate pAni acum se desprinde o concluzie practicd
important[ gi anume cd modelarea realitalii prin programarea pe obiecte nu
constituie o "reletd" unicd. Fiecare programator poate sd-qi personalizeze modul
de reprezentare. Astfel, referindu-ne la nofiunea de numdr complex, este posibil ca
un programator sd desemneze datele prin re gi iur sau a gi u sau x gi y, etc., in
toate cazurile fiind vorba de doud date de tip real. Un programator poate considera
utild introducerea ca metod6 membru o metodd de sumare, altul poate construi o
procedurd independentE. Deasemenea, calculul modulului num[rului complex
poate fi gdndit fie ca funclie fie ca procedurd, ca membru in obiect sau
independent. Unui programator i se poate pirea mai sugestiv sI desemneze funclia
modul prin cuvdntul modul, altul poate utiliza cuvAntul ro sau, de ce nu?
distanta gdndindu-se la distanla de la punctul corespunzdtor reprezenlirii
geornetrice a numirului complex la originea sisternului de coordonate. Tocmai in
aceast6 flexibilitate se regdsegte personalitatea, valoarea gi talentul fiecdruia.

')i

Probleme rezolvate

522, '*i'

i
Addugafi definiliei obiectului puncc o metodd care sd reflecte apartenenfa
acestuia la un cadran sau Ia axele de coordonate Ox, Ox', Oy, Oy'.

program ? Sirnplu. putem


rilatorul va "gti" sd asocieze
Metoda poate
urmdtorul tabel:

x>0,
x<0,
x < 0,
x>0,

In prograrL
actuali
r gi r
r parametrii
r gi n. Variabila z este de
complex.

z.init(3,4)

facecaxp

mdr complex aceste date-

Afiqarea se va face distinci

fi o funclie

care

si

y>0
y>0

cadranul I

cadranul 3
cadranul 4

intoarcd valoarea cadranului pornind de la

cadranul 2

<0

y<0

Apartenenfa la axe o vom face intr-o forml codificatd in care tz reprezintd semiaxa
Oy (simboliz6nd frontiera dintre cadranele 1 gi 2), respectiv zs, :+ gi 41. Originea nu o vom
plasa in nici un cadran deci vom intoarce valoarea 0. Funcfia este:

funcEion punct. cadran;


begln

if
if
if
if

(x>0)
(x<0)
(x<0)
(x>0)

and
and
and
and

(y>0)
(y>0)
(y<0)
(y<0)

tshen cadran:=1i

then cadran:=2;
then cadran:=3;
t,hen cadran: =4;
t93

lf (x-o) aDd (y>0) Ehen cadranz-L2t


lf (x<o) and (y=0) then cadran;=Z3i
1f (x.0) and (y<0) lhen cadran:=34i
lf (x>0) aDd (y=0) then cadraD3.{1'
lf (x-o) and (y=Q) then cadran:=0i

lnterface
var pi:rea1;
t!E)e punct = obJeet
x,y : real;
constructor lnit(a
function ro : real

cad;

procedure afJ,e;
function cadrau:ln,

Desigur, antetul funcfiei trebuie inclus in defini{ia obiectului puncE:

tlpe puDct - obJect


x,y : reall
conatrucEor ialt, (a,b:real)
funetlon ro : reall
procedure afisl
functlon cadran: Lnteger;

end;

tlpe complex = e!J6g1


procedure af J,s;
fuuctlon argrunent:t

end;

end;

lmplenent,ation

Apelul metodei

se face in forma p. cadran, in care p a fost declarat


detippunct.Nouametodivafitransmisdurmagilorprinmogtenire

ca

fiind

conetructor punct.lnl
begln x:=ai y:=b;
funct,lon punct,.ro s I
begin ro:=aqrt(agr

procedure punct,. af J,s ;


begi.n

wrl,teln ( ,puncts:

AdIugali definiliei obiectului courplex o metod5


care sE famizeze argumentul numerului complex z-x+Ly.
Reamintim ci argumentul reprezintE unghiul format de
axt Ox cu dreapta care une$te punctul cu originea
sistemului de coordonate, in sens trigonometric.

Tot ce avem de fEcut este sd ne reamintim definijia argumentului unui num&


dacd numIrul complex ge afltr h

y/x, in figurI

fuactl,on courplex. argunent, : rcal ;

var L:LaEeger;

bcgln

l:.cadran,

caae i of
1, { : argurent,: =arctan (y/xl t
2,3 : arguuent,: =pl+arctan (y,/x) ;

avemrcperezentarer

se obfine prin suma dinEe 180. gi


conplex este un urmag al tipului de obied

puact, putem folosi funcfia cadran deja definitd

functLon punct. eadra.u


begin
tf (x>0) aud (y>0)
tf (x<o) and (y>0)
tf (x<o) and (y<0)
tf (x>0) and (y<0)
lf (x=0) and (y>0)
1f (x<0) and (y=0)
lf (x=0) and (y<0)
tf (x>0) and (y=0)
lf (x=0) and (y=0)
end;

procedure complex. afLr


begln
wrlteln( tnumar coq
end;

function complex.argu
var i: J.ntseger;
begln
i: =s3dia1'
cage L of

1,4: argum6Dts:=arr
: argnr.ueat: -plr
12 : argrunent: =p11
23: argunenb:-pL;
34 : argrr:neDt: =3eg
41: argu.urenE:=e;
0: arguneat:-0;

12: arguaeaLt=pL/21
23: argrunent:.p13
34

2,3

arguoerg r -3 rpt,/2 ;

41r argnrment:=0,
endt

0r argunent:r01

rndl

end;
endi
ln

ualt
194

p_a;

acest moment

unlt-ul

complet este:

end;

begln
5rJ.:

end.

-4rarctan (1) ;

biectului punct:

interface
var pi:real;
t)T)e punct = objecE
xry : real;
conaEructor init (a,b: real)
funcEion ro : reali
procedure afie;
funcElon cadran : integer ;

end;

tlpe complex = object,(punct)


procedure afia;
functlon argu-urent : real ;
end;

p a fost declarat ca fiind obiect


)$tenire.

implementation
conBtructsor puncE. lnit (a,b:real) ;
begin x:=ai y!=bi endi

function punct.ro : real;


begin ro: =EqrE (sqr (x) +eqr (y) ) ;
procedure punct.aflE;

end;

begJ.n

etodl

r+iy.
at de
grnea

dlia argumentului unui numiir


I numdrul complex se afle fo
In figuri avem reperezentara
bline prin suma dintre 180" $i
e rm urma$ al tipului de obied

writseln('punct: (r,x:522,,,',!2522,,

endi

)')

function punct. cadrani


begin
tf (x>0)
lf (x<0)
tf (x<0)
tf (x>0)
tf (x=0)
lf (x<0)
tf (x=0)
tf (x>0)
tf (x=0)

and
and
and
and
and
and
and
and
and

(y>0)
(y>0)
(y<0)
(y<0)
(y>0)
(y=0)
(y<0)
(y=0)

then cadran:=1i
then cadran:=2i
then cadran:=3;
Ehen cadran:=4;
Ehen cadrattz=l2i
t,hen cadranz=23;

then cadran:=34;
then cadrans=41i

(y=O) Ehen cadran:=0;

end;

procedure complex. af is ;
begln
wrLteln( rnu.nar complex: t,x:5:2,,
end;

functlon complex. argunent : real


var 1:integer;

+,,1r:5:2,, *i, I i

begJ.n

i: =cadrani
cage L of
:
:
12:
23 :
34 :
41:
0:

1,

2,

4
3

end;

argr:.urenE:

=arctan$/x)

argument: =pi+arctan (y,/x)

argunenEt=pi/2i
argurnenE: =pi;

argr:nenEz =3*pL/

argunent:=0;

argurnent: =0;

endi
begJ.n

Pl: =4*arctan (1) ;

end.

195

S[ remarcim faptul ci pe l6ngd defuri{iile cerute a aplmt un element nou gi


variabila pt. Aceasta a fost declaratd ca variabild globabld la inceput, 9i, pentru prima
observIm rolul sec{iunii begJ.n end a unit-ului, in care am dat efectiv o valoare variabilei
fi ..,
prinintermediulfuncfeirigonomericearcEan.Deoarece

R.4.

Sumi Sip

arctan(1) =; obfinempi=lc

'Este simplu de vlzut cI un program care:utilizeazd func{iile cadran gi a


pentru o variabild de tip conprex, poate arita astfel:
Pomim de la defini

progrrrn tEt,

(a+ib)+(u*
(a+ib)(u+i'

ugeB P_ci

vai z:complex;

Cel mai simplu e$

begin

z.Lnlt(2,-41i

z.afiai
wrLteln (z. cadran) ; wrlteln (z. argu.rrent)

pentru a inilializa partea rF

obiecte de tip

end.

ueeg Lnaginar;
procedure guina (x,Y:cq
begJ.n z. inl.t (x. re+
procedure produa (x,Y:'
begin
z.lnit (x. re*Y. re-r

Construi(i prin mo$tenire gi polimorfism un

punct

conplex.

in spafiu care si

redefineasci funclia
"distan{6" de la punct la originea sistemului de

end;

var xry,

coordonate.

z: conplex;

begLn

Pomim de la definilia obiectului punct de la prima problemi:

tlT)e puncts e obJect

x.Inlt (2,31 ; y. iuit (


enma(x,y, zl i z.afiaa
produe (x,y,zl i z.afL

end.

:<,y: real;

conaEructor Lnit, (a,b : real)


functLon ro : reali
procedure afla;
functLon cadran: integer;

1) Modificali

tyPe tsst !

end;
Urmagul va avea trei date de tip real, corespunzdtoare celor trei
Evident c[ vom redefini constructorul clasei astfel incdt sd inifializdm 9i coordonata
introdus5. Deasemenea, func{ia distanftr are o expresie modificatd reprezentiind di
paralelipipedului construit pe axe cu un v6rf in originea sistemului de coordonate gi v6rfl
opus situat in punctul curent.
El4re punctst = obJect (punct)
z: real i
conatructor lnlt (a,b, c: real) ;

x:r.

coDat:

eud;

conEtruct{

begia -

2l

end;

Elpe afLe

xry::

'

cougtsrt
c : reaI)

Proced

eud;
coDstriucts

begin r

end;

procedure

funcEiqrr punct3 . ro : real i


begiri

ro : igqrt (eqr (x) +aqr (y) +aqt lzl I i


end;

196

Modificafi pri

definit in continuare astfel

functlon ro:rea1i

conEtructor punct3. inlt (a,b,


begin
]E!=ai, y.=bi Z.=Ci

pri

urmltor astfel incat variabik

begin r

3)

Modificagi Pri
obiectului urmdtor astfel inr

e a aperut un element nou $i anurc


ll5 la inceput, gi, pentru prima
rm dat efectiv o valoare variabilei
I

arctaDtf) = I
4

pr.

obfinempi=rc

R.4. Sumd

Ei

produs

Realizafi proceduri care se efectueze suma $i produsul obiectelor de tip


complex folosind unit-ul imaginar. tpu.

azd funcfiile cadran gi arguneat'


Pornim de la definiliile cunoscute ale sumei gi produsului:

(a + ib) + (u + iv) - a + u + i(b + v)


(a + ib) (u + iv) = au - bv i i(av * bu)

Cel mai simplu este se folosim chiar constructorul din definifia tipului complex
pentru a ini{ializa partea reald gi partea imaginari a sumei, respectiv produsului a doud
obiecte de tip complex.

uees imaginar;
procedure euma(x,y:complex; var z:complex)
ln

ia
le

begin z.Lnit(x.re+y.re,x.im+y.irn) ; end;


procedure produe(x,y:complexi var z:complex) ;
begin

z . init

(x. re*y. re-x. iur*y.

Lur,

x. re*y. im+x. im*y. re) ;

endi

var *,Y, z: complex;

begin
dma problemi:

x.lnit (2,9) i y. init (4,11 t


Euna(x,y, z) i z.af igare;
produs (x,y,zl i z.af isarei

end.

1) Modificali prin mogtenire $i polimorfism constructorul din definilia tipului


urmetor astfel incdt variabila x sd fie inilializata cu valoarea 2.
tlpe te8t = object

:c : real i
conetructor init;

iprrnzltoare celor trei coordonateit sd inilializdm gi coordonata nfl

end;

modificati reprezentAnd diagonab

conEEructor

tseEE.

begln x:=31

sistemului de coordonate gi vdrful

init;

end;

2l Modificali prin mogtenire gi polimorfism procedura de afigare a obiectului


definit in continuare astfel incdt datele sI fie afigate in ordine inversd
tlpe afle = obJect
x,y : real;
conatrucEor init;
procedure t,ipar;

r1);

aI);

end;

conatrucEor afLe. lnlt;

begln x:= 0i y:=0,

proeedure afls.tlpar;

begin writeln

);

3)

rx= I ,x,

Modificali prin mogtenire

obiectului urmdtor astfel

end;

' y=' ,y) ;

end;

gi polimorfism funcfia de incrementare din definilia


de tip datd.

incit si.realizeze decrementarea valorii membrului

197

tl4)e nu.n . object


n : Lnteger;

conaErucEor Lnl,t (a: !.ntcgcr) ;


fuacELon func: J,nt,eger;

'

begln n!-ai end,


functLon nusr. func: Lnt,egr,
begln func:=n+1i endi

begJ.a

Dupd cum se ved


parametrului a. Funcfia gu
puterii a doua a lui n.

eDdi

coaEtrucEor nun.lnit(a:lnteger) i

consEructo:

4)

Modificafi prin mo$tenire gi polimorfism funcfia membru a obiectului urmitor


astfel incdt valoarea intoarsi sd fie de tip real

t1rye Latreg r obJect


n : J.ntegcr;
conetructor LnLt (a : J.nteger) ;
functloa va1 : J.ateger;
endt

funetlon ut
begln Pr
Desigur c[, prin

posibilitatea de modificare

tlPe dol -

fuacts:

eudi

Fald de datele gi m

coaat,ructor lntreg.inLt(a:lnteger)
begln n:-a, endi
func t,Lon J,ntreg . val : lnt,eger ;
begln val:-ni end;

modifica modul de acliune

putere

va

fi:

funeEloa d
begJ.n p,

Sd explicdm moduJ

putr6

1V.5.2. Concepte rafinate: inherited,

-lE

Calificativul lnber

virtual si self

ea mo$tenit5 de la shamoEd

furnizarea valorii

Atributul lnherited
Polimorfismul prezentat in secfiunea anterioar[ are in limbajul Pascal doui

n2. La

ac

furniza valoarea ,r2 + 1.


mogtenit[ dar totugi o folos
adusi de limbajul Pascal c
sintactic, o atribuire de forrn

Putere: rPu

conduce la o eroare de

din

dim un

exemplu

begin I.l,

credem, foarte sugestiv.

*_Exenplu_
-r- Presupunem cE avem doul definilii de obiecte: uau gi aoi. Obiectul de tip dol. ya
fi

urmag al lui unu (sau unu este stramog al lui aor). Fiind o construcJie foarte simpld nu
vom declara un unLt separat ci vom include in acelaqi text sursi gi definitiile gi programul

ilustrativ.
incepem cu obiectul unu care are definifia urmetoare:

t*' :": i"::l:::

coDatructor lnit (a: Lnteger) ;


functl,on putere : integer;

end;
Agadar, acest obiect confine

coaatructor
198

gi o funcfie

numiti putere.

variabil5 de

tip intreg gi dou[ metode:

obiectutriloTl:

bornpled
---G*ffi$Ii,
var X:dol,

gr cea

Sd

exex

un

Atribut

Vom prezenta a
conceptului general de p(
Incepem cu o pr
comparafie, toate metodr
Acum vom avea un critc
permite declararea unor r

Metodele virt
momentul execufiei.

constructor unu. init


begJ.n n: =ai end;

(a:

lnteger)

DupI cum se vede, constructorul inilializeazd, pur gi simplu pe n cu valoarea


parametrului a. Func[ia putere prezentatd mai jos nu face decdt sd intoarcl valoarea
puterii a doua a lui n.
functLon unu. put,ere : lntegep;
begln putere:=sqr(n) ; end;
:tria

membru a obiectului urmltor

Desigur cd, prin mogtenire, datele gi metodele se transmit urmagilor avdnd


posibilitatea de modificare a metodelor. SE urmdrim definilia de mai jos:

tlpe

doJ.

= obJect(unu)

function putere : integer;

end;
Fa[i de datele gi metodele mogtenite am anuntat un singur lucru, gi anume cd vom
modifica modul de ac{iune al funcfiei putere, mo$tenite din unu. Noua defini]ie a funcfiei

:)i

putere

va fi:

Sd

functlon doi.putere : integer;


begln putere:-lnherit,ed putere + 1;

explicdm modul de lucru, foarte simplu, care se rezume

puter:=inherLted putere + 1;

end;

h atribuirea:

Califrcativul lnherited din dreapta va cere execufia funcliei putere a$a cum este
ea mogtenitd de la stramogul unu. Agadar, apelul functiei putere din dreapta se va solda cu

puter a obiectului doi va


intr-adevir, noua funcfie putere are un alt efect decdt cea

furnizarea valorii n2 . La aceasta se adaugl

are in limbajul Pascal doud


separat.
a programirii pe obiecte in
enitd dar modificati de cdtre

rctoda-fid'ffiit?i-s6.TiItsffiim un exemplu simplu, dar

gi

dot. obiectul de trp aol va

I o construcfie foarte simpl5 nu

srsd gi definifiile gi programul

t:

integ gi doud

metode: un

gi in final func{ia

furniza valoarea ,r2 + f.


mogteniti dar toflrgi o folosegte pe aceasta ! Acest rafinament este o contribufie importantd
adus[ de limbajul Pascal conceptului de polimorfism. Facem observafia cd, degi corect[
sintactic, o atribuire de forma

putsere:=putere + 1i

conduce la o eroare de execute fiind in realitate un apel recursiv infinit al funcfiei putere
___<
drn obrecttl doi.
In sfirgit,
sflrsit- completlm
bomoletdm expunerea
exou
printr-un program banal, care va afiga valoarea 5

var X: dol.;
begin X.lnit(2) ; wrlteln(X.putere) ;

end.

Atributul virtua!
Vom prezenta al doilea rafinament important adus de limbajul Pascal
conceptului general de polimorfism. Va fi vorba de aga numitele metode virtuale.
Incepem cu o precizare: degi nu am spus, pentru ci nu aveam termen de
comparafie, toate metodele pe care le-am prezentat anterior sunt metode statice.
Acum vom avea un criteriu de comparalie, deoarece vom vedea cd limbajul Pascal
permite declararea unor metode virtuale. Definifia este simpld dar profundi:
Definilie
Metodele virtuale sunt acele metode care se asociazi obiectului Ia
momentul execu(iei.

t99

,}

var a:unui
b: doi;
begin a.Lait;

Iatd ceva nou, metodele aga cum le gtiam pAnE acum sunt asociate
obiectului incd
Astfel, aga cum am'vdzl! dacd x este un
obiect de tip

un

e tip

incd din faza de compilare, se va


asigura corelarea metodei putere corespunzdtoare definiliei din unu respectiv din
doi. Exemplul este insi foarte simplu, astfel incdt putem observa ugor cd indiferent
de "moment", compilare sau execufie, semnificafia obiectelor x respectiv v nu se
modificd. Agadar diferenlierea Etatic sau virtual nu este relevantl pe acest
exemplu simplu. Existd oare deosebiri intre o asociere obiect.metodi, in functie de

moment? Rlspunsul este da, dar pentru aceasta trebuie


exemplul intr-un mod subtil.

\t Exemplu
-Tffi***plicand
unlt

atatic;

unit-ul

b,
Apelul constructorului perl

doi,

si

complicdm pulin

tipar soldat cu al
'claga unu

apelul procedurii

Ce se int6mpll insd la E

init, apelul va solicit


san-TdErffidfl tuncliei ttpar

constructorul

compilarii, agadar, din clasa unr

claga unu

de mai jos:

Recapituldnd, am obfinut al

clasa unu
claga unu

INIERFACE

rlur,6 urru

qor

pentru a cere apelul funcfiei tipar


in cadrul aceleiagi defini1ii.
Concluzia: funcfia tipar r

; :of;:"".,

Situalia este nepldcutii avii

conetructor LnLt,;
procedure tlpary

end;
Am definit tipul de obiect unu care confine ca gi membru de tip dati o variabild de
tip intreg numiti p. Mernbrii de tip metodl sunt constructorul tnlt gi procedura tlpar.

(punc

Toate sunt statice.

tlpe doJ. - obJect,(unu)


procedure tlpar;

vizibi

cnd;

unit _wirtual;
INTERFACE

Tipul dot

I
fi
,'

doi

este urma$ al lui rrnu dar care redefinegte procedura


Urrneazi secfiunea de implementare:
IITIPLEMENTATIoN

Eipar.

ty;re unu = objacl


g : iatr
coaaEry
proce&r

conatructor unu.l,nlt;

begln

p:

-1, t!pgr.,

endi

end;

IatI un prim lucru deosebit 9i anume faptul cd pe l6ngd inilializarea variabilei p am


rcalizat gi apelul funcliei tslpar. Cu alte cuvinte dorim ca in urma apelului constructorului
sE realizim gi o afigare. Evident, metoda inLts 8r acces la ceilalfi membrii ai definiliei deci

tlpe doi = objecl


proce&r

end;
fUPLEMEMrATfOII

apelul este corect.

conatnrctsor uDu.:

Urmeazd metoda tJ,par a obiectului unu in care se aftgeazd textul claea unu
menit sE ne confirme cd am accesat o metodl membr[ a obiectului unu. Nimic deosebit

procedure u.ou.t,i1

pdnd acum.

proeedure doi.til

procedure unu.tlpar;
bcgJ.n wrLteln( tclaga unut ) ; end;
Urmeaz6 descrierea metodei redefinite de tipul dot. Aga cum probabil cd vI
agteptafi, procedura ttpar este redefinitl astfel incit si afrgeze claEa dol, text menit sii

end;

end.
Cum poate fi folosi unit-ul? in modul cel mai simplu:

uaea statlc;

200

begin writelE
begin writela

begin
end.

Programul poate fi, evident

uses _virtual;
var a:uDui

sugereze obiectul care a accesat metoda.

procedure doi.tlpar;
bcgln wrLteln ( t claaa dol')
Secfiunea begin end rdmdne vidi:
begla

begin P:=1;

b:doi;
begin a.lnitr' b
in care, binein[eles am inclus uoit
obline afiEarea:

clasa uau
clasa doi

var

n pane acum sunt asociate


rm am vdTLtt, daci x este un
idin faza de compilare, se va
:finiliei din unu respectiv din

ci indiferent
x respectiv Y nu se

em observa ugor

biectelor

nu este relevanti pe acest


obiect.metodi, in funclie de
trebuie sd complicdm pulin

asunui

b:doi,'

begin a.init; b.Lnit; end.


Apelul constructorului pentru obiectul a va cere inifializarea lui p

cLr

1 urmatd de

tipar soldat cu afigarea textului


,,
'clasa unu
I
Ce se intdmpld insd la apelul b.init; Z Oeoegqtiprl dgllrnu r"ddr.St"
constructorul init, apelul va solicita constructorul tnit din obiectul unu. Acesta la rAndul
sfu-v6-CiffiFffil funcliei tipar. Care tipar? Legdturile se stabilesc la momentul
apelul procedurii

compilarii, agadar, din clasa unu compilatorul nu poate "$ti" adresa la care trebuie sd treacd
pentru a cere apelul funcliei tipar din obiectul doi. Ca atare legitura va fi stabilita, logic,
in cadrul aceleiagi defini1ii.
Concluzia: funcfia tipar va afiga textul

claga unu

Recapituldnd, am obfinut afigarea, pe doui rdnduri succesive:

claga
clasa

unu
unu
Situalia este nepl[cutd avAnd in vedere

rembru de tip datd o variabili de

i)ruI

lait

gi procedura

tlpar.

doi

cdnp metoda este apelatd de b.

sintantin
,/l Sintactic,
(punct'gi virgul6)
vrzrbrld in

e procedura

tipar.

cI

obiectul b este de tip

doi ! Solulia o

reprezintda!ributulvirtua]rAcestapermitecaleg5turadi@
-rejl.Ae_dilaqlg
la m@!_execu[iei. In acest mod, degi constructorul init este
r"oqFrlti.gm;te va fa6ffia:ffiGtffinu atunci cdnd metoda este apelatd de a gi spre
zervat care trebui

e simbolul "; "

<idific.iie?-tste

unit-ul urm6tor, numlt _virrual:


J "m li A ril **,t),::l_6
unit _virtsuali
JflZ,C,i{-t*,1 QZ ,t V I i::, / ULry L.
MIERFACE
^i-l
tfE)e unu = object
D : integer;
d
constructor inits;
procedure tLDar; virtual;
d.l
endi

ingn inilializarea variabilei p am


in urma apelului constructorului
>eilalli membrii ai definiliei deci
r

se afigeaz6 textul

claea

uau

obiectului unu. Nimic deosebit

d;

dot. Aga cum probabil cI vI


claaa dot, text menit si

iSeze

tlpe doi = object(unu)


procedure tipar; virtual
end;
IMPIJEMENTATION

conEtructor unu.init;
begin p:=1; tipar; end;
procedure unu.tipari
begin writeln('clasa unu') i
procedure doi.tipar;
begin writseln(,cIasa do:i,);
begin

end;
endi

end.
Programul poate fi, evident, acelagi cu cel anterior:

uses _virtuali
var a:unui

d;

lu:

b:doi;
begin a.init; b.init;
end.
in care, bineinleles am inclus unit-ul modificat, numit
-virtuaI. in urma execufiei
obline afigarea:
claga unu
clasa doi

vom

201

Au^l alrho'
4/4atw,.'0t4 "!.trlf-.,f !
rol o#',*ifr)@*ff

tu l i

'''.''/urtLtr:i*,ii;+l

,rilaj

;W.;A

,a-/'a-P47
(y, -. { t

l.

tWqH

avem acces la metoda str&

Metodele constructor ale obiectelor nu pot

AIglgl construsJglyi are drept efect stabilirea corespondenfei

dintre -un oEiect

R.2. Corecti ?

gi

metodele sale virtuale. La rAndul sflu, aceasti


corespondenfl face ca execufia unei metode virtuhle si se facii dinamic.

Stabil{i dacii m
anterior este corectii sau

functLon teat,

Calificarea self
Cuvantul rezervat gelf este un parametru implicit, acCesibil
@t metoAe, prin care este desemnat obiecXll-B1g3pgeazflaqfrqda. Degi amvdzfi
ci datele gi metodele membre ale unui obiect sunt accesibile in orice metodi a
acestuia, apar totugi situalii cdnd calificarea prin EeIf este necesard. De exemplu
atunci c6nd o metodl membri a unui obiect are un parametru formal care este
deasemenea obiect de acelagi tip.

2F
progr.rn califica
--Y-W

with x do
I calcul:=cal

end;

Sintactic este corectl


de atribuire va conduce insi ll

e;

'*'liil.:n::1""'
4dNF
init
;
W!^!";;;;:;:r
(n: tnteger)

end;

begin

-'*

conEtructor tseet. Lnit (n: lnteger) ;


begln a:=ni endi
function leEt.ealcul (x: tesE) : Lnt,eger;
begln with x do calcul:=a+aelf.ai
var T,x:tsegEi

Explicalii

R.3.

Explicali dacd prog


corect sau nu.

Var Trx:tegti
begin
T. tntE (3) ; writ,eln (T. ca"

end;

end.

begin

T.lniE(3) ; x.lntt,(4) ; wrlteln(T.calcul(x)

);

end.

in programul principal, apelul t.calcur (x) conduce la efectuarea sumei dinne


datele membre ale obiectelor x gi r. Sd observSm ci in interiorul funcfiei ca1cul, dir
cauza instrucfiunii with, utilizarea calific6rii prin eelf devine singura metodd de acces le
data a a obiectului T care a apelat metoda !
Probleme rezolvate

Calificarea prin

aol

utilizarea sa ca parametru achrt

1)

Care dintne atnlh


cu no[iunile din dreapta:

D.date
C.construtori
Care dirttre urmdtoarele afirmalii sunt adevdrate:

a)
b)
c)
d)

Datele pot fi virtuale.


Orice metodd poate fi virtuali.
Prin atributul inherited avem acces la metoda urmaqului.
Calificativul eelf poate fi folosit pentru date c6t gi pentru metode.

virEual poate fi folosit numai pentru funclii sa\r proceduri, ca atare


b)
sunt
false. Afirma[ia c) este de asemenea fals[ deoarece prin tnherlted
Si

Atributul
afirmafiile a)
202

FP.funqii

9i proceduri

2l

Presupunem
av0nd data membru a de
de program urmdtoare:

cI

t[

ft

fuactioa l.o
begla

a: -1, u.l
rl.th aolf
exeqrlu:-r

ead;

l2ttittu)
^-4

:.l

avem acces la metoda strdmogului, nu a urma$ului. Singura afirmafie adevdratd este d),
adicE aelf
utilizat atit pentru calificarea datelor cdt gi a metodelor.

stabilirea corespondenfei

La rAndul slu,
rle

si

se

aceastl

facl dinamic.

stabiliti dac[ modificarea urm[toare a funcfiei carcul din exemplul


anterior este corectd sau nu.

function tegt.calcul (x: test) : integer;

iorul
nplicit, accesibil
eleazd m6i6Ea. negi am vIzrtr
accesibile in orice metodd a
.f este necesari. De exemplu
l parametru formal care este

begia

with x do
calcul : =caIcuI (eeIf) +self. a;

end;

Sintactic este corect pentru cd eelf reprezintd un obiect de tip reat. Instrucliunea
de atribuire va conduce insd la un lanf infinit de auto-apeluri soldat cu o eroare de execufie.

Explicafi daci programul urmdtor, care utilizeazi obiecte de tip tsest, este
corect sau nu.

var TrxsUeEti
begin
,eri
.ai
.

T.inlt(3); x.lnit(4);
writeln(T.calcul (ee1f)

end;

);

calcul (x) ) ;

rduce la efectuarea sumei dintre


interiorul funcliei calcul, dio
:vine singura metodd de acces la

Calificarea prin

aelf

are sens numai

in interiorul unei metode, in

1)

Care dinhe atributele din stdnga tabelului de mai jos pot


cu nofiunile din dreapta:
D.date
V.vLrtual

te

urmagului.
gi pentru metode.

consecinftr

utilizarea sa ca parametru actual in programul principal este eronat6.

C.construtori
FP.func1ii 9i proceduri

fi folosite impreund

I.lnherlted
S.eelf

2l

Presupunem cd funcfia de mai jos este metodl membr6 a obiectului de tip


avdnd data membru a de tip intreg. Specificali cIrui obiect aparfin variabilele din secvenfa
de program urmdtoare:

funcELon T. exmplu (u:T) : J.nteger;


begln

as=1i u.a:-1; eelf.a:r1i


wlth eelf do a:-ai

funclii sau proceduri, ca atare


falsi deoarece prin tnherlted

e:cenplu: =a;

end;

203

s,
astfel incdt urmdtoarea secventd sI fie corectl:
function S. exemplu : lnteger;

begin exernplu:=2; end;


function U. exemplu : inEeger;
begin exemplu:=Lnherlted eelf.exemplu;

Apoi distrugem ot
prin pointerul r gi avdnd cor
Urmdtoarea instnrr
valoarea z! Explica{ia cons

poiW

end;

-omponentei n se afl6 valc


ea va afiga componenta D a

Alocarea dinamici a obiectelor, destructori

1V.6.

Obiectele pot fi alocate dinamic prin intermediul procedurii new. Aceste


obiecte vor fi create in heap gi pot fi distruse prin apelul procedurii dispoee.
Utilizarea procedurilor new qi diepose se va face prir. sintaxa extinsd in care
acestea au doi parametrii:

new are primul parametru un pointer cltre obiectul care urmeazd sd fte
creat iar al doilea parametru este chiar constructorul obiectului.

R.1. Convenii

Definili un obiec
caracter gi o metodi dr

metoda de conversie s
intreg gi reciproc.

diepoee are primul parametru, un pointer cdtre obiectul care va fi

Obiectul de bazl v:

distrus iar al doilea parametru este destructorul obiectului.

Menliondm cd nu destructorul definit de noi distruge obiectul ci procedura


diepoee. Ceea ce facem prin intermediul destructcrului este asocierea unei
anumite acliuni care si insofeasc[ distrugerea. in exemplul care urmeaz[, vom
insofi crearea unui obiect de afigarea textului a.n creat un obiect iar
distrugerea o vom insoli de afigarea textului am digtrus un obiect.

unit

obler
Lntserface

tlpe obiecl

n: Lutr

c: cba:
coDEts,

Proce(

end;
r

Progran dlnamLc;
tlT)e exemplu = obJecE

integer;
conetructor

'

(.|

.i

n:

(i : integer)
deEErucEor die;
gen

end;

consEructor exemplu. gen ( I : inEeger) ;


begin
n:=li writeln(ran creat un obiect');
end;

destructor
begin

exemplu. dle ;

wrLteln('an dLetrue un obLectt);

end;

var

E, F:

^exenplu;

begJ.n

wrLteln(E^.n) ; readln;
dispoee(E,dlE) i new(F,gen(7) ) ; ryd[6ln(E^.n) ;;
readln;

new(E,gen(3) ) ;
end.

Primul apel al procedurii new conduce la crearea in heap a unui obiect de tipul
exemplu, care poate fi accesat prin intermediul pointerului r. Constructorul are parametrul
s deci prima instrucfiune de afigare va tipdri aceastd valoare.

2M

Urmagii acestuiq

cum se observI in continuan

type deBcl

Proce.
end;

tlpe

deac2

Proce.
end;

Implementarer pm
urmagi gi metoda de conneu

tryleoeuttl

constnrctsot

begl.n

D.:

procedurc

begla

enr
Primul descendent

intregul n iar al doilea rescri

procedurc r
begin n:=
procedure <
begla c:=
begiu
end.

.eqrlu,

Apoi distrugem obiectul prin apelul procedurii dJ.epoee gi cre[m altul identificat
prin pointerul r gi avAnd constructorul cu parametrul ?.
Urmdtoarea instrucliune de afigare are un rezultat
valoarea z ! Explicalia conste in faptul cd
I in locatia coresounzltoare

endi

ae
ea va afiga componenta

affi;f6ii" .il.lita, totuti-

n a noului obiect creat la adresa dat5 de pointerul

r, deci z.

Probleme rezolvate

diul procedurii new. Aceste


rl procedurii dispose.
prin sintaxa extinsd in care
obiectul care unneaz6 sI fie
Euctorul obiectului.

er citre obiectul care va fi


orul obiectului.
istmee obiectul ci procedura
tcrului este asocierea unei
remplul care lurmeazl, vom

creaE un obiect
rla un obiect.

iar

Definili un obiect care s[ contine doud date, una de tip intreg gi una de tip
caracter gi o metodd de conversie vid6. Realizali prin mo$tenire obiecte in care
metoda de conversie
intreg gi reciproc.

sd

realizeze conversia datei de

tip caracter in cea de tip

Obiectul debazdva confine datele gi metodele cerute de enunf:

unit obiect;
interface
tlpe obleet = object
n: lnteger;
c: chari

conEEructor generarei
procedure conv; vl.rtual;

endi
Urmagii acestuia, numili

deecl gi deec2, vor modifica metoda

de conversie, aga

cum se observd in continuare:

tlpe deecl = object(obiect)


procedure convi vlrtuali
end;

tlpe dese2 = objeet(oblect)


procedure conv; v1rtsual;
end;

biect')

Implementarea propriu-zis[ con(ine un constructor care nu va


urmaqi gi metoda de conversie care este vidd pentru obiectul de bazi:

fi modificat de

lmplenenEation

.);

con6tructor oblect. generare i


begin n3=0; c:=t 'i endi

procedure oblecE.eonvi

begln

end;

Primul descendent rescrie metoda conv realizdnd conversia caracterului


radl Di

{i" Iu (E^.n) ;;
h heap a unui obiect de tipul

Constructorul are parametnrl

in

intregul n iar al doilea rescrie aceeagi metodd realizdnd conversia inversl.

procedure descl.convi
begln n:=ord(c) ; end;
procedure deec2.convi

begin c3=chr(n);

begln

end;

end.
205

begln
wrLEeln ( 'oh
end;

R.2. Bazd de numeralie

Definili un obiect care confine un membru de tip intreg $i o metodl care sd


permitd afigarea cifrelor sale in baza 10, presupun6nd cd num6ru1 este strict
pozitiv. Realiza{i prin mogtenire un tip de obiect in care func(ia de afigare sii

procedure ucc
begJ.a

realizeze scrierea cifrelor num[rului intr-o bazi oarecare.

tf n>
cl,fro
wrlto

end;
end;

procedure dol,
Cea mai simpld procedurl de afigare a cifrelor zecimale este recursivl. PresupunAnd

n = a1a2...ak. 1a1 procedura se auto-apeleaz:


a1a2...ak - f , a1a2...ak - 2, a],a2...ak - 3,...,a1 .Acestc

cd num5rul se reprezintd

pentruvalorilei

in forma

valori succesive se oblin prin impd(irea intreagl a numdrului la 10. Pentru fiecare astfel de
parametru, restul impdrfirii intregi la l0 este ultima cifrd a numirului curent, Iatd un prognm
exemplificativ:

begin lf n>
cLfrr
wrlte
ead;
end;

var

A : zeeei

begln

LnLt; A.c
B.lnit; B.c

A.

procedure cifre (n: integer) ;


begln if n>0 then begin
clfre(n dlv 10);
write(n mod 10);

end.

end;
end;

begin cifre(2305);

end.

Pentru a obline cifrele intr-o altd bazd, de exemplu, baza 2, realizdm impdrlirea
intreagd la 2 9i restul impd(irii intregi la 2.

procedure eLfre (n: lnEeger) ;


begln Lf n>0 then begJ.n
clfre (n dtv 2) ; wrl,te (n nod 2) ;
end;

endi

begln cifre(2305);

end.

Transpunerea problemei "pe obiecte" este foarte simpld dar atrage atenfia asupra

unui fapt extrem de important gi anume cd obiectele pe care le creim nu se referd h


numirul ale cdrui cifre se vor afiga ci la metoda in sine. Altfel spus, prin obiecte modellm
efectiv metoda de afigare inbaza l0 respectiv 2. Ne vom intdlni in secfiunea de aprofundare
cu o situalie similard in care va fi vorba de modelarea prin obiecte a altor tehniciProgramul complet este prezentat mai jos gi, pentru cd este foarte simplu, nu am mai fdcut
apel la construclia unui unir separat.

Progran _cifre;

'*"

procedure cifre(n:lnEeger) ; vlrEual;

end;

end;

conatructot

zece.

; vl.rEual;

init;

begLn

wriEeln('obtecEul va afiEa cl.frele ln baza 10');

endi

conEtructor dol,. lnit;


206

Cea mai simpll exerq


Obiectul de tip tabtou omfi
dimensiunea efectivd a mati
diagonala principald a matic
punzltoare actiunii efectuate, c(

Progr.- Drtt
tlpe matrlcc
tlpe tablou .

m:natrl.c
n: Lutcgc
coBetluc
deEtrrrct

functlo

33i1.,,!13i"i"r,,

'*" :::,;.ill3i'r,liii''
procedure cifre(n:integer)

Definili un obiect dG
dinamici a memoriei.

ead;

coDatructor t
var j:iatcg
begln u:-l
for
rrlt
eud;

deetlarctor ta
begia rri.t
fuactl.on Eebl
var J:lntog
begl'a !: -0

begln

wrLteln('oblecEul va alLaa cLfrele Ln baza 2')

end;

tip intreg gi o metodi care sd


rpunind ci numirul este strict
ct in care funcfia de afigare si

procedure zcce. clfre (n: J.nteger)


begln Lf n>0 then begln
cLfre(n dtv 10);
wriEe(n mod 10);

end;

arecare.

endi

procedure doi.clfre;
begln Lf n>0 then begin

cLfre(n dlv 2);


wrlte(n rrod 2);

:cimale este recursiv[. PresupunAnd


1a1 procedura se auto-apeleazi

a1a2...ak - 3,...,

a1 .Aceste

irului la 10. Pentru fiecare astfel de


r numlrului curent. Iati un progam

endi
end;

var

A!zeceiB:dol;

begin

A.lnlE; A.cifre(2305) ; wrlteln;


B.Lnil; B.cifre(2305) i radlni

end.

mplu, baza 2, realizdm imp5(irea

r(n nod 2);

Ie simplI dar atrage aten(ia asupra


pe care le credm nu se referd la
Altfel spus, prin obiecte modeldm

intalni in secliunea de aprofundare


area prin obiecte a altor tehnici.
ste foarte simplu, nu am mai fdcut

Definili un obiect de tip matrice gi realizali alocarea dinamici gi eliberarea


dinamici a memoriei.

Cea mai simpld exemplificare a cerinfei din enunt este prezentatd in continuare.
Obiectul de tip talrou confine drept date o matrice gi un intreg care va reprezenta
dimensiunea efectivi a matricei. Funcfia dtag calculeazd suma elementelor de pe
diagonala principal5 a matricei. Constructorul gi destructorul afigeazI textele corespunzltoare acfiunii efectuate, constructie respectiv distrugere.

Progran _natrLce;
tlpe matrico = arrayt1..10,1..101 of real;
tlpe tablou - object

m:uatricei

n : J,nteger;

conEtructor gen (J, : Luteger)


destructor dLa;
functlon dlag:real;

vlrtual;
vl.rtual;

endi

construcEbr tsablou. gen ( i: l.nteger) ;


var J:lnEeger;
begJ.n n: =1. i
for J:-1 Eo n do mlJ,JI:=J;
wrlteln(tan creaE un oblectt);
endi

rele in baza 10') ;

deetructor Eablou. die;


begln wrl,teln ( 'am dLetrue un obl,ect' ) ;
functLon t,ablou. dl.ag : real ;
var J:Lntgri e:real
begln e:-0i

end;

207

for J:-1 to n do s:.E+m[J,Jl,

ndi

Datele (sau memb

dJ.ag: =a;

standard ale limbajului, altr

var M:^tabI0u;
begJ.n

new(M,gen(5)

);

metsode

wrlEeln (U^.dlag) ; readln;


diepoee (M, dia) ;
end.
Programul creazd un obiect alocat dinamic. Constructorul asigurd cd elementele de
pe diagonala principald au valori egale cu linia (coloana). Urmeazd afigarea sumei
elementelor de pe diagonala principald gi distrugerea obiectului.

1)

Descrierea formall

o
o

Asociagi destructori care sA afiteze un text corespunzltor actiunii de distrugere

$i tealizati alocdri 9i eliberlri dinamice de memorie pentru obiecte de tip


rat,!.ona1, punct gi conplex definite in acest capitol.

fractie,

Constructorii (
intre obiectul <

Destructorii (c
inso(egte distn
Funcfiile gi pn

AtAt funcfiile cat Si

functii

2)

Precizali care dintre afirmafiile urm5toare sunt adev[rate:


a) Alocarea dinamicl se realizeazd prin apelul constructorului obiectului.
b) Alocarea dinamic6 se realizeazd, de cltre procedura new care are drept parametri un
pointer cltre obiect gi constructorul acestuia.
c) Diskugerea este insolitl de gtergerea efectivl a conlinutului memoriei.
d) Distrugerea elibereazi memoria care insd igi va schimba con{inutul numai in urma
' unei alte alocdri.

3) Precizali care dintre afirmafiile urmdtoare sunt false:


Destructorul obiectului este parametru al procedurii dlepoae.
b) , Procedura dlapose are drept paramentri un pointer cltre obiectul care va
destructorul clasei.
c) Distrugerea efectivd a unui obiect se realizeazd de destructorul clasei.
d) Destructorul permite descrierea unei acfiuni care insofegte distrugerea.
a)

1V.7. Descrierea

fi distrus gi

I a"t"

.r, ,r[::i"unr-" c6 un obiect se compune din date gi


metode; datele 9i metodele pot se apar[ explicit (declarate) sau implicit (rnogtenite).
fapt care reflecta ceea ce

d.ate

I a"t. ale lisDajului


-) ]"fte Eipuri definite
I date de tip obiect
I

208

Metodele statice s
virtuale sunt apelate la exe
in sf[rgit, din punctul de ve
. Statice, alocal

pot

fi distruse-

Dinamice, alo

dispose.

Obir

formali a obiectelor

Din tot ceea ce am spus despre obiecte putem inlelege c6, in definitiv,
notiunea de obiect poate fi inleieasi printr-o descriere formail, dupd cum urmeazd:

obiect r

procedur

Tehnica Ba
problema t
Vom constata

ci

tehnici de mare complexitr


obiect care s[ reflecte teh
probleme rezolvate prin acr
damelor, ambele studiate in
Vom porni de la o:

procedur

care va inilializa elementelt

r+a[J,jl;

Datele (sau membrii de tip date cum mai sunt numili) pot

fi atAt tipuri

standard ale limbajului, alte tipuri definite sau chiar date de tip obiect.

ctsori

tori
ii
uri
bnstmctorul asigurd cd elementele de
(coloana). Urmeazd, afigarea sumei
rbiectului.

Descrierea formald reflectd faptul cd prin metode inlelegem:


o Constructorii (cei care perrnit inilializarea datelor gi stabilirea legiturii
intre obiectul declarat qi metodele sale virtuale).
o Destructorii (cei care dau posibilitatea de asociere unei acliuni care
insolegte distrugerea).
o Func(iile gi procedurile incluse in definilia obiectului.

rt corespunzdtor acfiunii de distrugere

ie

pentru obiecte de

tip fractie,

Atdt funcliile cdt gi procedurile pot fi statice sau virtuale.

i etaEice
i virtsuale

t.
e

sunt adevdrate:

ructorului obiectului.
tura new care are drept parametri un

m[inutului memoriei.
r schimba con[inutul numai in urma
e

zunt false:

rii diapoee.
fer cdtre obiectul care va fi distrus gi
:

destnrctorul clasei.

eduri etsatice
eduri virtsuale
Metodele statice sunt alocate obiectelor inc6 in faza de compilare, cele
virtuale sunt apelate la execufie.
in sflrgit, din punctul de vedere al modului de alocare obiectele sunt:
o Statice, alocate pe intreg parcursul execufiei programului gi care nu
pot fi distruse.
o Dinamice, alocate de procedura new in heap gi distruse cu procedura
dispose. Obiectele dinamice sunt accesate prin pointeri.

insolegte distrugerea.

1V.8. Aprofundare:
) putem inlelege cd,

in definitiv,

iere formal6, dupd cum urmeaz6:

rm obiect se compune din date

gi

eclarate) sau implicit (rnogtenite).

iul.ui

iaite
iect

Tehnica Backtracking gi urmagi care rezolve


problema permutarilor gi problema damelor
Vom constata ci programarea pe obiecte permite chiar modelarea unor
tehnici de mare corrplexitate gi vom exemplifica prin constructia unei definilii de
obiect care sd reflecte tehnica Backtraking. Obiectele de acest tip vor fi chiar
probleme rezolvate prin aceast[ tehnici, a$a cum este problema permut[rilor sau a
damelor, ambele studiate inc[ din clasa a X-a.
Vom porni de la o sistematizare a procedurilor, gi anume:

procedure

init;

care va iniltaltza elementele specifice ale unei probleme date:


209

S-ar putea să vă placă și