Vous êtes sur la page 1sur 42

Paradigme de Programare

S.l. dr. ing. Andrei Olaru


slides: Mihnea Muraru si Andrei Olaru
Catedra de Calculatoare

2013 2013, semestrul 2

Organizare

Obiective

Exemplu

Paradigme

Limbaje 1:1


Paradigme de Programare Andrei Olaru si Mihnea Muraru

Cursul 1 Introducere

Organizare

Obiective

Exemplu

Paradigme

Limbaje 1:2


Paradigme de Programare Andrei Olaru si Mihnea Muraru

Cuprins

Organizare Obiective Exemplu introductiv Paradigme de programare Limbaje de programare

Organizare

Obiective

Exemplu

Paradigme

Limbaje 1:3


Paradigme de Programare Andrei Olaru si Mihnea Muraru

Organizare

Organizare

Obiective

Exemplu

Paradigme

Limbaje 1:4


Paradigme de Programare Andrei Olaru si Mihnea Muraru

Resurse de baza
unde gasesc informat , ii?

http://elf.cs.pub.ro/pp/
Regulament: http://elf.cs.pub.ro/pp/regulament Teme s , i forumuri: http://cs.curs.pub.ro (n curnd)

Organizare

Obiective

Exemplu

Paradigme

Limbaje 1:5


Paradigme de Programare Andrei Olaru si Mihnea Muraru

Notare
Laborator: 1p (cu bonusuri, max 1p total) Teme: 4p (4 1p) (cu bonusuri, max 6p pe parcurs) Teste la curs: 0,5p Test din materia de laborator: 0,5p Examen: 4p

Organizare

Obiective

Exemplu

Paradigme

Limbaje 1:6


Paradigme de Programare Andrei Olaru si Mihnea Muraru

Laborator
Accent pe lucrul efectiv

Parcurgerea documenta tiei naintea laboratorului

Test la nceputul laboratorului

Organizare

Obiective

Exemplu

Paradigme

Limbaje 1:7


Paradigme de Programare Andrei Olaru si Mihnea Muraru

Obiective

Organizare

Obiective

Exemplu

Paradigme

Limbaje 1:8


Paradigme de Programare Andrei Olaru si Mihnea Muraru

Cont , inutul cursului


Ce vom studia?
1

Diverse perspective conceptuale asupra no tiunii modele de calculabilitate de calculabilitate efectiva

Inuen ta perspectivei alese asupra procesului de modelare s i rezolvare a problemelor paradigme de programare

Limbaje de programare aferente paradigmelor, cu accent pe aspectul comparativ

Organizare

Obiective

Exemplu

Paradigme

Limbaje 1:9


Paradigme de Programare Andrei Olaru si Mihnea Muraru

De ce?
Just a thought

I suppose it is tempting, if the only tool you have is a hammer, to treat everything as if it were a nail. The law of instrument Abraham Maslow

Organizare

Obiective

Exemplu

Paradigme

Limbaje 1 : 10


Paradigme de Programare Andrei Olaru si Mihnea Muraru

De ce?
Mai concret

Largirea spectrului de abordare a problemelor Identicarea perspectivei naturale de modelare a unei probleme s i alegerea limbajului adecvat tii de nva tare a noi limbaje Sporirea capacita tile s s i de adaptare la particularita i diferen tele dintre acestea Exploatarea mecanismelor oferite de limbajele de programare
Organizare Obiective Exemplu Paradigme Limbaje 1 : 11


Paradigme de Programare Andrei Olaru si Mihnea Muraru

Limbaje de programare 50-00


Un pic de istorie

Organizare

Obiective

Exemplu

Paradigme

Limbaje 1 : 12


Paradigme de Programare Andrei Olaru si Mihnea Muraru

tii Limitele calculabilita


Ce putem calcula s , i cum

Teza Church-Turing: efectiv calculabil = Turing calculabil

Echivalen ta celorlalte modele de calculabilitate s i a multor altora cu Ma sina Turing

vreun model mai expresiv? Exista

Organizare

Obiective

Exemplu

Paradigme

Limbaje 1 : 13


Paradigme de Programare Andrei Olaru si Mihnea Muraru

Modele de calculabilitate
Modele paradigme limbaje

Mas Paradigma imperativa , ina Turing


Procedurala C Orientata-obiect Java, C++

Calcul Lambda Paradigma funct Scheme, , ionala Haskell Mas Paradigma asociativa CLIPS , ina Markov Mas Paradigma logica Prolog , ina FOL

Organizare

Obiective

Exemplu

Paradigme

Limbaje 1 : 14


Paradigme de Programare Andrei Olaru si Mihnea Muraru

