Sunteți pe pagina 1din 38

CURS PROGRAMARE II

PROGRAMARE ORIENTAT OBIECT

LECTOR DR. FLAVIA MICOTA

PROGRAMARE II
Curs: Flavia Micota

Cab. 050B
Email: zflavia@info.uvt.ro
web.info.uvt.ro/~zflavia Programare II
Laboratoare:

Flavia Micota
Monica Tirea cab. F109; tirea.monica@info.uvt.ro
Ovidiu Aritoni cab. 050B; oaritoni@info.uvt.ro
Ciprian Pungila cab. 050B; cpungila@info.uvt.ro

SCOP I OBIECTIVE
Scop

Acumularea de cunotine i aptitudini neccesare realizri


unor aplicaii orientate obiect
Obiective
nvarea conceptelor specifice programrii orientate
obiect
nvarea limbajului C++
Creare de applicaii consol n C++ (GUI, accesul la baze
de date sau alte biblioteci adiionale NU va fi acoperit de
acest curs)
Introducere n proiectarea aplicaiilor orientatate obiect

CURRICUL CURS
1.

Introducere. Paragdime de programare. Scurt istoric OOP i C++

2.

Tipuri de date. Tipuri de date concrete, abstracte, generice.


ncapsularea. Type checking.

3.

Conceptele de baz ale programrii orientate pe obiecte. Obiect.


Clasa. Mesaj.

4.

Clase (I). Declararea claselor. Instanierea obiectelor. Membrii


clasei. Scopuri.

5.

Clase (II). Controlul accesului. Constructor. Destructor. Autorefereniere. Modificatori.

6.

Obiecte. Relaii ntre clase. Construirea i distrugerea obiectelor.


Relaii ntre clase.

7.

Principiul motenirii. Clase derivate. Accesul la membrii claselor


de baz. Constructori. Destructor. Funcii virtuale. Clase
abstracte. Polimorfism. Motenire multipl. Ierarhii de clase.

CURRICUL CURS
8.

Tratarea excepiilor. Definiii. Mecanismul throw-try-catch. Ierarhii


de excepii. Managementul resurselor. Cazuri speciale.
Declararea excepiilor.

9.

Programarea generic. Introducere. Clase ablon. Funcii


ablon. Specializari. Motenirea n programarea generic.

10. Informaii de tip la rulare. Introducere. Dynamic casting. Static


casting vs dynamic casting. Folosirea corecta / greit a RTTI.
11. Biblioteca standard C++. Introducere. Containere.

12. Biblioteca standard C++. Algoritmi. Iteratori. Stringuri. Stream-uri.


Numerics.
13. Analiza orientat obiect. Descriere general. Activiti. Use
cases. Studiu de caz.
14. Proiectarea orientat obiect: Descriere general. Principii ale
OOD. Studiu de caz.

BIBLIOGRAFIE

Bjarne Stroustrup The C++ Programming Language 3rd


Edition. Addison Wesley, 1997.

Kris Jamsa, Lars Klander Totul despre C i C++. Manualul


fundamental de programare n C i C++, Teora

Mulea Ionu Iniiere n C++. Programare orientat pe


obiecte. Cluj-Napoca, Microinformatica, 1993

Andrei Alexandrescu - Programarea moderna in C++, Teora,


2002

Octavian Catrina, Iuliana Cojocaru Turbo C++, Teora, 1992

REGULI EVALUARE
Curs

0.5 puncte activitate curs


4 puncte probra scrisa
Laborator

2 puncte test laborator n timpul anului


2 puncte test laborator dup examen
1 punct (teme/proiect)
0.5 puncte activitate laborator

REGULI
Termen predare teme: 1 saptmn

ntrzierile n predarea temelor sunt penalizate cu 1


punct/saptmn
Temele trimise cu o ntrziere mai mare de 3 sptmni nu se
mai iau n considerare

Absene nemotivate la laborator: maxim 4/semestru


Laboratorul poate fi recuperat doar mpreun cu una dintre
celelalte subgrupe

INTRODUCERE.
PARAGDIME DE PROGRAMARE.
SCURT ISTORIC OOP I C++

CUPRINS
Tehnici de programare
Programarea orientat obiect

Istoric C++

CUPRINS
Tehnici de programare
Programarea orientat obiect

Istoric C++

TEHNICI DE PROGRAMARE
Programarea nestructurat
Programarea procedural
Programarea modular
Abstractizarea datelor
Programarea orientat obiect

Programarea generic

