Documente Academic
Documente Profesional
Documente Cultură
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
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
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
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)
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
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
Fortran II (1958) introduce subrutine, funcii, bucle, o structur de control primitiv de tip FOR. Identificatorii sunt limitai la ase caractere
Istorie (cont.)
n
Mac Carthy Limbaj funcional pentru procesarea listelor. Este recursiv, nu este iterativ. Nu exist diferen ntre cod i date.
Istorie (cont.)
n
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
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
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
Istorie (cont.)
n
Istorie (cont.)
n
Sun
Istorie (cont.)
n
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
(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
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
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
De la cerinele specificate n faza precedent, echipa care realizeaz aceast etap (proiectanii software) realizeaz specificaiile de proiectare, Se identific
Metodologia de proiectare utilizat n aceast faz are o mare importan pentru alegerea limbajului de programare utilizat n faza imediat urmtoare.
Implementarea
n n
de uniti de program corespunztoare modulelor descrise n specificaiile de proiectare editarea documentaiei corespunztoare.
n
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
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
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
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.)
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
Triunghiul compromisurilor
Resurse
Deadline
Funcionalitate
Programare procedural
Elemente lexicale i de sintax ale limbajelor de programare
Curs 3
Programare procedural
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
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
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
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
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
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
Constant caracter = unul sau mai multe caractere incluse ntre apostroafe (a, 1)
Tipul
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
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
Programare procedural
27
Programare procedural
Traducerea programelor
Curs 4
Programare procedural
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
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
Programare procedural
10
SINTEZ
Cod intermediar
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
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
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
se continu cu ignorarea elementului ce conine eroarea; Se ncearc corectarea erorii Se abandoneaz procesul de traducere.
Programare procedural
17
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
Comunicarea prin:
Parametri, n Variabile globale.
n
Programare procedural
21
Program - subprogram
n
2 pri
partea
n
partea
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
Multitasking, multithreading
Programare procedural
26
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
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
Programare procedural
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
Programare procedural
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
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
Programare procedural
Declaraii de constante
n n n
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
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
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
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
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
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
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
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:
Programare procedural
25
Tip anonim
Programare procedural 26
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
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
Declaraii de tipuri n C
typedef int * Tf(); Tf f;
n n
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
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
Structural
nume set
Programare procedural
Definirea atributelor
declarativ
(se folosesc instr. de declarare) implicit (prin convenii n ceea ce privete numele, atribuirea de valori)
6
Programare procedural
Atribute eseniale:
Domeniul
Programare procedural
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
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
Variabilele globale
alocate
Programare procedural
11
Variabile dinamice
durata
de via controlat de utilizator alocarea i dealocarea se face prin instruciuni specifice fiecrui limbaj
Programare procedural
12
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
Programare procedural
15
Programare procedural
17
Programare procedural
18
Atribute Y
Variabile aliate
Programare procedural
19
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
Programare procedural
Punctul de declarare
n
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
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
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
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
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 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
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
Programare procedural
12
n n n
Programare procedural
13
Declararea implicit
Instruciunile de declarare apar, de regul, n partea de nceput (de declaraii) a blocurilor, subprogramelor sau modulelor (exc. Java, C++, C#)
Programare procedural 14
de legare a variabilei (intern sau extern) modul de alocare modul de transmitere a parametrilor n subprograme
Programare procedural
15
pentru tipuri numerice string-ul vid pentru iruri de caractere valoarea NULL pentru pointeri
Programare procedural 16
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
Exemple:
int
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
Tipuri de date
Programare procedural 2
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
Exemple:
int int int
Operaii permise:
i
i; // variabil ntreag *p; // pointer la ntreg; *const cp = &i; // pointer constant la variabila ntreg i;
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
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
Programare procedural
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
(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
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
Programare procedural
14
Tipuri fundamentale
n
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
ir bii ce conine numai 0 - false un ir de bii n care este unul nenul - true
n
Tipurile aritmetice
tipuri
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
Programare procedural
Tipuri fundamentale
n n
sau unsigned
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};
Programare procedural
22
Tipuri fundamentale
n
Tipurile reale:
float double long
double.
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
iruri de caractere
n
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
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
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
Programare procedural
Tipul pointer
Pointerii = flexibilitatea n execuia programului n Programatorul are libertate de a
n
Controla
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
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
Programare procedural
10
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
++,
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
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
(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
(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
selectarea
n
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
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
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
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
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
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
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
Programare procedural
44
Exemplu:
union
sizeof(X) ?
X.i X.f X.psir
Programare procedural
45
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
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
Operatori
n
Programare procedural
Operatori
n
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
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).
2. Unari
de la dreapta la stnga
10
4. Aditivi 5. Deplasare
de la stnga la dreapta
de la stnga la dreapta
Programare procedural
11
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.
Programare procedural
12
de la dreapta la stnga
15. Virgul
de la stnga. la dreapta
Programare procedural
13
Programare procedural
14
n n n n
Operatorul de determinare a domeniului de vizibilitate (engl. scope resolution operator) Conversie explicit Atribuire Condiional Operatorul virgul.
Programare procedural
15
(i logic), || (sau logic), ! (negaie logic operator unar). Opereaz asupra unor ntregi iar rezultatul este zero (false) sau unu (true).
&&
18
Programare procedural
Programare procedural
19
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
>> deplasare stnga, dreapta &, |, ^ - SI, SAU, SAU EXCLUSIV (XOR) ~ negaie
Programare procedural 22
* p = (char*)0777;
O conversie de tip trebuie evitat dac nu este necesar pentru c ngreuneaz nelegerea programelor
Programare procedural 23
Programare procedural
25
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
Programare procedural
27
Operatorul virgul
n n
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 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
Programare procedural
Instruciuni
n
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
Programare procedural
Instruciunea de atribuire
n
x = x + 1;
Programare procedural
Programare procedural
10
Programare procedural
12
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
compus nu conine declaraii Blocul poate conine declaraii (este o unitatea de vizibilitate)
Programare procedural
15
Instruciuni condiionale
expresie trebuie s fie de tip aritmetic sau pointer n Dac expresie este diferit de zero
n
atunci
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
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
Programare procedural
21
Instruciuni de ciclare
n
Din punctul de vedere al locului unde se face testarea condiiei pentru reluarea buclei:
cu
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
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
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
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
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
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
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
- 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
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