Documente Academic
Documente Profesional
Documente Cultură
CUPRINS
CONSIDERATII STIINTIFICE
1. CONCEPTE DE BAZA IN POO
1.1. ABSTRACTIZAREA DATELOR.INCAPSULAREA
1.2. MOSTENIREA
1.3. POLIMORFISM
2. CLASE (ADT)
2.1. TIPUL STRUCT:DEFINITIE, EXEMPLE TRECEREA LA TIPUL CLASS
2.2. TIPUL CLASS.DEFINITIE .DATE SI METODE MEMBRE .EXEMPLE
2.3. OBIECTE. MEMBRII UNEI CLASE
2.4. VIZIBILITATEA MEMBRILOR CLASEI(MODURI DE ACCES:PRIVATE,
PROTECTED,PUBLIC)
2.5. FUNCTII MEMBRE(FUNCTII IN-LINE)
2.6. MEMBRII STATICI
3. CONSTRUCTORI SI DESTRUCTORI
3.1. DEFINITIE.EXEMPLE
3.2. TIPURI DE CONSTRUCTORI(IMPLICITI, DE COPIERE, DEFINITI DE
UTILIZATOR).EXEMPLE
4. FUNCTII PRIETENE (FRIEND) .DEFINITIE.EXEMPLE
5. MOSTENIREA
5.1. DEFINITIE.EXEMPLE
5.2. TIPURI DE MOSTENIRE
5.3. CLASE DERIVATE
5.4. COMPORTAMENTUL CONSTRUCTORILOR SI DESTRUCTORILOR
IN CAZUL CLASELOR DERIVATE
6. POLIMORFISMUL
6.1. CLASE VIRTUALE.EXEMPLE.
6.2. FUNCTII VIRTUALE.EXEMPLE
7. SUPRAINCARCAREA OPERATORILOR
7.1. SINTAXA PENTRU SUPRAINCARCARE
7.2. EXEMPLE .OPERATORII ARITMETICI, OPERATORII (),[],<<,>>
7.3. SUPRAINCARCAREA FUNCTIILOR.DEFINITIE.EXEMPLE.
Consideratii metodice
Realizarea unui soft educational care sa cuprinda :lectii, teste on-line si
aplicatii .
INTRODUCERE
Programele
aplicative
prelucreaz
informaii
din
realitatea
inconjurtoare: inventariaz carile dintr-o bibliotec, prelucreaz texte,
gestionez activitatea unor firme, poiecteaz instalaii etc.
Limbajele de programare trebuie s fie capabile s reprezinte obiectele
din realitate cat mai fidel.Apare necesitatea unui tip de date care s defineasc
o cutie neagr care s nu mai poat fi modificat ci doar adaptat la noile
cerine ale programului.
Tipurile de date puse la dispoziie de programarea structurat
(inregistrarea si tabloul) sunt insuficiente pentru modelarea realitii.Ele
surprind doar starea obiectelor la un moment dat, fr a evidenia
funcionalitatea lor.
Ideea de baz de la care pleac programarea orientat obiect este de a
grupa structurile de date cu operaiile care prelucreaz respectivele date.
Programarea orientat pe obiecte nu este ceva nou;conceptele sale specifice
(abstractizarea datelor, motenirea si polimorfismul) au aprut iniial n alte
limbaje cum ar fi:Simula67, Smalltalk.
C++ a fost dezvoltat la inceputul anilor 1980 de Bjarne Stroustrup de la
AT&T Bell Laboratories.El a creat C++ prin adugarea de noi facilitai limbajului
C pentru ca acesta s suporte in mod eficient programele de simulare bazate
pe evenimente.
Programarea orientat pe obiecte a devenit foarte popular, mai ales
datorit avantajelor sale care ajut dezvoltrii proiectelor actuale, ce devin din
ce in ce mai complexe. Acest stil de programare duce la imprirea aplicaiilor
in mai multe module, astfel nct cel ce dezvolt un modul nu trebuie s
cunoasc detaliile de implementare ale altor module.
O aplicaie a POO este programarea vizual.Astzi este de neconceput
realizarea unei aplicaii fr o interfa grafic tip Windows (Visual C++, C++
Builder etc.).
ABSTRACTIZAREA DATELOR.NCAPSULAREA
Simularea obiectelor din lumea real este posibil prin definirea unui tip
de dat abstract.Termenul de tip abstract de dat se refer la un tip de date
definit de utilizator impreun cu un set de operaii ce se pot efectua asupra
acestor date.
Definirea unui tip abstract de date implic specificarea reprezentrii
interne a datelor din acel tip, precum i a funciilor pe care alte module de
program le vor utiliza pentru manipularea tipului abstract de date.
In acest mod se realizeaz o ascundere a informaiei i implicit o
protecie a datelor.Ascunderea informaiilor nseamn defapt ascunderea
detaliilor de implementare i reprezint defapt conceptul POO de ncapsulare.
ncapsularea informaiei permite utilizatorului s trateze clasele i
obiectele acestora ca pe nite cutii negre .Utilizatorul nu trebuie s cunoasc
detalii interne de realizare a unei funcii membre ci doar operaia realizat de
aceasta;mai simplu:nu ne intereseaz schema intern a mainii de splat, a
televizorului sau a calculatorului ci doar cum funcioneaz ele.
ncapsularea este mecanismul prin care datele (variabilele) i funciile
(numite si metode) sunt plasate impreun, ntr-o unic structur.
n POO se pot crea obiecte aparinnd unui tip abstract de date .
Un obiect este o entitate care combin att date ct i funcii care
manevreaz aceste date.Se mai poate spune c obiectele sunt variabile
apartinnd unui tip de date definit de utilizator.
De exemplu, programatorul i poate defini tipul (clasa) matrice i
operatorii care pot fi aplicai matricilor (* pentru nmulirea a dou matrici, +
pentru adunarea a dou matrici, - pentru scderea a dou matrici, etc). Astfel,
el poate folosi tipul matrice n mod similar unui tip predefinit:
matrice A, B;
matrice C=A+B;
Tipul unui obiect (ablon al obiectului) este o clas. O clas se
caracterizeaz prin: numele clasei, atribute, funcii i relaii cu alte clase.
Instana este un obiect dintr-o clas (A, B, C sunt obiecte, instane ale
clasei matrice) i are proprietile definite de clas. Pentru o clas definit, se
pot crea mai multe instane ale acesteia. Toate obiectele au o stare i un
comportament. Starea unui obiect se refer la elementele de date coninute
n obiect i la valorile asociate acestora (datele membre).
1.2.
MOTENIREA
POLIGON
PATRULATER
TRIUNGHI
PARALELOGRAM
DREPTUNGHI
ROMB
PTRAT
MOTENIREA UNIC
n cazul motenirii unice, fiecare clas are doar o superclas. Exist dou
modaliti de specializare a unei clase de baz:
introducerea de extra-atribute i extra-metode n clasa derivat
(particulare doar clasei derivate);
redefinirea membrilor n clase derivate (polimorfism).
MOTENIREA MULTIPL
n situaia motenirii multiple, o clas are mai multe superclase.
A
Motenirea multipl
1.3.
POLIMORFISMUL
tip camp n;
}[lista variabile];
Nu pot lipsi
simultan!!
struct
{char denumire[20];
int pret;
int cantitate;
}produs;
3
struct produs
{char
denumire[20];
int pret;
int cantitate;
}p,p1;
2.2.
Observaii
Private, protected i public sunt cuvinte cheie care specific modul de
acces la datele i metodele din seciunea delimitat de fiecare ;
n cazul tipurilor de date definite cu ajutorul structurilor, se pot aplica
modificatorii de acces. n cazul tipurilor definite cu ajutorul uniunilor,
accesul implicit (public) nu poate fi modificat
Un membru al clasei (dat sau metod) este calificat n corpul clasei prin
operatorul de rezoluie :: ;
Variabilele de tipul definit prin class se numesc instane ale clasei ;un
membru al clasei este calificat folosind operatorii . (operator de
selecie direct) sau -> ( operator de selecie indirect).
O variabil de tip clas poate stoca un set complet al datelor clasei
respective.Acest set reprezint o instaniere a clasei, adic o manifestare
concret a clasei.
In teoria programrii orientate pe obiecte, o astfel de instan poart numele
de obiect.
}
//functia main
void main()
{complex c1,c2,c3;double r,i;
cout<<Introduceti valorile pentru primul numar: ;
cin>>r>>i ;c1.initializare(r,i) ;
cout<<Introduceti valorile pentru al doilea numar: ;
cin>>r>>i ;c2.initializare(r,i) ;
c1.afisare_complex();c2.afisare_complex();
c3.adunare_complex(c1,c2) ;cout<<endl ;
cout<<rezultatul adunarii <<endl;
c3.afisare_complex();cout<<endl;
//acelasi rezultat se obtine astfel
cout<<c3.returnre()<<<<c3.returnim();
}
2. Definirea tipului dreptunghi cu ajutorul unei clase
#include <iostream.h>
class dreptunghi{ //antetul clasei
double lungimea, latimea;//datele membre
public://functiile(metodele) membre
void dimensiuni(double, double );
double arata_lungimea()
{return lungimea;}
double arata_latimea()
{return latimea;}
double arie()
{return lungimea*latimea;}
};
//corpul clasei
void dreptunghi:: dimensiuni(double L, double l)
{lungimea=L; latimea=l;}
void main()
{ dreptunghi a;double l1, l2;
cout<<"Lungime="; cin>>l1;cout<<"Latime="; cin>>l2;
a. dimensiuni(l1, l2);cout<<"Dimensiunile dreptunghiului sunt:";
cout<<a.arata_lungimea()<<" si"<<a.arata_latimea()<<endl;
cout<<"Aria dreptunghiului:"<<a. arie()<<endl;
cout<<"Dimens :"<<sizeof(a)<<endl;
}
Observaie
Nivelul de acees implicit la membrii clasei este private. Dac pentru metode
nu s-ar fi folosit modificatorul de acces public, metodele nu ar fi putut fi
folosite n funcia main.
lungimea
latimea
a.lungimea
lungimea
a.latimea
latimea
b.lungimea
b.latimea
Exemplu
class dreptunghi{
double lungimea, latimea;
public:
void dimensiuni(double, double );
double arata_lungimea();
double arata_latimea();
double arie();
};
//..
void main()
{ dreptunghi a;//a obiect din clasa dreptunghi
//
cout<<"Aria dreptunghiului:"<< arie()<<endl;
dreptunghi *pa;//obiect desemnat prin pointer
pa=&a;
double aria=pa-> arie();
cout<<"Aria dreptunghiului:"<< arie()<<endl;
}
2.4.
2.5.
DEFINIIE
O funcie este considerat ca fiind membru al unei clase dac prototipul ei
este ncadrat n declararea antetului clasei respective (corpul funciei putnd fi
definit n afara antetului clasei cu ajutorul operatorului de rezoluie ::).
TIPURI DE FUNCII MEMBRU
Funcii pentru administrarea clasei reprezint setul de funcii care
realizeaz : crearea obiectelor (constructori), distrugerea obiectelor
(destructori), operaia de atribuire ntre obiecte (operator =) etc.;
Funcii pentru implementarea clasei implementeaz comportamentul
tipului de date reprezentat de clasa respectiv (pentru clasa Complex:
adunarea, scderea etc. a dou numere complexe, modulul unui numr
complex etc. );
Funcii de acces la clas acestea returneaz valorile unor date membre
declarate private.
OBSERVAIE
Dac funcia este definit in interiorul clasei atunci ea trebuie s fie o funcie
inline. O funcie inline este o funcie care nu conine structuri repetitive i nici
structuri switch.
De exemplu funcia arat_lungimea() din clasa dreptunghi prezentat n
paragraful 2.2. la exemplul 2:
double arata_lungimea()
{return lungimea;}
ASPECTE PRIVIND DEFINIREA FUNCIILOR MEMBRU
Modul de utilizare al funciilor inline
Funciile definite in antetul clasei sunt automat de tip inline (apelul
funciei este nlocuit peste tot n program cu codul ntregii funcii ceea ce
duce la scderea timpului de execuie se evit transmiterea
parametrilor de apel pe stiva sistemului);
Funciile definite n exteriorul antetului clasei conin cuvntul cheie inline
i la declararea funciei ct i la definirea ei;
Sintaxa declarrii unei funcii inline este urmtoarea:
inline tip_returnat nume_funcie ([list parametri]);
Pointerul this
Fiecare funcie membru posed un argument ascuns, numit this ;acesta este
transmis automat de ctre compilator.This este un pointer ctre obiectul care
apeleaz funcia.
Spre deosebire de pointerii obinuii, pointerul this realizeaz uniunea dintre
membrii clasei i funcia ce acioneaz asupra lor (funcie membru).
Exemple :
1. S presupunem c am dori s cunotem adresa fizic a unui obiect din
clasa dreptunghi.Atam clasei urmtoarea funcie membru :
void dreptunghi :: afieaz_adresa()
{ cout<<Adresa fizica a acestui obiect este <<this;}
2. Utilizarea explicit a pointerului this poate fi observat n funcia de mai
jos :
void dreptunghi :: afiseaza_latimea()
{cout<<Ltimea este << this->latimea;}
Atributul const
Atributul const este utilizat pentru a face distincie ntre funciile care modific
valorile datelor membre i cele care nu le modific:cele din urm au atributul
const in declaraie, plasat astfel:
Tip_returnat clasa::nume_funcie() const {}
Odat declarat acest atribut, orice tentativ de a modifica datele unui obiect
este semnalat ca eroare.