Exemplu

Organizare

Obiective

Exemplu

Paradigme

Limbaje 1 : 15


Paradigme de Programare Andrei Olaru si Mihnea Muraru

problema O prima

Exemplul 3.1.
se determine elementul minim dintr-un vector. Sa

Organizare

Obiective

Exemplu

Paradigme

Limbaje 1 : 16


Paradigme de Programare Andrei Olaru si Mihnea Muraru

Modelare imperativa
Varianta procedurala

minList(L, n) 1: min L[1] 2: i 2 3: while i n do 4: if L[i ] < min then 5: min L[i ] 6: end if 7: i i +1 8: end while 9: return min

Organizare

Obiective

Exemplu

Paradigme

Limbaje 1 : 17


Paradigme de Programare Andrei Olaru si Mihnea Muraru

Modelare func tionala


Ideea: minList(L) = if(eq(length(L), 1), head(L), min(head(L), minList(tail(L)))) Scheme:
1 2 3 4

( define minList ( lambda ( l ) ( if (= ( length l ) 1) ( car l ) ( min ( car l ) ( minList ( cdr l ) ) ) ) ) )

Haskell:
1 2

minList [ h ] = h minList ( h : t ) = min h ( minList t )

Organizare

Obiective

Exemplu

Paradigme

Limbaje 1 : 18


Paradigme de Programare Andrei Olaru si Mihnea Muraru

Modelare asociativa
Ideea: minList(L) = m L | x L x < m CLIPS:
1 2 3 4 5 6 7 8 9 10 11

( deffacts ( elem ( elem ( elem ( elem

facts 3) 2) 0) 1) )

( defrule minList ( elem ? m ) ( not ( elem ? x & :( < ? x ? m ) ) ) => ( assert ( min ? m ) ) )

Organizare

Obiective

Exemplu

Paradigme

Limbaje 1 : 19


Paradigme de Programare Andrei Olaru si Mihnea Muraru

Modelare logica
Axiome:
1 2 3 4

x y = min(x , y , x ) y < x = min(x , y , y ) minList([m], m) minList([y |t ], n) min(x , n, m) = minList([x , y |t ], m)

Prolog:
1 2 3 4 5

min (X , Y , X ) : - X = < Y . min (X , Y , Y ) : - Y < X . minList ([ M ] , M ) . minList ([ X , Y | T ] , M ) : - minList ([ Y | T ] , N ) , min (X ,N , M ) .

Organizare

Obiective

Exemplu

Paradigme

Limbaje 1 : 20


Paradigme de Programare Andrei Olaru si Mihnea Muraru

Paradigme

Organizare

Obiective

Exemplu

Paradigme

Limbaje 1 : 21


Paradigme de Programare Andrei Olaru si Mihnea Muraru

de programare? Ce este o paradigma


maniera Un set de conven tii ce dirijeaza n care gndim programele modul n care: Ea dicteaza
datele reprezentam datele respective opera tiile prelucreaza

a cu sintaxa limbajului! Atent , ie! Paradigma nu are legatur diferent Exista , e importante ntre paradigmele de programare. Vom discuta despre efecte laterale, referent s transparent ,a , iala , i gestionarea funct , iilor n limbaj.
Organizare Obiective Exemplu Paradigme Limbaje 1 : 22


Paradigme de Programare Andrei Olaru si Mihnea Muraru

Efecte laterale (side effects)


Deni tie

Exemplul 4.1.
n expresia 2 + (i = 3), subexpresia (i = 3): produce valoarea 3, conducnd la rezultatul 5 al ntregii expresii are efectul lateral de ini tializare a lui i cu 3

Denit , ia 4.2 (Efect lateral).


valoarea pe care o produce, o expresie Pe lnga sau o func tie poate modica starea globala. Inerente n situa tiile n care programul cu exteriorul I/O! interac tioneaza
Organizare Obiective Exemplu Paradigme Limbaje 1 : 23


Paradigme de Programare Andrei Olaru si Mihnea Muraru

Efecte laterale (side effects)


Consecin te

Exemplul 4.3.
n expresia x-- + ++x, cu x = 0: evaluarea stnga dreapta produce 0 + 0 = 0 evaluarea dreapta stnga produce 1 + 1 = 2 nlocuim cele doua subexpresii daca ob cu valorile pe care le reprezinta, tinem
x + (x + 1) = 0 + 1 = 1

Adunare necomutativa?! Importan ta ordinii de evaluare! Dependen te implicite, put i posibile , in lizibile s generatoare de bug-uri.
Organizare Obiective Exemplu Paradigme Limbaje 1 : 24


