Sunteți pe pagina 1din 33

PROGRAMAREA ORIENTATĂ

PE OBIECTE
CONCEPTE GENERALE
z Stilul de programare care îl numim în mod obişnuit
programare orientată pe obiecte POO a apărut relativ recent
în istoria limbajelor
j de p
programare.
g
z Acesta este un stil particular şi foarte comod pentru
numeroase situaţii.
z El a fost creat pentru a depăşii limitele programării
structurate bazate în principal pe utilizarea largă a
procedurilor, funcţiilor, a pointerilor sau a tipurilor de date
mai mult sau mai puţin evoluate.
z Programarea structurată foarte practică mai ales pentru
sisteme de programe mici sausa aplicaţii reduse
red se negrafice,
negrafice este
depăşită în ceea ce priveşte aplicaţiile mari cu elemente
grafice unde mult mai indicată este programarea orientată pe
obiecte.
z Programarea orientată pe obiecte utilizează elementele
programării dar se bazează pe orientarea pe obiecte.
CONCEPTE GENERALE
z Orientarea ppe obiecte reprezintă
p organizarea
g de resurse soft
într-o colecţie de obiecte, distincte şi discrete, care înglobează
atât structuri de date cât şi funcţiile de prelucrare ale acestora.
z Această organizare este o extindere a programării tradiţionale,
în care structurile de date şi funcţiile de prelucrare sunt doar
lejer conectate.
z Identificarea obiectelor pentru o aplicaţie dată se face prin
maparea conceptelor de bază vehiculate de aplicaţia
respectivă.
respectivă
z Un obiect se defineşte ca fiind un concept, o abstractizare şi
înţeles precis din punct de vedere al aplicaţiei de rezolvat.
Obiectele permit următoarele avantaje:
z oferă o mai bună înţelegere a problemei de rezolvat;
z oferă un "schelet" de pornire pentru implementare.
z O clasă de obiecte grupează un număr oarecare de obiecte cu
proprietăţi similare.
similare Această similitudine se referă atât la
descriere (date sau atribute), cât şi la comportare (funcţii sau
metode), dar în acelaşi timp şi la relaţiile posibile cu alte
obiecte.
CONCEPTE GENERALE
z Diferenţele dintre obiectele de aceeaşi clasă se materializează în
diferenţe între valorile datelor de descriere.
z Totodată, pentru fiecare obiect este specificat tipul clasei din
care provine. Clasa este elementul de programare care ne
permite transcrierea cât mai bună a unui concept din viaţa
concretă într-un
într un limbaj de programare.
programare Ea permite definirea atât a
datelor relativ la o entitate cât şi a acţiunilor asociate (funcţii sau
metode).
z Implementare software a unui concept cum ar fi un sistem de
calcul se poate printr-o clasă. Această clasă va fi caracterizată de
anumite date (atribute) şi anumite acţiuni (metode, funcţii).
Această clasă va conţine numai elementele caracteristice, putând
definii pe baza ei şi concepte particulare cum ar fi laptop şi PDA.
PDA
Reprezentarea acestor clase este dată în figura 1.
z Atributele reprezintă caracteristici unice în cadrul unei clase de
obiecte. La nivel de obiect fiecare atribut primeşte o anumită
valoare care se poate modifica pe parcursul duratei de viaţă a
obiectului respectiv. Două sau mai multe obiecte pot avea valori
identice sau valori diferite pentru un acelaşi atribut.
CONCEPTE GENERALE
CONCEPTE GENERALE
z Metodele sau operaţiile sunt funcţii de prelucrare care se aplică
obiectelor de o anumită clasă. Toate obiectele unei clase admit
acelaşi set de metode, metode care la rândul lor pot să
primească un număr oarecare de p
p parametri suplimentari.
p
Identificarea unei metode se face atât prin nume, cât şi prin
semnătură.
z Pentru ca unui obiect să i se poată aplica metode - funcţii de
prelucrare - acel obiect trebuie să fie creat (definit). Definirea
unui obiect poartă numele de instanţiere. După ce un obiect şi-a
îndeplinit misiunea el este eliminat. Durata de viaţă a obiectelor
depinde de la obiect la obiect şi de la aplicaţie la aplicaţie.
aplicaţie
Ab t
Abstractizare
ti şii modelare
d l
z In orice domeniu de activitate umană, abordarea unui proiect porneşte
de la construirea unui model cu scopul unei mai bune înţelegeri a
problemei de rezolvat.
rezolvat
z Prin abstractizare se izolează aspectele esenţiale de cele neesenţiale,
bineînţeles în funcţie de perspectiva de abordare a problemei de
rezolvat.
z În consecinţă,
consecinţă pentru o aceeaşi problemă, problemă pot exista mai multe
abstractizări, deci mai multe modele. Nu putem vorbi de modele corecte
şi modele incorecte, ci de modele adecvate şi modele inadecvate.
z Prin esenţă, o abstractizare este o reprezentare incompletă a realităţii şi
tocmai aceasta dă valoare modelului corespunzător.
corespunzător
z La fel ca şi în abordarea structurată, în abordarea orientată pe obiecte,
procesul dezvoltării unei resurse soft, porneşte de la un model.
z Aceasta este o abstractizare menită a face posibilă etapa următoare de
implementare În domeniul ingineriei soft,
implementare. soft programarea structurată a
făcut un mare pas înainte introducând necesitatea abordării unei
aplicaţii din trei perspective diferite, rezultând astfel trei modele diferite.
În abordare structurată, cele trei modele, pe care le numim şi sub-
modele sunt:
z modelul static;
z modelul dinamic;
z modelul funcţional.
Ab t
Abstractizare
ti şii modelare
d l
z În modelarea orientată pe obiecte apar două modificări esenţiale:
z modelul care captează aspectele statice ale aplicaţiei devine
modelul obiectual
z accentul cade pe acest model şi nu pe cel funcţional.
z Î multe aplicaţii mai simple modelele dinamic şi funcţional se
În
construiesc în primul rând pentru o mai bună înţelegere a
modelului obiectual.
Modelul obiectual
z Pune în evidenţă aspectele statice ale aplicaţiei, dar nu prin
identificarea unor sub-ansamble, mai mult sau mai puţin arbitrare,
ci prin identificarea conceptelor cu care operează aplicaţia.
z Acestor concepte li se asociază obiecte, iar modelul obiectual
conţine o sinteză a acestor obiecte, a relaţiilor dintre ele, precum
şi a proprietăţilor lor.
z Construirea unui sistem în jurul obiectelor cu care operează,
operează
surprinde mult mai bine realitatea decât o abordare care porneşte
de Ia aspecte funcţionale.
Ab t
Abstractizare
ti şii modelare
d l
Modelul dinamic
z Sugerează succesiunea în timp a creării obiectelor, pe măsura
necesităţii existenţei lor, precum şi distrugerea acestora după ce şi-au
îndeplinit misiunea.
z Crearea unui obiect mai poartă şi numele de instanţiere.
z Pentru obiectele implementate Ia nivelul unui nucleu, deciziile de
instanţiere şi distrugere se iau la nivelul clientului acelui nucleu.
Totodată, modelul dinamic indică ordinea de invocare a a metodelor,
pentru fiecare obiect instanţiat.
instanţiat