PROGRAMAREA
NESTRUCTURAT
Programe simple / mici ca dimensiune care conin doar o
singur metod
Program = succesiune de comenzi care modific date
globale
Dezavantaje:
Greu de meninut cu ct codul devine mai lung
Mult cod duplicat (copy/paste)
Exemple: programe scrise n asamblare, C, Pascal
test.c

Programul Principal
Date

// date
void main(int argc, char* argv[]) {
// date locale
// instruciuni
}

PROGRAMAREA
NESTRUCTURAT
Programe simple / mici ca dimensiune care conin doar o
singur metod
Program = succesiune de comenzi care modific date
globale
Dezavantaje:
Greu de meninut cu ct codul devine mai lung
Mult cod duplicat (copy/paste)
Exemple: programe scrise n asamblare, C, Pascal

Programul Principal
Date

Care ar fi o
soluie?

PROGRAMAREA
PROCEDURAL
Se bazeaz pe noiunea de procedur (funcie)

Procedura care dorim s o folosim; algoritmul cel mai bun


pe care l gsim
Dezavantaje
Meninerea de diferite stucturi de date i algoritmi care
prelucreaz datele
Exemple: programe scrise n C, Pascal, Fortran, Algol
Programul Principal
Date

Procedura1

Procedura2

Procedura3

PROGRAMAREA
PROCEDURAL
Se bazeaz pe noiunea de procedur (funcie)

Dezavantaje
Meninerea de diferite stucturi de date i algoritmi care
prelucreaz datele
test.c
double sqrt(double arg1) {
.
.
}
void main(int argc, char* argv[]) {
// date locale
f(10, data1);
// apel
sqrt(14.6);
}

void f(double arg1, tip1 arg2) {


.
sqrt(arg1);
}

PROGRAMAREA
PROCEDURAL
Se bazeaz pe noiunea de procedur (funcie)

Procedura care dorim s o folosim; algoritmul cel mai bun


pe care l gsim
Dezavantaje
Meninerea de diferite structuri de date i algoritmi care
prelucreaz date
Exemple: programe scrise n C, Pascal, Fortran, Algol
Programul Principal
Date

Procedura1

Procedura2

Care ar fi o
soluie?

Procedura3

PROGRAMAREA
MODULAR
Dimensiunea programului crete Organizarea datelor

Ce module dorim; partiionarea programelor astfel nct


datele s fie ascunse n module (data hiding principle)
Dezavantaje:
Doar un singur modul exist o dat ntr-un program
Exemple: programe scrise n C, Modula-2
Programul Principal
Date
Modul1
Date+Date1
Procedura1

Modul2
Date2+Date1
Procedura2

Procedura3

PROGRAMAREA
MODULAR
Dimensiunea programului crete Organizarea datelor

Dezavantaje:
Doar un singur modul exist o dat ntr-un program
stiva.h
// declarea interfeei modulului
char pop();
void push(char);
const dim_stiva= 100;

main.c
#include stiva.h"
void functie() {
push(c);
char c = pop();
if (c != c) error("imposibil");
}

stiva.c
#include "siva.h"
// static local acestui fiier /
modul
static char v[dim_stiva];
static char* p = v; // stiva este iniial
goal
char pop() {
// verificare dac exist
elemente i extrage element
}
void push(char c) {
// verific dac mai este loc n
stiv i adaug element
}

PROGRAMAREA
MODULAR
Dimensiunea programului crete Organizarea datelor

Ce module dorim; partiionarea programelor astfel nct


datele s fie ascunse n module (data hiding priciple)
Dezavantaje:
Doar un singur modul exist o dat ntr-un program
Exemple: programe scrise n C, Modula-2
Programul Principal
Date
Modul1
Date+Date1
Procedura1

Care ar fi o
soluie?
Modul2
Date2+Date1

Procedura2

Procedura3

ABSTARCTIZAREA
DATELOR

Realizarea de tipuri de date definite de utilizator care se comport ca i tipurile


default (build-in) (Abstract Data Types)
Ce tipuri de date avem nevoie; implementarea unui set de operaii pentru ele
Dezavantaje
Imposibilitatea de a adapta abstractizrile la noile tipuri, fr a modifica definiia
(are nevoie de cmpuri de tip pentru a face diferena ntre diferite instane)
complex.h
class complex {
double re, im;
public:
complex(double r, double i) { re=r; im=i; }
// float->complex conversie
complex(double r) { re=r; im=0; }
friend complex operator+(complex,
complex);
// binar minus
friend complex operator-(complex, complex);
// unar minus
friend complex operator-(complex);
// ...
};

main.c
void f() {
int ia = 2,ib = 1/a;
complex a = 2.3;
complex b = 1/a;
complex c = a+b*complex(1,2.3);
c = -(a/b)+2;
}

ABSTARCTIZAREA
DATELOR

