Programare Procedurala

31
Programare procedurală Curs 1

description

Programare Procedurala

Transcript of Programare Procedurala

Page 1: Programare Procedurala

Programare procedurală

Curs 1

Page 2: Programare Procedurala

PP - Definiţie

PP este o paradigmă de programare bazată pe conceptul de apel de procedură. (rutină, subrutină, metodă,funcţie)

P = o serie de paşi computaţionali care trebuie parcurşi.

Orice P poate fi apelată oriunde în timpul execuţiei unui program inclusiv din interiorul ei (apel recursiv).

Page 3: Programare Procedurala

Beneficii PP

Refolosirea codului Controlul execuţiei este mai simplu (nu e

nevoie de GOTO, JUMP care duc la “spaghetti code”)

Programul devine modular şi structurat

Page 4: Programare Procedurala

Definiţii

Limbaj de programare: notaţie sistematică prin care este descris un proces de calcul

Procesul de calcul este constituit dintr-o mulţime de paşi pe care o maşină îi execută pentru a rezolva o problemă

Limbaj maşină: limbajul nativ al unui computer

Page 5: Programare Procedurala

Limbaj maşină

Operaţii aritmetice şi logice, Operaţii de intrare-ieşire Funcţii speciale, funcţii de control Strâns legat de arhitectură000010101111000000101111111111110010000000000101

Page 6: Programare Procedurala

Limbaj de asamblare

Atribuie nume simbolice (mnemonici) codificărilor operaţiilor maşinii şi locaţiilor de memorie asociate

LOAD IADD JSTORE K

K := I + J

Page 7: Programare Procedurala

Niveluri ale limbajelor

Limbaje de nivel scăzut (lb. maşină, asm) Limbaje de nivel înalt (C, C++, C# etc.) Traducerea este realizată de translatoare

(compilator, asamblor) Traducerea duce la scăderea performanţei Lb. nivel înalt portabilitate

Page 8: Programare Procedurala

Paradigme de programare

Colecţii individualizate de caracteristici de evaluare şi criterii de abstractizare care determină şi diferenţiază clasele de limbaje de programare

Criterii: structura programuluinoţiunea de stare a execuţieimetodologia programării

Page 9: Programare Procedurala

Paradigme de programare

1. Programare nestructurată (GOTO)

2. Programare structurată

3. Programarea procedurală (ALGOL60)

4. Programare funcţională (Lisp, Miranda, ML, Haskell)

5. Programare imperativă

Page 10: Programare Procedurala

Paradigme de programare

6. Programare declarativă (Prolog, Haskell, SQL, WSDL)

7. Programare logică (Prolog)

8. Programare bazată pe obiecte şi orientată pe obiecte (Smalltalk, C++, Java, C#)

9. Programare concurentă şi distribuită

10. Programare la nivelul bazelor de date (SQL)

Page 11: Programare Procedurala

Generaţii de limbaje

1954-1958 Limbajele de programare de prima generaţie (FORTRAN I, ALGOL 58).

Acestea au făcut pasul decisiv de la asm la lb de nivel înalt.

Rolul lor primordial a constat în promovarea şi dezvoltarea conceptelor ce stau la baza limbajelor de programare de nivel înalt precum şi a implementării lor.

Page 12: Programare Procedurala

Generaţii de limbaje (cont.)

1959-1961 Limbaje de generaţia a doua (ALGOL60, FORTRAN II, Cobol, Lisp)

Sunt considerate limbaje stabile, durabile, ALGOL60 a avut o influenţă imensă în dezvoltarea limbajelor Pascal, PL/1, Simula şi Ada.

Page 13: Programare Procedurala

Generaţii de limbaje (cont.) 1962-1971 Limbaje de generaţia a treia (PL/1, ALGOL68,

Pascal, Simula) au reprezentat un pas înainte, succesul lor nu se poate compara cu cel al limbajelor de

generaţia a doua. C.A.R. Hoare „ALGOL60 reprezintă un pas înainte faţă de

succesorii(!) săi”. Limbajul PL/1 a combinat elemente de FORTRAN, ALGOL şi

Cobol rezultând un limbaj puternic, dar mult prea complex, dificil de învăţat şi de implementat.

Limbajul Pascal, succes din punct de vedere didactic, nu a fost considerat suficient de robust pentru utilizarea la scară industrială. (Delphi)

Page 14: Programare Procedurala

Generaţii de limbaje (cont.)

1972-1979 Limbaje de generaţia a patra (CLU, CSP, Ada, Smalltalk)

Au avut o răspândire şi mai redusă decât cele de generaţia a treia, justificând pe bună dreptate denumirea acestei perioade drept „gol de generaţie” (generation gap).

accentul cade pe structurare. La nivel micro acest lucru s-a făcut prin eliminarea instrucţiunilor

goto la nivel macro s-a pus mare accent pe modularizare,

abstractizarea datelor

Page 15: Programare Procedurala

Generaţii de limbaje (cont.)

1980-1990 Paradigme ale limbajelor de programare

Această perioadă se caracterizează printr-o intensă activitate de cercetare, concentrată pe studiul paradigmelor asociate claselor de limbaje.

limbaje funcţionale, logice, orientate obiect şi distribuite

Page 16: Programare Procedurala

Istoria lb. de programare

Primul limbajAda Lovelace scrie programe pentru proiectul

motor diferenţial 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 înregistrări)

Page 17: Programare Procedurala

Istorie (cont.)

Asamblare Asambloarele au apărut o dată cu primele

calculatoare. Acestea asociază un nume simbolic codului la nivel maşină, de ex:  Add bx, 4cmp [adr], 3     jmp address 

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

Page 18: Programare Procedurala

Istorie (cont.)

FOTRAN – FORmula TRANslator 1954-1958John Backus şi alţi cercetători de la

IBM Limbaj dedicat calculelor matematice

Fortran II (1958) introduce subrutine, funcţii, bucle, o structură de control primitivă de tip FOR. Identificatorii sunt limitaţi la şase caractere

Page 19: Programare Procedurala

Istorie (cont.)

LISP – LISt Processing1958-1960 Mac Carthy Limbaj funcţional pentru procesarea listelor. Este recursiv, nu este iterativ. Nu există diferenţă între cod şi date.

Page 20: Programare Procedurala

Istorie (cont.)

ALGOL - 1960 / Algol W - 1966 / Algol 68 ALGOrithmic Language limbaj universal independent de maşină Introduce utilizarea gramaticilor BNF (Backus Naur Form) blocurile de instrucţiuni şi variabilele locale în cadrul unui

bloc Recursivitatea, tablouri dinamice instrucţiunea IF THEN ELSE, FOR, simbolul := pentru

atribuire (folosit mai apoi în Pascal), instrucţiunea SWITCH cu GOTO, indicatori BEGIN, END şi ciclu WHILE

Page 21: Programare Procedurala

Istorie (cont.)

Cobol - 1960 COmmon Business Oriented Langage.Definit de CODASYL, COnference on DAta SYsystems Languages.

Page 22: Programare Procedurala

Istorie (cont.) Basic – 1964

Beginner’s All-purpose Symbolic Instruction Code John Kemeny, Thomas Kurtz Uşor de învăţat Bill Gates, Paul Allen, QuickBasic – Altair (4KB) Microcomputerele au fost furnizate cu Basic în ROM până la

sfârşitul 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)

