Sunteți pe pagina 1din 34

CURS PROGRAMARE II

PROGRAMARE ORIENTAT OBIECT

AS. DR. FLAVIA MICOTA

PROGRAMARE II
Curs: Flavia Micota Cab. 05A Email: zflavia@info.uvt.ro Web.info.uvt.ro/~zflavia PII Laboratoare: Flavia Micota Izabela Dramnesc cab. 050B; idramnesc@info.uvt.ro Ovidiu Aritoni cab. 050B; oaritoni@info.uvt.ro

SCOP I OBIECTIVE
Scop Acumularea cunotiinelor i aptitudinilor 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. 2. 3. Introducere. Paragdime de programare. Scurt istoric OOP i C++ Tipuri de date. Tipuri de date concrete, abstracte, generice. ncapsularea. Type checking. Conceptele de baz ale programrii orientate pe obiecte. Obiect. Clasa. Mesaj.

4.
5. 6. 7.

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


Clase (II). Controlul accesului. Constructor. Destructor. Autorefereniere. Modificatori. Obiecte. Relaii ntre clase. Construirea i distrugerea obiectelor. Relaii ntre clase. 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. Programarea generic. Introducere. Clase ablon. Funcii ablon. Specializari. Motenirea n programarea generic.

9.

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
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 Bjarne Stroustrup The C++ Programming Language 3rd Edition. Addison Wesley, 1997. 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 pucte probra scrisa Laborator 2 puncte test laborator n timpul anului 2 puncte test laborator dupa examen 1.5 puncte la latitunea coordonatorului laboratorului (teme / activitate / proiecte)

REGULI
Termen predare teme: 1 saptmn ntrzierile n predarea temelor sunt penalizate cu 0.1 puncte/saptmn Absene nemotivate la laborator: maxim 4/semestru Laboratorul poate fi recuperat doar mpreun cu una dintre celelalte subgrupe

Cu condiia s anunai cadrul didactic

INTRODUCERE. PARAGDIME DE PROGRAMARE. SCURT ISTORIC OOP I 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 Care ar fi o soluie?

Procedura1

Procedura2

Procedura3

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 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; 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 }

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

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 Modul2 Date2+date1 Procedura2 Procedura3

Care ar fi o soluie?

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

ABSTARCTIZAREA DATELOR

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
Dezavantaje

Care ar fi o soluie?

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 Obiect3 date Obiect2 date

Obiect4 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));
}

PROGRAMAREA ORIENTAT OBIECT


Ce este programare orientat obiect (POO)? Istoric programare orientat obiect Ce este C++? Scurt istoric 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, state i comportament [Booch, 1990] Un obiect este o entitate conceptuala 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 progrmarea 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 (Theoretical) extensions to Java: e.g. GJ (1998)

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 accepta 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. 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. Polimorfism - capacitatea de a oferi aceeai interfa pentru obiecte cu implementari diferite este crucial pentru a simplifica codul folosind abstraciuni. Motenirea - abilitatea de a compune abstraciuni noi pornind de la una deja existent - este una dintre cele mai puternice moduri de construcie de abstraciuni utile. 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. Coexistena cu alte limbi i sisteme - esenial pentru funcionarea n medii de execuie reale. Compactitatea i viteza la execuie- esential pentru programare pe sisteme clasice. Limbaj static o familie de limbaje din care face parte i C++ care asigur eficien de spaiu i la rulare a programelor

2. 3. 4. 5.

6. 7. 8.

ISTORIC C++
1979 1983 C with Classes: Bjarne Stroustrup (AT&T Bell Labs) a portat conceptele (e.g. clase, motenire) din Simula67 n C 1982 1985 From C with Classes to C++: prima variant de C++ i publicarea crii care definete limbajul C++ in Octombrie 1985 1985 1988 Versiunea 2.0: Evoluia primei versiunii 1987 prezent O explozie n folosire i interes aratat limbajului prin dezvoltarea de unelte i biblioteci de funcii pentru C++ 1988 Standardele actuale: ISO i ANSI 1994 : Standard Template Library 1998 : International C++ standard [Stroustrup 1992, Stroustrup 1997]

BIBLIOGRAFIE
Tehnici de programare [Stroustrup, 1997] Bjarne Stroustrup The C++ Programming Language 3rd Edition, Addison Wesley, 1997 [Chapter 2] [Mueller, 1996] Peter Mller Introduction to Object-Oriented Programming Using C++, Globewide Network Academy (GNA) www.gnacademy.org, 1996 [Chapter 2] [Stroustrup, 1991] Bjarne Stroustrup - What is Object-Oriented Programming? (1991 revised version). Proc. 1st European Software Festival. February, 1991 [Stroustrup, 1999] Bjarne Stroustrup - An Overview of the C++ Programming Language in The Handbook of Object Technology (Editor: Saba Zamir). CRC Press LLC, Boca Raton. 1999. ISBN 0-8493-3135-8. Istoria programarii orientate obiect i C++ [Bruce, 2002] Kim B. Bruce Foundations of Object-Oriented Languages, MIT Press, 2002 [Page 113-116] [Stroustrup, 1992] Bjarne Stroustrup - A History of C++: 19791 991 [Stroustrup, 1995] Bjarne Stroustrup - Why C++ is not just an Object-Oriented Programming Language, AT&T Bell Laboratories Murray Hill, New Jersey; Invited talk given at OOPSLA95, Austin, Texas. [Stroustrup, 1996] Bjarne Stroustrup A Brief Look at C++. IEEE AI Expert, Intelligent Systems and their Applications, pp 13-15. February 1996 [de Champeaux, 1993] Dennis de Champeaux, Douglas Lea, and Penelope Faure - Object-Oriented System Development, Addison Wesley,1993 [Booch, 1990] G. Booch. Object Oriented Design with Applications. Benjamin/Cummings, 1990.

[Buhr, 1998] R. Buhr. Machine charts for visual prototyping in system design. Technical Report 88-2, Carlton University, August 1988.

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