Modelul funcţional
z Descrie aspectele comportamentale ale obiectelor, indiferent de
ordinea
di d instanţiere
de i t ţi a obiectelor
bi t l şii indiferent
i dif t de
d ordinea
di d invocare
de i a
acestor aspecte.
z Fiecărui aspect comportamental îi corespunde o funcţie, numită şi
metodă. Modelul funcţional, descrie funcţionarea în mare a acestor
metode,
t d rezumându-se
â d l ilustrarea
la il t relaţiilor
l ţiil între
î t parametrii
t ii de
d intrare
i t
şi valorile de ieşire ale fiecărei metode în parte, fără însă a oferi detalii
legate de implementarea algoritmilor corespunzători.
Metodologii orientate pe
obiecte
bi t
z Există la ora actuală mai multe metodologiig orientate p pe obiecte ppentru
analiza, proiectarea şi implementarea de resurse soft.
z Una din metodologii este OMT - Object Modeling Technique .
z Aceasta presupune o etapizare a etapelor de dezvoltare, precum şi un
sistem grafic de reprezentare a obiectelor şi a relaţiilor dintre acestea.
acestea
z Metodologia OMT se bazează pe construirea unui model tridimensional
al aplicaţiei, pe baza căruia se adaugă gradat detaliile de implementare
în ultima fază a procesului de dezvoltare.
z În mare,
mare metodologia OMT este ilustrată în figura 2. 2