Dezavantaje

Imposibilitatea de a adapta abstractizrile la noile tipuri, fr a


modifica definiia (are nevoie de cmpuri de tip pentru a face
diferena ntre diferite instane)
figura.h
enum tip{ cerc, triunghi, patrat};
class figura {
punct centru;
culoare col;
tip k;
// reprezentarea figurii
public:
punct unde() { return centru; }
void muta(punct to) { centru= to;
deseneza(); }
void deseneaza();
};

figura.cpp
void figura::deseneaza() {
switch (k) {
case cerc: // deseneaza cerc
break;
case triunghi: // deseneaza triunghi
break;
case dreptunghi: // deseneaza dreptunghi
break;
default: // figura nedefinita

}
}

ABSTARCTIZAREA
DATELOR

Care ar fi o
soluie?

Dezavantaje
Imposibilitatea de a adapta abstractizrile la noile tipuri, fr a
modifica definiia (are nevoie de cmpuri de tip pentru a face
diferena ntre diferite instane)
figura.h
enum tip{ cerc, triunghi, patrat};
class figura {
punct centru;
culoare col;
tip k;
// reprezentarea figurii
public:
punct unde() { return centru; }
void muta(punct to) { centru= to;
deseneza(); }
void deseneaza();
};

figura.cpp
void figura::deseneaza() {
switch (k) {
case cerc: // deseneaza cerc
break;
case triunghi: // deseneaza triunghi
break;
case dreptunghi: // deseneaza dreptunghi
break;
default: // figura nedefinita

}
}

PROGRAMAREA
ORIENTAT OBIECT
Obiecte care interacioneaz, fiecare gestionnd starea
proprie
Ce clase avem nevoie; definirea unei mulimi de operaii,
utilizarea motenirii pentru extragerea comportamentului
comun

Exemple: programe scrise n Simula, C++, Java, Eiffel,


Smalltack, etc
Obiect1
date

Obiect4
date
Obiect3
date

Obiect2
date

PROGRAMAREA
ORIENTAT OBIECT
Obiecte care interacioneaz, fiecare gestionnd starea
proprie
Ce clase avem nevoie; definirea unei mulimi de operaii,
utilizarea motenirii pentru extragerea comportamentului
comun

Exemple: programe scrise n Simula, C++, Java, Eiffel,


Smalltack, etc
figura.h
class fugura{
punct centru;
culoare col;
// reprezentarea figurii
public:
punct unde() { return centru; }
void muta(punct to) { centru= to; deseneza(); }
void deseneaza();
};

rectangle.h
class dreptungi: public figura{
double nlime, lungime;
// reprezentarea dreptunghiului
public:
void deseneaza() {
// deseneaza dreptunghi
}
};

PROGRAMAREA
GENERIC
Algoritmii independeni de detaliile de reprezentare

Ce algoritm se vrea; parametrizare astfel nct s


funcioneze cu o mulime de date i structuri de date
potrivite
Exemple: programe scrise n C++, Java (1.5)
stiva.h
template<class T> class stiva {
T* v;
int dim_max, top;
Public:
stiva(int s);
~stiva();
void push(T v);
T pop();
};

fisier.cpp
void f() {
stiva<char> schar;
siva<complex> scomplex;
stiva<list<int>> slistint;
schar.push(c);
if(schar.pop()!=c) throw Impossible();
scomplex.push(complex(3, 2));
}

CUPRINS
Tehnici de programare
Programarea orientat obiect

Istoric C++

PROGRAMAREA
ORIENTAT OBIECT
Ce este programare orientat obiect (POO)?
Istoric programare orientat obiect

Ce este C++?

DEFINIII
Definiie programare orientat obiect (Object Oriented
Programming)
Un limbaj sau o tehnic este orientat obiect dac i numai
dac ndeplinete urmtoarele condiiile [Stroustrup, 1995]
Abstractizare ofer clase i obiecte
Motenirea posibilitatea de a construi noi abstractizri peste
cele existente
Polimorfism la execuie oferirea unui mecanism de legare
dinamic (runtime binding)

Definie general pentru limbajele care sunt caracterizate ca


fiind orientate obiet: Ada95, Beta, C++, Java, CLOS, Eiffel,
Simula, Smalltalk i altele care se ncadreaz n aceast
definiie. Limbaje care nu suport clase ca C, Fortran4,
Pascal sunt excluse. Limbaje care nu au suport pentru
motenire sau legare dinamic ca Ada88 sau ML sunt
excluse.

DEFINIII
Definiie Obiect:

