Sunteți pe pagina 1din 367

Fundamentele limbajelor de programare

Suport de curs: 2009-2010 Autor: Lect. univ. dr. Horea Oros Universitatea din Oradea Departamentul de Matematic i Informatic

PP - Definiie
PP este o paradigm de programare bazat pe conceptul de apel de procedur. (rutin, subrutin, metod,funcie) n P = o serie de pai computaionali care trebuie parcuri. n Orice P poate fi apelat oriunde n timpul execuiei unui program inclusiv din interiorul ei (apel recursiv).
n

Beneficii PP
Refolosirea codului n Controlul execuiei este mai simplu (nu e nevoie de GOTO, JUMP care duc la spaghetti code) n Programul devine modular i structurat
n

Definiii
Limbaj de programare: notaie sistematic prin care este descris un proces de calcul n Procesul de calcul este constituit dintr-o mulime de pai pe care o main i execut pentru a rezolva o problem n Limbaj main: limbajul nativ al unui computer
n

Limbaj main
Operaii aritmetice i logice, n Operaii de intrare-ieire n Funcii speciale, funcii de control n Strns legat de arhitectur 0000101011110000 0010111111111111 0010000000000101
n

Limbaj de asamblare
Atribuie nume simbolice (mnemonici) codificrilor operaiilor mainii i locaiilor de memorie asociate LOAD I ADD J STORE K
n

K := I + J

Niveluri ale limbajelor