z Fig.1. Esenţa abordării OMT


M t d l i OMT
Metodologia
z Dezvoltarea unei aplicaţii în metodologia OMT presupune
parcurgerea în mod repetitiv, până la obţinerea unui produs
acceptabil, a următoarelor etape:
Analiza
z A
Aceastătă etapă
t ă porneşte t de
d la
l specificaţiile
ifi ţiil problemei
bl i de
d rezolvat.
l t
Scopul acestei etape constă într-o înţelegere profundă a
domeniului aplicaţiei, precum şi a cerinţelor concrete ale
p ţ
aplicaţiei.
z Rezultatul etapei de analiză este modelul aplicaţiei, format din
cele trei sub-modele:
z modelul obiectual - cel mai important;
z modelul
d l l dinamic;
di i
z modelul funcţional.
z Un model corect trebuie să poată fi uşor înţeles de specialiştii din
domeniul aplicaţiei,
aplicaţiei fără cunoştinţe de programare.
programare
Metodologia OMT
Proiectarea sistem
z In această etapăp se iau deciziile de nivel înalt p
privind arhitectura aplicaţiei,
p ţ ,
în ansamblul ei.
z Acum se decid subansamblele mari ale aplicaţiei, precum şi resursele
platformei gazdă ce trebuie disponibilizate şi gestionate.
z În ce priveşte componentele aplicaţiei,
aplicaţiei acum se aleg modalităţile lor de
implementare - hard sau soft -, protocoalele de comunicaţie între nivelele
ogice adiacente şi se stabilesc "contractele de cooperare" între obiectele
ce interacţionează de pe nivele diferite.
z In aplicaţii mari,
mari se recomandă ca fiecărui nivel să i se construiască un
model propriu. în ce priveşte resursele maşinii, acum se stabilesc
strategiile de alocare şi gestiune a memoriei dinamice şi a altor resurse
sistem identificate prin handle proprii.
Proiectarea obiectelor
z Pornind de la modelul obiectual şi de la deciziile proiectării sistem, în
această etapă se adaugă o descriere mai amănunţită a claselor de
obiecte. Astfel, acum se specifică numele atributelor şi tipurile lor, precum
şi numele metodelor şi semnăturile acestora.
acestora Toate aceste nume trebuie
alese cu grijă pentru a se mapa cât mai bine domeniului aplicaţiei.
M t d l i OMT
Metodologia
Implementarea
z În sfârşit, în aceasta etapă se trece la dezvoltarea claselor de
obiecte şi a relaţiilor dintre acestea.
z Această implementare se materializează în module soft, sau
d ă este
dacă t cazul, l chiar
hi şii în
î module
d l hard.
h d
z Partea cea mai semnificativă de efort este dirijată spre
codificarea algoritmilor corespunzători metodelor.
z Această etapă se doreşte a fi simplă şi oarecum mecanică, mecanică
deoarece toate deciziile majore au fost deja luate în etapele
precedente.
z La acest efort pot fi cooptaţiţ şi programatori
g care nu mai au
viziunea de ansamblu a aplicaţiei. Oricum, regulile de bază de
tehnică şi stil trebuiesc în continuare respectate cu stricteţe.
z Tot în această etapă se poate lua decizia introducerii unor
obiecte nerelevante din punct de vedere al aplicaţiei,aplicaţiei dar
indispensabile etapei de implementare, cum ar fi: liste înlănţuite,
arbori şi altele.
M t d l i OMT
Metodologia
z Sigur, întregul proces prezentat trebuie privit ca şi
Sigur
un ciclu interativ. Totodată, efortul necesar testării şi
validării, pas cu pas, a produsului nu trebuie deloc
neglijat,
lij t chiar
hi dacă
d ă abordarea
b d orientată
i t tă pe obiecte
bi t
duce, printre altele, şi la minimizarea acestei etape.
z Fiecare metodologie g de pproiectare orientată p pe
obiecte, sugerează un set de reprezentări grafice,
folosite pentru reprezentarea modelelor obiectuale.
z Acestea trebuie să ofere o imagine clară şi intuitivă
a claselor şi obiectelor, precum şi a relaţiilor dintre
clase, stabilite în faza de modelare.
Ierarhizarea unei aplicaţii pe
nivele
i l
z Tehnica structurării unei aplicaţii
p ţ ppe nivele ierarhice,, care comunică
între ele prin mecanism CLIENT-SERVER este perfect utilizabilă şi în
abordare orientată pe obiecte.
z Astfel, fiecare nivel implementează grupe de clase, numite şi ierarhii de
clase,, g
grupând
p concepte
p care împreună
p formează un subansamblu de
sine stătător.
z In astfel de situaţii, fiecare nivel poate fi modelat şi implementat
separat.
z În cazul în care resursele înglobate în aceste clase sunt suficient de
generale ele pot fi plasate în biblioteci, cu scopul refolosirii lor şi de
către alte aplicaţii.
z Comunicarea între nivele ierarhice adiacente realizate obiectual,
presupune doua procese distincte:
z clientul transmite server-ului "ordine" pentru instariţiere de obiecte nucleu;
z clientul transmite serverului "ordine" de apel pentru metodele oferite de
obiectele din nucleu ce au fost instanţiate.

