Sunteți pe pagina 1din 6

Tipuri de date abstracte.

Recursivitate
29 noiembrie 2004

Programarea calculatoarelor 2. Curs 9

Marius Minea

Tipuri de date abstracte. Recursivitate

Programe compuse din mai multe siere


Implicit, obiectele declarate la nivel de sier sunt unice ntr-un program (dou a declarat ii ale aceluia si identicator n siere diferite reprezint a acela si obiect , v. curs 3). obiectul va denit ntr-un singur sier, declarat n toate sierele ce-l utilizeaz a. Declarat ii care nu sunt denit ii: pentru variabile: cu specicatorul extern pentru funct ii, doar prototipul (antetul), nu si corpul funct iei Fazele compil arii: compilarea n siere obiect .c -> .o (cod ma sin a, dar cont ine nc a nume de variabile n loc de adrese xe) editarea de leg aturi (linkeditarea): referint ele la un identicator (simbol ) din toate sierele obiect nlocuite prin aceea si adres a Obiectele cu specicatorul static nu sunt vizibile n afara sierului acela si identicator poate refolosit pentru obiecte diferite
Programarea calculatoarelor 2. Curs 9 Marius Minea

Tipuri de date abstracte. Recursivitate

Structurarea programelor din mai multe siere


c ate un sier pentru port iunile de cod care formeaz a o entitate logic a cu un minim de interact iune (f ar a variabile globale nenecesare, etc.) declarat iile de tipuri, funct ii si variabile ce trebuie exportate se pun ntr-un sier antet .h acesta e inclus de ecare sier .c care l necesit a pentru a nu include/declara n duplicat, se poate ncadra n #ifndef __FISIERULMEU_H #define __FISIERULMEU_H /* aici vine continutul propriu-zis */ #endif chiar dac a sierul .h e inclus repetat (din mai multe locuri), cont inutul s au e prelucrat doar o dat a (c and identicatorul ales nu e denit)
Programarea calculatoarelor 2. Curs 9 Marius Minea

Tipuri de date abstracte. Recursivitate

Tipuri de date abstracte

TDA = un model matematic cu un set de operat ii asupra lui o structur a de date + funct ii care opereaz a pe ea not iunea de clas a din programarea orientat a pe obiecte Pentru implementarea TDA n C: n sierul .h se declar a minimul necesar pentru a putea compila programul (pentru structuri, adesea doar un typedef pt. pointer la tip) si declarat ii de funct ii care manipuleaz a tipul respectiv structura tipului si denit iile funct iilor: ascunse n implementare (.c) typedef struct node *list_t; /* ^ n fi sierul typedef struct node { /* ^ n fi sierul int info; /* sau/ si alte struct node *nxt; } node_t; /* tip vizibil .h */ .c cu implementarea */ c^ ampuri */ doar ^ n fi sierul .c */

utilizatorul, care include doar sierul .h nu are acces la structura intern a a tipului (node_t); accesul e permis doar prin funct ii care citesc sau modic a componentele unei variabile de acest tip (ca si pt. FILE)
Programarea calculatoarelor 2. Curs 9 Marius Minea

Tipuri de date abstracte. Recursivitate

Tipuri de date abstracte (cont.)


Spre programarea orientat a pe obiecte: ncapsulare : f ar a acces direct la reprezentarea TDA, componentele sale sunt accesate doar prin funct ii funct iile au de regul a ca prim parametru obiectul pe care opereaz a (sau pointer la el) similar cu metodele apelate pentru un obiect Decizii de proiectare: ce operat ii c a e incluse dac a se transmit obiecte sau doar pointeri la obiecte (pointerii sunt necesari pentru funct ii care modic a obiectul) dac a rezultatul unei operat ii e returnat (eventual alocat dinamic), sau depus ntr-un obiect specicat (deja alocat) transmis ca parametru dac a funct ia returneaz a un obiect, sau un cod de succes/eroare ( si obiectul e depus la adresa dat a de un pointer parametru) Vezi exemplele de cod pentru: numere complexe, matrici, mult imi
Programarea calculatoarelor 2. Curs 9 Marius Minea

Tipuri de date abstracte. Recursivitate

Recursivitatea: Exemple

n tipuri de date recursive Codul se scrie natural pornind de la denit ia recursiv a a structurii: Ex. o list a este vid a sau un element urmat de o list a Se pot deni atunci: membru : e primul element, sau membru n coada listei sterge : primul element, sau sterge din coada listei, etc. La fel, se pot deni recursiv funct ii care copiaz a sau transform a liste. n analiza sintactic a Product iile din gramatica unui limbaj sunt tipic recursive: expresie ::= termen | expresie + termen | expresie - termen termen ::= factor | termen * factor | termen / factor factor ::= num ar | ( expresie ) Primele dou a product ii sunt recursive la st anga, pentru c a neterminalul din partea st ang a a lui ::= apare si ca prim element ntr-o variant a se pot transforma si implementa (vezi exemplu) folosind cicluri
Programarea calculatoarelor 2. Curs 9 Marius Minea

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