Paradigme de Programare Andrei Olaru si Mihnea Muraru

referen Transparen ta tiala


Deni tie

Exemplul 4.4.
1

Zeus este ul lui Cronos


Zeus este Jupiter n mitologia romana Jupiter este ul lui Cronos aceea si semnica tie

Zeus este ul lui Cronos Ionel s tie ca


Jupiter este ul lui Cronos Ionel s tie ca semnica alta tie

referen Denit ta tiala). , ia 4.5 (Transparen


Confundarea unui obiect cu referin ta la acesta cazul 1.

Organizare

Obiective

Exemplu

Paradigme

Limbaje 1 : 25


Paradigme de Programare Andrei Olaru si Mihnea Muraru

referen Transparen ta tiala


Expresii

referen o unica Expresie transparenta tial: poseda pastrnd valoare, cu care poate substituita, semnica tia programului.

Exemplul 4.6.
x-- + ++x nu, valoarea depinde de ordinea de evaluare

evaluari consecutive vor produce x = x + 1 nu, doua rezultate diferite statica etc.) x ar putea , n func tie de statutul lui x (globala,

n prezen Absenta ta efectelor laterale!

Organizare

Obiective

Exemplu

Paradigme

Limbaje 1 : 26


Paradigme de Programare Andrei Olaru si Mihnea Muraru

referen Transparen ta tiala


Func tii

referen Func tie transparenta tial: rezultatul ntors depinde exclusiv de parametri

Exemplul 4.7.
int g = 0; int transparent ( int x ) { return x + 1; } int opaque ( int x ) { return x + ++ g ; }

opaque(3) - opaque(3) != 0! Func tii transparente: log, sin etc. Func tii opace: time, read etc.
Organizare Obiective Exemplu Paradigme Limbaje 1 : 27


Paradigme de Programare Andrei Olaru si Mihnea Muraru

referen Transparen ta tiala


Avantaje

Lizibilitatea codului a corectitudinii programului Demonstrarea formala Optimizare prin reordonarea instruc tiunilor de catre compilator s i prin caching prin eliminarea modicarilor Paralelizare masiva, concurente

Organizare

Obiective

Exemplu

Paradigme

Limbaje 1 : 28


Paradigme de Programare Andrei Olaru si Mihnea Muraru

Func tii ca valori de prim rang


Deni tie

Denit , ia 4.8 (Valoare de prim rang).


O valoare ce poate : dinamic creata ntr-o variabila stocata ca parametru unei func trimisa tii dintr-o func ntoarsa tie

Exemplul 4.9.
se scrie func Sa tia compose, ce prime ste ca parametri alte 2 func tii, f s i g, s i ntoarce func tia ob tinuta prin compunerea lor, f g.
Organizare Obiective Exemplu Paradigme Limbaje 1 : 29


Paradigme de Programare Andrei Olaru si Mihnea Muraru

Func tii ca valori de prim rang: Compose


C
1 2 3

int compose ( int (* f ) ( int ) , int (* g ) ( int ) , int x ) { return (* f ) ((* g ) ( x ) ) ; }

n C, func tiile nu sunt valori de prim rang.

Organizare

Obiective

Exemplu

Paradigme

Limbaje 1 : 30


Paradigme de Programare Andrei Olaru si Mihnea Muraru

Func tii ca valori de prim rang:


Java
1 2 3 4 5 6 7 8 9 10 11 12 13

abstract class Func <U , V > { public abstract V apply ( U u ) ; public <T > Func <T , V > compose ( final Func <T , U > f ) { final Func <U , V > outer = this ; return new Func <T , V >() { public V apply ( T t ) { return outer . apply ( f . apply ( t ) ) ; } }; } }

n Java, func tiile nu sunt valori de prim rang.


Organizare Obiective Exemplu Paradigme Limbaje 1 : 31


Paradigme de Programare Andrei Olaru si Mihnea Muraru

Func tii ca valori de prim rang: Compose


Scheme & Haskell

Scheme:
1 2 3 4

( define compose ( lambda ( f g ) ( lambda ( x ) (f (g x)))))

Haskell:
1

compose = (.)

n Scheme s i Haskell, func tiile sunt valori de prim rang.

Organizare

Obiective

Exemplu

Paradigme

Limbaje 1 : 32


Paradigme de Programare Andrei Olaru si Mihnea Muraru

Func tii ca valori de prim rang


Aplica tii par tiale

Exemplul 4.10.
( define sum-uncurry ( lambda ( x y ) (+ x y ) ) )
1 2 3 4 5

( define sum-curry ( lambda ( x ) ( lambda ( y ) (+ x y ) ) ) ) (( sum-curry 1) 2) ( define sum-with-1 ( sum-curry 1) ) ( sum-with-1 2)

( sum-uncurry 1 2)

6 7 8 9

10

Organizare

Obiective

Exemplu

Paradigme

Limbaje 1 : 33


Paradigme de Programare Andrei Olaru si Mihnea Muraru

Func tii ca valori de prim rang


Func tii de ordin superior (func tionale)

Denit tionala). , ia 4.11 (Func


Func tie care ia func tii ca parametru s i/sau ntoarce o func tie.

Exemplul 4.12.
1 2 3 4 5 6

( define l ' (1 2 3) ) (( compose car cdr ) l ) ( map list l ) ( filter odd ? l ) ( foldl + 0 l ) ; ; ; ; 2 ((1) (2) (3) ) (1 3) 6

Organizare

Obiective

Exemplu

Paradigme

Limbaje 1 : 34


Paradigme de Programare Andrei Olaru si Mihnea Muraru

Paradigma imperativa
Caracteristici

Orientare spre ac tiuni s i efectele acestora Cum se ob tine solu tia Atribuirea ca opera tie fundamentala Efecte laterale permise, compromi tnd transparen ta referen tiala Secven tierea instruc tiunilor a ca mul Programe cu stare, vazut timea valorilor variabilelor la un anumit moment, ce pot inuen ta aceleia rezultatul evaluarii si expresii
Organizare Obiective Exemplu Paradigme Limbaje 1 : 35


Paradigme de Programare Andrei Olaru si Mihnea Muraru

Paradigma func tionala


Caracteristici

a n sens matematic, exclusiv prin Func tia vazut valoarea pe care o calculeaza Func tii ca valori de prim rang Interzicerea efectelor laterale, pentru eliminarea la nivel dependen telor implicite modularitate sporita, de func tie! Promovarea transparen tei referen tiale, alaturi de avantajele acesteia Diminuarea importan tei ordinii de evaluare a stare Programe far
Organizare Obiective Exemplu Paradigme Limbaje 1 : 36


Paradigme de Programare Andrei Olaru si Mihnea Muraru

Paradigma func tionala


Just a thought

Its really clear that the imperative style of programming has run its course. Were sort of done with that. However, in the declarative realm we can speculate a 10x improvement in productivity in certain domains. Anders Hejlsberg C# Architect

Organizare

Obiective

Exemplu

Paradigme

Limbaje 1 : 37


Paradigme de Programare Andrei Olaru si Mihnea Muraru

s Paradigmele asociativa i logica


Caracteristici

tilor solu Accent pe formularea proprieta tiei Ce trebuie ob tinut (vs. cum la imperativa) tuire nainte/napoi Fapte, reguli, nlan Orientare spre date

Organizare

Obiective

Exemplu

Paradigme

Limbaje 1 : 38


Paradigme de Programare Andrei Olaru si Mihnea Muraru

Aplica tii ale diverselor paradigme


n inteligen Manipulare simbolica ta articala
Sisteme expert Demonstrarea de teoreme

Calcul paralel a corectitudinii programelor Demonstrarea automata modelului mai simplu de execu s i testare, datorita tie Adoptare a paradigmei func tionale n limbajele noi: C#, F#, Python, JavaScript, Clojure (JVM), Scala Erlang (Ericsson) limbaj func tional utilizat n telecomunica tii, economie, comer t electronic
Organizare Obiective Exemplu Paradigme Limbaje 1 : 39


Paradigme de Programare Andrei Olaru si Mihnea Muraru

Limbaje

Organizare

Obiective

Exemplu

Paradigme

Limbaje 1 : 40


Paradigme de Programare Andrei Olaru si Mihnea Muraru

aturi Cteva tras


Paradigma
Model de abordare a problemei Model de execut , ie / calculabilitate

Tipare
Statica/dinamic a Tare/slaba

Ordinea de evaluare a parametrilor func tiilor


Aplicativa Normala

Legarea variabilelor
Statica Dinamica
Organizare Obiective Exemplu Paradigme Limbaje 1 : 41


Paradigme de Programare Andrei Olaru si Mihnea Muraru

Sfrs , itul primului curs


, at Ce am nvat
Paradigme de programare, limbaje, modele de

calculabilitate, The law of instrument, efect lateral, referent valori de prim rang, Scheme, transparent ,a , iala, Haskell, Prolog, CLIPS.

Organizare

Obiective

Exemplu

Paradigme

Limbaje 1 : 42


Paradigme de Programare Andrei Olaru si Mihnea Muraru

Vous aimerez peut-être aussi