Sunteți pe pagina 1din 18

PARADIGME DE PROGRAMARE

Fundamentele Limbajelor de Programare

VANCEA Alexandru

Departamentul de Informatică
Universitatea Babeş-Bolyai

Cluj-Napoca, 2018
Cuprins

Paradigma Programarii Procedurale şi Structurale

Paradigma Programarii Bazate Obiect şi Orientate Obiect

Paradigma Programarii Paralele


Taxonomia lui Flynn

Paradigma Programarii Funcţionale

Paradigma Programarii Logice

Paradigma Programarii la Nivelul Bazelor de Date

Paradigma Programarii Bazate pe Eventimente (event-driven)

Paradigma Programarii Bazate Web (web-based)


Paradigma Programarii Procedurale şi Structurale

Caracterizată prin faptul că un program este privit ca o mulţime


ierarhică de blocuri şi proceduri.
Bloc = Instrucţiune Compusă + Declaraţii Locale (Variabile)

Exponenţi:
Wirth Languages: ’60 Algol, ’70 Pascal, ’80 Modula, ’90 Oberon,
’00 Delphi
Paradigma Programarii Bazate Obiect şi Orientate Obiect

Un program este constituit dintr-o colecţie de obiecte care


interacţionează, fiecare obiect fiind ı̂nzestrat cu un comportament
propriu şi bine definit.

Exponenţi:
Simula 1967 (introduce conceptul de clasă şi de corutină)
Pure Object Oriented Languages: Smalltalk, Eiffel
Non-Pure Object Oriented Languages: C++, Java, C#, Python
Paradigma Programarii Paralele 1/7

Execuţia unui program este constituită din acţiuni multiple posibil


a fi executate ı̂n paralel pe una sau mai multe maşini. Execuţia
acestor acţiuni poate fi independentă (execuţie pur paralelă) sau
acţiunile pot depinde una de alta (execuţie concurentă), situaţie ı̂n
care este nevoie de primitive de sincronizare şi comunicare (fork,
join, wait, mutex, semaphore)

Exponenţi:
I ’60 CSP (Communicating Sequential Processes) - dezvoltat de
C.A.R. Hoare
I extensii paralele concurente şi distribuite ale limbajelor
imperative: Concurrent C, Parallel C, Super Pascal
I PVM (Parallel Virtual Machine) - suport pentru C, Fortran,
Java
I Occam (transputere)
Paradigma Programarii Paralele 2/7

Trecerea spre paralelism este o necesitate obiectivă pentru evoluţia


ı̂n informatică şi se poate face sub două forme:
I Prin dezvoltarea de algoritmică paralelă de la zero şi folosirea
de limbaje de programare paralele dezvoltate special ı̂n acest
sens (building from scratch)
I Prin construirea de aplicaţii specializate (source-to-source
compilers) care să realizeze paralelizarea automată (data
dependence analysis)

Pentru obţinerea unui grad cât mai ridicat de paralelism la nivelul


unui program este esenţială aducerea programului sursă la forma
SAF (Single Assignment Form), adică fiecare variabilă din program
să aibă asociată o unică valoare (să fie atribuită o singură dată)
Paradigma Programarii Paralele 3/7

Comunicarea ı̂ntre procese:


I Communication by shared memory (memorie partajată)
I Communication by message passing (transmitere de mesaje)
Comunicarea poate să fie sincronă sau asincronă

Taxonomia lui Flynn (clasificare a arhitecturilor):


I SISD (single instruction-stream, single data-stream)
I SIMD (single instruction-stream, multiple data-stream)
I MISD (multiple instruction-stream, single data-stream)
I MIMD (multiple instruction-stream, multiple data-stream)
Paradigma Programarii Paralele 4/7
SISD (single instruction-stream, single data-stream)

I Este modelul execuţiei secvenţiale şi presupune execuţia unui


singur flux de instrucţiuni asupra unui singur flux de date
Paradigma Programarii Paralele 5/7
SIMD (single instruction-stream, multiple data-stream)

I Presupune execuţia unui acelaşi flux de instrucţiuni asupra


unor fluxuri diferite de date
I Este cel mai potrivit model pentru programarea real-paralelă
I Presupune execuţia unor procese preponderent independente
I Arhitectura este specifică - multiprocesor (mai multe
procesoare de acelaşi tip)
I Dispune de un paralelism omogen
I Nu exista memorie locală
I Comunicarea se face prin memorie partajată (shared memory)
Paradigma Programarii Paralele 6/7
MISD (multiple instruction-stream, single data-stream)

