Programare orientata pe obiecte C++.doc

download Programare orientata pe obiecte C++.doc

of 90

Transcript of Programare orientata pe obiecte C++.doc

Cap

UNIVERSITATEA TITU MAIORESCU DIN BUCURETIFACULTATEA DE INFORMATIC

Programarea orientat pe obiecte n limbajul C++

-suport curs pentru forma de nvatamnt ID -Lector univ. drd. Dsclescu Ana Cristina 2010 -Cuprins

3Cap. 1 Introducere in programarea orientata pe obiecte

51.2 Concepte ale programrii orientate pe obiecte

71.3 Elemente introductive ale programrii orientate pe obiecte n limbajul C++

91.4 Tipuri de date

171.5 Operatori specifici C++

21Cap.2 Clase si Obiecte

232.1 Definirea unei clase

252.2 Constructori si destructor

312.3 Tablouri de obiecte

322.4 Funcii i clase friend

332.5 Funcii inline

342.6 Date si functii statice

41Capitolul 3 .Mostenire

413.1 Relatia de mostenire. Clase de baz si clase derivate

443.2 Constructori i destructori n clasele derivate

453.3 Controlul accesului la membrii clasei de baz

473.4 Mostenirea multipla

503.4 Clase de baz virtuale

513.6 Funcii virtuale i polimorfism

543.7 Clase abstracte

563.8 Polimorfism

64Cap. 4 Facilitti ale limbajului C++

644.1 Supraincarcarea operatorilor

4.2 64Funcii operator membre ale claselor

684. 3 Template-uri

694.4 Stream-uri de I/E

4.5 69Funcii de I/O pentru tipurile predefinite

71Funcii de I/O pentru tipuri definite de utilizator

724. 6 Procesarea fisierelor

76Teste recapitulative:

Cap. 1 Introducere in programarea orientata pe obiecteObiective:

Conceptul programre orientata pe obiecte; Paralela ntre programarea procedural si cea orientat pe obiecte; Tipuri de date abstracte. Abstractizare; Concepte de baz ale programrii orientate pe obiecte; Scurta incursiuni n programarea orientat pe obiecte prin intermediul limbajului C++.Modalitile (tehnicile, paradigmele) de programare au evoluat de-a lungul anilor, reflectnd trecerea de la programe de dimensiuni reduse, la programe i aplicaii de dimensiuni foarte mari, pentru coordonarea crora sunt necesare tehnici evoluate. Software-ul de dimensiuni mari, care nu poate fi realizat de o singur persoan, intr n categoria sistemelor complexe, cu o mare diversitate de aplicaii. Situaiile reale i experiene ale psihologilor au relevat limitele capacitii umane n perceperea sistemelor complexe, adic imposibilitatea unei persoane de a percepe i controla simultan un numr mare de entiti de informaie. De aceea, este esenial descompunerea i organizarea sistemelor complexe, pentru a fi percepute, proiectate sau conduse.

Modul n care este abordat programarea, din punct de vedere al descompunerii programelor, definete mai multe tehnici de programare , care s-au dezvoltat i au evoluat odat cu evoluia sistemelor de calcul. Programarea procedural este prima modalitate de programare care a fost i este nc frecvent folosit. n programarea procedural accentul se pune pe descompunerea programului n proceduri (funcii) care sunt apelate n ordinea de desfurare a algoritmului. Limbajele care suport aceast tehnic de programare prevd posibiliti de transfer a argumentelor ctre funcii i de returnare a valorilor rezultate. Limbajul Fortran a fost primul limbaj de programare procedural. Au urmat Algol60, Algol68, Pascal, iar C este unul din ultimele invenii n acest domeniu. Programarea modular. n cursul evoluiei programrii procedurale, accentul n proiectarea programelor s-a deplasat de la proiectarea procedurilor ctre organizarea datelor, aceast deplasare reflectnd creterea dimensiunilor programelor. O mulime de proceduri corelate, mpreun cu datele pe care le manevreaz, sunt organizate ca un modul. Tehnica de programare modular decide descompunerea unui program n module, care ncorporeaz o parte din datele programului i funciile care le manevreaz. Aceast tehnic este cunoscut ca tehnic de ascundere a datelor (data-hiding). n programarea modular stilul de programare este n continuare procedural, iar datele i procedurile sunt grupate n module, existnd posibilitatea de ascundere a unor informaii definite ntr-un modul, fa de celelalte module. Gruparea de date i proceduri n module nu implic i o asociere strict ntre acestea. Programarea orientat pe obiecte apeleaza la o modalitate nou de gndire a unei probleme. Spre deosebire de programarea procedural care se concentreaz pe structuri de date si algoritmi, programarea orientat pe obiecte se concentreaz pe definirea de obiecte care modeleaz problema ce trebuie rezolvat.