Dicionar
Un obiect este un lucru vizibil sau tangibil ntr-o form relativ
stabil, un lucru care poate fi neles intelectual, un lucru spre
care o aciune sau gnd este direcional [The Random House
College Dictionary, 1975]

POO
Un obiect are o identitate, o stare i un comportament [Booch,
1990]
Un obiect este o entitate conceptual care: este identificabil,
are proprietii care caracterizeaz o stare local, conine
operaii care modific starea local a sistemului, sau modific
obiecte corelate [de Champeaux, 1993]

Programarea orientat obiect nu nseamn doar gndire


structurat, folosirea de clase, metode i atribute

ISTORIC POO
Simula 67 primul limbaj de programare orientat obiect; extensie a limbajului
ALGOL60
Smalltalk realizat de Alan Kay (Smalltalk-72, Smalltalk-80); legarea dinamic;
Strongtalk (1993) Smalltalk + type system
ani 80 multe limbaje au adugat suport pentru programarea OO: Objective C,
C++, Object Pascal, Modula 3, Oberon, Objective CAML, CLOS.

Eiffel Bertrand Meyer (1988) sintax asemntoare cu Pascal, modelarea prin


contract (design-by-contract)
Alte limbaje exotice OO: Sather, Trellis/Owl, Emerald, Beta (versiune evoluata
de Simula), Self
Java James Gosling (1995); Java 1.5 (2004) ofer suport pentru programarea
generic

EVOLUIA
LIMBAJELOR

CE ESTE C++?
Definiie 1

C + + este un limbaj de programare cu scop general, cu o


nclinaie spre sisteme de programare care suport eficient
calcule de nivel sczut, abstractizare a datelor, programarea
orientat pe obiecte i programarea generic. [Stroustrup,
1999]
Definiie 2:

C + + este un limbaj static (statically-typed) cu scop general


bazndu-se pe clase i funcii virtuale pentru a sprijini
programarea orientat pe obiecte, template-uri pentru a
sprijini programarea generice, precum i furnizarea de
faciliti de nivel sczut pentru a sprijini sistemele de
programare detaliate. [Stroustrup, 1996]

IDEI DE PROIECTARE
C++
C++ a fost conceput pentru a acepta o gam larg de stiluri bune i folositoare. Indiferent dac
acestea au fost orientate-obiect, irelevante sau minore [Stroustrup, 1995]:

1.

Abstractizarea - capacitatea de a reprezenta concepte direct ntr-un program i ascunde


detaliile din spatele accidentale interfee bine definite - este cheia pentru fiecare sistem flexibil i
uor de neles de orice dimensiuni considerabile.

2.

ncapsulare - capacitatea de a oferi garanii c o abstractizare este utilizat numai n


conformitate cu specificaiile sale - este esenial s se apere mpotriva corupiei abstraciuni.

3.

Polimorfism - capacitatea de a oferi aceeai interfa pentru obiecte cu implementari diferite este crucial pentru a simplifica codul folosind abstraciuni.

4.

Motenirea - abilitatea de a compune abstraciuni noi pornind de la una deja existent - este unul
dintre cele mai puternice moduri de construcie de abstraciuni utile.

5.

Genericele - capacitatea de parametrizare a tipurilor i funciilor prin tipuri i valori - este


esenial pentru crearea de tipuri sigure i este un instrument puternic pentru a scrie algoritmi
generali.

6.

Coexistena cu alte limbi i sisteme - esenial pentru funcionarea n medii de execuie reale.

7.

Compactitatea i viteza la execuie - esential pentru programare pe sisteme clasice.

8.

Limbaj static o familie de limbaje din care face parte i C++ care asigur eficien de spaiu i
la rulare a programelor

CUPRINS
Tehnici de programare
Programarea orientat obiect

Istoric C++

ISTORIC C++

1979 - C with Classes: Bjarne Stroustrup (AT&T Bell Labs) transpune conceptele (precum
clase, motenire) din Simula67 n C

1982 - From C with Classes to C++: prima variant de C++ i publicarea crii care
definete limbajul C++ n Octombrie 1985

1985 - Versiunea 2.0: Evoluia primei versiunii (publicarea cri The C++ Programming
Language - Bjarne Stroustrup)

1988 Standardele actuale: ISO i ANSI

1994 - Standard Template Library

1998 - International C++ standard

2011 - un nou standard pentru C++11

2013 The C++ Programming Language, 4th edition

VIITOR C++
2014 C++14 mici modificri aduse standardului
2017 C++17 un nou release al standardelor

CURSUL VIITOR
Tipuri de date.

Tipuri de date concrete


Tipuri de date abstracte
Tipuri de date generice.
Modelarea aplicaiilor orientate obiect

ncapsulare
UML

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