Programare Orientata Obiect Novac

download Programare Orientata Obiect Novac

of 188

  • date post

    29-Dec-2014
  • Category

    Documents

  • view

    25
  • download

    10

Embed Size (px)

description

curs facultate anul II, profesor Novac-Ududec.

Transcript of Programare Orientata Obiect Novac

LIMBAJUL C++Programarea orientat pe obiecte

1

Introducere

Exist limbaje concepute strict pe baza POO, ex. Simula, Smalltalk, Java; O alt abordare - adaugarea tehnicilor POO limbajelor cu mare polularitate, ex. Pascal i C; C++ combin avantajele oferite de C (eficien, flexibilitate, portabilitate) cu avantajele oferite de POO.2

Programarea orientat pe obiecte n C++

Scopul limbajului C++ este s permit dezvoltarea programelor complexe (peste 25.000 linii cod surs); C++ asigur programatorului libertatea i controlul din C, mpreun cu puterea obiectelor; POO combin metodele programrii structurate cu concepte noi;3

C++ conine mbuntiri ale limbajului C care nu sunt direct legate de POO, cum ar fi:

Tipul referin; Funcii inline; Suprancrcarea operatorilor; Operatori pentru gestionarea memoriei libere.4

Ce este programarea orientat pe obiecte ?

n POO se mparte o problem n subgrupe de seciuni nrudite, care in seam att de cod ct i de datele corespunztoare din fiecare grup. Se organizeaz apoi, aceste subgrupe pe structuri ierarhice; Se transform subgrupele n uniti de sine stttoare, numite obiecte.5

Toate limbajele OO au 3 caracteristici comune: ncapsulare, polimorfism i motenire

ncapsularea este un mecanism care leag mpreun cod i date; Permite crearea unui obiect; Un obiect este o entitate logic care ncapsuleaz att date ct i cod care manevrez aceste date; Cnd se definete un obiect, implicit se creeaz un nou tip de date !6

Polimorfism

n POO polimorfismul se aplic metodelor unei clase i permite definirea unor funcii cu acelai nume dar cu comportament diferit (specific); Exemplu: metoda de calculat aria unui poligon;

7

Motenirea

Este procesul prin care un obiect poate s preia prototipul altui obiect; Se admite astfel conceptul de clasificare; Exemplu:

Clasa mamifer

Clasa pisica

Clasa pisic birmanez8

Inregistrare - Clas

n numeroase aplicaii, este necesar s se prelucreze date grupate sub forma de nregistrri, situate fizic fie n fiiere, fie n memoria intern. S considerm, de exemplu, evidena materialelor dintr-o magazie. Fiecare material se caracterizeaz prin mai multe atribute, cum sunt: codul materialului, denumirea materialului, cantitatea.9

Informaia despre un material ar putea fi, deci, pstrat pe un formular de hrtie avnd, ca exemplu, urmtorul coninut: MATERIAL Cod material: 13027522 Denumire material: Pnza alb bumbac Cantitate: 127.53

10

Pentru prelucrare, aceste date sunt grupate ntr-o nregistrare de forma: 127.53

13027522 Pnza alb bumbac

11

Remarcm c aceast structur, care se introduce n memoria calcula-torului, conine numai datele, nu i alte informaii, cum ar fi denumirile atributelor i tipurile de date din fiecare cmp. Descrierea acestei structuri se face n program, folosind o instruciune numit declaraie de structur. Forma declaraiei depinde de sintaxa limbajului de programare utilizat.12

In limbajul C, aceleai declaraii se fac sub forma:typedef struct{ int cod; char nume[30]; double cantitate} Material; Material a, b, c;

13

Remarcm c nici n Pascal, nici n C nu este predefinit un tip de date numit Material, dar limbajul pune la dispoziia programatorului modalitatea prin care el poate s defineasc un astfel de tip.

14

nregistrarea (engl: record) este o structur de date neomogen cu urmtoarele caracteristici:

Componentele nregistrrii, numite n mod uzual cmpuri (engl. fields), au fiecare propriul su nume; Cmpurile nregistrrii pot aparine unor tipuri de date diferite (de aceea spunem c este o structur neomogen); n memorie cmpurile sunt aezate consecutiv (n linie), ocupnd o zon de memorie compact.15

Primele dou caracteristici se refer la conceptul abstract de nregistrare, iar ultima caracteristic se refer la modul de implementare. Cmpurile de date dintr-o nregistare pot conine nu numai date primitive, ci i structuri de date. n particular, orice cmp al unei nregistrri poate fi el nsui o nregistrare.16

Clasa ca extindere a structurii de nregistrare

n limbajele de programare OO, structura de nregistrare a fost extins, astfel nct n afar de date sa conin i metode, adic funcii sau proceduri prin care se prelucreaz datele respective. S-a obinut astfel conceptul de clas. Clasa nu mai este o simpl structur de date, ci un modul de program, care conine att date, ct i metode. Se poate deci considera c nregistrarea este un caz particular de clas, care nu conine metode.

17

Clasele structuri abstracte de date, definite de utilizator, care ncapsuleaz att datele propriu-zise ct i operaiile efectuate asupra acestora.

Un obiect este o instan a unei clase. Clasa = abstractizare logic; Obiect = real, exist n memoria calculatorului; O clas are atribute (caracteristici-date) i metode (funcii);

18

mbuntiri ale limbajului C introduse n C++1.

Transmiterea parametrilor n C++ exist 2 posibiliti de transmitere a param. actuali ctre o funcie:

Prin valoare; Prin referin.

Primul este modul standard de transmitere a param. n C.19

Transmiterea parametrilor prin referin

Prin folosirea param formali referin se permite realizarea transferului prin adres, la fel ca n Pascal (paramerii VAR). Se elimin astfel necesitatea utilizarii param formali pointeri, n cazul n care modificrile fcute n interiorul funciei asupra param. trebuie s rmn i dup revenirea din procedur.

20

Exempluvoid schimb(int &a, int &b){ int aux=a; a=b; b=aux;} Transferul prin referin este util atunci cnd programul are dimensiune mare (struct, class) i crearea n stiv a unei copii a valorii lui reduce viteza de execuie i ncarc memoria.21

2. Parametri cu valori implicite

n C++ se pot declara funcii cu valori implicite ale parametrilor; La apelarea acestor funcii se poate omite specificarea param efectivi pentru aceia care au fost declarai cu valori implicite; Este obligatoriu ca numai ultimii param s aib valori implicite i nu este permis alternarea param cu i far valori implicite.22

Exemplu- Val_impl.cppvoid fct(int, int=10); void fct(int p1, int p2){ cout