I Execuţia unor fluxuri de instrucţiuni asupra aceluiaşi flux de


date
I Modelul Problemei Producător-Consumator. Exemplu de flux
unic de date: piesele care vin pe o linie de asamblare ı̂n cadrul
unei fabrici
I Nu are un model specific de comunicare ı̂ntre procese, putând
fi implementat atat modelul shared memory cât şi message
passing
I Este expresia concurenţei
I Programarea concurentă este implementată pe baza modelului
de execuţie MISD şi denotă o puternică dependenţă a unui
proces faţă de altul
I Se află la extrema cealalta faţă de execuţia SIMD
Paradigma Programarii Paralele 7/7
MIMD (multiple instruction-stream, multiple data-stream)

I Modelul de execuţie este specific programării distribuite


I Modelul de comunicare este message passing
I Paralelism eterogen
I Elementele de procesat sunt diferite (procesoare de tipuri
diferite), fiecare dintre ele având obligatoriu memorie locală
I Procesoarele sunt distribuite fizic ı̂n spaţiu (Exemplu:
Internetul)
Paradigma Programarii Funcţionale 1/3

Un program este descris pe baza unor funcţii de tip matematic (ı̂n


sensul lipsei efectelor secundare) utilizate de obicei recursiv

Funcţiile sunt considerate obiecte cu dreptri egale ı̂n cadrul


limbajului (first-class citizens), adică la fel ca elementele oricărui
tip de date, ele pot constitui elemente de bază ı̂n structurarea unor
date (exemple: tablouri de funcţii sau funcţii care pot fi returnate
ca rezultat al altor funcţii, etc.)

Exponenţi:
’60 LISP, ’70 Miranda, ’80 ML, ’90 Haskell
Paradigma Programarii Funcţionale 2/3

Datorită faptului că limbajele funcţionale dispun de mecanisme


incorporate (de tipul funcţiilor ”map”), soluţiile sunt mai degrabă
nisţe definiţii recursive decât algoritmi ı̂n sensul clasic

Efectele secundare apar de fapt ca şi o consecinţă a reutilizării


locaţiilor de memorie prin intermediul atribuirilor. Prin efecte
secundare ale aplicării unei funcţii ı̂nţelegem posibilitatea ca
funcţia respectivă să modifice mediul de execuţie prin modificarea
de variabile globale şi parametrii transmişi prin referinţă
Paradigma Programarii Funcţionale 3/3

Lipsa efectelor secundare - Transparenţă referenţială


Soluţia pentru eliminarea apariţiilor efectelor secundare este
aducerea programului sursă la forma unicii atribuiri: SAF (Single
Assignment Form)

Un limbaj funcţional pur presupune lipsa instrucţiunilor de


atribuire, adică ı̂n cazul LISP-ului lipsa formelor: set, setf, setq

În acest caz, unicul mecanism posibil şi este definitoriu pentru
programarea funcţionala pură este asocierea efectuată ı̂ntre
parametrii formali şi cei actuali care se efectuează ı̂n cadrul
apelurilor de funcţii
Paradigma Programarii Logice

Un program este descris atât printr-un set de relaţii ı̂ntre obiecte,


precum şi de restricţii ce definesc contextul ı̂n care funct̂ioneaza
acele obiecte

Execuţia unui program ı̂nseamnă aici activarea unui proces


deductiv, care va furniza concluzii posibile pe baza datelor de
intrare

Exponenţi:
Prolog, Elf, KLIC, Mercury, Oz, Gödel
Paradigma Programarii la Nivelul Bazelor de Date

Acţiunile programului sunt dictate de cerinţele unei gestiuni corecte


şi consistente a bazelor de date asupra cărora acţionează programul

Exponenţi:
Cobol, SQL, FoxPro, DBase, Access, ORACLE, MongoDB
Paradigma Programarii Bazate pe Eventimente
(event-driven)

Fluxul de execuţie este bazat pe apariţia unor evenimente externe a


programului şi pe reacţia programului la acestea

Aceasta paradigmă este specifică limbajelor vizuale


Paradigma Programarii Bazate Web (web-based)

Programele respectă standarde de reprezentare şi comunicare ı̂n


internet, reprezentând unităţi de procesare cu rol ı̂n construcţia şi
utilizarea de pagini web

În ultimul deceniu asistăm la existenţa unor limbaje de tip


multiparadigmă

S-ar putea să vă placă și