Limbaje de nivel sczut (lb. main, asm) n Limbaje de nivel nalt (C, C++, C# etc.) n Traducerea este realizat de translatoare (compilator, asamblor) n Traducerea duce la scderea performanei n Lb. nivel nalt portabilitate
n

Paradigme de programare
Colecii individualizate de caracteristici de evaluare i criterii de abstractizare care determin i difereniaz clasele de limbaje de programare n Criterii:
n
structura

programului noiunea de stare a execuiei metodologia programrii

Paradigme de programare
1. 2. 3. 4.

5.

Programare nestructurat (GOTO) Programare structurat Programarea procedural (ALGOL60) Programare funcional (Lisp, Miranda, ML, Haskell) Programare imperativ

Paradigme de programare
6.

7. 8.

9. 10.

Programare declarativ (Prolog, Haskell, SQL, WSDL) Programare logic (Prolog) Programare bazat pe obiecte i orientat pe obiecte (Smalltalk, C++, Java, C#) Programare concurent i distribuit Programare la nivelul bazelor de date (SQL)

Generaii de limbaje
1954-1958 Limbajele de programare de prima generaie (FORTRAN I, ALGOL 58). n Acestea au fcut pasul decisiv de la asm la lb de nivel nalt. n Rolul lor primordial a constat n promovarea i dezvoltarea conceptelor ce stau la baza limbajelor de programare de nivel nalt precum i a implementrii lor.
n

Generaii de limbaje (cont.)


1959-1961 Limbaje de generaia a doua (ALGOL60, FORTRAN II, Cobol, Lisp) n Sunt considerate limbaje stabile, durabile, ALGOL60 a avut o influen imens n dezvoltarea limbajelor Pascal, PL/1, Simula i Ada.
n

Generaii de limbaje (cont.)


n n n n n

1962-1971 Limbaje de generaia a treia (PL/1, ALGOL68, Pascal, Simula) au reprezentat un pas nainte, succesul lor nu se poate compara cu cel al limbajelor de generaia a doua. C.A.R. Hoare ALGOL60 reprezint un pas nainte fa de succesorii(!) si. Limbajul PL/1 a combinat elemente de FORTRAN, ALGOL i Cobol rezultnd un limbaj puternic, dar mult prea complex, dificil de nvat i de implementat. Limbajul Pascal, succes din punct de vedere didactic, nu a fost considerat suficient de robust pentru utilizarea la scar industrial. (Delphi)

Generaii de limbaje (cont.)


n n

1972-1979 Limbaje de generaia a patra (CLU, CSP, Ada, Smalltalk) Au avut o rspndire i mai redus dect cele de generaia a treia, justificnd pe bun dreptate denumirea acestei perioade drept gol de generaie (generation gap). accentul cade pe structurare.

La nivel micro acest lucru s-a fcut prin eliminarea instruciunilor goto la nivel macro s-a pus mare accent pe modularizare, abstractizarea datelor

Generaii de limbaje (cont.)


1980-1990 Paradigme ale limbajelor de programare n Aceast perioad se caracterizeaz printro intens activitate de cercetare, concentrat pe studiul paradigmelor asociate claselor de limbaje. n limbaje funcionale, logice, orientate obiect i distribuite
n

Istoria lb. de programare


n

Primul limbaj
Ada

Lovelace scrie programe pentru proiectul motor diferenial al lui Charles Babbage iar mai apoi pentru motorul analitic. n 1945, germanul K. Zuse, inventatorul calculatorului Z3 a definit un limbaj evoluat pentru acest motor (folosind tablouri i nregistrri)

Istorie (cont.)
n

Asamblare
Asambloarele

au aprut o dat cu primele calculatoare. Acestea asociaz un nume simbolic codului la nivel main, de ex: Add bx, 4 cmp [adr], 3 jmp address

Programarea n limbaj de asamblare nu se mai practic pe scar larg, nici mcar pentru rutine ce trebuie s ruleze foarte rapid.

Istorie (cont.)
n

FOTRAN FORmula TRANslator


1954-1958John

Backus i ali cercettori de la

IBM Limbaj dedicat calculelor matematice


n

Fortran II (1958) introduce subrutine, funcii, bucle, o structur de control primitiv de tip FOR. Identificatorii sunt limitai la ase caractere

Istorie (cont.)
n

LISP LISt Processing


1958-1960

Mac Carthy Limbaj funcional pentru procesarea listelor. Este recursiv, nu este iterativ. Nu exist diferen ntre cod i date.

Istorie (cont.)
n

ALGOL - 1960 / Algol W - 1966 / Algol 68 ALGOrithmic Language


limbaj

universal independent de main Introduce utilizarea gramaticilor BNF (Backus Naur Form) blocurile de instruciuni i variabilele locale n cadrul unui bloc Recursivitatea, tablouri dinamice instruciunea IF THEN ELSE, FOR, simbolul := pentru atribuire (folosit mai apoi n Pascal), instruciunea SWITCH cu GOTO, indicatori BEGIN, END i ciclu WHILE

Istorie (cont.)
n

Cobol - 1960
COmmon

Business Oriented Langage. Definit de CODASYL, COnference on DAta SYsystems Languages.

Istorie (cont.)
n

Basic 1964
Beginners

All-purpose Symbolic Instruction Code John Kemeny, Thomas Kurtz Uor de nvat Bill Gates, Paul Allen, QuickBasic Altair (4KB) Microcomputerele au fost furnizate cu Basic n ROM pn la sfritul anilor 80. n 1977, Appel II se vindea cu Basic Primul PC de la IBM (1981) folosea sistemul de operare MS-DOS de la Microsoft i Basic interpretat (Basica). n 1982 Microsoft a produs primul Basic compilat (Quick Basic)

Istorie (cont.)
n

Logo 66
W

Fuerzeig, S Papert, Folosit pentru a-i nva pe copii programare. Asemntor cu Lisp Se bazeaz pe micarea unei broate estoase pe ecran.

Istorie (cont.)
n

Pascal 1970 Niklaus Wirth.


A

fost proiectat pentru a simplifica crearea compilatoarelor i pentru ndruma procesul de nvare a programrii spre programarea structurat. Includea un mediu pentru dezvoltare de aplicaii complet, un principiu folosit cu succes mai trziu n Turbo Pascal. n 1981, jocul Wizardry scris n Pascal a avut un succes foarte mare pe Apple. Turbo Pascal (proiectat de Anders Hejlsberg) a aprut n 1983. Rapid, IDE complet -> succes instantaneu. Structurile de control asemntoare cu cele din C.

Istorie (cont.)
n n n n n n n n n

C 1973 succesorul lui B, care la rndul lui este succesorul lui BCPL (Dennis Ritchie). A fost destinat pentru programarea sistemului de operare UNIX, Portabil i rapid Declaraiile int i, char b au fost create n C. Ulterior au aprut i alte tipuri. Limbajul C a simplificat scrierea prin folosirea acoldelor. ++ exista i n limbajul B. Cuvntul include venea din PL/1. Preprocesorul a fost implementat n 1973 i din acel moment limbajul C a fost folosit pentru scrierea sistemului de operare Unix. Limbajul a evoluat pn n 1980.

Istorie (cont.)
n

Sql - 1970+
Standard

Query Language IBM Limbaj pentru interogarea bazelor de date relaionale.


SELECT * from table where ... n INSERT INTO .... n UPDATE ...
n

Istorie (cont.)
n

C++ 1981-1986 Bjarne Stroustrup.


a limbajului C orientat pe obiecte. Introduce suprancrcarea operatorilor. Metodele pot fi inline. Implementat motenirea i abloanele (clase sau funcii generice). Polimorfismul prin funcii virtuale
Versiune

Istorie (cont.)
n
Sun

Java 1994 James Gosling,


Microsistems Proiectat n 1991 ca un limbaj interactiv numit Oak. La vremea respectiv nu a avut succes. n 1994 a fost rescris pentru Internet i redenumit Java. n 1995 se puteau crea applet-uri. n ianuarie 1996, Javasoft distribui JDK 1.0. Se compileaz n bytecode JVM. Este mai simplu dect C++: memoria este gestionat automat, nu exist pointeri, motenire multipl, suprancrcarea operatorilor dar include multi-tasking.

Istorie (cont.)
n

PHP 1995 Personal Home Pages Hypertext Processor


Rasmus

Lerdorf Limbaj script mutliplatform, ce se include n HTML. Asemntor cu C dar nu este tipizat. Variabilele se prefixeaz cu $. Interpretorul prelucreaz pagina html ce include instruciuni php i o transform ntr-o pagin html pur. Biblioteca de funcii permite crearea de pagini web dinamice. Microsoft folosete ASP (asemntor cu Basic)

Istorie (cont.)
n

UML - 1996 Unified Modeling Language


Standard

(Object Management Group) Grady Booch, Jim Rumbaugh, and Ivar Jacobson Uml reprezint reunirea a trei limbaje de modelare proiectate de cei trei autori. folosete o notaie grafic pentru a proiecta software. Se fac diagrame care exprim obiecte i interaciunile dintre acestea. Un model este realizat din vizualizri i combinarea lor descriu un sistem complet. Este limbaj pentru specificarea, vizualizarea, construirea i documentarea proiectelor sotware intense.

Istorie (cont.)
n

C# - 2000(C-sharp), succesor al C++?


Anders Hejlsberg / Microsoft. Principalul limbaj din platforma .NET mbuntiri: garbage collector, nu are

interfee, multi-tasking Varietate de limbaje ce pot fi compilate n MSIL Structurile sunt speciale fiind transmise prin valoare Identificatorii sunt obiecte cu metode Atributele sunt obiecte descriptive ataate elementelor programului i folosite la execuie Proprieti (get/set) Foreach pentru parcurgerea unor liste de obiecte Delegai (nlocuiesc pointerii la funcii din C)

pointeri,

Programare procedural
Procesul de creare a software-ului

Curs 2

Procesul de creare a soft-ului


Limbaj de programare = instrument pentru scrierea de programe n Limbaj de programare = component a procesului de creare a software-ului n Realizarea unui nou limbaj este structural identic cu realizarea unei aplicaii software complexe
n

Fazele procesului de creare a software-ului


Analiza i specificarea cerinelor n Proiectarea i specificarea softwareului n Implementarea n Certificarea n ntreinerea
n

Analiza i specificarea cerinelor


n n n n

O aplicaie software este conceput pentru a veni n sprijinul unui anumit grup de utilizatori poteniali. Cerinele - stabilite sub forma unui document ce precizeaz CE trebuie s fac aplicaia i nu CUM. La elaborarea documentului particip att potenialii utilizatori, ct i specialitii n dezvoltarea de software. Documentul conine specificaii privind manualele utilizator, studii de cost i fezabilitate, cerine privind performanele

Proiectarea i specificarea software-ului


n

De la cerinele specificate n faza precedent, echipa care realizeaz aceast etap (proiectanii software) realizeaz specificaiile de proiectare, Se identific

fiecare modul al sistemului, interferenele dintre module.

Metodologia de proiectare utilizat n aceast faz are o mare importan pentru alegerea limbajului de programare utilizat n faza imediat urmtoare.

Implementarea
n n

Singura faz n care se utilizeaz explicit un limbaj de programare. Implementarea


scrierea

de uniti de program corespunztoare modulelor descrise n specificaiile de proiectare editarea documentaiei corespunztoare.
n

Rezult un sistem implementat i documentat complet.

Certificarea
n n

n n

Verificarea cerinelor impuse n prima etap Se realizeaz prin testarea sistemului n raport cu fiecare cerin specificat, utilizndu-se o baterie de teste, Din punctul de vedere al testrii, nu se poate face o distincie clar ntre fazele 3 i 4. n faza de implementare se realizeaz testarea la nivel de modul, efectuat de fiecare programator i parial testarea interfeelor intermodule (testare de integrare),

Certificarea (cont.)
Se realizeaz testarea sistemului, care verific sistemul n ansamblul su. n Rezultatul acestei faze este un sistem verificat i certificat complet, livrabil utilizatorilor. n n aceast faz se includ toate activitile care sunt legate de verificarea corectitudinii programelor scrise
n

ntreinerea
Modificri, provocate fie de detectarea unor erori care au scpat din faza 4, n Adugarea de noi specificaii (cerine). n Costul ntreinerii unei aplicaii ntrece costul tuturor celorlalte faze luate mpreun.
n

Cerine pentru un produs software


Fiabilitate n ntreinere uoar n Execuie eficient
n

Aspecte ale calitii software-ului


Programele: fiabile, rapide, uor de folosit, lizibile, modulare, structurate n Calitatea produselor program se definete ca o compunere a mai multor trsturi. n Exist o serie de factori externi i factori interni
n

Factori externi - interni


Factorii externi de calitatea sunt sesizai de cei care interacioneaz direct cu produsul final i care cumpr produsul, contracteaz dezvoltarea i ntreinerea lui. n Factorii interni de calitate se pot detecta doar de ctre persoanele implicate n procesul de dezvoltare de software.
n

Factorii externi
Corectitudinea (abilitatea produsului de a executa exact sarcinile sale, n conformitate cu cerinele) n Robusteea (abilitatea sistemului de a funciona chiar i n condiii anormale) n Fiabilitate = corectitudine+robustee
n

Factorii externi (cont.)


Extensibilitatea (uurina cu care produsele software se pot adapta la schimbri ale specificaiilor) simplitate + descentralizare n Reutilizabilitatea n Compatibilitatea (uurina cu care produsele software pot fi combinate)
n

Factorii externi (cont.)


Eficiena (folosirea raional a resurselor hardware) n Portabilitatea (uurina cu care se pot transfera n diverse medii hard i soft) n Verificabilitatea
n

Factorii externi (cont.)


Integritatea (abilitatea produselor software de a-i proteja componentele - programe, date, documente - fa de accesri i modificri neautorizate) n Uurina n utilizare (nvarea utilizrii sistemului, operarea, pregtirea datelor de intrare, interpretarea rezultatelor i recuperarea din situaii de eroare)
n

Factori interni
Modularitatea: structural produsul program trebuie s fie alctuit din module, urmrindu-se principiul descentralizrii. n Documentarea complet: presupune existena unei documentaii clare i adus la zi pentru fiecare faz din ciclul de via al programului.
n

Caliti ale limbajelor de programare


n

S permit o descriere ct mai natural a problemei care se rezolv, permind programatorului s se concentreze asupra problemei i nu asupra detaliilor de adresare, indexare etc. S aib un grad de lizibilitate ct mai ridicat, adic un program s poat fi uor de descifrat (sintactic i semantic) de oricine l consult. S permit gestiunea excepiilor (depiri aritmetice, erori de intrare-ieire etc.)

Microsoft Solutions Framework (MSF)


Un set de modele, principii i linii directoare pentru proiectarea i dezvoltarea aplicaiilor de dimensiuni mari ntr-un mod care asigur faptul c toate elementele unui proiect (oameni, procese, unelte) pot fi gestionate corespunztor. n Practici pentru planificarea, proiectarea, dezvoltarea i lansarea soluiilor
n

Modele de proces
Modelul Cascad n Modelul Spiral n Modelul MSF
n

Modelul cascad
n n n

Milestone
n

Exist puncte de tranziie i evaluare Trebuie terminat o faz nainte de a trece la alta Cerinele trebuie s fie definite foarte clar Se poate monitoriza evoluia

Milestone

Milestone

Milestone

Modelul Spiral
Se bazeaz pe rafinarea continu a cerinelor i a diferitelor estimri asupra proiectului n Util la aplicaii mici ce trebuie fcute repede n Nu exist puncte de control foarte clare n Procesul de dezvoltarea poate deveni haotic
n

Modelul MSF
Bazat pe faze n Are puncte de control i trecere n Iterativ n Poate fi folosit pentru dezvoltarea oricrui tip de aplicaie n Combinaie ntre modelul cascad i spiral
n

Faze ale modelului de proces MSF


Envisioning n Planning n Developing n Stabilizing n Deploying
n

Triunghiul compromisurilor

Resurse

Deadline

Funcionalitate

Programare procedural
Elemente lexicale i de sintax ale limbajelor de programare

Curs 3

Programare procedural

Limbaj de programare, program surs


Un limbaj de programare = un instrument cu care se poate exprima un proces de calcul n Program surs = nivelul virtual al abstractizrii problemei de rezolvat
n

Programare procedural

Procesul de traducere
Pentru ca maina (calculatorul) s poat rezolva problema, aceasta trebuie exprimat n termenii limbajului mainii respective n Nivelul fizic al abstractizrii va fi atins prin intermediul unui proces de traducere.
n

Programare procedural

Rezolvarea unei probleme cu calculatorul


formalizarea problemei i exprimarea ei ntr-un limbaj de programare. (definire, specificare, analiz, proiectare i implementare). Rezultatul obinut este programul surs. (omul) n traducerea programului surs ntr-un program executabil pe calculator i execuia acestuia. (maina)
n
Programare procedural 4

Limbaje de programare
n Setul

de caractere n Elementele lexicale i de sintax ale unui limbaj n Traducerea programelor (analiza sintactic i semantic)

Programare procedural

Setul de caractere
n n

n n

LP sunt bazate pe un anumit alfabet de caractere Alfabetul este folosit pentru a construi cuvinte sau simboluri, care formeaz vocabularul sau lexicul limbajului Alfabet = a...z, A...Z, 0...9, caractere speciale ASCII, ASCII extins, EBCDIC, Unicode.

Programare procedural

Elementele lexicale ale unui limbaj


n n

Program = secven de atomi lexicali (tokens) i separatori Atom lexical = cea mai mic unitate sintactic ce are un neles de sine stttor ntr-un context precizat Analiza lexical =faz a procesului de analiz a programului surs care are ca scop identificarea atomilor lexicali din care este compus programul respectiv
Programare procedural 7

Categorii de atomi lexicali


simboluri speciale n identificatori n etichete n literali
n
n

(separatorii nu sunt considerai atomi lexicali)

Programare procedural

Exemplu
n

i f ( a > b ) x= x+ 1 e ls e y = " He l lo !" ; identificatori: i f , a , b , x , e l s e , y simboluri speciale: ( , ) , > , = , + literali: 1 , " H e l l o ! "

Programare procedural

Separatori
Separatorii uzuali (spaiile albe) n Comentariile:
n

/*...*/ Linie // Alte limbaje { } HTML <!-- ... --> (Sunt ignorate n procesul de analiz lexical )
Programare procedural 10

Text

Identificatori, cuvinte cheie i rezervate Identificator = secven arbitrar de litere, cifre i underscore din alfabetul limbajului, din care primul caracter este liter sau underscore n Lungime a identificatorului = numrul de caractere din secven (unele limbaje stabilesc limite, altele depind de implementare)
n
Programare procedural 11

Identificatori, cuvinte cheie i rezervate (cont.) Case sensitive = se face diferena ntre literele mari i mici (C, C++, Java) n Case insensitive (Pascal, Modula-2, FORTRAN) n n C cuvintele rezervate se scriu numai cu litere mici (if, else, while, for etc.)
n

Programare procedural

12

Identificatori
n

Predefinii = precizai n definiia limbajului


cuvinte

cheie (au un neles explicit ntr-un context precizat. De ex. n FORTRAN cuvintele cheie o anumit semnificaie doar ntr-un anumit context) cuvinte rezervate = se folosesc doar n scopul pentru care au fost definite indiferent de context
n

Definii de utilizator
Programare procedural 13

Identificatori definii de utilizator


Nume de variabile, Constante n Proceduri, Funcii, Metode n Clase, Tipuri de date definite de utilizator n Obiecte, Proprieti n Evenimente, Delegai
n

Programare procedural

14

Cuvinte cheie C
auto break case char const continue default do

double

else

enum

extern

float

for

goto

if

int

long

register

return

short

signed

sizeof

static

struct

switch

typedef

union

unsigned

void

volatile

while

Programare procedural

15

Simboluri speciale
Simbolurile speciale (numite i operatori sau semne de punctuaie, delimitatori) au o semantic bine precizat. n n unele limbaje se pot folosi doar conform definiiei lor n n alte limbaje semantica se poate extinde, prin ceea ce se numete suprancrcarea operatorilor.
n
Programare procedural 16

Simbolurile speciale n C
Operatori sau semne de punctuaie: ! % ^ &*()-+={}|~[]\;:<>?,./ n Operatori (fiecare considerat un singur token): -> ++ -- << >> <= >= == != && || *= /= %= += -= <<= >>= &= ^= |= n Tokeni folosii de preprocesor: #
n

Programare procedural

17

Literali (ad-litteram?)
Literal = o valoare constant de tip numeric sau caracter. n Constante:
n
numerice caracter ir

(ntregi i reale)

de caractere

Constante constante simbolice!


Programare procedural 18

Literali din limbajul C


Literal::= constant ntreag | constantcaracter | constant-flotant | literal ir de caractere (BNF) n Constant ntreag = iruri de cifre
n
Zecimal

(123, -234, 1u, 1U) Octal (0564) Hexazecimal (0xFA2E, 0X1AB4)


Programare procedural 19

Literali din limbajul C (cont.)


n

Constant caracter = unul sau mai multe caractere incluse ntre apostroafe (a, 1)
Tipul

= char Valoarea = valoarea codului ASCII al caracterului


n

Constante caracter predefinite (secvene escape)


Programare procedural 20

Secvene escape
Caracter ASCII NL new line HT tab orizontal VT tab vertical BS backspace CR carriage return FF form feed BEL bell \ ? nr. octal nr. hexa secvena escape \n \t \v \b \r \f \a \\ \? \ \ooo \xhh
Programare procedural 21

Constante reale
n

Constantele reale au

parte ntreag, marc zecimal, parte fracionar, marc exponent (e sau E) exponent ntreg cu semn.

n n n

Tipul lor este implicit double, care poate fi modificat printr-un sufix (F sau f float, L sau l long double). Partea ntreag sau partea fracionar pot lipsi (dar nu ambele), Pot lipsi i marca zecimal sau marca exponenial (nu ambele).
Programare procedural 22

Constantele ir de caractere
n n n n

Constantele ir de caractere = unul sau mai multe caractere incluse ntre ghilimele. Tipul char[] Clasa de memorie static. Reprezentarea unui ir de caractere se face pe n+1 octei, ultimul octet coninnd caracterul NULL (cu codul ASCII 0). null-terminated strings.
Programare procedural 23

Elemente de sintax
Succesiunile de cuvinte = propoziii sau instruciuni n Sintaxa unui LP = un ansamblu de reguli prin care se determin dac o anumit instruciune este corect alctuit sau nu.
n

Programare procedural

24

Elemente de sintax (cont.)


n

Sintax abstract: identific rolul componentelor fiecrei construcii; descrierile de limbaj i implementrile sunt organizate n jurul sintaxei abstracte. Sintaxa concret (lexical): prezint modul de scriere a construciilor limbajului, coninnd detalii relativ la plasarea cuvintelor cheie i a semnelor de punctuaie.

Programare procedural

25

Elemente de sintax (cont.)


La aceeai sintax abstract i corespund sintaxele concrete: WHI LE x < >A[ i] DO i := i - 1 END i whi le (x != A[i ]) i = i - 1 ;
n
Programare procedural 26

Moduri de descriere a sintaxei


BNF (Backus-Naur Form) n grafele de sintax n gramatici (limbaje formale) n automate (limbaje formale)
n

Programare procedural

27

Programare procedural
Traducerea programelor
Curs 4

Programare procedural

Limbaj de programare, program surs


n

Translator = program ce traduce un program surs (PS), scris ntr-un anumit limbaj de programare (LP) ntr-un program echivalent exprimat ntr-un alt limbaj, pe care l vom numi program destinaie (PD).

Programare procedural

Translatoare
Compilatoarele, n Asambloarele n Interpretoarele
n

Programare procedural

Compilatoare - asambloare
La compilator PD se numete program obiect sau cod obiect (apropiat de codul main) n Asamblorul este compilatorul unui limbaj de asamblare n Traducerea este urmat de link-editare
n

Programare procedural

Link-editarea
n

Faz n care se produce codul executabil prin legarea codului obiect (rezultat din traducere) cu alte module obiect (rezultate din compilri anterioare sau existente n biblioteci).

Programare procedural

Interpretor
n

Realizeaz execuia instruciune cu instruciune a programului surs

Programare procedural

Preprocesor - macroprocesor
Traduc PS din limbaje de nivel nalt n PD scrise tot n limbaje de nivel nalt, compilabile. n De ex. preprocesorul C #include...
n

Programare procedural

Cross-compilatoarele Cross-asambloarele
Se execut pe un calculator gazd i genereaz cod obiect pentru o alt main obiect n Exemplu - maina gazd minicalculator sau calculator mare, iar maina obiect este un microcalculator cu memorie mic, pe care nu se poate implementa programul de traducere)
n
Programare procedural 8

Compilarea
Compilatorul este un program complex, a crui realizare presupune abordarea sistematic a procesului de traducere. n n procesul de compilare, PS sufer un ir de transformri n cascad, din ce n ce mai apropiate de codul obiect
n

Programare procedural

Operaii ale compilatorului


Analiza textului surs n Sinteza codului obiect
n

Programare procedural

10

Structura unui compilator


ANALIZ
Program surs ir de atomi lexicali Arbore sintactic

SINTEZ
Cod intermediar

Cod intermediar optimizat


Generare de cod Cod obiect

Analiz lexical

Analiz sintactic

Analiz semantic

Optimizare de cod

Tratarea erorilor

Gestiunea tabelelor

Programare procedural

11

Analiza lexical
n

Realizeaz prima parcurgere a PS (considerat ca ir de caractere), grupnd aceste caractere n sub-iruri, numite atomi lexicali: cuvinte cheie sau rezervate, operatori, constante, identificatori, separatori.

Programare procedural

12

Analiza sintactic
n

Depisteaz n irul atomilor lexicali structuri sintactice: expresii, liste, instruciuni, proceduri, genernd arborele sintactic (arborele de derivare), care descrie relaiile dintre aceste structuri (de incluziune, de separare).

Programare procedural

13

Analiza semantic
n

folosete arborele sintactic pentru extragerea de informaii privind apariiile obiectelor purttoare de date din PS (tipuri de date, variabile, proceduri, funcii) i pentru verificarea consistenei utilizrii lor. Pe msura parcurgerii arborelui sintactic, se genereaz codul intermediar (ir de instruciuni simple, cu format fix, n care: codurile operaiilor sunt asemntoare cu codurile main corespunztoare, ordinea operaiilor respect ordinea execuiei, iar operanzii sunt reprezentai sub forma variabilelor din PS i nu sub form de registre sau adrese de memorie.
Programare procedural 14

Optimizarea codului intermediar


n

are ca obiectiv eliminarea redundanelor, a calculelor inutile, pentru o execuie eficient a codului obiect. Pentru realizarea se ncearc:
Realizarea

tuturor calculelor posibile nc din faza de compilare (de exemplu n expresii cu operanzi constante) Eliminarea subexpresiilor comune (prin evaluarea lor o singur dat) Factorizarea invariaiilor din cicluri.

Programare procedural

15

Generarea programului obiect


n

Const n alocarea de locaii de memorie i registre ale unitii centrale pentru variabilele programului i nlocuirea codurilor de operaii din codul intermediar cu cele main. Codul obiect rezultat poate fi:

absolut (direct executabil) relocabil (care va face obiectul editrii de legturi, unde va fi legat de alte module obiect n limbaj de asamblare, lucru ce asigur un efort mic de implementare a generatorului de cod. n alt limbaj de programare, n cazul preprocesoarelor.

Programare procedural

16

Modulul de tratare a erorilor


n

Proceduri care sunt activate la detectarea erorilor n timpul operaiilor de analiz.


Traducerea

se continu cu ignorarea elementului ce conine eroarea; Se ncearc corectarea erorii Se abandoneaz procesul de traducere.

Programare procedural

17

Modulul de tratare a erorilor


n

Dup momentul n care apar avem erori


lexicale, sintactice semantice.

Dup gravitatea erorilor:


avertismente (de obicei omisiuni de programare), erori care se pot corecta de ctre un compilator mai

inteligent erori fatale, care provoac abandonarea procesului de compilare.

Programare procedural

18

Gestionarul de tabele
n

Colecie de proceduri care realizeaz crearea i actualizarea bazei de date a compilatorului, care conine dou categorii de informaii:
proprii

compilatorului (generate la implementare i constituite din mecanismele de descriere a analizei lexicale, sintactice i semantice) caracteristice programului surs (identificatori, constante, cuvinte cheie), care de obicei se memoreaz ntr-o tabel de simboluri.

Programare procedural

19

Gestionarul de tabele
n

La ntlnirea unui nume nou, acesta este introdus n tabela de simboluri, reinndu-se adresa intrrii. Ori de cte ori numele este referit, informaia prezent n tabel este actualizat cu informaii sau atribute noi ale numelui respectiv, verificndu-se totodat consistena utilizrii acestuia (analiza semantic). La generare de cod, atributele numelui determin lungimea zonei de memorie alocat acestuia. Atributele numelui pot servi i n faza de tratare a erorilor.
Programare procedural 20

Uniti de program
n

Structura general a unui program scris ntr-un limbaj de programare convenional (imperativ, dirijat de control)
Program

principal Unul sau mai multor subprograme


n

Comunicarea prin:
Parametri, n Variabile globale.
n

Programare procedural

21

Program - subprogram
n

2 pri
partea
n

de declaraii (instr. neexecutabile )

informaii descriptive adresate compilatorului


atribute ale zonelor de date cum ar fi tipul, dimensiunea de reprezentare, valori iniiale

partea

imperativ (instruciunile ce se vor executa)

Programare procedural

22

Compilare separat
Posibil datorit modularizrii programelor n Fiecare modul are un rol bine precizat n La modificarea unui modul nu trebuie recompilat tot programul. n Combinarea modulelor o face link-editorul n Rezultatul = economie de timp n Demonstraie n C (cuv. cheie extern)
n
Programare procedural 23

Link-editarea
n

Link-editorul sau editorul de legturi este o component a mediului pentru dezv. de aplicaii care grupeaz unul sau mai multe module obiect, rezultate din compilare sau asamblare, mpreun cu cod din biblioteci, ntr-un program executabil.

Programare procedural

24

Execuia programelor
n

operare la nivelul liniei de comand: se introduc pe rnd comenzile de compilare, link-editare i lansare n execuie; asistat de un mediu de programare: comenzile de mai sus sunt lansate i executate din interiorul unui astfel de mediu; sistem batch (prelucrare n loturi): scrierea unor fiiere de comenzi care vor automatiza nlnuirea fazelor de la punctul 1.
Programare procedural 25

Sisteme de operare
n

SO interactive
Comunicaia Comenzi
n

prin terminal sau interfa grafic

Interne (rezidente n nucleul SO) n Externe (fiiere executabile) n

Multitasking, multithreading

Programare procedural

26

Medii de programare i execuie


n

Sisteme complexe destinate activitii de dezvoltare de programe


editor de texte compilator interactiv editor de legturi interpretor pentru execuia

rezultatului compilrii (numit i mediu de execuie runtime environment), depanator simbolic componente de legtur cu mediul exterior (de regul cu sistemul de operare cu care lucreaz

Programare procedural

27

Medii de programare
Visual Studio de la Microsoft, n Builder de la Borland n Eclipse n ZEND Studio (PHP)
n

Programare procedural

28

Interpretarea
Interpretorul este un program care execut pas cu pas instruciunile descrise ntr-un limbaj n Viteza de interpretare este mult mai mic dect codului compilat n Mult mai simplu de implementat
n

Programare procedural

29

Programare procedural
Declaraii
Curs 5

Programare procedural

Coninuturi
Rolul identificatorilor ntr-un program n Domeniu de vizibilitate n Semantica unei declaraii
n

Programare procedural

Rolul identificatorilor ntr-un program


n

Identificatorii sunt nume pentru diverse entiti:


constante

simbolice tipuri de date variabile subprograme module programe cmpuri n nregistrri

Programare procedural

Identificatori
Dup declarare un identificator va referi n mod unic o entitate din program n Prezen numelui su (nsoit eventual de alte elemente suplimentare) va reprezenta pentru programul traductor o referire neambigu la entitatea n cauz.
n

Programare procedural

Domeniu de vizibilitate
n pri diferite ale aceluiai program surs sau n module diferite ale unui program se pot folosi identificatori identici. n Rezolvarea conflicte de nume se face pe baza regulilor de vizibilitate a numelor
n

Programare procedural

Domeniu de vizibilitate (cont.)


A aprut la limbajele cu structur de bloc n O declarare a unui nume stabilete domeniul su de vizibilitate n DV ncepe de regul imediat dup punctul de declarare i se ncheie la sfritul blocului sau funciei sau fiierului surs
n

Programare procedural

Domeniu de vizibilitate (cont.)


n

Identificatori locali
declarat

n interiorul unui subprogram DV toat secvena de declaraii i instruciuni de dup punctul de declarare i pn la sfritul subprogramului respectiv (inclusiv blocurile sau subprogramele sale (exc. redeclarare) de la punctul de declarare pn la sfritul fiierului surs (exc. redeclarare)
7

Identificatori globali
DV

Programare procedural

Universul unui LP
n n

Format din obiectele specifice puse la dispoziie de limbaj pentru modelarea problemelor. Prin aceste obiecte, programatorul simuleaz comportamentul obiectelor sale sau realizeaz noi obiecte, mai complexe, cu proprieti noi. Pe lng aceste obiecte specificate prin declaraii, limbajul pune la dispoziia programatorului operaii asupra acestora (instruciuni).

Programare procedural

Semantica unei declaraii


Obiectele ULP sunt datele (elementare sau structurate). n Datele au anumite caracteristici (precizate prin declaraii)
n
Nume Tip Valoare Modificabilitate
9

Programare procedural

Semantica unei declaraii


Unei constante simbolice i se asociaz printr-o declaraie un obiect din ULP, acelai pe tot parcursul execuiei programului n O variabil are asociat o locaie de memorie care poate, la un moment dat, s conin un obiect dintr-o mulime de valori posibile
n
Programare procedural 10

Semantica unei declaraii


n n n n

Mulime de valori posibile = dom. de def. al variabilei sau domeniul tipului variabilei Locaia de memorie = poziia de la care ncepe alocarea variabilei respective Precizarea tipului pentru constante i variabile se face prin declaraii Informaia de tip asociat unui obiect servete la determinarea gamei de operaii care se pot face cu acel obiect
Programare procedural 11

Semantica unei declaraii


LP moderne permit declararea de noi tipuri (tipuri derivate ) bazate pe tipurile existente n Un tip de date definit de utilizator e indicat s aib acelai statut ca i un tip de date predefinit:
n
Declararea

i folosirea variabilelor, Verificarea consistenei expresiilor de acel tip


Programare procedural 12

Programare procedural
Declaraii
Curs 6

Programare procedural

Coninuturi
Declaraii de constante n Declaraii de tipuri de date n Sisteme de tipuri n Clasificarea tipurilor de date n Declaraii de tipuri n C
n

Programare procedural

Declaraii de constante
n n n

Constantele simbolice i pstreaz valoarea pe tot parcursul execuiei unui program Ex.
PI

:= 3.1415

Ofer
Uurin

n scrierea programelor Expresivitate Flexibilitate - PI := 3.141592653595

Programare procedural

Declaraii de constante
n n n

constant simbolic = (nume, valoarea asociat) C nu are aa ceva Pascal, C++, C# au


Cum se face declaraia de constant? Admite numai constante de tipuri simple sau i folosirea constantelor de tipuri structurate? Valoarea constantei se d printr-un literal sau printr-o expresie evaluabil (i cnd: la compilare sau la execuie)? Cnd se face substituirea numelui constantei cu valoarea asociat (la compilare sau la execuie)? Admite limbajul constante predefinite?

Programare procedural

Declaraii de constante
n n n

n C nu exist constante Ele sunt simulate prin macrodefiniii tratate de preprocesorul C Dezavantaj

nu sunt valabile regulile de vizibilitate ale numelor din C (numele vor fi globale) nu se poate declara tipul constantei parantezele greite - probleme de interpretare
#define TBLSIZE 100 #define TBLMAX (TBLSIZE - 1)

Ex.

Programare procedural

Declaraii de constante
n

C++ introduce constantele (de orice tip), prin declaraii de forma:


const

int TBLSIZE = 100; const int TBLMAX = (TBLSIZE - 1);

Programare procedural

Declaraii de constante
Mecanismul const a fost conceput pentru a preveni eventualele accidente (ca de exemplu modificarea nedorit a unor valori care se consider constante) i nu fraudele. n Protecia oferit de acest mecanism poate fi eludat printr-o conversie explicit sau prin aliere. De exemplu:
n
Programare procedural 7

Declaraii de constante
int i = 1; // i nu este const const int* p = &i; // i nu se va putea modifica prin p int *q = (int*)p; /* alierea cantitii *q cu i prin conversie explicit de tip echivalent cu int *q = &p; iniializarea int *q = p ar fi ilegal din cauza incompatibilitii caracteristicilor de tip; */ void f() { p--; i++; // ok: nu i este const ci p (*p)--; // eroare: *p este const (*q)++; /* ok: q nu este const, deci cantitatea referita de aceasta nu este supusa restrictiilor de moficare*/ } void g() { (*(int *)p)++ // ok: conversie explicita }
Programare procedural

Exemple
const char* step[3] = {left, right, hop};
n n n

Tablou de pointeri la iruri de caractere Pointerii se pot modifica irurile de caractere nu se pot prin intermediul acestor pointeri

step[2] = skip; // ok: se modifica pointer la const char step[2][1] = i; /* eroare: nu se poate modifica sir de caractere constant */

Programare procedural

Exemple
const char* const step[3] = {left, right, hop}; step[2] = skip; /* eroare: nu se poate modifica un pointer constant*/ step[2][1] = i; /* eroare: nu se poate modifica sir de caractere constant*/
Programare procedural 10

Declaraii de constante
Definiia limbajului C nu specific constante predefinite. n Pentru asigurarea compatibilitii tipurilor numerice cu ANSI C, limitele (minim i maxim) domeniilor pentru diferite tipuri se gsesc (sub forma unor macrodefiniii) n fiierele header <limits.h> i <float.h>.
n
Programare procedural 11

Declaraii de tipuri de date


n

Tipul de date = mecanism de clasificare a expresiilor care furnizeaz dou informaii:


mulimea

valorilor posibile ale expresiei n cauz (domeniul tipului); operaiile ce se pot aplica respectivei expresii;
n

Unul din principiile de baz ale proiectrii unui limbaj de programare este: orice expresie trebuie s aib un tip unic determinat.

Programare procedural

12

Declaraii de tipuri de date


n

Tipul asociat unei expresii ofer programului traductor informaia necesar pentru verificarea utilizrii respectivei expresii i pentru reprezentarea acesteia n memorie.

Programare procedural

13

Sisteme de tipuri
Sistem de tipuri pentru un LP = o mulime de reguli prin care unei expresii i se asociaz un tip al limbajului respectiv n ST respinge o expresie dac nu-i poate asocia un tip n Respingerea expresiei are loc de obicei la compilare sau, mai rar, la execuie
n
Programare procedural 14

Sisteme de tipuri
n

LP impun declararea explicit a variabilelor, una dintre informaiile de baz prezente n declaraie fiind tipul variabilei. Sarcinile principale ale unui sistem de tipuri sunt:
declararea

de tipuri de date utilizator asocierea de tipuri la variabile, realizate prin declaraiile de variabile verificarea consistenei folosirii expresiilor

Programare procedural

15

Sisteme de tipuri
n

Verificarea consistenei folosirii expresiilor:


determinarea

tipului expresiei verificarea consistenei instruciunilor (de atribuire, apel) prin


compatibilitatea tipurilor; n egalitatea tipurilor, includerea tipurilor; n echivalena tipurilor; n concordana listelor de parametri (formali i actuali) n apelul de subprograme.
n
Programare procedural 16

Sisteme de tipuri
Regulile unui sistem de tipuri precizeaz utilizarea adecvat a fiecrui operator n limbaj. n Verificarea tipurilor (engl. type checking) are ca scop garantarea folosirii corecte a operaiilor n Se previn erorile de execuie. n O eroare de execuie apare atunci cnd o operaie se aplic incorect,
n
Programare procedural 17

Sisteme de tipuri
n

Exemplu: un operand numr ntreg este considerat altceva (caracter, ir de caractere, boolean). O eroare de tip (engl. type mismatch) apare cnd o funcie f cu un argument formal de tipul S care ntoarce un rezultat de tipul T este apelat cu un argument actual de tipul A care nu este de tipul S. Un program n care nu apar erori de tip se numete sigur din punctul de vedere al tipurilor (engl. type safe).
Programare procedural 18

Sisteme de tipuri
Verificarea tipului se poate face static sau dinamic. n Verificarea static se face la traducere, n Verificarea dinamic se face la execuiei, prin inserarea n programul executabil (n timpul traducerii) a unor poriuni de cod care realizeaz acest lucru.
n
Programare procedural 19

Sisteme de tipuri
n

n n

Verificarea dinamic = costuri suplimentare de execuie (dimensiunea programului executabil crete, la fel i timpul de execuie, o parte din el fiind dedicat verificrilor specifice). Verificarea static = numai verificare de tip, Verificarea dinamic = verificarea de tip + verificarea unor valori calculate n timpul execuiei (indici de tablou, mprire la zero etc.).
Programare procedural 20

Sisteme de tipuri
n

Expresie sigur (engl. safe expression) = expresie n a crei evaluare nu apare o eroare de tip. Categorii de sisteme de tipuri:
Puternice

(engl. strong type system) Slabe (engl. weak type system).


n n

Sistem puternic de tipuri = accept numai expresii sigure Sistem slab de tipuri = nu este puternic.
Programare procedural 21

Sisteme de tipuri
n

LP puternic tipizat

fiecare expresie are un singur tip; determinarea tipului este posibil n timpul procesului de traducere, din sintaxa limbajului; variabilele memorate la adrese distincte fiecare obiect este creat cu un tip specificat; fiecare obiect este folosit ntr-o manier consistent cu tipul su.

LP slab tipizat

Programare procedural

22

Clasificarea tipurilor de date


n

Caracterul extensibil al unui LP este dat ntr-o mare msur de capacitatea acestuia de a permite definirea de noi tipuri de date Criterii de clasificare a tipurilor:
nivelul

de abstractizare prezena sau absena numelui tipului prezena n (sau absena din) definiia limbajului; momentul verificrii tipului caracteristicile tipurilor (domeniu, operaii)

Programare procedural

23

Clasificarea tipurilor de date


n

Tipurile pot fi considerate pe trei niveluri de abstractizare:


main tipurile pe care maina le tie reprezenta i pentru care dispune de dispozitive care pot efectua operaii cu ele: tipurile ntregi i reale, caracter i boolean; (tipuri de baz) nivelul limbajului tipurile de baz + tipurile structurate: tablouri, nregistrri, mulimi, liste etc. care se construiesc cu ajutorul tipurilor simple; nivelul utilizator tipurile definite de utilizator; aceste tipuri adaug cmpurilor de la tipurile structurate operaii, prin ncapsulare; POO
nivelul
Programare procedural 24

Clasificarea tipurilor de date


n n n n

Un tip de date este notat cu un identificator = numele tipului. Numele concentreaz toat informaia de declarare a respectivului tip (domeniul i operaiile asociate). Exist declaraii n care nu apare numele tipului, fiind prezent doar declararea acestuia. Prezena sau absena numelui este un criteriu de clasificare a TD:

tipuri cu nume tipuri anonime (fr nume).

Programare procedural

25

Clasificarea tipurilor de date


struct Student { char* nume; int varsta; }; struct Student s; struct { char* nume; int varsta; } s;

Tip anonim
Programare procedural 26

Clasificarea tipurilor de date


n

Din punctul de vedere al definiiei limbajului:


tipuri

fundamentale, care au ca nume identificatori predefinii; tipuri derivate, care au numele (identificator) dat de utilizator ntr-o declaraie ce cuprinde un constructor de tip.
n

Din punctul de vedere al momentului verificrii tipului:


tip tip

static (verificat la compilare); dinamic (verificat la execuie).


Programare procedural 27

Clasificarea tipurilor de date


n

Dup natura comportamentului reprezentanilor (obiectelor) unui anumit tip:


simple

sau scalare: ordinale (ntreg, boolean, caracter, enumerare, subdomeniu) i reale; ir de caractere; structurate (tablou, nregistrare, mulime, fiier, clas, uniune); pointer; procedurale.
Programare procedural 28

Declaraii de tipuri n C
Nume-de-tip int int* int *[3] int (*)[3] int *() int(*) (double) Declaraia int i int* pi int *p[3] Tipul

ntreg Pointer la ntreg Tablou de 3 pointeri la ntregi Funcie fr argumente care returneaz pointer la int Pointer la funcie cu un arg. double care returneaz int
Programare procedural 29

int (*p3i)[3] Pointer la tablou de 3 ntregi int *f() int(*pf) (double)

Declaraii de tipuri n C
typedef int * Tf(); Tf f;
n n

nume-de-tip este Tf declaraie de tip echivalent cu declaraia de variabil int *f();

typedef int (*Tpf)(double); Tpf pf;


n n

nume-de-tip este Tpf declaraie de tip echivalent cu int (*pf)(double);

Programare procedural

30

Declaraii de tipuri n C
typedef char *F(int); // F funcie cu argument //int care ntoarce pointer la char

char* (*(*f)[10])(int);

typedef F* A[10]; // A este tablou de // 10 pointeri la funcii de tipul F A* p; // p este un pointer la tabloul de //tip A din expresia de mai sus.

Programare procedural

31

Echivalena tipurilor
n

Ce nseamn tipuri compatibile sau egale?

Programare procedural

32

Programare procedural
Declaraii de variabile
Curs 7

Programare procedural

Coninuturi
Elemente definitorii ale unei variabile n Legarea variabilelor n Punctul de declarare
n

Programare procedural

Declaraii de variabile
Unei variabile i corespunde o locaie de memorie care conine un obiect dintr-o mulime valori posibile ale ULP. n Mulime formeaz domeniul de definiie al variabilei, n Locaia de memorie poziia de la care ncepe alocarea variabilei respective.
n
Programare procedural 3

Declaraii de variabile
n programarea imperativ caracteristica definitorie este crearea variabilelor i lucrul cu acestea n Variabil matematic != variabil informatic n Matematic nedeterminat sau parametru a unui sistem formal n Informatic - legat de localizarea acesteia n memorie i de modificabilitatea coninutului locaiei
n
Programare procedural 4

Elemente definitorii ale unei variabile


n

Structural
nume set

de atribute referin valoare


n

Numele unei variabile este un identificator

Programare procedural

Elemente definitorii ale unei variabile


n

Setul de atribute poate fi:


fixat

la compilare modificat dinamic (la execuie)


n

Definirea atributelor
declarativ

(se folosesc instr. de declarare) implicit (prin convenii n ceea ce privete numele, atribuirea de valori)
6

Programare procedural

Elemente definitorii ale unei variabile


n

Atribute eseniale:
Domeniul

de vizibilitate Durata de via Tipul variabilei

Programare procedural

Elemente definitorii ale unei variabile


Domeniul de vizibilitate este considerat a fi intervalul (de program surs) n care variabila respectiv este recunoscut, deci utilizabil n Domeniul de vizibilitate - ncepe de obicei imediat dup punctul de declarare al numelui i se termin la sfritul blocului, procedurii, fiierului surs
n
Programare procedural 8

Elemente definitorii ale unei variabile

O variabil local, declarat n interiorul unui subprogram are DV toat secvena de declaraii i instruciuni de dup punctul de declarare i pn la sfritul subprogramului respectiv; O variabil global, declarat n corpul programului principal are DV dup punctul de declarare pn la sfritul fiierului surs.

Programare procedural

Elemente definitorii ale unei variabile


n

Durata de via - intervalul (de timp de execuie) n care zona de memorie alocat variabilei este utilizat pentru variabil Variabile locale (automatice)
declarate

n interiorul blocurilor sau subprogramelor alocate n stiv doar la activarea unitii de program durata de via egal cu perioada ct este activat blocul sau subprogramul n care ele sunt declarate

Programare procedural

10

Elemente definitorii ale unei variabile


n

Variabilele globale
alocate

n segmentul de date nc de la compilare au durata de via egal cu timpul de execuie al programului

Programare procedural

11

Elemente definitorii ale unei variabile


n

Variabile dinamice
durata

de via controlat de utilizator alocarea i dealocarea se face prin instruciuni specifice fiecrui limbaj

Programare procedural

12

Elemente definitorii ale unei variabile


n

Tipul variabilei
LP

posed tipuri predefinite (tipuri numerice, caracter, boolean), LP evoluate au n plus mecanisme de definire a tipurilor utilizator (typedef, struct, union n C, class n C++), Programatorul poate construi propriile sale structuri de date Mecanismele de declarare de noi tipuri sunt extinse prin ceea ce se numete abstractizare datelor i POO, accentul este pus pe definirea operaiilor prevzute pentru un tip de dat definit de utilizator
Programare procedural 13

Elemente definitorii ale unei variabile


Referina = informaia adres; locul unde este memorat variabila n Stabilirea referinei se realizeaz prin alocarea variabilei respective n Alocarea unei variabile se poate face
n
static

(la compilare) dinamic (dinamic)


Programare procedural 14

Elemente definitorii ale unei variabile


Variabile aliate = variabile care au aceeai referin n Operaia se numete aliere (aliasing) n n C i C++ se realizeaz prin union
n

Programare procedural

15

Elemente definitorii ale unei variabile


Valoarea asociat unei variabile se poate schimba n timpul execuiei unui program n Mulimea valorilor asociate variabilelor dintr-un program formeaz spaiul strilor sau mediul programului n Determinarea valorii unei variabile se face prin operaia de derefereniere
n
Programare procedural 16

Elemente definitorii ale unei variabile


n general operaia de derefereniere este implicit, neexistnd o notaie consacrat pentru ea n Pe baza referinei se returneaz valoarea variabilei
n

Programare procedural

17

Elemente definitorii ale unei variabile


Nume Set de atribute Referin Valoare

Referina + valoare = obiect

Programare procedural

18

Elemente definitorii ale unei variabile


X Atribute X valoare

Atribute Y

Variabile aliate

Programare procedural

19

Legarea variabilelor (binding)


n n n n

ntre nume i setul de atribute ntre perechea (nume, set de atribute) i referin Legarea intern a variabilelor se face n interiorul procesului de compilare Legarea extern este sarcina editorului de legturi (rezolv legarea unei variabile folosit ntr-un modul i declarat ntr-un alt modul)
Programare procedural 20

Legarea variabilelor
Legarea variabilelor implic punerea n coresponden a variabilelor cu atributele acesteia n Momentul legrii (engl. binding time) este momentul la care devin cunoscute atributele unei variabile.
n

Programare procedural

21

Legarea variabilelor
n

Momentul legrii:

la compilare: se pot face toate verificrile necesare privind compatibilitatea i corectitudinea utilizrii variabilei; codul generat este mai compact, permind o execuie eficient. la execuie: n codul generat la compilare vor trebui introduse secvene care s realizeze verificrile de corectitudine a utilizrii variabilei, ceea ce duce la un cod mai mare, deci mai ineficient. Avem o mai mare flexibilitate a programelor scrise.

Programare procedural

22

Legarea variabilelor
n

Momentul legrii:
LP cu legare static (la compilare) foarte eficient n execuie LP cu legare dinamic la execuie

Programare procedural

23

Punctul de declarare
n

Punctul de declarare a unei variabile poate fi definit att pentru limbajele cu declaraii complet explicite, ct i pentru cele care permit i declaraii implicite de variabile

Programare procedural

24

Punctul de declarare
n

Declaraie explicit - orice variabil trebuie declarat printr-o instruciune de declarare, iar punctul de declarare se consider a fi imediat dup terminarea declaraiei numelui variabilei Declaraie implicit - punctul de declarare este prima instruciune de atribuire care conine n membrul stng numele variabilei (nceputul domeniului de vizibilitate al variabilei)

Programare procedural

25

Punctul de declarare
ntlnirea unei instruciuni de declarare nseamn pentru compilator legarea numelui variabilei de setul de atribute. n n mod normal o instruciune de declarare specific dou informaii:
n
numele

variabilei; tipul acesteia.


26

Programare procedural

Punctul de declarare
n

Restul atributelor se determin astfel:

nceputul DV este definit de punctul de declarare, iar sfritul DV este determinat tot de punctul de declarare, astfel:
a.

Punctul de declarare este intern unui bloc: DV ine pn la sfritul blocului, inclusiv blocurile (subprogramele) locale (exc. redeclarri ale numelui situaie n care vor fi valabile redeclarrile aa numitele pete albe hole in scope; variabil este local unitii n care a aprut punctul de declarare.

Programare procedural

27

Punctul de declarare
n

Restul atributelor se determin astfel:

nceputul DV este definit de punctul de declarare, iar sfritul DV este determinat tot de punctul de declarare, astfel:
b.

Punctul de declarare este n afara oricrui bloc sau subprogram: DV ine pn la sfritul fiierului surs, variabila fiind global n fiierul ce conine declaraia.

Programare procedural

28

Punctul de declarare
n

Restul atributelor se determin astfel:

nceputul DV este definit de punctul de declarare, iar sfritul DV este determinat tot de punctul de declarare, astfel:
c.

Punctul de declarare este n partea de interfa a unui modul: DV este cel stabilit la (b), variabila fiind global modulului, i orice alt modul sau program care specific explicit folosirea modulului de declarare.
Programare procedural 29

Punctul de declarare
n

Restul atributelor se determin astfel:

nceputul DV este definit de punctul de declarare, iar sfritul DV este determinat tot de punctul de declarare, astfel:
d.

Punctul de declarare este n partea de implementare a unui modul: DV este cel stabilit la (b), cu precizarea c numele este invizibil modulelor sau programelor care specific explicit folosirea modulului de declarare, iar variabila este local modulului.
Programare procedural 30

Programare procedural
Declararea variabilelor C
Curs 8

Programare procedural

Coninuturi
Clase de memorie n Etape ale lucrului cu variabile
n
Declarare Iniializare Folosire

Programare procedural

Clase de memorie
n limbajul C funciile nu se pot include unele n altele n n C exist instruciuni compuse i blocuri n Se permit definiri de obiecte n cadrul blocurilor
n

Programare procedural

Clase de memorie
CM util pentru determinarea domeniului de vizibilitate i a duratei de via al var. n CM: auto, register, extern, static n Sintaxa:
n
<nume_clas>

<tip> <list_nume_variabile>;

Programare procedural

Clase de memorie
n

auto sunt declarate n interiorul funciilor


Este

activ ct timp este activ unitatea de program (funcia sau blocul) la nceputul creia a fost declarat i pierde valoarea la terminarea execuiei unitii de program n care e declarat La un nou apel vechea valoare nu mai e disponibil Clasa de memorie implicit
Programare procedural 5

Clase de memorie
n

register subclas a clasei auto


Declaraia

register informeaz compilatorul c aceste variabile vor fi utilizate foarte frecvent Dac e posibil compilatorul le va aloca cte un registru main (pentru eficien) Un registru = 4 octei deci doar ntregii, caracterele, pointerii pot aparine acestei clase
Programare procedural 6

Clase de memorie
void main() { register int i; for (i = 0; i < 1000; i++) a[i] = i; // }

Programare procedural

Clase de memorie
n

static interne i externe (n funcie de locul unde apar)


static

interne declarate n interiorul unei funcii static externe declarate n afara funciilor
n

Exemplu:
static

int a[20];

Programare procedural

Clase de memorie
Declaraie static extern variabila accesibil doar funciilor din fiierul respectiv n Se aloc la compilare n segmentul de date n Declaraie static intern variabil local alocat n segmentul de date (nu pe stiv)
n
Programare procedural 9

Clase de memorie
n

static intern
valoarea

se pstreaz ntre dou apeluri consecutive ale aceleiai funcii iniializarea se face doar la primul apel al funciei

Programare procedural

10

Clase de memorie
n

extern pentru comunicarea ntre segmente diferite, compilate separat


Declarate

n afara funciilor DV de la declarare pn la sfritul fiierului n care apare declararea


n

Funciile C au implicit clasa de memorie extern


Programare procedural 11

Etape ale lucrului cu variabile


n n n

Declararea Iniializarea Folosirea

Programare procedural

12

Etape ale lucrului cu variabile


n n

se realizeaz cu ajutorul instruciunilor de declarare comunic compilatorului informaii privind

n n n

Declararea se face implicit sau explicit Declararea explicit

numele variabilelor atributele valorile de iniializare (dac e cazul)

Programare procedural

13

Etape ale lucrului cu variabile


n

Declararea implicit

recurge la convenii privitoare fie la numele variabilei, fie la valoarea acesteia

Instruciunile de declarare apar, de regul, n partea de nceput (de declaraii) a blocurilor, subprogramelor sau modulelor (exc. Java, C++, C#)
Programare procedural 14

Etape ale lucrului cu variabile


n

Declaraiile pot specifica


tipul

de legare a variabilei (intern sau extern) modul de alocare modul de transmitere a parametrilor n subprograme

Programare procedural

15

Etape ale lucrului cu variabile


Declarare != Definire n Definire = declarare + iniializare n Definiii fr iniializare, variabilele primesc valori implicite, echivalente lui 0:
n
0

pentru tipuri numerice string-ul vid pentru iruri de caractere valoarea NULL pentru pointeri
Programare procedural 16

Etape ale lucrului cu variabile


n

Declarare != Definire atunci cnd:


Declar

o funcie fr a-i specifica corpul; Conine specificatorul extern i nu are iniializarea sau corp de funcie; Declar un membru static ntr-o declaraie de clas; Este o declaraie de nume de clas; Este o declaraie typedef.
Programare procedural 17

Etape ale lucrului cu variabile


n

Exemple:
int

a; // declaraie + definiie extern int a; // declaraie n alt fiier

Declaraii static - legare intern n Declaraii extern - legare extern (la linkeditare)
n

Programare procedural

18

Programare procedural
Declararea variabilelor C Tipuri de date

Curs 9

Programare procedural

Coninuturi
n

Etape ale lucrului cu variabile


Folosire Declaraii

const Lucrul cu pointeri Iniializarea Referirea variabilelor


n

Tipuri de date
Programare procedural 2

Etape ale lucrului cu variabile


n

O declaraie sau definiie poate conine i calificatori (const sau volatile), care definesc modificabilitatea obiectelor precizate Exemple:
const

int ci = 10; // constant ntreag; const int *pc = &ci; // pointer la constanta ntreag ci; const int *const cpc = pc; //pointer constant la constanta ntreag ci

Programare procedural

Etape ale lucrului cu variabile


n

Exemple:
int int int

Operaii permise:
i

i; // variabil ntreag *p; // pointer la ntreg; *const cp = &i; // pointer constant la variabila ntreg i;

= ci; *cp = ci; pc++; pc = cpc; pc = p;


Programare procedural 4

Etape ale lucrului cu variabile


n

Operaii nepermise
ci

= 1; // ci nu se poate modifica ci++; // idem *pc = 2; // ar trebui s se modifice ci cp = &ci; // cp nu se poate modifica cpc++;// cpc nu se poate modifica p = pc;// ar permite modificarea ulterioar a lui ci prin p
Programare procedural 5

Etape ale lucrului cu variabile


int i = 1; // i se poate modifica const int *p = &i; //pointer la obiect const care se poate modifica, nu si obiectul referit int *const vp = &i; //pointer const la un obiect; obiectul se poate modifica, nu i pointerul const int *const cp = &i; // pointer const la un obiect const; obiectul i pointerul nu se pot modifica void f() { i++; // OK: i nu este const p--; // OK: p nu este const (*vp)--; // OK: *vp nu este const cp++; //eroare: nu se poate modifica un obiect const (*cp)--; //eroare: nu se poate modifica un obiect const (*p)++; //eroare: nu se poate modifica un obiect const vp++; //eroare: nu se poate modifica un obiect const 6 Programare procedural }

Etape ale lucrului cu variabile


n

Iniializarea

unui program = cu aceleai date de intrare, programul produce aceleai rezultate n cazul programelor simple, care conin declaraii de date (variabile) de intrare i rezultate
Stabilitatea
n n

Variabile

auxiliare (necesare pentru o mai bun structur a procesului de calcul), nu se garanteaz iniializarea acestora

variabilele de intrare se iniializeaz prin operaii de intrare (citire) variabilele rezultat (de ieire) prin operaii de atribuire

Programare procedural

Etape ale lucrului cu variabile


Condiie de stabilitate: toate variabilele auxiliare din program s fie iniializate cu aceleai valori, la fiecare execuie a programului cu acelai set de date de intrare n Iniializarea unei variabile prin:
n
instruciuni

de atribuire instruciuni specifice

Programare procedural

Etape ale lucrului cu variabile


n

Iniializarea unei variabile aceasta se poate face:


n

momentul alocrii ei (variabila primete o valoarea predefinit, n funcie de tipul ei sau stabilit printr-o instruciune sau clauz) imediat dup momentul alocrii (valoarea variabilei este nedefinit se consider valoarea gsit n locaia de memorie definit de referina ei, valoarea numit valoarea rezidual

Programare procedural

Etape ale lucrului cu variabile


n

Referirea variabilelor se face printr-o expresie de identificare care poate fi:


identificator

(numele variabilei respective); expresie indexat (cnd variabila este de tip tablou); expresie de selectare (dac variabila este component a unei date structurate); expresie de indirectare (cnd variabila este de tip pointer);

Programare procedural

10

Tipuri de date
n n n n n

Tipuri fundamentale iruri de caractere Pointeri Tipuri procedurale Tipuri structurate


Tablou nregistrare Uniuni Tipuri de date

definite de utilizator

Programare procedural

11

Tipuri de date
n

Tip de date = o mulime de obiecte nsoit de o mulime de operaii pe mulimea acestor obiecte
Operaiile

crearea, construirea, distrugerea, modificarea sau copierea instanelor (realizrilor) obiectelor n set minim de operaii primitive (prin compunere rezult operaii complexe)
n

Programare procedural

12

Tipuri fundamentale
Tipuri fundamentale = tipuri baz, corespund tipurilor main. n Pentru TF avem identificatori predefinii n Tipuri fundamentale (comportament)
n
aritmetice, caracter boolean

Programare procedural

13

Tipuri fundamentale
Tipurile aritmetice (ntregi i reale) sunt apropiate de maina fizic n Operaiile de baz
n
aritmetice

(expresii aritmetice) comparare (expresii relaionale)

Programare procedural

14

Tipuri fundamentale
n

Tipul boolean are


valori: true i false 5 operaii: and, or, not, imp, equiv
2

n n n n n

x and y = if x then y else false x or y = if x then true else y not x = if x then false else true x imp y = if x then y else true x equiv y = if x then y else not y

Programare procedural

15

Tipuri fundamentale
n

n C (C++) nu exist tipul boolean (bool)


un

ir bii ce conine numai 0 - false un ir de bii n care este unul nenul - true
n

Tipurile aritmetice
tipuri

ntregi (char, int n toate variantele i enumerrile) tipuri reale (flotante)


16

Programare procedural

Tipuri fundamentale
Valorile minim i maxim din domeniul fiecrui tip sunt precizate, pentru fiecare implementare, n fiierul header (antet) <limits.h> n Tipul char
n
setul

de caractere de baz al limbajului valoare = codul ntreg al caracterului


17

Programare procedural

Tipuri fundamentale
n n

Tipul char poate fi calificate cu:


signed

sau unsigned

Tipul int poate fi calificat cu:


signed

sau unsigned long sau short

Programare procedural

18

Tipuri fundamentale
Tip char short int long sizeof (n octei) 1 2 2 sau 4 4 sau 8 Aliniere (multiplu de, n octei) 1 2 2 sau 4 4 sau 8
Programare procedural 19

Tipuri fundamentale
Tipul enumerare = tip ntreg distinct ce are constante cu nume n Identificatorii dintr-o list enumerare sunt declarai constante i pot apare oriunde pot apare constante n Dac nu apar enumeratori cu =, valorile constantelor ncep de la 0 i cresc cu 1, de la stnga la dreapta
n
Programare procedural 20

Tipuri fundamentale
enum culori { rosu, orange, galben, verde, albastru }; enum fruct { mar, para, orange, kiwi }; // eroare: orange este redefinit enum pasare { strut, dodo, lebada, kiwi}; // eroare kiwi este redefinit int lebada; // eroare: lebada redefinit

Programare procedural

21

Tipuri fundamentale
enum { a, b, c = 0}; enum {d, e, f = e + 2};

definete a, c, d cu valoarea 0 n b i e cu valoarea 1 n f cu 3.


n

Programare procedural

22

Tipuri fundamentale
n

Tipurile reale:
float double long

double.

Caracteristicile sunt date n <float.h>.

Programare procedural

23

Tipuri fundamentale
Tip float double long double sizeof (n octei) 4 8 12 sau 16 Aliniere (multiplu de, n octei) 4 4 sau 8 4, 8 sau 16

Programare procedural

24

Tipuri fundamentale
n n n n n

Tipul void are domeniul valorilor vid. Folosit pentru a preciza tipul rezultatului ntors de funciile cu semantic de procedur. Nu se declar obiecte de tip void Orice expresie se poate converti explicit la tipul void Rezultatul conversiei se poate ca:

instruciune expresie, operand stng, expresie virgul al treilea operand la o expresie condiionial ternar ? :

Programare procedural

25

iruri de caractere
n

Tipul ir de caractere (numit i string) are ca valoare un ir de caractere cu lungimea variabil (modificabil dinamic) Operaii:
construirea inserarea unui

ir de caractere n altul extragerea unui subir tergerea unui subir cutarea unui subir concatenarea a dou iruri de caractere
26

Programare procedural

iruri de caractere
n

Convenia C pentru string-uri:


un
n

ir de n caractere se reprezint pe n+1 octei, numerotai de la 0 la n, astfel:


octetul i (de la 0 la n-1) conine al i+1-lea caracter din irul considerat n octetul n conine un caracter terminator de ir: caracterul NUL (\0) din ASCII;

n C, C++ nu avem tipul string


Programare procedural 27

iruri de caractere
n

Existena tipului string n limbaj implic:


existena

tipului de date ir de caractere (string); prelungirea utilizrii operatorilor relaionali pe iruri de caractere; stabilirea unei reprezentri pentru irurile de caractere; stabilirea unei mulimi minimale de operaii pe iruri de caractere.

Programare procedural

28

iruri de caractere
n

n C, C++
char

[n] (sau char [ ]) Pentru a prelucra iruri de caractere folosim funcii din biblioteca standard C:
strcpy n strcmp n strstr n strchr n strlen etc.
n
Programare procedural 29

Programare procedural
Tipuri de date

Curs 10

Programare procedural

Coninuturi
n

Tipuri de date
Pointer Procedural Tipuri
n

structurate

Tablouri n nregistrri n Uniuni

Programare procedural

Tipul pointer
Tipul de date pointer are domeniul format din adresele altor entiti (reprezentabile n memorie) dintr-un program. n Lucrul cu pointeri permite:
n
Crearea

i utilizarea unor structuri de date foarte complexe,

ngreuneaz nelegerea unui program, putnd genera erori greu de detectat.


Programare procedural 3

Tipul pointer
n

Tipuri de pointeri:
cu

tip (conin adrese de entiti de acelai tip) fr tip (refer orice entitate de memorie)
n

Constituie o modalitate de accesare a entitilor din memoria unui program, printr-un mecanism de indirectare

Programare procedural

Tipul pointer
n n n n

Valoarea = adresa entitii respective Informaia de tip a pointerului exprim i tipul entitii referite de pointer. Entitatea este o variabil - pointerul are ca valoare adresa acesteia Variabilele alocat dinamic nu au nume (variabile anonime). Referirea lor se poate realiza doar prin pointeri
Programare procedural 5

Tipul pointer - operaii


Atribuirea n Dereferenierea (indirectarea, referirea entitii punctate de pointer) n Operaii aritmetice (adunare i scdere)
n

Programare procedural

Tipul pointer
Pointerii = flexibilitatea n execuia programului n Programatorul are libertate de a
n
Controla

durata de via a variabilelor Gestionea o parte a memoriei


n

Libertile greit nelese se ntorc mpotriva aceluia care beneficiaz de ele


Programare procedural 7

Tipul pointer
Referin ambigu = se folosete un pointer a crui valoare refer ceva ce nu mai este alocat n memorie n Soluie garbage collector
n

Programare procedural

Tipul pointer - avantaje


n n n n

Libertatea pentru programator de a controla duratei de via a variabilelor Flexibilitatea sporit a programelor prin structuri de date dinamice Actualizarea selectiv a structurilor complexe, fr recopierea ntregii structuri; Compactitatea codului scris prin folosirea pointerilor la funcii.
Programare procedural 9

Tipul pointer erori tipice


Accesarea unei entiti printr-un pointer nainte de iniializarea pointerului ce o refer erori de execuie; n Accesa unei locaii dup ce aceasta a fost eliberat rezultate imprevizibile n execuie.
n

Programare procedural

10

Tipul pointer sintaxa


n n

Declaraie
pointer

la tipul T = T*

Operaii
*

(indirectarea) *p = obiectul de tip T referit de p (p este de tip pointer la T) & (adresa lui) &p = obiectul de tip pointer la T (p este de tip T) care refer pe p, deci cu alte cuvinte, adresa lui p

Programare procedural

11

Tipul pointer
n

Operaii
++,

-- incrementarea i decrementarea valorilor de tip adres. Operaii de comparare

n C, C++ parametri se transmit ntotdeauna funciilor prin valoare n Apelul prin referin se poate simula folosind explicit pointeri
n
Programare procedural 12

Tipul pointer
Pentru tipurile fundamentale e suficient transmiterea prin valoare n Pentru tipuri definite de utilizator nu e de dorit s transmitem instane ale lor prin valoare (pt. c acestea pot avea dimensiune mare) n !!! Tablourile se transmit ntotdeauna prin referin
n
Programare procedural 13

Tipuri procedurale
n

Tip procedural = tip de date cu domeniul format din mulimea tuturor procedurilor sau funciilor ce respect un anumit ablon, definit n cadrul declarrii tipului procedural n cauz.

Programare procedural

14

Tipuri procedurale
n

Declaraia de tip procedural specific:


Numele

noului tip procedural (opional) Tipul i numele parametrilor formali ai procedurilor sau funciilor ce vor respecta ablonul Tipul rezultatului ntors (dac e vorba despre funcii)

Programare procedural

15

Tipuri procedurale
n

O variabil procedural are


Nume Tip

(servete la verificarea consistenei folosirii ei) Valoare (adresa codului procedurii n cauz n cadrul programului executabil)
n n

numele procedurilor/funciilor declarate n program numele procedurilor/funciilor externe de tip compatibil cu tipul procedural al variabilei care este iniializat

Programare procedural

16

Tipuri procedurale - C
typedef void ffp(); //definiie de tip ffp pfp; // definiie de variabil typedef void fpr(float a, float b, float c); typedef float freal(float x); typedef float ffunc(float p1, float p2, freal f);

Programare procedural

17

Tipuri procedurale - C
n C numele unei funcii este evaluat n la adresa de nceput a funciei n cadrul codului compilat, n Variabila pfp va reprezenta o cantitate de tip adres compatibil cu orice valoare reprezentnd numele unei funcii fr parametri i de tip void.
n
Programare procedural 18

Tipuri procedurale - C
Adresa unei funcii se obine prin simpla specificare a numelui funciei fr paranteze n Aceast adres poate fi atribuit unui pointer de funcie cu rezultat i parametri compatibili n Pointerul poate fi folosit pentru a apela funcia
n
Programare procedural 19

Tipuri procedurale - C
int f(int, char); // declaraia funciei f int (*pf)(int, char); /* se declar pf ca pointer la funcie de dou argumente (int i char) ce ntoarce un ntreg*/ int i, j; char c; pf = f; // atribuire de adrese j = (*pf)(i, c); // apelul funciei f folosind pf

Programare procedural

20

Tipuri structurate
LP dispun de modaliti de agregare a datelor n Tipurile simple sunt atomice, indivizibile n Tipurile structurate (compuse, agregate) se descompun n componente sau elemente, fiecare de un tip precizat (simplu sau structurat)
n
Programare procedural 21

Tipuri structurate
n n n

O dat structurat poate fi accesat fie ca ntreg (global), fie pe componente Structura unei date stabilete relaiile care exist ntre componentele acesteia. Legturi structurale fundamentale:
Mulime

(nici o legtur ntre componente) Liniar (legtur 1:1) Arbore (legtur 1:n) Graf (legtur m:n)
Programare procedural

22

Tipuri structurate
n

Din punctul de vedere al uniformitii structurale


Omogene

(toate componentele au acelai tip); tablou (engl. array) i mulime (engl. set); Heterogene (elementele unei date au de obicei componente diferite de tip); tipul de date nregistrare (engl. record).

Programare procedural

23

Tipuri structurate
Tablourile i nregistrrile au o structur liniar n Exist o prim i o ultim component, n Toate celelalte elemente au fiecare att predecesor, ct i succesor
n

Programare procedural

24

Tipuri structurate
Tablou = agregat de elemente de acelai tip n Fiecare element este localizat prin poziia pe care o ocup (indicele elementului) n nregistrare = agregat care grupeaz de elemente de tipuri diferite numite cmpuri care sunt localizate prin numele lor
n
Programare procedural 25

Tipuri structurate
Mulimea = structur amorf n Conine elemente de acelai tip ce nu pot fi localizate explicit neexistnd informaia de apartenen a unui element la ea. n n C nu exist tipul mulime n n alte limbaje (Pascal) se poate folosi tipul mulime
n
Programare procedural 26

Tipuri structurate
n

Operaii cu tipuri structurate


construirea
n

Prin regulile specifice ale limbajului

selectarea
n

componentelor

La tablouri prin indice n La nregistrri prin numele componentelor

Programare procedural

27

Tipul tablou
n

Elementele definitorii:
Numele (opional) = un identificator Lista dimensiunilor = precizeaz numrul dimensiunilor Tipul elementului de tablou Domeniul pentru mulimea indicilor = de tip subdomeniu

Programare procedural

28

Tipul tablou
n

Criteriile de clasificare
Numrul
n

de dimensiuni

Tablouri monodimensionale (vectori) n Tablouri bidimensionale (matrici) n Tablouri tridimensionale n n general, tablouri d-dimensionale
Tipul

elementelor

Programare procedural

29

Tipul tablou
n

Criteriile de clasificare
Momentul
n

alocrii

statice = se aloc la compilare (sau cel puin trebuie cunoscute dimensiunile la compilare) n dinamice dimensiunea determinat la execuie
Posibilitatea
n

redimensionrii

tablourile flexibile

Programare procedural

30

Tipul tablou
Referirea la un element al tabloului se face prin precizarea numelui tabloului urmat de o expresie de indice ntre paranteze n Determinarea locaiei unui element al tabloului n memorie se face printr-un calcul de adres
n

Programare procedural

31

Tipul tablou
n

Descriptorul de tablou areurmtoarele informaii:


nume

numele tabloului tip tipul elementului de tablou lung lungimea reprezentrii unui element de tablou (n uniti de alocare) adrs adresa de unde ncepe memorarea tabloului nrd numrul de dimensiuni al tabloului pentru fiecare dimensiune, limitele lim_inf_i i lim_sup_i (1 <=i<=nrd).
Programare procedural 32

Tipul tablou
Tabloului i se aloc locaii consecutive de memorie - ocup o zon compact n A(li:ls)
n
loc(A(i))

= adrs + (i - li)*lung

Programare procedural

33

Tipul tablou
n n

B(li1:ls1, li2:ls2) Memorat pe linii


loc(B(i,j)) = adrs + (i-li1)*(ls2-li2+1)*lung + (j-li2)*lung loc(B(i,j)) = adrs li1*(ls2-li2+1)*lung li2*lung+ (constant) +j*lung + i*(ls2-li2+1)*lung loc(B(i,j)) = adrs + (j-li2)*(ls1-li1+1)*lung + (i-li1)*lung loc(B(i,j)) = adrs li2*(ls1-li1+1)*lung li1*lung+ (constant) +i*lung + j*(ls1-li1+1)*lung

Memorat pe coloane

Programare procedural

34

Tipul nregistrare
n

Elementele definitorii ale unei nregistrri sunt:


numele

i tipul nregistrrii numrul de cmpuri numele i tipul fiecrui cmp


n

nregistrarea = modalitate de agregare (punere mpreun a unor date de tipuri n general diferite)
Programare procedural 35

Tipul nregistrare
n n n n

Numrul de cmpuri este dedus din lista de declarare a cmpurilor Cmpurile se memoreaz n zone de memorie adiacente Tipul cmpului servete la stabilirea lungimii de reprezentare Numele cmpului servete la accesarea valorii lui (prin operaia de selectare)
Programare procedural 36

Tipul nregistrare
n

n C:
(struct) - au o structur fix Uniuni (union) - un fel de nregistrare cu structur variabil
Structuri

Elementele ce trebuie considerate:


maniera

de declarare maniera de accesare a cmpurilor acestora iniializarea operaiile permise pentru variabilele de tip nregistrare

Programare procedural

37

Tipul nregistrare - C
n

Sintaxa:
struct [nume] {[tip nume_var]; }[variabile]; nume, variabile sunt opionale (cel puin una trebuie s apar)

Exemplu:
struct { char nume[30]; int varsta; float gr; } cineva;

Programare procedural

38

Tipul nregistrare
n

Atribuirea unui nume pentru structur: struct persoana{ char nume[30]; int varsta; float gr; }; struct persoana cineva, altcineva[20]; struct persoana Noi[10], *Voi[10];

Definirea unui nume de tip pentru structur: typedef struct { char nume[30]; int varsta; float gr; } persoana; persoana cineva, altcineva[20];
n

Programare procedural

39

Tipul nregistrare
n

Operaiile permise asupra structurilor sunt:


selectarea

unui cmp (prin operatorul .); obinerea adresei unei structuri (prin &); determinarea lungimii unei structuri (prin sizeof); atribuirea unei structuri (prin =).

Programare procedural

40

Tipul nregistrare
struct pers {int a; char b;} p1, p2 = {2, b}; // iniializare p1 = p2; // atribuire de structuri
n

Notaia ps->camp este echivalent cu (*ps).camp.


Programare procedural 41

Tipul nregistrare
n

Exemplu:
struct{ int x; int *y } *p;
++p->x

incrementeaz pe x, operatorul -> areprioritate mai mare dect ++; (++p)->x incrementeaz mai nti pe p i apoi acceseaz elementul x din structura nou pointat; (p++)->x se acceseaz nti x apoi se incrementeaz p;
Programare procedural 42

Tipul nregistrare
struct{ int x; int *y } *p;
*p->y

indic coninutul adresei pointat de y; *p->y++ acceseaz nti ceea ce pointeaz y i apoi incrementeaz y; (*p->y)++ incrementeaz ceea ce pointeaz y; *p++->y acceseaz ceea ce pointeaz y i apoi incrementeaz pointerul p

Programare procedural

43

Tipul nregistrare - uniuni


Uniunile permit utilizarea n comun a unei zone de memorie de ctre mai multe obiecte (numite membri) de tipuri diferite n Sintaxa:
n
union

nume_uniune {[tip nume_var]}[decl_variabile];

Programare procedural

44

Tipul nregistrare - uniuni


n n

Exemplu:
union

amestec {int i; float f; char *psir;}X;

sizeof(X) ?
X.i X.f X.psir

Programare procedural

45

Tipul nregistrare - uniuni


n

O uniune este o structur n care toi membri au deplasamentul zero, structura fiind suficient de mare pentru a putea pstra pe cel mai mare membru

Programare procedural

46

Tipuri de date definite de utilizator


n

POO

Programare procedural

47

Programare procedural
Expresii
Curs 11

Programare procedural

Coninuturi
Generaliti n Precedena operatorilor n Arborele unei expresii n Clase de operatori i expresii n Conversia explicit, implicit n Modaliti de evaluare a expresiilor
n
Programare procedural 2

Generaliti
Expresia = element de baz prin care se precizeaz calculele n Expresia = secven de operanzi i operatori, care exprim un proces de calcul n O expresie poate avea o valoare, determinat prin procesul de evaluare
n
Programare procedural 3

Generaliti
La evaluarea unei expresii pot aprea efecte secundare n Criterii de clasificare a expresiilor:
n
Numrul

de operanzi; Poziia operatorului n raport cu operanzii; Tipul rezultatului; Semantic.


Programare procedural 4

Operatori
n

n funcie de numrul de operanzi:


Expresii

unare un singur operand; Expresii binare doi operanzi; N-are n operanzi.


n

Numrul de operanzi = o caracteristic a unui operator numit aritate

Programare procedural

Operatori
n

Clasificare expresiilor n funcie de poziia operatorilor:


infix
n

operatorul ntre operanzi; operatorul naintea operanzilor; operatorul dup operanzi

E1 op E2 op E1 E2 E1 E2 op

prefix
n

postfix
n

Programare procedural

Operatori
n

Exemplu (x + y) * z :
infix:

(x + y) * z prefix: *+ x y z postfix: x y + z *
n

n notaia prefix i postfix nu sunt necesare parantezele - operanzii fiecrui operator se pot determina fr ambiguiti
Programare procedural 7

Precedena operatorilor
n

Rezolvarea ambiguitilor n notaia infix se face prin dou reguli:


Precedena

Exemplu care folosete doar prima regul:


+ b * c reprezint a + (b * c) a * b + c reprezint (a * b) + c
a
Programare procedural

operatorilor; Asociativitatea operatorilor (pentru operatorii cu aceeai preceden).

Precedena operatorilor
n

Asociativitate
La
n

stnga
Exemplu: a + b + c este interpretat ca (a + b) + c

La
n

dreapta
Exemplu: a = b = c este interpretat ca a = (b = c).

Asociativitatea operatorilor se aplic doar n situaia cnd acetia au aceeai prioritate


Programare procedural 9

Prioritatea i asociativitatea operatorilor n limbajul C


Operatorul Descriere 1. () [] -> . ! ~ ++ -+ * & (tip) sizeof Apel de funcie Accesare element tablou Selectare membru structur prin pointer Selectare membru structur direct Negare logic Complement pe bii Preincrementare sau postincrementare Predecrementare sau postdecrementare Plus unar Minus unar Indirectare Adres Cast Returneaz dimensiunea operandului
Programare procedural

Asociativitate de la stnga la dreapta

2. Unari

de la dreapta la stnga

10

Proritatea i asociativitatea operatorilor n limbajul C


3. Multiplicativi * / % + << >> nmulire mprire Rest Plus binar Minus binar Deplasare la stnga Deplasare la dreapta de la stnga la dreapta

4. Aditivi 5. Deplasare

de la stnga la dreapta

de la stnga la dreapta

Programare procedural

11

Proritatea i asociativitatea operatorilor n limbajul C


6.
Relaionali

< <= > >= == != & ^ |

Mai mic Mai mic sau egal Mai mare Mai mare sau egal Egal Diferit I pe bii XOR pe bii SAU pe bii

de la stnga la dreapta

7. Egalitate 8. 9. 10.

de la stnga la dreapta de la stnga la dreapta de la stnga la dreapta de la stnga la dreapta

Programare procedural

12

Proritatea i asociativitatea operatorilor n limbajul C


11. 12. 13. Condiiona l 14. Atribuire && || ? : I logic SAU logic a ? x : y (if a then x else y) de la stnga la dreapta de la stnga la dreapta de la dreapta la stnga

= += -= *=/= %= &= ^= |= <<= >>= ,

de la dreapta la stnga

15. Virgul

de la stnga. la dreapta

Programare procedural

13

Arborele unei expresii


(a + b) * (c * d * e 4 / f)
n n n

Prefix: *+ab-**cde/4f Afix: a+b*c*d*e4/f Postfix: ab+cd*e*4f/-*

Programare procedural

14

Clase de operatori i de expresii


n n n n n n n

Aritmetici Relaionali Logici Pe mulimi Pe iruri de caractere Pe iruri de bii Pe pointeri

n n n n

Operatorul de determinare a domeniului de vizibilitate (engl. scope resolution operator) Conversie explicit Atribuire Condiional Operatorul virgul.

Programare procedural

15

Clase de operatori i de expresii


Operatori aritmetici se folosesc la construirea expresiilor aritmetice. n Operanzii trebuie s fie de tipuri numerice, n Rezultatul evalurii este de tip numeric. n Fiecare limbaj posed propriile reguli de efectuare a calculelor i de stabilire a tipului rezultatului.
n
Programare procedural 16

Clase de operatori i de expresii


Operatori relaionali se aplic unor operanzi de tipuri variate, producnd un rezultat Boolean. n n C nu exist tipul boolean. Orice valoare ntreag diferit de zero este tratat ca true i valoarea ntreag zero este tratat ca false. n <, >, <=, >=, == (egalitate), != (inegalitate).
n
Programare procedural 17

Clase de operatori i de expresii


Operatori logici au de regul operanzi de tip boolean i ntorc un rezultat de tip boolean. n Operatorii logici n C:
n

(i logic), || (sau logic), ! (negaie logic operator unar). Opereaz asupra unor ntregi iar rezultatul este zero (false) sau unu (true).
&&
18

Programare procedural

Clase de operatori i de expresii


Operatori pe mulimi au operanzi de tip mulime n ntorc un rezultat de tip mulime. n Exist doar n limbajele ce suport tipul mulime. n Limbajul C nu suport acest tip de date.
n

Programare procedural

19

Clase de operatori i de expresii


n

n n n

Operatori pe iruri de caractere operatori pentru lucrul cu iruri de caractere + pentru concatenarea a dou iruri C nu are un tip de date special pentru iruri de caractere String-urile sunt simulate prin tablourilor unidimensionale de caractere. Biblioteca standard C conine o serie de funcii pentru operaii cu iruri
Programare procedural 20

Clase de operatori i de expresii


Operatori pe iruri de bii lucreaz la nivel de reprezentare pe bii, aplicnd operaiile logice cunoscute biilor corespunztori n Valorile biilor (0 i 1) se consider la aplicarea operaiilor drept valori de adevr. n Acest tip de operatori este specific limbajelor de asamblare.
n
Programare procedural 21

Clase de operatori i de expresii


C i C++ LP orientate pe aplicaii sistem n Au fost prevzute cu acest gen de operaii care permit accesul la memorie la nivel de bit. n Operatori pe iruri de bii n C
n
<<,

>> deplasare stnga, dreapta &, |, ^ - SI, SAU, SAU EXCLUSIV (XOR) ~ negaie
Programare procedural 22

Conversie explicit i implicit


Pentru conversii explicite n C exist operatorul cast: (tip) n Exemplu:
n
char

* p = (char*)0777;

O conversie de tip trebuie evitat dac nu este necesar pentru c ngreuneaz nelegerea programelor
Programare procedural 23

Conversie explicit i implicit


int i = 1; char* pc = "asdf"; int* pi = &i; i = (int)pc; pc = (char*)i; // pc i poate schimba valoarea. // pe unele maini sizeof(int) este mai mic dect //sizeof(char*) pi = (int*)pc; pc = (char*)pi; // pc i poate schimba valoarea. // pe unele maini un char* se reprezint altfel // dect un int*
Programare procedural 24

Conversie explicit i implicit


Orice pointer se poate atribui (fr conversie explicit de tip) la un void*, n Un void* se poate converti explicit la un pointer de orice tip.
n

Programare procedural

25

Conversie explicit i implicit


n

Conversia implicit apare cel puin n urmtoarele situaii:


la

operaia de atribuire; la apelul unui subprogram, n cadrul procesului de evaluarea a parametrilor; la evaluarea unei expresii mixte.

Programare procedural

26

Operatorul condiional
expr_logic? expr_adev: expr_fals n echivalent semantic cu: if(expr_logic) expr_adev; else expr_fals;
n

Exemplu: max = (a>b)?a:b;

Programare procedural

27

Operatorul virgul
n n

n C i C++ virgula este:


epxr1,

expr2, , exprN

Se evalueaz de la stnga la dreapta expresiile. n aloarea final atribuit expresiei secven este cea a expresei exprN

Programare procedural

28

Operatorul virgul
Pentru: int x = 6, y = 7, z, w; w = (z = y+x, y = y-x, x = x*y-z, x+y+z); n Vom obine: x = -7; y = 1; z = 13; w = 7;
n

Programare procedural

29

Evaluare a expresiilor logice


n

Evaluare scurtcircuit

e:=x and y, dac x = false, atunci e := false e:=x or y, dac x = true, atunci e := true

Efecte benefice
pentru timpul de execuie (se elimin unele operaii inutile) pentru fiabilitatea programului (se evit unele situaii de excepie)

Programare procedural 30

Programare procedural
Instruciuni i controlul execuiei
Curs 12

Programare procedural

Coninuturi
Instruciunea de atribuire n Instruciunea compus n Instruciuni condiionale (de ramificare, de selectare) n Instruciuni de ciclare n Instruciuni de transfer
n
Programare procedural 2

Instruciuni
Instruciuni sau comenzi = descriu operaii ce trebuie executate de un program scris ntr-un limbaj de programare (imperativ) n Pe lng instruciuni putem avea:
n
declaraii directive

de compilare

Programare procedural

Instruciuni
n

n funcie de semantica :
de

atribuire de intrare-ieire (transfer ntre memorie i dispozitivele periferice de regul prin fiiere) de control

Programare procedural

Instruciuni
Execuia unui program scris ntr-un limbaj de programare imperativ = ir de transformri ale valorilor unor locaii de memorie n Execuia este controlat de mecanisme care determin ordinea de execuie a instruciunilor
n
Programare procedural 5

Instruciunile de control
Instruciuni condiionale n Instruciuni de ciclare n Instruciuni de lucru cu subprograme
n
declararea

de subprograme apelarea subprogramelor inclusiv revenirea


n

Instruciuni de transfer (salt)

Programare procedural

Instruciuni
n

Din punctul de vedere al structurrii:


Instruciuni

simple realizeaz o aciune bine precizat semantic Instruciuni compuse format din mai multe instruciuni simple delimitate de>
begin-end n { }
n

Programare procedural

Instruciunea de atribuire
n

Forma general:
exprid exprid

opatr expr

- expresie de identificare; opatr - operatorul de atribuire; expr - expresie.

Programare procedural

Instruciunea de atribuire
n

Numele unei variabile are dubl identitate:


- referin (adresa zonei de memorie asociat variabilei) r-valoare valoarea memorat n zona respectiv de memorie
l-valoare

x = x + 1;

Programare procedural

Instruciunea de atribuire - exemple


int v1, v2; int *pv1, *pv2, *pv3; /*situaia iniial*/ v1 = 5; v2 = 15; pv1 = (int*)malloc(sizeof(int));

Programare procedural

10

Instruciunea de atribuire - exemple


1. iniializarea variabilelor dinamice *pv1 = v1; /* atribuire de valori*/ pv2 = &v2; /* atribuire de pointeri */ pv3 = pv1; /* atribuire de pointeri, salvare necesar pentru dealocarea zonei de memorie alocat mai sus */
Programare procedural 11

Instruciunea de atribuire - exemple


2. atribuire de pointeri pv1 = pv2; *pv1 i *pv2 desemneaz acelai obiect, aici v2 3. atribuire de valori *pv1 = *pv2 pv1 = pv3; /* refacerea variabilei dinamice pv1*/ *pv1 = *pv2; /* *pv1 i *pv2 au aceeai valoare fr ca pv1 i pv2 s fie egale */

Programare procedural

12

Instruciunea de atribuire - exemple


4. atribuire indirect v1 = v2 prin *pv1 = *pv2 pv1 = &v1; /* pv1 conine adresa lui v1 */ *pv1 = *pv2; /* similar cu v1 = v2 */ free(pv3); /* eliberarea memoriei */

Programare procedural

13

Instruciunea compus
Specific faptul c instruciunile care o compun se execut n ordinea n care apar n Instruciunile componente sunt tratate ca o singur instruciune
n

Programare procedural

14

Instruciunea compus
n

Instruciune compus = bloc (n unele limbaje, C, C++)


Instruciunea

compus nu conine declaraii Blocul poate conine declaraii (este o unitatea de vizibilitate)

Programare procedural

15

Instruciuni condiionale (de ramificare, de selectare)


Scop = alegerea unuia dintre mai multe fluxuri de control al prelucrrii (alternative de continuare a execuiei) n Sintaxa:
n

if (expresie) instruciune1; [else instruciune2;]


Programare procedural 16

Instruciuni condiionale
expresie trebuie s fie de tip aritmetic sau pointer n Dac expresie este diferit de zero
n
atunci

se execut instruciune1, altfel se execut instruciune2.


n

Partea else este opional.

Programare procedural

17

Instruciuni condiionale
Dac n limbaj exist tipul boolean atunci expresie trebuie s aib valoarea true sau false. n Instruciunea de selectare multipl switch
n
Alternativ

la if n cascad Soluie mai elegant Expresivitate sporit


Programare procedural 18

Instruciuni condiionale
n n n

Alternativ care se execut se stabilete pe baza unei expresii selector Valorile luate n considerare sunt etichete case Trebuie considerate urmtoarele aspecte:
tipul

expresiei selectoare; tipul etichetelor case; este posibil existena etichetelor reciproc neexclusive; etichetele acoper toat mulimea valorilor expresiei selectoare.
Programare procedural 19

Instruciuni condiionale
switch (expresie) { case eticheta1: instructiune 1; break; case eticheta2: instructiune n; break; ... default: instructiune n; break; }

Programare procedural

20

Instruciuni de ciclare
Instruciunile de ciclare (repetitive, iterative) realizeaz specificarea unor procese de calcul iterative n Pot fi
n
cu

numr cunoscut de pai cu numr necunoscut de pai (iteraii)

Programare procedural

21

Instruciuni de ciclare
n

Din punctul de vedere al locului unde se face testarea condiiei pentru reluarea buclei:
cu

test iniial (while) cu test final (do ... while)

Programare procedural

22

Instruciuni de ciclare
instruciune-de-ciclare::= while (expresie) instruciune; do instruciune while (expresie); for (instruciune-iniializare-for; expresie; expresie) instruciune;

Programare procedural

23

Instruciuni de ciclare
for (instruciune-iniializare-for; expr-1; expr-2) instruciune; echivalent cu: instruciune-iniializare-for; while (expr-1){ instruciune; }
Programare procedural 24

Instruciuni de transfer (salt)


instruciune-de-salt::=
break; (n switch sau n instr. de ciclare) continue; (numai n instr. de ciclare) return expresieopt; goto identificator;

Programare procedural

25

Programare procedural
Proceduri i transmiterea parametrilor
Curs 13

Programare procedural

Coninuturi
n n n n n n

Abstractizare i specificare Proceduri Evaluarea i transmiterea parametrilor Specificarea parametrilor unei proceduri Noiunea de efect secundar Proceduri mutual recursive

Programare procedural

Abstractizare i specificare
Principiului machiavelic divide et impera este viabil n programare n divide et impera = descompunere a unei probleme n subprobleme
n

Programare procedural

Abstractizare i specificare
n

Fiecare subproblem
este situat la acelai nivel de detaliere; ea poate fi tratat ulterior ca o problem distinct; se poate rezolva independent; soluiile se pot combina pentru a obine soluia problemei iniiale

Programare procedural

Abstractizare i specificare
Descompunere strns legat de abstractizare n Prin abstractizare se neglijeaz unele informaii (nesemnificative) pstrndu-se doar acelea considerate eseniale din punctul de vedere al contextului aplicaiei. n Lucruri diferite (ns totui nrudite) se pot trata identic
n
Programare procedural 5

Abstractizare i specificare
Abstractizarea prin parametrizare presupune identificarea intrrilor i a ieirilor, care vor constitui parametrii formali ai problemei respective. n Ce pot fi parametrii unei probleme?
n
numai

date (adic realizri ale unor tipuri de dat cunoscute) sau tipuri de date
Programare procedural 6

Abstractizare i specificare
n

Abstractizarea prin specificare se face prin asocierea unei specificri subproblemei, considerndu-se apoi c orice cerere de rezolvare a subproblemei se bazeaz pe aceast specificare, mai mult dect pe un algoritm de rezolvare a ei.

Programare procedural

Abstractizare i specificare
n

Realizarea specificrii se face printr-un cuplu de aseriuni, a cror folosire se bazeaz pe dou reguli. Aseriunile:
necesit

(pre-condiia) specific proprietile ce trebuie satisfcute cnd se dorete rezolvarea subproblemei; realizeaz (post-condiia) specific proprietile presupuse a fi ndeplinite la terminarea rezolvrii problemei.
Programare procedural 8

Abstractizare i specificare
n

Regulile specificrii afirm c:


dup

rezolvarea unei subprobleme se poate presupune c post-condiia este adevrat se pot admite numai acele proprieti care deriv din post-condiie.

Programare procedural

Abstractizare i specificare
n

Abstractizarea procedural - abstractizare de tip operaional prin care se realizeaz o nou operaie. Permite adugarea de noi operaii (extinderea) unui limbaj de programare (considerat ca main virtual). Abstractizarea prin tipuri de date abstracte se definesc noi clase (structuri) de date i operaii pe aceste obiecte

Programare procedural

10

Abstractizare i specificare
Abstractizarea prin proceduri combin metodele abstractizrii prin parametrizare cu cele ale abstractizrii prin specificare n Procedura = unitate sintactic i semantic care descrie transformarea argumentelor furnizate la intrare n argumente de ieire
n
Programare procedural 11

Abstractizare i specificare
n

Din punct de vedere semantic, procedura se poate identifica ntr-o oarecare msur cu subproblema Cerine ale abstractizrii prin proceduri:
Minimalitate

comportamentul trebuie precizat numai n limitele necesare Generalitate se obine prin utilizarea parametrilor n locul variabilelor Simplitate procedura trebuie s aib un scop bine definit i uor de explicat

Programare procedural

12

Abstractizare i specificare
Procedur bine gndit = se poate descrie scopul ei prin numele acesteia. n Simplitatea implic, de obicei, ca o procedur s aib un cod de implementare redus (de ordinul zecilor de linii surs)
n

Programare procedural

13

Abstractizare i specificare
n n n

Abstractizarea prin parametrizare servete la identificarea datelor utilizate. Este definit cu ajutorul parametrilor formali. Ori de cte ori se apeleaz o procedur, parametrii de apel (efectivi) trebuie n general s corespund ca numr i semnificaie cu cei formali. Dou momente deosebite din viaa unei proceduri:

Lista de parametri, stabilit la proiectare, realizeaz interfaa cu alte proceduri, ofer generalitate

proiectarea utilizarea ei.

Programare procedural

14

Abstractizare i specificare
n

Abstractizarea prin specificare - concentrare asupra comportamentului procedurilor scrise, cu neglijarea detaliilor de implementare, (trebuie gndit ce trebuie s fac procedura, i nu cum trebuie s fac) Pentru o aceeai specificare se pot realiza mai multe implementri, diferite ntre ele (n limbaje diferite, cu algoritmi diferii).

Programare procedural

15

Abstractizare i specificare
La schimbarea implementrii, programele apelante nu vor trebui modificate dac specificarea procedurii nu se schimb. n Abstractizarea prin specificare ofer o metod de proiectare a programelor ce are dou proprieti importante:
n
localizare modificabilitate.

Programare procedural

16

Abstractizare i specificare
n

Localizarea = implementarea unei abstractizri se poate face independent de implementarea altora. Avantajele oferite
posibilitatea

lucrului n echip (proceduri diferite pot fi implementate de persoane diferite) creterea lizibilitii (la nelegerea scopului unei proceduri nu este necesar cunoaterea algoritmilor folosii pentru alte proceduri apelate de ea, ci doar a semanticii acestora).
Programare procedural 17

Abstractizare i specificare
Modificabilitatea = limitarea efectelor unei modificri. n Dac implementarea unei proceduri se modific fr modificarea specificrii, atunci apelul procedurii nu se modific, n Efectul modificrii se reduce numai la implementare.
n
Programare procedural 18

Abstractizare i specificare
n

Modificabilitatea ofer o metod de control a performanei programelor:


se

realizeaz specificarea corect i complet a tuturor procedurilor unui program i se implementeaz cei mai simpli algoritmi; se execut programul, detectndu-se locurile nguste (engl. bottlenecks), adic acele proceduri care consum majoritatea timpului de execuie; se rescrie codul pentru procedurile respective, folosindu-se algoritmi mai performani.

Programare procedural

19

Abstractizare i specificare
n

Proiectarea unei proceduri presupune dou etape distincte:


Tehnici de sporire a lizibilitii unei implementri menionm:


specificarea definete ce au n comun diversele implementri ale acesteia Implementarea 2 implementri de proceduri sunt echivalente semantic dac reprezint aceeai abstractizare; ele pot diferi din punctul de vedere al algoritmilor folosii. utilizarea notaiilor de la specificarea unor parametri; utilizarea comentariilor folosirea indentrii

Programare procedural

20

Abstractizare i specificare
n

Specificarea unei proceduri conine


antetul

acesteia (partea sintactic) numele procedurii i lista de argumentelor (parametrilor), caracteriznd numele, tipul i ordinea acestora. descrierea aciunii (partea semantic). Se face prin aseriunile:
n n n

necesit (condiiile sau restriciile de utilizare; modific (parametrii de intrare care se modific); realizeaz (comportamentul procedurii).

Programare procedural

21

Abstractizare i specificare
n

Din punctul de vedere al modului n care furnizeaz rezultatul aciunii lor


Subrutin

- i materializeaz efectul n modificarea parametrilor de ieire (eventual i a unora de intrare) Funcii - furnizeaz un rezultat de un tip precizat, determinat de parametri.

Programare procedural

22

Abstractizare i specificare
Schema de specificare a unei proceduri este: nume = proc (lista arg.) [returns (rezultat)] necesit se precizeaz toate restriciile de utilizare a procedurii. modific se precizeaz argumentele care se modific. realizeaz descrie comportamentul procedurii.
n

Programare procedural

23

Abstractizare i specificare
concat = proc (a, b: string) returns (ab: string) n realizeaz la terminarea execuiei, ab este un nou ir de caractere ce conine caracterele din irul a (n ordinea apariiei), urmate de cele din irul b.

Programare procedural

24

Abstractizare i specificare
elim_dubl = proc (a: array[int]) n modific a n realizeaz suprimarea apariiei multiple ale elementelor din a. Indicele inferior al lui a rmne acelai, dar ordinea elementelor i numrul de elemente din a se pot modifica.
Programare procedural 25

Abstractizare i specificare
caut = proc (a: array[int], x: int) returns (i: int)

necesit un tabel ordonat cresctor n realizeaz dac exist un indice i pentru care x = a[i], rezultatul este i, altfel i va fi un ntreg cu valoarea mai mare dect indicele superior al lui a
n

Programare procedural

26

Abstractizare i specificare
n

Din punctul de vedere al specificrii lor, procedurile pot fi:


totale (lipsete aseriunea necesit), deci nu exist restricii de utilizare a lor pariale (este prezent aseriunea necesit).

O procedur total este definit pe tot domeniul su (considerat ca produs cartezian al domeniilor tipurilor de dat ce formeaz lista de parametri, n ordinea specificrii acestora), O procedur parial are domeniul restrns n conformitate cu cerinele impuse de aseriunea necesit.
Programare procedural 27

Proceduri

Programare procedural

28

Proceduri

Programare procedural

29

Proceduri

Programare procedural

30

Proceduri

Programare procedural

31

Proceduri

Programare procedural

32