Page 23: Programare Procedurala

Istorie (cont.)

Logo – 66W Fuerzeig, S Papert, Folosit pentru a-i învăţa pe copii programare. Asemănător cu Lisp Se bazează pe mişcarea unei broaşte

ţestoase pe ecran.

Page 24: Programare Procedurala

Istorie (cont.) Pascal – 1970 Niklaus Wirth.

A fost proiectat pentru a simplifica crearea compilatoarelor şi pentru îndruma procesul de învăţare a programării spre programarea structurată.

Includea un mediu pentru dezvoltare de aplicaţii complet, un principiu folosit cu succes mai târziu î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 apărut în 1983. Rapid, IDE complet -> succes instantaneu.

Structurile de control asemănătoare cu cele din C.

Page 25: Programare Procedurala

Istorie (cont.) C – 1973 succesorul lui B, care la rândul lui este succesorul lui

BCPL (Dennis Ritchie). A fost destinat pentru programarea sistemului de operare UNIX, Portabil şi rapid Declaraţiile int i, char b au fost create în C. Ulterior au apărut şi alte tipuri. Limbajul C a simplificat scrierea prin folosirea acoldelor. ++ exista şi în limbajul B. Cuvântul 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 până în 1980.

Page 26: Programare Procedurala

Istorie (cont.)

Sql - 1970+Standard Query Language IBM Limbaj pentru interogarea bazelor de

date relaţionale. SELECT * from table where ... INSERT INTO .... UPDATE ...

Page 27: Programare Procedurala

Istorie (cont.)

C++ 1981-1986 Bjarne Stroustrup.Versiune  a limbajului C orientată pe obiecte. Introduce supraîncărcarea operatorilor. Metodele pot fi inline. Implementată moştenirea şi şabloanele (clase

sau funcţii generice).Polimorfismul prin funcţii virtuale

Page 28: Programare Procedurala

Istorie (cont.) Java – 1994 James Gosling,

Sun 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 decât C++: memoria este gestionată

automat, nu există pointeri, moştenire multiplă, supraîncărcarea

operatorilor dar include multi-tasking.

Page 29: Programare Procedurala

Istorie (cont.) PHP – 1995 Personal Home Pages Hypertext

Processor Rasmus Lerdorf Limbaj script mutliplatformă, ce se include

în HTML. Asemănător cu C dar nu este tipizat. Variabilele se prefixează cu $. Interpretorul prelucrează pagina html ce include instrucţiuni

php şi o transformă într-o pagină html pură. Biblioteca de funcţii permite crearea de pagini web

dinamice. Microsoft foloseşte ASP (asemănător cu Basic)

Page 30: Programare Procedurala

Istorie (cont.) 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. foloseşte o notaţie grafică pentru a proiecta software. Se fac diagrame care exprimă obiecte şi interacţiunile dintre

acestea. Un model este realizat din vizualizări şi combinarea lor descriu

un sistem complet. Este limbaj pentru specificarea, vizualizarea, construirea şi

documentarea proiectelor sotware intense.

Page 31: Programare Procedurala

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

Anders Hejlsberg / Microsoft. Principalul limbaj din platforma .NET Îmbunătăţiri: garbage collector, nu are pointeri, interfeţe, 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 ataşate elementelor

programului şi folosite la execuţie Proprietăţi (get/set) Foreach pentru parcurgerea unor liste de obiecte Delegaţi (înlocuiesc pointerii la funcţii din C)