pii-curs1

38
CURS PROGRAMARE II PROGRAMARE ORIENTATĂ OBIECT LECTOR DR. FLAVIA MICOTA

Upload: luca-gabriela-ecaterina

Post on 16-Aug-2015

212 views

Category:

Documents


0 download

DESCRIPTION

curs c++

TRANSCRIPT

CURS PROGRAMARE II PROGRAMARE ORIENTAT OBIECT LECTOR DR. FLAVIA MICOTA PROGRAMARE II Curs: Flavia Micota Cab. 050B Email: [email protected] web.info.uvt.ro/~zflavia Programare II Laboratoare: Flavia Micota Monica Tirea cab. F109; [email protected] Ovidiu Aritoni cab. 050B; [email protected] Ciprian Pungila cab. 050B; [email protected] 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. Auto-refereniere. 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 Programul Principal Date test.c // 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 Care ar fi o soluie? Programul Principal Date 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 Procedura1Procedura2Procedura3 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 f(double arg1, tip1 arg2){ .. .sqrt(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) 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 Procedura1Procedura2Procedura3 Care ar fi o soluie? 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 Procedura2Procedura3 PROGRAMAREA MODULAR Dimensiunea programului crete Organizarea datelor Dezavantaje: Doar un singur modul exist o dat ntr-un program stiva.h // declarea interfeei modululuichar 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 Modul2 Date2+Date1 Procedura2Procedura3 Care ar fi o soluie? 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 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 } } Care ar fi o soluie? 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 Obiect2 date Obiect3 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 figuriipublic: 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 stiva { T* v; int dim_max, top; Public: stiva(int s); ~stiva(); void push(T v); T pop(); }; fisier.cpp void f() { stiva schar; siva scomplex; stiva 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 iobiecte Motenirea posibilitatea de a construi noi abstractizri peste cele existente Polimorfism la execuie oferirea unui mecanism de legare dinamic (runtime binding) Definiegeneralpentrulimbajelecaresuntcaracterizateca fiindorientateobiet:Ada95,Beta,C++,Java,CLOS,Eiffel, Simula,Smalltalkialtelecaresencadreaznaceast definiie.LimbajecarenusuportclasecaC,Fortran4, Pascalsuntexcluse.Limbajecarenuausuportpentru moteniresaulegaredinamiccaAda88sauMLsunt 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 realizatde 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++esteunlimbajdeprogramarecuscopgeneral,cuo nclinaiespresistemedeprogramarecaresuporteficient calculedenivelsczut,abstractizareadatelor,programarea orientatpeobiecteiprogramareageneric.[Stroustrup, 1999] Definiie 2: C++esteunlimbajstatic(statically-typed)cuscopgeneral bazndu-sepeclaseifunciivirtualepentruasprijini programareaorientatpeobiecte,template-uripentrua sprijiniprogramareagenerice,precumifurnizareade facilitidenivelsczutpentruasprijinisistemelede 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 programarepe sisteme clasice. 8. Limbaj static o familie de limbaje din care face parte i C++ care asigur eficiende 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