Sunteți pe pagina 1din 11

Limbaje de programare curs 2 - Informatic Economic, an III Abstractizarea datelor Ascunderea implementrii

Gheorghe Cosmin Silaghi

Cluj-Napoca - 5 Octombrie 2009

Cuprins
Abstractizarea datelor Ascunderea implementrii irul dinamic Specificatori de access

Cluj-Napoca - 5 Octombrie 2009

Abstractizarea datelor
Productivitatea: caracteristic esenial a activitii de
programare Reutilizarea codului Bibliotec: o colecie de cod arhivat
Fiier bibliotec (lib) Fiiere header cu declaraii specifice

Exemple de biblioteci: iostream

Cluj-Napoca - 5 Octombrie 2009

Realizarea abstractizrii n C
Definire de tipuri compuse: struct Redenumirea acestor tipuri: typedef Organizarea codului n C:
Fiiere header: definiii de tipuri i declaraii de funcii i variabile Fiiere cod surs: definiii de funcii i variabile

Problem: implementarea irului dinamic Vector n C

Cluj-Napoca - 5 Octombrie 2009

Abstractizarea datelor (II)


#ifndef __CVECTOR_H__ #define __CVECTOR_H__ // CVector.h // Fiier header pentru o biblioteca in stil C // Entitate de tip sir creata la executie typedef struct CVectorType { int size; // Marimea fiecrui element din sir int quantity; // Numarul de elemente alocate in sir int next; // Indicele urmatorului element liber // sir de octeti alocati dinamic unsigned char* storage; } CVector; void initialize(CVector* s, int size); void cleanup(CVector* s); int add(CVector* s, const void* element); void* fetch(CVector* s, int index); int count(CVector* s); void inflate(CVector* s, int increase); #endif
Cluj-Napoca - 5 Octombrie 2009

Abstractizarea datelor (III)


Neajunsuri ale implementrii C
Transmiterea n funciile interfa a obiectului CVector Posibilitatea de coliziune a numelor

Rezolvarea coliziunilor: decorare


initialize => CVector_initialize

O prim mbuntire:
Funciile interfa se includ n struct

Cluj-Napoca - 5 Octombrie 2009

Abstractizarea datelor (IV)


#ifndef __CPP_VECTOR_H__ #define __CPP_VECTOR_H__ // CppVector.h // Biblioteca C convertita in C++ struct CppVector { int size; // marimea fiecarui element din sir int quantity; // numarul total se elemente alocate int next; // urmatorul element liber din sir // sir de octeti alocat dinamic unsigned char* storage; // Functii !!! void initialize(int size); void cleanup(); int add(const void* element); void* fetch(int index); int count(); void inflate(int increase); }; #endif
Cluj-Napoca - 5 Octombrie 2009

Aspecte sintactice legate de abstractizare


Operatorul de rezoluie: :: => folosit n fi cod surs la definirea funciilor
CppVector::initialize(...) { }

Pointerul this Folosirea operatorului new pentru alocri de memorie


variabil_pointer = new tip;

Folosirea operatorului delete pentru dezalocri de memorie


delete variabil_pointer;

Cluj-Napoca - 5 Octombrie 2009

ncapsulare
ncapsulare: abilitatea de a mpacheta mpreun date i funcii struct n C: mpacheteaz mai multe variabile pentru o utilizare comun struct n C++: mpacheteaz date i funcii => ncapsulare Obiect: o variabil de tip struct n C++ Transmitere de mesaj: apel a unei funcii membre a unui obiect Obiectiv n C++: separarea interfeei de implementare
Fiiere header: interfaa (declaraii) Fiiere surs: implementare (definiii)

Cluj-Napoca - 5 Octombrie 2009

Specificatori de acces
Ascunderea implementrii: programatorul client trebuie s lucreze doar cu interfeele obiectelor Specificatori de acces:
public: declaraia specificat public este disponibil oricui private: declaraia specificat private nu este disponibil clienilor protected: similari cu private, utilizat la moteniri friend: acces special

Membrii unei structuri sunt implicit public.

Cluj-Napoca - 5 Octombrie 2009

Ascunderea implementrii n C++


struct se nlocuiete cu class Implicit, membrii unei class sunt private n programarea obiectual se lucreaz cu class

Cluj-Napoca - 5 Octombrie 2009

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