Programare Procedurala
-
Upload
angelica-jessica -
Category
Documents
-
view
26 -
download
5
description
Transcript of Programare Procedurala
Programare procedurală
Curs 1
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).
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
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
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
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
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
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
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ă
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)
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.
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.
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)
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
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
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)
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.
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
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.
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
Istorie (cont.)
Cobol - 1960 COmmon Business Oriented Langage.Definit de CODASYL, COnference on DAta SYsystems Languages.
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)
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.
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.
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.
Istorie (cont.)
Sql - 1970+Standard Query Language IBM Limbaj pentru interogarea bazelor de
date relaţionale. SELECT * from table where ... INSERT INTO .... UPDATE ...
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
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.
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)
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.
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)