z Rolul subsistemelor de acest fel constă în simplificarea abordării unui


proiect prin metoda "divide et impera".
Caracteristicile unui limbaj
orientat
i t t pe obiect
bi t
Termenii generali ce descriu cel mai bine caracteristicile
esenţiale ale unui limbaj orientat pe obiect sunt:

z Abstracţia – defineşte caracteristicile esenţiale unui obiect


văzut din exterior.
exterior Selectarea obiectelor abstracte sa a
claselor este un punct important în realizarea unui program.
z Încapsularea – dă posibilitatea utilizării unitare a codului şi a
datelor. Unităţile
ţ de încapsulare
p în C++ sunt class şşi struct.
Limbajul C++ folseşte mai mult class decât struct, singura
diferenţă fiind că în tipul de date class pot exista date şi
metode ianccesibile din exterior.
z Moştenirea – permite definirea unor noi clase pornind de la
cele existente. Marele avantaj al moştenirii este obţinerea prin
derivare a datelor şi metodelor în clasa creată. Caracteristicile
moştenite
ş de clasa creată p
pot fi ajustate
j după
p necesităţi.
ţ Este
posibil de asemenea derivarea unei clase din mai multe clase
de bază (moştenire multiplă).
Caracteristicile unui limbaj
orientat
i t t pe obiect
bi t
Prin moştenire se pot obţine obiecte specializate pe baza unor
obiecte mai generale. Avantajul apare când, pentru a crea un
obiect, nu mai trebuie să pornim de la zero, ci putem deriva
obiectul dintr-o clasă care are proprietăţi comune cu obiectul
care dorim săsă-ll obţinem.
obţinem
z Polimorfismul – posibilitatea ca fiecare obiect să răspundă în
felul său la o metodă cu acelaşi nume.
z Modularitatea – p posibilitatea g
grupării
p claselor în module.

Un mediu creat pentru realizarea aplicaţiilor Windows este Visual