n programarea orientat pe obiecte (POO) un program are rolul de a simula strile si activittile obiectelor lumii reale. Pe lng structuri de date (care descriu strile obiectelor, atributele acestora) trebuie incluse si metodele asociate obiectelor, adic acele functii care modific atributele obiectelor si care descriu comportamentul lor.

1.1 Abstractizarea datelor. Tipuri de date abstractePrimul pas pe care il facem cand scriem un program care sa realizeze diferite operatii, este sa gasim un model care simplifica realitatea, prin separearea detaliilor care interreseaza, de cele care nu afecteaza problema pe care o rezolvam asfel, datele cu care se lucreaza, operatiile , tin de specificul fiecarei probleme tratate. Acest proces de grupare a datelor si metodelor de prelucrare specifice rezolvarii unei probleme se numeste abstractizare.n cazul dezvoltrii unui produs software, abstractizarea se poate defini ca fiind o structurare a unei probleme n entitti bine precizate prin definirea datelor si a operatiilor asociate. Aceste entitti combin date si operatii care sunt necuplate ntre ele. Procedurile si functiile au fost primele dou mecanisme de abstractizare larg rspndite n limbajele de programare.

Procedura a reprezentat si prima modalitate de ascundere a informatiei (interfata cu procedura). Modulele au reprezentat urmtorul mecanism de abstractizare prin gruparea procedurilor si functiilor ce sunt relationate. n continuare, tipurile de date abstracte au realizat un pas important ctre dezvoltarea unui software de calitate si au permis trecerea la abordarea orientat pe obiecte a problemelor.

Un tip de date abstract (TDA) const dintr-o structur de date abstract si o multime de operatii. Interfata unui TDA este definit de multimea de operatii si reprezint acea portiune a unui TDA care este vizibil din exterior. Conceptul de tip de date abstract presupune existenta unui mecanism de separare a specificatiei de implementare. Aceasta nseamn c un utilizator al unui TDA trebuie s cunoasc doar modul de utilizare al

tipului de date, nu si detaliile de implementare.Un tip de date abstract (TDA) este caracterizat de urmtoarele proprietti:

1. export un tip;2. export o multime de operatii (furniznd interfata TDA);3. singurul mecanism de acces la structura de date a tipului este furnizat de operatiile definite n interfat;4. axiomele si preconditiile definesc domeniul deaplicatie al tipului.

De exemplu, dorim sa construim TDA persona. Sa presupunem ca realizam o aplicatie necesara pentru realizarea recesamnatului populatiei, atunci datele care interseaza pentru tipul persoana sunt : nume, prenume, loc_nastere, adresa etc. Daca aplicatia presupune, in schimb, gestiunea intretinerii pentru o asociatie de locatari, atunci pentru tipul persoana sunt necesare si date cum ar fi : spatiul_locuit, nr_persoane etc.

Deci, prin procesul de abstarctizare, separam datele care intereseaza de cele care nu fac obiectul aplicatiei. Construim, ulterior, un tip abstract de date care inglobeaza o structura de date impreuna ca operatii aupra datelor ( ex: calculul intretinerii pentru o persoana, nr_persoane pe fiecare judet etc.).

Exemplu: TDA_persona

nume

prenume

spatiu_locuit

calcul intretinere; - operatii asupra datelor

Programarea orientat pe obiecte este programarea cu tipuri de date abstracte, care combin functionalittile acestora pentru rezolvarea problemelor. n programarea orientat pe obiecte, TDA-urile sunt numite clase.1.2 Concepte ale programrii orientate pe obiecte

Conceptele programrii orientate pe obiecte au aprut din dezvoltrile realizate n cadrul limbajelor moderne de programare. Astfel, limbajele orientate pe obiecte au noi structuri care mbunttesc ntretinerea programului si fac ca portiuni mari de program s fie reutilizabile, conducnd astfel la scderea costului de dezvoltare a produselor software.

