Documente Academic
Documente Profesional
Documente Cultură
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
CURRICUL CURS
1.
2.
3.
4.
5.
6.
7.
CURRICUL CURS
8.
9.
BIBLIOGRAFIE
REGULI EVALUARE
Curs
REGULI
Termen predare teme: 1 saptmn
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)
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);
}
PROGRAMAREA
PROCEDURAL
Se bazeaz pe noiunea de procedur (funcie)
Procedura1
Procedura2
Care ar fi o
soluie?
Procedura3
PROGRAMAREA
MODULAR
Dimensiunea programului crete Organizarea datelor
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
Care ar fi o
soluie?
Modul2
Date2+Date1
Procedura2
Procedura3
ABSTARCTIZAREA
DATELOR
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
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
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
rectangle.h
class dreptungi: public figura{
double nlime, lungime;
// reprezentarea dreptunghiului
public:
void deseneaza() {
// deseneaza dreptunghi
}
};
PROGRAMAREA
GENERIC
Algoritmii independeni de detaliile de reprezentare
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)
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]
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.
EVOLUIA
LIMBAJELOR
CE ESTE C++?
Definiie 1
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.
2.
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.
6.
Coexistena cu alte limbi i sisteme - esenial pentru funcionarea n medii de execuie reale.
7.
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)
VIITOR C++
2014 C++14 mici modificri aduse standardului
2017 C++17 un nou release al standardelor
CURSUL VIITOR
Tipuri de date.
ncapsulare
UML