Download presentation
Presentation is loading. Please wait.
1
Paradigme de programare Mihai Zaharia
11/11/2018 Introducere Paradigme de programare Mihai Zaharia
2
Obiectivele cursului Intelegerea principalelor paradigme de programare folosite in dezvoltarea aplicatiilor la aceasta ora. Familiarizarea cu diferite limbaje de programare care implementeaza una sau mai multe paradigme simultan Stabilirea tipurilor de probleme unde sunt folosite diverse paradigme functie de context Invatarea unor instrumente noi de programare Limbajele care vor fi folositea de-a lungul cursului sunt UML C/C++ Java, Java Beans LabWindows Python Haskel Prolog
3
Criterii folosite in evaluarea activitatii
Participarea la orele de curs si de laborator: Neparticiparea la mai mult de 14% din laboratoare conduce la refacerea disciplinei Activitatea de laborator (nu e de ajuns sa iti aduci corpul la laborator = participare) 25% Teme acasa la majoritatea laboratorelor 25% Examen final 50% (este o singura nota) defalcat astfel: Proba de laborator – ELIMINATORIE 25% cu bilete si 2 ore maxim la dispozitie. Un subiect din doua trebuie sa fie indeplinit integral pentru a se putea nota (min 5) Proba teoretica – 25% - test docimologic - contine si intrebari cu caracter practic specfice laboratorului (min 5)
4
Indatoririle studentului
Cititi materialele recomandate cu o zi inainte de fiecare curs – elaborati o lista de intrebari eventual Rezolvati temele pe acasa in saptamana in care le-ati primit Participati la cursuri (suportul de curs livrat va contine numai desenele/cod din slide-uri) Rezervati un minim de 2-4 ore de studiu individual pe saptamana pentru aceasta materie Verificati intelegerea teoretica si practica a notiunilor asimilate prin ajutarea colegilor cu raspunsuri legate de partea teoretica sau ajutor (nu tema copiata) in rezolvarea problemelor practice Ca viitori ingineri este de asteptate sa Respectati codul etic minim al IEEE
5
Sintaxa Defineste simbolurile si gramatica unui limbaj
BNF sau EBNF if-statement ::= if ( expression ) statement-block [ else statement-block ] statement-block ::= statement ';' | '{' statement ';' [...] '}' statement ::= if-statement | assignment-statement | while-statement | ...etc...
6
Strategii de implementare
11/11/2018 Compilator: Interpretor: Hibrid:
7
Compilarea unui program
file.c main() { printf("hello"); exit(0); } Cod sursa Preprocesor Analizor Lexical, etc file.obj .sym printf FE048C7138 029845AAAF ... Object Code Compilator Executable Program Link-Editor printf.obj <obj. code for printf function> file.exe <hardware instructions> Biblioteci (pentru cod obiect
8
Java: o strategie hibrida
Biblioteci Executare program ‘Escu.java Sunt ‘escu! javac Hello.class java Program sursa Java compilator byte code MVJ: Verificare byte cod - Incarcare clase - interpretor Java Runtime Environment (JRE)
9
Exemple de erori (Java):
11/11/2018 Exemple de erori (Java): public int cmmdc ( int v# ) // eroare lexicala { int z = value y = v; while ( y >= 0 ) { int t = y; y = z % y; z = t; } return y;
10
Executia instructiunilor pe un CPU
…etc…
11
Executarea unui program
11/11/2018 Executarea unui program Registri interni ll Cache RAM Contorul programului
12
Ce instructiuni de baza poate interpreta un procesor?
LOAD SAVE MOVE ADD MULT COMPARE TEST JUMP TO
13
Java code/bytecode pentru JVM
0: iconst_2 //incepe for 1: istore_1 2: iload_1 3: sipush 1000 6: if_icmpge 44 //comparatia cu 1000 9: iconst_2 //incepe for 10: istore_2 11: iload_2 12: iload_1 13: if_icmpge 31 // compartia cu i 16: iload_1 //incepe if 17: iload_2 18: irem 19: ifne 25 // comparatia cu 0 22: goto 38 25: iinc 2, 1 //j++ 28: goto 11 31: getstatic #84; //apel PrintStream 34: iload_1 35: invokevirtual #85; //PrintStream.println:(I)V 38: iinc 1, 1 // i++ 41: goto 2 44: return outer: for (int i = 2; i < 1000; i++) { for (int j = 2; j < i; j++) if (i % j == 0) continue outer; } System.out.println (i); De ce nu sunt continue numerele/adresele de la bytecode?
14
Primele incercari de abstractizare
11/11/2018 Primele incercari de abstractizare Fortran, primul limbaj de nivel înalt, @echo off cls echo Press any key to start AProgram.exe! pause > nul AProgram.exe %1 if errorlevel 1 goto error echo AProgram has finished whatever it was doing. goto end error: echo Something went wrong with Aprogram end PROGRAM EXEMPLU ! VERSION 0.0. CALL HELLO !apelarea subrutinei HELLO. CONTAINS !CONTAINS incheie program principal si incepe definirea subrutinelor SUBROUTINE HELLO !definirea corp SUBROUTINA WRITE(*,*) "HELLO WORLD!“ ! afisez "HELLO WORLD!" la CONSOLA. END SUBROUTINE HELLO ! Sfarsit SUBROUTINA END PROGRAM EXEMPLU !sfarsit PROGRAM
15
Cele mai cunoscute limbaje din generatia a treia
11/11/2018 Cele mai cunoscute limbaje din generatia a treia Functie de tipul de paradigma folosit in rezolvarea problemelor Imperative: FORTRAN, COBOL, BASIC, C, Pascal Functionale: Scheme, Lisp Limbaje Logice: Prolog Orientate obiect: Orientate obiect pure: Java, Python Orientate obiect si imperative : C++, Perl, Visual Basic
16
Limbaje din generatia a patra
11/11/2018 Acestea sunt deja orientate pe anumite tipuri de aplicatii SQL pentru baze de date Limbajul Postscript pentru descrierea unei pagini folosit de imprimante PDF pentru documente on-line HTML and PHP pentru continut World Wide Web Mathematica
17
Exemple - SQL Inserarea unui table intr-o baza de date:
11/11/2018 Exemple - SQL Inserarea unui table intr-o baza de date: INSERT INTO angajati(id, Nume, Prenume, functie) VALUES (1445, ‘John’,’Smith',’manager’); Extragere de informatii functie de un criteriu dintr-un tabel: SELECT id, Prenume, salariu FROM angajati WHERE ( Job = ‘manager’ ); SQL este considerat a fi declarativ S
18
Ce este o paradigma de programare?
11/11/2018 D1 (generală) Caz exemplar, model, prototip, situaţie ideală, structură tip, arhetip standard ş.a. D2. (în filozofie, la L.Wittgenstein) Modelele filosofice, acele "tipare" care orientează gândirea noastră în direcţii predeterminate., D3 (în filozofia limbajului) Listă de cazuri tipice de jocuri lingvistice prin care putem înţelege conceptul general..."
19
Concepts, Techniques, and Models of Computer Programming (MIT Press, 2004)
20
Paradigme de programare (wiki)
Action Agent-oriented Aspect-oriented Automata-based Component-based Flow-based Pipelined Concatenative Concurrent computing Relativistic programming Data-driven Declarative (contrast: Imperative) Constraint Dataflow Cell-oriented (spreadsheets) Reactive Intensional Functional Logic Abductive logic Answer set Constraint logic Functional logic Inductive logic End-user programming Event-driven Service-oriented Time-driven Expression-oriented Feature-oriented Function-level (contrast: Value-level) Generic Imperative (contrast: Declarative) Procedural Language-oriented Discipline-specific Domain-specific Grammar-oriented Dialecting Intentional Metaprogramming Automatic Reflective Attribute-oriented Homoiconic Template Policy-based Non-structured (contrast: Structured) Array Nondeterministic Parallel computing Process-oriented Programming in the large and small Semantic Structured (contrast: Non-structured) Modular (contrast: Monolithic) Object-oriented (OOP) By separation of concerns: Role-oriented Subject-oriented Class-based Prototype-based Recursive Value-level (contrast: Function-level) Probabilistic
21
Programarea nestructurată
11/11/2018 Bloc continuu Salt direct ASM .model small .stack 1024 . data z db ? ; n MOV MOV DS, AX MOV al, 3 ; m=3 ADD al, 5 ; m=m+5 Jmp etl etl: MOV z,al ; n=5 MOV al,z MOV ah, 4ch INT 21h end start Basic 10 rem program exemplu 20 m=3 30 m=m+5 40 goto 50 50 n=5 60 m=n 60 end
22
TIOBE Programming Community Index for August 2013
Position Aug 2013 Position Aug 2012 Programming Language Ratings Aug 2013 Delta Aug 2012 Status 1 2 Java 15.978% -0.37% A C 15.974% -2.96% 3 4 C++ 9.371% +0.04% Objective-C 8.082% -1.46% 5 6 PHP 6.694% +1.17% C# 6.117% -0.47% 7 (Visual) Basic 3.873% 8 Python 3.603% -0.27% 9 11 JavaScript 2.093% +0.73% 10 Ruby 2.067% +0.38% Perl 2.041% -0.23% 12 15 Transact-SQL 1.393% +0.54% 13 14 Visual Basic .NET 1.320% +0.44% Delphi/Object Pascal 0.918% -0.09% A-- 20 MATLAB 0.841% +0.31% 16 Lisp 0.752% -0.22% 17 19 PL/SQL 0.751% +0.14% 18 Pascal 0.620% -0.17% A- 23 Assembly 0.616% +0.11% B 22 SAS 0.580% +0.06%
23
Cmmdc Structurat in C #include <stdio.h> int main() {
11/11/2018 Cmmdc Structurat in C #include <stdio.h> int main() { int a=1574, b=56, t, cmmdc; while (b != 0) t = b; b = a % b; a = t; } cmmdc = a; printf("Greatest common divisior of %d and %d = %d\n", a, b, cmmdc); getch();
24
Procedural Java Script cmmdc
function calculate() { var x = 167; var y = 3; var output; output = cmmdc(Math.abs(x), Math.abs(y)) } function cmmdc(x, y) while (y != 0) var z = x % y; x = y; y = z; return x;
25
Functional in C #include <stdio.h> int cmmdc(int u, int v) {
if (v == 0) return u; else return cmmdc (v, u % v); } int main(void) int x =9, y=6; printf("The gcd of %d and %d is %d\n",x,y,cmmdc(x,y)); return 0;
26
Functional cmmdc in Scheme
11/11/2018 Functional cmmdc in Scheme (define (cmmdc u v) (if (= v 0) u (cmmdc v (modulo u v) ) ) Sintaxa Scheme pentru o functie: ( define ( function-name param1 param2 ... ) body of function definition )
27
Functional cmmdc in Scheme
11/11/2018 Functional cmmdc in Scheme (define (euclid) (display "enter two integers:") (let ( (u (read)) (v (read)) ) (display "the gcd of ") (display u) (display " and ") (display v) (display " is ") (display (gcd u v)) (newline) )
28
Imperativ in Java: cmmdc
public class oarescare { private static long cmmdc(long u, long v) { long remainder; if (v < 0) v = -v; while ( v != 0 ) { remainder = u % v; u = v; v = remainder; } if ( u == 0 ) return 1; // cmmdc(0,x) = 1 else return (u>0)? u : -u; // modul ... Restul clasei nu are importanta
29
Imperativ original:FORTRAN 77
INTEGER FUNCTION IGCD(U,V) INTEGER U, V, TMP DO WHILE ( V .NE. 0 ) TMP = V V = MOD(U,V) U = TMP END DO IGCD = V RETURN END PROGRAM MAIN WRITE(6,*) "Input two integers:" READ(5,*) I, J WRITE(6,100) I, J, IGCD(I,J) 100 FORMAT("GCD of ",I4," and ",I4," is ",I4) STOP
30
Oop Java cmmdc public class CMMDC { private final int value;
11/11/2018 Oop Java cmmdc public class CMMDC { private final int value; public CMMDC( int value ) { this.value = value; } public int cmmdc ( int v ) { int u = value; while ( v != 0 ) { int t = u % v; u = v; v = t; } return u;
31
Cmmdc in programare logica Prolog
11/11/2018 Cmmdc in programare logica Prolog cmmdc(U, V, U) :- V = 0. cmmdc(U, V, X) :- not (V = 0), Y is U mod V, gcd(V, Y, X). /* calcul cmmdc(288,60) */ cmmdc(288, 60, X). consequence :- a, b, c.
32
Paradigmele sunt necesare
11/11/2018 Concluzii Paradigmele sunt necesare
33
Join the club!
Similar presentations
© 2025 SlidePlayer.com Inc.
All rights reserved.