Cele sase concepte de baz ce caracterizeaz programarea orientat pe obiecte sunt :

Obiectele;

Clasele;

Mesajele

Incapsularea;

Mostenirea

Polimorfismul.

Obiectele

Un obiect poate fi considerat ca fiind o entitate care ncorporeaz att structuri de date (denumite atribute) ct si comportament (actiuni). Obiectele sunt inteligente prin faptul c realizeaz anumite actiuni si stiu cum s execute aceste actiuni. Inteligenta unui obiect reprezint o form de abstractizare prin faptul c presupune c un obiect poate executa o actiune si ascunde detaliile referitoare la modul n care se va realiza efectiv actiunea. Obiectele pot fi de tipuri diferite: entitti fizice, algoritmi, relatii sau subsisteme. Practic, obiectele sunt componente de software reutilizabil care modeleaz elemente din lumea real.

Pentru tipul de date abstract persoana definit mai sus un exemplu de obiect poate fi definit astfel :

Popescu Ion, 34, 56 m2 .Clasele

Clasele desemneaz o colecie de obiecte (de natur material sau spiritual) care au n comun faptul c pot fi caracterizate similar din punct de vedere informaional i comportamental.Este evident faptul c identificarea unei clase este n mod normal, rezultatul unui demers cognitiv care presupune caracterizarea unui obiect prin nsuirile lui (informaionale i comportamentale) care i definesc apartenena la o anumit clas de obiecte. Aadar, conceptul de clas adun laolalt datele i metodele de prelucrare a acestora.

O clasa reprezinta de fapt o implemntare a tipului abstract de date. O declarare a unei clase definete un tip nou care reunete date i funcii. Acest tip nou poate fi folosit pentru a declara obiecte de acest tip, deci un obiect este un exemplar (o instan) a unei clase.

MesajeleObiectele pot comunica ntre ele prin intermediul mesajelor. Trimiterea unui mesaj care cere unui obiect s aplice o anumit actiune numit metod este similar apelului de procedur din limbajele de programare procedural. n programarea orientat pe obiecte se consider c obiectele sunt autonome si pot comunica ntre ele prin interschimb de mesaje. Obiectele reactioneaz atunci cnd primesc mesaje, aplicnd o anumit metod, de exemplu. Ele pot refuza executarea metodei respective dac, de exemplu, obiectului care este apelat nu i se permite s execute metoda cerut.Un mesaj este o cerere adresat unui obiect pentru a invoca una din metodele sale. Astfel, un mesaj contine numele metodei si argumentele metodei.

Exemplul : calculul intretinerii pentru obiectul Popescu Ion.Incapsularea

nelegerea acestui principiu presupune dou nivele de abordare.

