PROGRAMARE ORIENTATĂ OBIECT (C++) 2005- · PDF fileProgramare orientatăobiect (POO): Decide...
date post
30-Aug-2019Category
Documents
view
15download
0
Embed Size (px)
Transcript of PROGRAMARE ORIENTATĂ OBIECT (C++) 2005- · PDF fileProgramare orientatăobiect (POO): Decide...
PROGRAMARE ORIENTAT OBIECT(C++)
2005-2006
Prof. univ. dr. G. GRIGORAwww.infoiasi.ro/~grigoras/poo/poo.html
Exemple utilizate la curs:http://thor.info.uaic.ro/~dlucanu/pc/pcII/html/ex_index.htm
POO(C++) 2005-2006 Gh GRIGORAS 2
BIBLIOGRAFIE
Liviu Negrescu : Limbajele C si C++ pentru incepatori, vol II, III, Microinformatica, Cluj-Napoca, Ed.Libris 1997 H. Schildt: C++ manual complet, Teora, 2000D. Kaler, M.J. Tobler, J. Valter: C++, Teora, 2000Bjarne Stroustrup: The C++ Programming Language, Adisson-Wesley, 3nd edition, 1997Stanley B. Lippman: C++ Primer, Addison Wesley, 1992K.Jamsa, Succes cu C++, Editura All 1997
Manuale electronice
http://www.infoiasi.ro/fcs/biblioteci.phphttp://lib.info.uaic.ro/index.php
Peter Mller : Introduction to Object-Oriented Programming Using C++ Bruce Eckel : Thinking in C++, 2nd Edition *** : Online C++ tutorial
POO(C++) 2005-2006 Gh GRIGORAS 3
CERINE
EVALUAREActivitatea la laborator (AL), testele scrise (TS)AL >= 6, TS >= 4AL: fiecare tema de laborator va fi notata cu note de la 1 la 10 TS: 2 teste scrise (15 aprilie, 20 mai), fiecare test coninnd 8 ntrebri gril i 1-2 probleme.formula notei finale: 40% AL + 60% TS
Rexaminarea const din:1 test scris care contribuie cu 60% din nota final rezultatul obinut la activitatea de laborator
POO(C++) 2005-2006 Gh GRIGORAS 4
Ce este C++
C++ este o extensie a lui C (Bjarne Stroustrup, AT&T Labs, 1984)
Programele C scrise bine sunt si programeC++Programele care sunt si programe C siprograme C++ au acelasi inteles(semantica); exceptiile sunt minore.Exist totui cod C care nu este C++:
void f(); void g(){f(2);} struct S{int x, y;} f();void g(struct S {int x, y;} y);
POO(C++) 2005-2006 Gh GRIGORAS 5
Ce este C++
Este un C mai bun;Programatorii buni in C au un dezavantaj: au tendina sa scrie cod C++ in stilul C pierznd beneficiileaduse de C++Suport abstractizarea datelorSuport programare orientat obiectSuport programare generic
POO(C++) 2005-2006 Gh GRIGORAS 6
Paradigme de programare
C++ nu a fost proiectat s impuna un anume stil de programare, el suporta stilurile (paradigmele) tradiionale ipe cele avansate:
Programare procedural: Decide ce proceduri sunt necesare, si alege cei mai buni algoritmi pentru eleProgramare modular: Decide ce module sunt necesare, mparte programul asa fel incat datele sa fie ascunse n moduleTipuri abstracte de date (Tipuri definite de utilizator): Decide ce tipuri ii sunt de folos si construete cte un set complet de operaii pentru acesteaProgramare orientat obiect (POO): Decide ce clase suntnecesare, proiecteaz cate un set complet de operaii pentruacestea si expliciteaz prile comune ale lor prin relaia de motenire (derivare, generalizare), i folosete polimorfismulProgramare generic: Decide algoritmii ce sunt necesari iparametrizeaz-i pentru a funciona pe o varietate de tipuri i de structuri de date
POO(C++) 2005-2006 Gh GRIGORAS 7
CLASE SI OBIECTE o prim viziune
Un obiect este caracterizat de:nume un identificatoratribute date de un anume tip
valorile atributelor la un moment dat definesc o stare a obiectului
metode (servicii, operaii) funcii ceacceseaz atributele obiectului modificndeventual starea acestuia; ele definesccomportarea obiectului
POO(C++) 2005-2006 Gh GRIGORAS 8
CLASE SI OBIECTE o prim viziune
O clas descrie unul sau mai multe obiecte cepot fi precizate printr-un set uniform de atribute(date) i metode(funcionalitate).
Orice obiect are memoria sa proprie unde se pstreaz valorile tuturor atributelor sale
Orice obiect are un tip; un obiect este o instan a unei clase
Clasa definete caracteristicile si comportareaobiectelor
POO(C++) 2005-2006 Gh GRIGORAS 9
CLASE SI OBIECTE Reprezentare grafic
on()off()get_marime()
marimeculoare
Bec
get_val()get_reset_val()increment()decrement()reset()
valreset_val
Contormetode
atribute
nume clasa
POO(C++) 2005-2006 Gh GRIGORAS 10
Clasa cont
Specificarea claseiUn cont bancar:
are un titular, sold, o rat a dobnzii, numar de cont se pot efectua operaii de depunere, extragere, actualizare sold
Extragerea atributelor:titular, sold, rat a dobnzii, numr de cont
Extragerea metodelor:depunere, extragere, actualizare sold
Completare specificaieactualizare sold data ultimei operaii
POO(C++) 2005-2006 Gh GRIGORAS 11
Clase - proiectare
Definiia unei clase presupune:combinarea datelor cu operaiile ce se aplic acestoraascunderea informaiei
POO(C++) 2005-2006 Gh GRIGORAS 12
Combinarea datelor cu operaiile
datele si operaiile ce se aplic asupra lor sunt incluse n aceeai unitate sintactic; n acest mod datele i procesele devin legate
sold
depuneredepune()
sold
Cont
POO(C++) 2005-2006 Gh GRIGORAS 13
ASCUNDERE i NCAPSULARE
Ascunderea informaiei:Modul de structurare a datelor nu este cunoscut: datele sunt declarate intr-o seciune privat a clasei.Accesul la date, pentru consultare, modificare, etc. se face numai prin intermediul funciilor clasei: acestea sunt declarate intr-o seciune public a clasei interfaa clasei.Pot exista date publice precum si funcii private: decizia este a programatorului.
ncapsulare = Combinare + AscundereDatele si funciile (operaiile) care pot aciona asupra datelor sunt incluse n aceeai unitate sintacticn C++ acest lucru se realizeaza prin tipul utilizator struct i class
POO(C++) 2005-2006 Gh GRIGORAS 14
AVANTAJE
Combinarea datelor:definete clar ce structuri de date sunt manevrate i care sunt operaiile legale asupra lor.programul capt modularitate.scade riscul alterrii datelor din exterior.faciliteaz ascunderea informaiei.
Ascunderea informaiei:programe mai sigure i mai fiabileelibereaz clasele utilizator de grija manevrrii datelor previne apariia erorilor
POO(C++) 2005-2006 Gh GRIGORAS 15
AVANTAJE
ncapsulare: Combinare + Ascunderea informaiei =
Protejarea datelor
previne apariia erorilor prin limitarea accesului la dateasigur portabilitatea programelor faciliteaz utilizarea excepiilor interfaa unei clase = operaiile cu care o clas utilizator poate manevra datele
POO(C++) 2005-2006 Gh GRIGORAS 16
Structurarea nivelului de acces la informaie
Limitarea accesuluila informaie
Seciuni private
Seciunipublice
POO(C++) 2005-2006 Gh GRIGORAS 17
Clasa cont Fiierul cont.hclass Cont{public:
Cont();~Cont();void depune(double);void extrage(double);void setDob(double);
private:char *titular;double sold;double rataDob;char *dataUltOp;void actualizeazaSold();void atribuieNrCont();
};
POO(C++) 2005-2006 Gh GRIGORAS 18
Clasa cont Fiierul cont.cpp
Cont::Cont(){
titular = NULL;dataUltOp = NULL;sold = 0;rataDob = 0;atribuieNrCont();
}
Cont::~Cont(){
delete titular;delete dataUltOp;
}
void Cont::depune(double suma){
sold += suma;}
void Cont::extrage(double suma){
actualizeazaSold();if(suma > sold)
throw "Sold insuf.";sold -= suma;
}
POO(C++) 2005-2006 Gh GRIGORAS 19
Clasa cont Fiierul demo.cpp
void main(){Cont cont;cont.depune(2000);}
cont.sold += 2000;
error C2248: 'sold' : cannot access private member declared in class 'Cont'
POO(C++) 2005-2006 Gh GRIGORAS 20
Clase si Obiecte - Tipuri abstracte de dat
Clasa, Obiect o alta viziune (definiie):O clasa este o implementare a unui tip de dat abstract. Ea definete:
atribute care implementeaz structura de dat respectivmetode care implementeaz operaiiletipului de dat abstract.
Un obiect este o instan a unei clase. El este unic determinat de numele su idefinete o stare reprezentat de valorileatributelor sale la un moment dat
POO(C++) 2005-2006 Gh GRIGORAS 21
Stiva
tipul de data abstract Stivaentitati de tip dat: liste LIFOoperaii:
push() pop()top()
push()pop()top()
tab[0..MAX-1]virf
Stiva
POO(C++) 2005-2006 Gh GRIGORAS 22
Stiva
// Stiva.h#define MAX_STIVA 10class Stiva {public:
Stiva();~Stiva(){};void push(char);void pop();char top();bool este_vida();
private:char tab[MAX_STIVA];int virf;
};
POO(C++) 2005-2006 Gh GRIGORAS 23
Stiva
// Stiva.cppStiva::Stiva(){ virf = -1;}void Stiva::push(char c){
if (virf == MAX_STIVA-1) throw "Depasire superioara.";
tab[++virf] = c;}void Stiva::pop(){
if (virf < 0) throw "Depasire inferioara.";virf--;
}char Stiva::top(){
if (virf < 0) throw "Depasire inferioara.";return tab[virf];
}
POO(C++) 2005-2006 Gh GRIGORAS 24
Stiva: Stiva_demo.cpp
void main(void){Stiva S; char c='a';try {
while (true){S.push(c++); cout
POO(C++) 2005-2006 Gh GRIGORAS 25
Utilizarea de clase
exist multe bibloteci de clase STLMFCetc
pentru utilizare, trebuie cunoscut doar interfaa (elementele publice)
nu intereseaz implementarea
programul care utlizeaz clasa este independent de implementarea clasei
POO(C++) 2005-2006 Gh GRIGORAS 26
Utilizarea de clase
Exemplu: stringmy-string.h STL
// my_string.hclass string{public:
// Constructori/destructoristring();string(char* new_string);string(const string& new_string);. . .~string();
POO(C++) 2005-2006 Gh GRIGORAS 27
Utilizarea de clase
// Operatorifriend string operator+ (const string& lhs,
const string& rhs); string& operator+=