C++, fiind cel mai folosit compilator de C++ la ora actuală. El se
bazează pe biblioteca de clase MFC (Microsoft Foundation
Classes) ce permite crearea rapidă a unor cadre de aplicaţii pe
baza conceptului de document-view sau de aplicaţie bazată pe
un dialog.
Caracteristicile unui limbaj
orientat
i t t pe obiect
bi t
z Polimorfismul – posibilitatea ca fiecare obiect să
răspundă în felul său la o metodă cu acelaşi nume.
z Modularitatea – posibilitatea grupării claselor în
module.
z Un mediu creat pentru realizarea aplicaţiilor
Windows este Visual C++
C++, fiind cel mai folosit
compilator de C++ la ora actuală. El se bazează pe
biblioteca de clase MFC (Microsoft Foundation
Classes) ce permite crearea rapidă a unor cadre de
aplicaţii pe baza conceptului de document-view sau
de aplicaţie bazată pe un dialog.
Cl
Clase şii obiecte
bi t C++
z O clasă reprezintă
p un tip
p de date definit de p programator.
g Ea p
permite
reprezentarea datelor şi metodelor de manipulare a acestor date într-o
grupare simplă şi ordonată .
z Dacă se foloseşte o bibliotecă de clase existentă cum ar fi MFC, atunci
programatorul poate defini direct obiecte de tipul acelei clase. Acest tip de
d t (class)
date ( l ) permite
it declararea
d l unor date
d t protejate
t j t sau private,
i t acestet date
d t
nefiind vizibile în afara clasei, nici măcar de către obiectele de tipul
respectiv.
z Un obiect reprezinta un element (instantiere) al clasei respective. Pentru a
crea un obiect in C++ trebuie definita forma sa generala (natura sa) folosind
cuvantul cheie class. În C++, un obiect reprezintă o variabilă definită ca
fiind de tipul clasei din care face parte.
z Controlul accesului la componentele unei clase poate fi realizat utilizând
specificatorii:
z public – membrul poate fi accesat de orice funcţie din domeniul
declaraţiei clasei;
z private – membrul este accesibil numai de funcţii din interiorul clasei sau
de către funcţii prietene (friend) ale clasei;
z protected – similar cu private dar accesul se extinde pentru funcţiile
membre şi prietene derivate din clasa respectivă.
Cl
Clase şii obiecte
bi t C++
z O funcţie membră a unei clase are acces la toate datele membre din
clasa respectivă, indiferent de specificatorul de acces.
z Dacă nu specificăm tipul de acces, membrii vor fi private în mod
implicit.
z Definitia unei clase presupune:
z a) declararea clasei care consta inspecificarea datelor si
prototipurilor functiilor componente (inclusiv functii inline) intr-un
fisier antet care are identificatorul incheiat, de obicei, cu .h;
z b) implementarea clasei ce consta in definitiile functiilor
componente care indica comportamentul tipului de date
reprezentat
t t de
d clasa
l respectiva.
ti D
Daca f
functiile
tiil prezentet in
i
declararea clasei sunt corect adecvate scopului propus, atunci
utilizatorul nu mai are nevoie de definirea lor si implementarea se
poate face intr-un fisier separat (pentru unele compilatoare
identificatorul unui astfel de fisier se incheie cu .cpp).
Cl
Clase şii obiecte
bi t C++
z Forma generală a declaraţiei unui tip class este similară cu a tipurilor struct
din C:
z Class <nume_clasa> <:lista_clase_baza>
z {<lista_membri>
z } <lista_var>;
z nume_clasal este
t numelel tipului
ti l i clasă
l ă declarat
d l t şii trebuie
t b i săă fie
fi unici în
î
domeniul în care este valabilă declaraţia.
z lista_clase_baza este lista claselor din care este derivată clasa declarată
(dacă este cazul)
z lista_membrii
li t b ii reprezintă
i tă secvenţaţ ded declaraţii
d l ţii ale l membrilor
b il clasei.
l i
Lista conţine declaraţii de date membre sau definiţii de funcţii membre .
Datele membre pot fi de orice tip, mai puţin tipul de clasă declarat.
z lista_var este lista numerelor variabilelor de tip nume_clasa.
z Deşi nume_clasă şi lista_var apar opţionale, ca şi în cazul tipurilor de
structură din C, cel puţin una dintre ele trebuie să existe.
z De regulă nume_clasa nu se omite, pentru a pute declara ulterior obiecte de
acest tip.
z La declararea obiectelor este suficient să se specifice numele clasei fără
cuvântul cheie class.
Cl
Clase şii obiecte
bi t C++
z O clasa contine:
z - o parte protejata/privata care asigura implementarea clasei;
z - o parte publica care reprezinta interfata clasei respective cu
celelalte sectiuni din program.
z I t f t la
Interfata l o clasa
l se refera
f l informatia
la i f ti pe care utilizatorul
tili t l trebuie
t b i
sa o cunoasca pentru a se putea folosi de facilitatile oferite de acea
clasa.
z De aceea trebuie cunoscut:
z -identificatorii functiilor membru publice ale clasei;
z -prototipurile functiilor membru;
z -scopul functiilor membru.
z Protectia membrilor intr-o clasa este indicata cu ajutorul unor
specificatori de acces/ modificatori de protectie.
z Intr-o clasa, la finalul cuvantului cheie, care precizeaza modul de
acces se afla intotdeauna ":"
acces, :.
Cl
Clase şii obiecte
bi t C++
z Domeniul unui identificator de clasa este local si incepe din
momentul declararii clasei pana la finalul blocului respectiv. Daca
o clasa este declarata in afara oricarei functii sau clase,
domeniul sau este intregul fisier.
z Domeniul membrilor unei clase coincide cu domeniu clasei
respective.
z Daca prototipurile functiilor membru se afla in declaratia
p
clasei respective,, definitiile lor ((cu exceptia
p celor inline)) sunt
date in exteriorul declaratiei clasei, folosind operatorul de
specificare de domeniu "::".
z Acesta indica faptul ca domeniul functiei respective este acelasi
cu domeniul clasei din care face parteparte.
z Sintaxa definitiei unei functii membreu a unei clase:
z tip id_clasa :: id_func_membru(...){...};
Cl
Clase şii obiecte
bi t C++
z In C++, obiectele unei clase se p pot manipula
p folosind functiile membru si
operatorii definiti pentru acea clasa.
z O astfel de functie are, de regula, unul sau mai multi parametri si returneaza o
valoare.
z Mecanismul de transmitere prin valoare consta in primirea de catre functie a
parametrilor
t il actuali
t li intr-o
i t stiva
ti ( t k) care este
(stack) t o structura
t t d date
de d t de
d tip
ti
LIFO. Functia preia parametrii din stiva si ii foloseste in blocul sau fara a avea
acces la locatiile lor de memorie. Ea foloseste doar copii locale ale acestor
parametrii care vor fi eliminate din stiva la revenirea din functie. Prin urmare,
printr-un astfel de mecanism,, functia respectiva
p p nu-si p
poate modifica pparametrii
cu care a fost apelata.
z Exemplu:
z void suma (int x){x+=100; }
z void main(){(){
z int u=200;
z suma(u);//apel functie
z cout<<"u="<<u;}
z Se va observa ca se afiseaza valoarea 200 (valoarea transmisa parametrului
formal al functiei) si nu 300 cat ar trebui dupa executia functiei.
Cl
Clase şii obiecte
bi t C++
z Problema se p poate rezolva folosind p
parametrii tip
pppointer.
z Exemplu:
z void suma (int *x){ *x+=100;}
z void main(){
z i t u=200;
int 200
z suma(&u);//apel functie
z cout<<"u="<<u;}
z In acest caz se va afisa pentru u valoarea 300300.
z In C++, s-a aratat ca se utilizeaza conceptul de referinta, ce poate fi
utilizat la fel ca obiectul referit. Referinta reprezinta adresa obiectului
respectiv deosebindu-se de pointer prin faptul ca ea nu este o variabila
reala Ea este initializata in momentul definirii si valoarea ei nu se poate
reala.
modifica ulterior.
z Transmiterea unei referinte la un obiect evita efectuarea de copii inutile
si permite o implementare eficienta.
Cl
Clase şii obiecte
bi t C++
z Referinta se foloseste in transmiterea de parametri
parametri,
daca:
z a)) functia trebuie sa modifice p
parametrii actuali de la apel;
p
z b) functia nu modifica parametrii actuali, dar trebuie evitata
copierea obiectelor in stiva (economie de memorie). In
acest ultim caz se va folosi specificatorul const pentru a
indica faptul ca parametrul transmis prin referinta nu va fi
modificat de functia respectiva.
z E
Exemplu:
l definire
d fi i clasă
l ă student.
t d t
Clase şi obiecte C++
z class Student
z {
z public:
z char Nume[100];
z char Prenume[100];
z int Varsta;
z protected:
z char Facultatea[30];
z char Sectia[30];
z int anul;
z int nr_restante;
z private:
z long media_ultim_an;
z double bursa;
z public:
z Student();
z long aflaMedia();
z void schimbaMedia(long MediaNoua);
z private:
z int Afla_nr_restante();
z };
Utilizarea operatorului :: in
d fi i
definirea variabilelor
i bil l globale
l b l
z Intr o declaratie de clasa se poate modifica accesul ori de cate
Intr-o
ori este necesar.
z Tipurile struct si union reprezinta cazuri particulare de clase
care se distanteaza de conceptul
p OOP.
z O diferenta esentiala intre class si struct consta in faptul ca
datele membru in struct, in mod implicit, sunt publice, iar
membrii din class, in mod implicit, sunt privati.
z Operatorul „::“ mai este numit si operator de scop. Scopul si
accesibilitatea unui identificator se pun in evidenta cu ajutorul
acestui operator.
z Sintaxa:
z ::variabila operator;
Utilizarea operatorului :: in
d fi i
definirea variabilelor
i bil l globale
l b l
Exemplu:
z #include<iostream h>
#include<iostream.h>
z #include<conio.h>
z int i=100; // declararea si initializarea lui i ca variabila globala
z void f1(){
z i t i=9;
int i 9 // declararea
d l lluii i ca variabila
i bil llocala
l /i/in ffunctia
ti f1
z i++; // incrementarea variabilei locale i
z cout<<"i="<<i;
z cout<<"\n";}
z void f2(){
z int i=5; // declararea lui i ca variabila locala in functia f2
z ::i++; // incrementarea lui i global desi este „mascat“ de declararea //unui i local
z int k=::i;;
z cout<<"k="<<k;}
z void main()
z {clrscr();
z f1();
z f2();}
Utilizarea operatorului :: in
d fi i
definirea variabilelor
i bil l globale
l b l
z Se observa ca in C++ C++, variabilele locale pot fi create in orice
pozitie din cod. Se pot folosi, cand este util, nume de functii
standard de biblioteca (read, write, fopen etc.) drept nume de
functii utilizator, urmand a fi reutilizate intr-o anumita maniera.
z Exemplu:
z //definirea functiei utilizator
z int A::fopen(char*pn="fis.dat",
p ( p , char*pa="rt")
p )
z {
z //……………………………..
z ::fopen(pn pa);// apel la functie de biblioteca
::fopen(pn,
z …………………
z }
Utilizarea operatorului :: in definirea
variabilelor membru şi globale
z Din urmatorul exemplu reiese cum se poate utiliza operatorul "::" in cadrul unei
functii membru ce opereaza cu variabile membru si cu variabile globale.
z Exemplu:
z #include<iostream.h>
z #include<conio.h>
z int v=20;; // declarare variabila gglobala cu domeniul de tip
p fisier care incepe
p din
acest punct
z class B{
z int v; // declararea unei variabile membru /privata a clasei
z pub c
public:
z void init(int x){v=x;}
z void f(); //declarare functie membru (prototip)
z };
z void B::f(){ //definitia functiei membru
z int u=v++; //postincrementarea variabilei membru v
z cout<<"u="<<v;
z ::v++; //postincrementarea variabilei globale v
z int r =::v;
z cout<<"\n";
z cout<<"r="<<r; }
Utilizarea operatorului :: in definirea
variabilelor membru şi globale
z void main(){(){
z B c;
z clrscr();
z c.init(10);
z c.f();
f() }
z Un membru al unei clase poate fi definit prin construcţia
z nume_clasa::membru
z Una din motivatiile prezentei identificatorului clasei in fata
operatorului "::" este impusa si de faptul ca trebuie sa se distinga
functiile cu acelasi identificator care apartin la clase diferite.
z In plus, se permite operarea directa cu variabila membru, fara
precizari suplimentare cu privire la identitatea sa.sa Mai exact,
exact toate
variabilele folosite intr-o functie membru a unei clase si
nedeclarate in ea, se presupun, in mod implicit, ca fiind membru
ale acelei clase. Daca prin procesul de compilare nu se stabileste
aceasta, se va trece la identificarea lor ca variabile globale.
Cl
Clase derivate
d i t
z Prin mecanismul de moştenire
ş sau derivare se ppot crea clase noi p
pe
baza unor clase existente.
z Clasa din care se moşteneşte se numeşte clasă de bază, clasa care
moşteneşte se numeşte clasă derivată.
z Clasa derivată moşteneşte toţi membrii clasei de bază,
bază dar nu va putea
avea acces niciodată la membrii declaraţi private în clasa de bază.
Practic, datele şi metodele se transferă de la clasa de bază la clasa
derivată beneficiind deci de proprietăţi şi de un comportament
asemănătoare cu cele ale clasei de bază.
z Există şi conceptul de moştenire multiplă – o clasă derivată poate să
moştenească de la mai multe clase de bază.
z Exemplu:
z class A
z {
z private:
z int i2;
z };
Cl
Clase derivate
d i t
z class B: public A
z {
z public:
z int i3;
z };
z Membrul i2 din clasa A,, fiind declarat private,
p ,
nu este vizibil în clasa derivată B, indiferent
de mofificatorul de acces.

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