( Ca metod de concepie, ncapsularea se refer la capacitatea de a separa aspectele externe ale unui obiect (interfaa), accesibile altor obiecte, de aspectele implementaionale, interne obiectului, care sunt ascunse fa de celelalte obiecte. Utilizatorul unui obiect poate accesa doar anumite metode ale acestuia, numite publice, n timp ce atributele i celelalte metode i rmn inaccesibile (acestea se numesc private).

ncapsularea este foarte important atunci cnd dorim s schimbm implementarea anumitor metode (cu scopul de a optimiza un algoritm sau de a elimina posibile erori).

ncapsularea ne va mpiedica s modificm toate caracteristicile obiectului iar aplicaiile care utilizeaz obiectul nu vor avea de suferit deoarece protocolul de comunicaie al obiectului motenit de la interfaa clasei (rezultatul ncapsulrii ca metod de concepie) nu s-a schimbat.

(Ca implementare, la nivelul unui limbaj de programare, ncapsularea este asigurat de exigenele sintactice specifice.

MostenireaMecanismul derivarii permite crearea facila de noi clasa, care preiau caracteristicile unor clase de baza, deja definite. Derivarea are ca obiectiv reutilizarea soft-ului, prin folosirea uneor functii deja scrise pentru clasele existente si eliminarea redundantei descrierilor, in cazul claselor care au elemente comune, functii sau date. Acest concept este prezentat in detaliu in moulul 3.Polimorfismul

Termenul polimorfism se refer la comportamente alternative ntre clase derivate nrudite. n cazul n care mai multe clase mostenesc atributele si comportamentele unei clase de baz, pot apare situatii n care comportamentul unei clase derivate ar trebui s fie diferit de cel al clasei de baz sau de cel al clasei derivate de tip frate (de pe acelasi nivel). Aceasta nseamn c un mesaj poate avea efecte diferite n functie de clasa obiectului care primeste mesajul.

De exemplu sa considerm trei clase: clasa de baz Fisier si clasele derivate FisierASCII si FisierBitmap care mostenesc toate atributele si comportamentele clasei Fisier cu exceptia comportamentului Tiprire.Un mesaj care va activa comportamentul Tiprire al unui obiect al clasei Fisier poate determina afisarea atributelor mrime fisier, tip fisier si data/ora crerii/ultimei modificri a fisierului. Acelasi mesaj trimis unui obiect al clasei FisierASCII va determina afisarea textului din fisier, n timp ce dac va fi trimis unui obiect al clasei FisierBitmap va determina executia unui program de afisare grafic.

1.3 Elemente introductive ale programrii orientate pe obiecte n limbajul C++

Limbajul C++ este unul dintre cele mai utilizate limbaje de programare orientate pe obiecte; compilatoare, biblioteci i instrumente de dezvoltare a programelor C++ sunt disponibile att pentru calculatoare personale ct i pentru cele mai dezvoltate sisteme i staii de lucru. Limbajul C++ este o versiune extins a limbajului C elaborata de ctre B. Stroustrup n anul 1980 n laboratoarele Bell din Murray Hill, New Jersey. Extensiile dezvoltate de Stroustrup pentru limbajul C++ permit programarea orientat pe obiecte, pstrnd eficiena, flexibilitatea i concepia de baz a limbajului C. Numele iniial a fost C cu clase, numele de C++ fiindu-i atribuit n anul 1983. Scopul pentru care a fost creat C++ este acelai cu scopul pentru care este abordat n general programarea orientat pe obiecte: dezvoltarea i administrarea programelor foarte mari. Chiar dac superioritatea limbajului C++ este evident n cazul dezvoltrii programelor foarte mari, nu exist limitri n a fi folosit n orice fel de aplicaie, deoarece C++ este un limbaj tot att de eficient ca i limbajul C. De la apariia sa, C++ a trecut prin trei revizii, n 1985, 1989 i ultima, prilejuit de definirea standardului ANSI pentru acest limbaj. O prim versiune a standardului a fost publicat n anul 1994, iar urmtoarea versiune este nc n lucru.

n general, limbajul C++ prevede mai multe faciliti i mai puine restricii dect limbajul C, astfel nct majoritatea construciilor din C sunt legale i au aceeai semnificaie i n C++.

n acest capitol sunt prezentate unitar i concis conceptele de baz n programarea C++, att cele care sunt preluate din limbajul C ct i cele nou introduse. Multe dintre ele sunt reluate i dezvoltate pe parcursul seciunilor urmtoare.

Operatii de intrare/iesire. Stream-uriCel mai scurt program C++ este: main(){ }

Acesta definete o funcie numit main (), care nu primete nici un argument, nu execut nimic i nu returneaz nici o valoare. Dac se dorete ca programul s scrie un mesaj la consol (de tipul Primul program in C++!), pe lng utilizarea funciei obinuite din limbajul C (funcia printf()), n C++ se poate utiliza i o funcie de scriere la ieirea standard (cout). Aceast funcie este funcia operator de scriere > i; Desigur, funcia scanf() de citire de la tastatur din limbajul C poate fi n continuare folosit, dar pe parcursul exemplificrilor se vor folosi mai mult aceste funcii C++ de citire i de scriere la consol.

Programul P1.1 prezint un exemplu de utilizare a operatiilor de intrare/iesire n limbajul C++.// fisierul sursa P1_1.cpp

#include

void main()

{

int a, b;

float m;

cout > a;

cout > b;

m = (float) (a+b)/2;

cout > b;

m = (float) (a+b)/2;

cout var_1 >> var_2 >> >> var_n;

Se citesc de la dispozitivul de intrare valorile variabilelor var_1, var_2, , var_n.Sintaxa operatiei de iesire (scriere, afisare):

cout