Documente Academic
Documente Profesional
Documente Cultură
c&
Program area
I
1V.1. Notiunile de obiect qi
metodi
(@
pel
ia^21
itt
a) /l.r*tz,
/*-
,r)%
uffi
tl4)e complex=object
re, im:real;
funct,ion nodul:rea1i
end;
/o0/^
Yt
all
,''
numerelor complexe.
'7'o@''
AlLd
xr
t)T)e complex=record
re, im: real;
end;
Definilie
{*^ffi.,t;
l*v,
L,>ffi
'{ 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
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
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
care constructorul
geaerl
congtructor
begia
re: =Xi ir
end;
1V.2. Metoda
constructor
Observali
ci
acest co
z . generare
-r,
const,ructor
(cuvAnt rezervat
4limbajului)t
;
de
constructorului.
end;
=bi
begln
complex.
lult(,
res=ai Lu:=bi
eod;
" r.r1"
este
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
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;
init
function modul:reali
end;
172
z, u: complex;
Ln
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
e ai obiectului. Li
cda constructor.
begia
re: =xi im: =g;
end;
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
-rlefinirii unui
Exemplu
:a cd antetul este
IatI cum arati cel mai simplu program "cu obiecte" in limbajul
numerelor reale
Pascal:
complex-obJ ect
re,
rmitoarea declaralie
Lm:
real i
conatructor lnlt
1q,b
real)
functloa nodul:reali
i descriem
endl
modul de
begJ.a
f:=ai ln:-bi
cadi
tructor
begin
fe:-:ti im:.0i
cndi
z astfel incdt z. re
va
Am completat
tode constructor,
,'.
z, u:
conplex;
Reginem:
u-t
o
o
o
Preciza(i mod;
- X.a
x.b
- X.c
- X.lnit,
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
begin
writeln(re:
5 z2
end;
O fracfie ordinar
notat cu q. O
rea numdrltorului
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
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
parametrii formali
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:
metodd care
rrir);
fractie=obJ ect
p, q: Lnteger;
rqrlex usivin
functlon zeclmal:real;
ead;
begJ.n
zeclmal z=p/qi
endi
il
H+
ii putem
fitT 7
. Constructorul obiectului
t75
care
end;
type punet=objects
x, y: real ;
cons trucEor Srenerare i
funcEion distantsa : real
function drepEunghi
begin
aria:
endi
end;
=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) ;
begin
distantsa: =aqrt (sqr (x) +aqr (y) ) ;
end;
R.6.
Erori
]fl
Descrieli eroril
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;
x:=0; y:=0;
Atribuirea f .p:
endi
function
begi.n
end;
(a, b
:punct)
forma f . p. UrmStoarea ir
declaratd (nu poate fi co
lnstrucfiunea de scriere r
end;
u.x:=a.xi u.y:=a.yi
v.x:=b.x; v.y:=b.y;
endi
aria:
=abs ( (u.
endr'
var a,b:puncE;
x: dreptunghi;
begin
noliunea geometrice
e $i ata$ati o metod[
i puncte, de exemplu
i dreptunghi gi alte m
nit. Constructorul
"'. Iatd prograulul colnplet
zecimal z=P/qi
end;
var f:fractie;
p: integer;
begin
writseln ( zecimal ) ;
end.
*r.
"'"1 Rezolvare :
a.--.*:**=*' 'r,
Atribuirea f .p:=1;
177
conaEructor trnu.t
begln a:=cbar(a
a)
b)
c)
d)
e)
I
',
1)
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
endt
conEtructor intsr
ead;
coDBtructor unu.intre
begLn
](:=ai
end;
C)
c: char;
a)
a) tygte obLec!=object
e) tyan char-object
Lfx>=0thent
else n:=trunc(x)
end;
tlpe duiblet=obJecE
a: chari
b : lnteger;
constructor lniE;
procedure converEiei
endi
178
char;
Proprietatea
;
Programarea pe
obignuit, programatorii
begin a:=char(a);
e) qa,e char=object
c: chari
conaEructor iniE;
end;
endi
lui.
qi defini1ii,
x: real i
conBtruet,or init. (a : real) ;
de obiect:
endi
a)
x.x
b/ x.putere
5)
c)
putere(X)
d)putere(x);
x: real i
n : J.nteger;
conatructor intreg(a:real)
end;
,(: =ai
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
8.
intr-un uait
leglturd cu ti
secliunea
intr
(a se vedea gi
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)
(x
Vom ob[in
;
real) i
begln writeln(re:522,1+t,im:522r'*it)
end;
; end;
begia
end.
Urmdndrcl
unit-ul (inaginar,
1.
2.
interface
(care este
3.
Dupi
4.
5.
6.
7.
iuterf
coryrlex).
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
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).
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;
u.rrit-ul (imaginar, in
este cuvA.il
uait-ul
respectiv.
unlt def;
interface
tlpe fractle=objecE
P, {: integer;
endr.
E)rpe
punct=object
real;
congtructor geDerarei
function distanEa : real
x, y:
endi
t14pe drepEunghi=obJ
u, v: punct i
ect
l8l
laterface
tlpe unu=obJect
char;
conetsrucEor It
end;
end;
a:
J.mpleurentat,lon
tlpe caraeter-objc<
c: chari
const,ructor t-!
end;
eadt
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
si
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
end poate fi suplinitd printr-o line care confine numai textul end.
d) si e),realizdndun
unlt eoreet,a!;
182
eD
lnterface
type unu=obJect,
char;
conet,ructor tnlt (a1: integer)
a:
eadi
conaEruct,or lnlts;
endi
Lmplementati.on
t;
r.yi
ead,
rd;
end.
procedure care
si
reflecte
bl
Lr:
in
in
sectiunea
lnplemenlatton) vom
introduce
descrierea procedurii:
alt-ului
Un polinom poate
de coificienli.
fi
p=aLlarx*ar*z+..,+ar-lr'-l
anxn.
prin idtregul n iar coeficienfii prin vectorul a. Suma a doud polinoame se face obignuit,
183
ln suma.
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)
Numele
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);
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
var L:integer;
begin
Alegefi afirmaf
congtructor
gea(a
end;
6)
Descrieli o proc
trt
t)rpe reprezentare=obje
x: real ;
congtructor init;
procedure afia;
end;
7l
numdru[ui.
Addugali defini
estc
1) Alegeli afirmafiile
^Intr-un unlE pot fi introduseadevirate:
instruc{iuni
c)
d)
a)
b)
c)
a)
b)
d)
Definilia obiectelor in
unit
Lnrerface.
3)
4l
anterior.
t1rye
lntreg=object
n: integer;
conEtrucEor init
(a
unlt
lnteger)
end;
(a : integer) i
x: real i
end;
);
urmAtoare:
end;
6)
sA
7')
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--
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.
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
coaetructor I
end;
A
-.*-ru-
Pornind de la
obline dintr-o
fractl.e
ratlonal.
unlt rat;
Lnterface
numitorului urmatE de s
iei, amf,
*X.ryj1
Definifia obiec
avAnd semnificafia de
end;
end;
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;
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
end.
modificarea modului de
1 concept fundamental aI
:u un apel de
't,t
funcfie:
end;
num
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
metoda
(minus) la numdrdtor.
187
rl-
func
Probleme rezolvate
ead;
tunctioa
begiu
R.4. Addugarc
x: real i
tlpe A=o!j6g
n: iut
constructor init;
end;
coD,at
begin x:=1i
end;
end;
conat,ructor
begin
Rezolvare
raz=7
tlpe Brob{
end;
Pro
end;
procedure
begin r
tlT)e tegtl=object
i: int,eger;
1)
end;
a)
Constructorul unui sa
b)
c)
d)
3)
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) ;
obiect urmasprine
obiect stramoS tran
obiect urmas trafi$
constructor init
obiect strdmoS
end;
n, ur:
pin
Un
Un
Un
Un
2l
= object(teEtl)
conatructor geni
tseaE2
Specificali car
a)
b)
c)
d)
Irr,DaE. afla;
begin wrl.teln(n);
var asStraDog; b:Ulra
funcElon
eu.ura :
inEeger;
end;
r unui intreg.
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
3)
l unei functii care si
prograD moatenJ.re;
tl4)e Strarnoe = objecE
n: lnteger;
conatrucEor lnlt;
end;
tlpe pua
begin
ItrY :
coDStr
fuactLr
proced
elrdi
Un numdr oo
end.
sA
a) a.jrr.LLi
) a.afLe;
c) u.init;
9) b.n'=a.n;
b) a.n'=n,'
f) writseln(n);
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
Erei.
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
funcfiei
end,'
procedr
end;
end;
afiE.
tl4)e coq
Urmeazd, descrir
nou
ci un obiect de tipu
1V.5.
Polimorfism
conBtruct
begl-a
Nu este nevoie
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
fr plasate
in program astfel
incl
end;
d) a.n: =b.n;
h) a.attat
Un num6r
ca
functiei
afie.
Elpe courplex = object(punct)
procedure afls;
end;
al funcfiei de tiparire.
Metoda constructor, numitd in definilie
inits,
este:
endi
) tt
formula cunoscutE: p =
funct,Lon
+y'
punct,.ro: reali
begln
e complex.afiE;
d,
);
frocedure courplex. af iE ;
begln
and;
)i
l9l
in
sus intr-un
unit p_ci
interface
tfrpe punct = objects
t,y z reali
constructor init (a,b: real)
function ro : reali
procedure afis;
Numim polimorfs
prin acela$i nume, poate
;
endi
er
imlrlementatsion
endi
procedure
begin
compJ-ex.
if is;
end;
begin
end.
obi
laa
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.
gi
'
192
y>0
y>0
y<0
y<0
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
Definilie
')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'.
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
fi o funclie
care
si
y>0
y>0
cadranul I
cadranul 3
cadranul 4
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:
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
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,
end;
end;
end;
lmplenent,ation
Apelul metodei
ca
fiind
conetructor punct.lnl
begln x:=ai y:=b;
funct,lon punct,.ro s I
begin ro:=aqrt(agr
wrl,teln ( ,puncts:
y/x, in figurI
var L:LaEeger;
bcgln
l:.cadran,
caae i of
1, { : argurent,: =arctan (y/xl t
2,3 : arguuent,: =pl+arctan (y,/x) ;
avemrcperezentarer
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;
implementation
conBtructsor puncE. lnit (a,b:real) ;
begin x:=ai y!=bi endi
end;
begJ.n
etodl
r+iy.
at de
grnea
writseln('punct: (r,x:522,,,',!2522,,
endi
)')
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
end;
procedure complex. af is ;
begln
wrLteln( rnu.nar complex: t,x:5:2,,
end;
+,,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)
argunenEt=pi/2i
argurnenE: =pi;
argr:nenEz =3*pL/
argunent:=0;
argurnent: =0;
endi
begJ.n
end.
195
R.4.
Sumi Sip
arctan(1) =; obfinempi=lc
progrrrn tEt,
(a+ib)+(u*
(a+ib)(u+i'
ugeB P_ci
vai z:complex;
begin
z.Lnlt(2,-41i
z.afiai
wrLteln (z. cadran) ; wrlteln (z. argu.rrent)
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
punct
conplex.
in spafiu care si
redefineasci funclia
"distan{6" de la punct la originea sistemului de
end;
var xry,
coordonate.
z: conplex;
begLn
end.
:<,y: real;
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
196
Modificafi pri
functlon ro:rea1i
pri
begin r
3)
Modificagi Pri
obiectului urmdtor astfel inr
arctaDtf) = I
4
pr.
obfinempi=rc
R.4. Sumd
Ei
produs
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
z . init
Lur,
endi
begin
dma problemi:
end.
:c : real i
conetructor init;
end;
conEEructor
tseEE.
begln x:=31
init;
end;
r1);
aI);
end;
proeedure afls.tlpar;
begin writeln
);
3)
rx= I ,x,
end;
end;
197
'
begJ.a
eDdi
coaEtrucEor nun.lnit(a:lnteger) i
consEructo:
4)
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;
putere
va
fi:
funeEloa d
begJ.n p,
Sd explicdm moduJ
putr6
-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
Putere: rPu
conduce la o eroare de
din
dim un
exemplu
begin I.l,
*_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:
end;
Agadar, acest obiect confine
coaatructor
198
gi o funcfie
numiti putere.
variabil5 de
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.
(a:
lnteger)
tlpe
doJ.
= obJect(unu)
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
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
gi
t:
integ gi doud
metode: un
gi in final func{ia
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
\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
constructorul
claga unu
de mai jos:
Recapituldnd, am obfinut al
clasa unu
claga unu
INIERFACE
rlur,6 urru
qor
; :of;:"".,
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
vizibi
cnd;
unit _wirtual;
INTERFACE
Tipul dot
I
fi
,'
doi
Eipar.
conatructor unu.l,nlt;
begln
p:
-1, t!pgr.,
endi
end;
end;
fUPLEMEMrATfOII
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.
uses _virtual;
var a:uDui
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
ci indiferent
x respectiv Y nu se
em observa ugor
biectelor
asunui
b:doi,'
cLr
1 urmatd de
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
claga
clasa
unu
unu
Situalia este nepl[cutd avAnd in vedere
i)ruI
lait
gi procedura
tlpar.
doi
sintantin
,/l Sintactic,
(punct'gi virgul6)
vrzrbrld in
e procedura
tipar.
cI
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
<idific.iie?-tste
se afigeaz6 textul
claea
uau
d;
iSeze
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
R.2. Corecti ?
gi
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;
e;
'*'liil.:n::1""'
4dNF
init
;
W!^!";;;;:;:r
(n: tnteger)
end;
begin
-'*
Explicalii
R.3.
Var Trx:tegti
begin
T. tntE (3) ; writ,eln (T. ca"
end;
end.
begin
);
end.
Calificarea prin
aol
1)
D.date
C.construtori
Care dirttre urmdtoarele afirmalii sunt adevdrate:
a)
b)
c)
d)
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.
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) ) ;
Calificarea prin
aelf
1)
te
urmagului.
gi pentru metode.
consecinftr
C.construtori
FP.func1ii 9i proceduri
fi folosite impreund
I.lnherlted
S.eelf
2l
e:cenplu: =a;
end;
203
s,
astfel incdt urmdtoarea secventd sI fie corectl:
function S. exemplu : lnteger;
Apoi distrugem ot
prin pointerul r gi avdnd cor
Urmdtoarea instnrr
valoarea z! Explica{ia cons
poiW
end;
1V.6.
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.
Obiectul de bazl v:
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;
destructor
begin
exemplu. dle ;
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
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
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
r, deci z.
Probleme rezolvate
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
unit obiect;
interface
tlpe obleet = object
n: lnteger;
c: chari
conEEructor generarei
procedure conv; vl.rtual;
endi
Urmagii acestuia, numili
de conversie, aga
biect')
fi modificat de
lmplenenEation
.);
procedure oblecE.eonvi
begln
end;
{i" Iu (E^.n) ;;
h heap a unui obiect de tipul
in
procedure descl.convi
begln n:=ord(c) ; end;
procedure deec2.convi
begin c3=chr(n);
begln
end;
end.
205
begln
wrLEeln ( 'oh
end;
procedure ucc
begJ.a
tf n>
cl,fro
wrlto
end;
end;
procedure dol,
Cea mai simpld procedurl de afigare a cifrelor zecimale este recursivl. PresupunAnd
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.
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.
endi
begln cifre(2305);
end.
Transpunerea problemei "pe obiecte" este foarte simpld dar atrage atenfia asupra
Progran _cifre;
'*"
end;
end;
conatructot
zece.
; vl.rEual;
init;
begLn
endi
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
end;
end;
arecare.
endi
procedure doi.clfre;
begln Lf n>0 then begin
a1a2...ak - 3,...,
a1 .Aceste
endi
end;
var
A!zeceiB:dol;
begin
end.
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;
vlrtual;
vl.rtual;
endi
end;
207
ndi
dJ.ag: =a;
var M:^tabI0u;
begJ.n
new(M,gen(5)
);
metsode
1)
Descrierea formall
o
o
fractie,
Constructorii (
intre obiectul <
Destructorii (c
inso(egte distn
Funcfiile gi pn
functii
2)
1V.7. Descrierea
fi distrus gi
I a"t"
d.ate
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
procedur
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.
ie
pentru obiecte de
tip fractie,
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,
gi
iul.ui
iaite
iect
procedure
init;