Paradigme de Programare

Documente similare
Paradigme de programare

Paradigme de Programare

Paradigme de Programare

PROGRAMARE ORIENTATA PE OBIECTE

Proiectarea Sistemelor Software Complexe

Microsoft Word - CarteC.doc

Microsoft Word _POO_Lab_1_Modificari_v01.htm

E_d_Informatica_sp_MI_2015_bar_02_LRO

PPSD

SUBPROGRAME

E_d_Informatica_sp_SN_2014_bar_10_LRO

Laborator 4: Continuare Programare Orientată pe Obiecte Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 29 octombrie 2011

-

Laborator 3

Limbaje de Programare Curs 6 – Functii de intrare-iesire

Object Oriented Programming

Laborator 9: Fire de execuţie Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 20 noiembrie 2011

Laborator 2 Incompatibilităţi/Diferenţe între C şi C++ Completări C++ Supraîncărcarea (redefinirea) numelui de funcţii În C nu este permisă existenţa

Analiză statică Analiza fluxului de date 23 octombrie 2014

Top

Operatorii in C Expresii Operatori aritmetici Operatori de asignare Operatori de incrementare si decrementare Operatori relationali Operatori logici O

Slide 1

Microsoft PowerPoint - ImplementareLimbaj [Read-Only] [Compatibility Mode]

proiectarea bazelor de date

Preprocesorul C Funcţii cu numǎr variabil de argumente 6 decembrie 2005 Programarea calculatoarelor 2. Curs 10 Marius Minea

Tipuri de date abstracte 30 noiembrie 2005 Programarea calculatoarelor 2. Curs 9 Marius Minea

Slide 1

Interfețe și Protocoale de Comunicații Arduino-Port Paralel Arduino. Laborator 1- Portul Paralel 1 Caracteristici generale Arduino UNO este o placă de

Analiză de flux de date 29 octombrie 2012

Ingineria Sistemelor de Programare

Microsoft Word - lab4.doc

Microsoft PowerPoint - Curs_SDA_9_RO_2019_v2.pptx

Programarea şi utilizarea calculatoarelor

Microsoft Word - Algoritmi genetici.docx

Laborator 2 - Încapsularea Programare Orientată pe Obiecte Tema 2.1 Să se analizeze programul EX2.C Indicatii 2.1 A nu se uita de fisierul EX2.H Tema

Testare manuala: situatia in care o persoana initiaza fiecare test, interactioneaza cu el si interpreteaza, analizeaza si raporteaza rezultatele. Test

Declararea variabilelor

Platformăde e-learning și curriculăe-content pentru învățământul superior tehnic Sisteme de operare 13. Planificarea proceselor

CURS

Matrici și vectori în VBA În VBA, o matrice este un grup de variabile de același tip. De ce ar trebui să utilizați o matrice? Presupunem că ați vrut s

Slide 1

Managementul Resurselor Umane

Proceduri stocate Syntax: CREATE PROCEDURE <Name> type1,...] AS -- secventa de comenzi SQL GO O procedura stocata se ruleaza cu EXEC: EXEC <N

Cursul 1: Introducere Paradigme de Programare Conf. dr. ing. Andrei Olaru Departamentul de Calculatoare 2019

tehnologii web

Lucrarea 10

PowerPoint Presentation

LUCRAREA 8 PROGRAMAREA NELINIARĂ ÎN REZOLVAREA PROBLEMELOR DIN ENERGETICĂ. METODE DE ORDINUL Aspecte generale Programarea neliniară are o foart

Limbaje de Programare Curs 8 – Fisiere

PowerPoint-Präsentation

Microsoft PowerPoint - Curs_SDA_10_RO_2019_v1.pptx

Microsoft Word - PCLP2_Curs_4_2019.doc

Limbaje de programare Pointeri. Alocare dinamică (continuare) 26 noiembrie 2012

Procesarea Imaginilor - Laborator 1: Introducere în utilizarea bibliotecii OpenCV 1 1. Introducere în utilizarea bibliotecii OpenCV 1.1. Introducere S

B

Microsoft Word - 2 ES RO.doc

FIŞA DISCIPLINEI 1. Date despre program 1.1 Instituţia de învăţământ Universitatea Babeş-Bolyai Cluj-Napoca superior 1.2 Facultatea Facultatea de Mate

Laborator 7: PROIECTAREA BAZELOR DE DATE SUBPROGRAME in PL/SQL (partea I - proceduri) Un subprogram este un bloc PL/SQL cu nume (spre deosebire de blo

PROGRAMARE OBIECT-ORIENTATA LABORATOR 1 INTRODUCERE IN CLASE SI OBIECTE Introducere teoretica Prin intermediul unei Clase ne dorim sa construim tipuri

Programarea şi utilizarea calculatoarelor

Limbaje de Programare Curs 5 – Siruri de caractere

Laborator Activities În sistemul Android activitățile reprezintă echivalentul ferestrelor din Windows, fiind clase care extind clasa Activity. Spre de

Microsoft Word - CarteC.doc

Programarea calculatoarelor. Note de curs Marius Minea 1 Introducere în programarea în C 1.1 Funcţii în limbajul C Calcule şi funcţii La origine, rolu

Ingineria Sistemelor de Programare

PHP (II)

Gestionarea I/E

BAREM PROFIL UMANIST Subiectul 1 (40 de puncte) Nr Itemul Variante acceptabile Specificări Punctaj total 1. Rescrie, din lista propusă, un sinonim con

PowerPoint Presentation

Microsoft PowerPoint - Curs_SDA_4_RO_2019_v2.pptx

Capitole Speciale de Informatică Curs 4: Calculul scorurilor în un sistem complet de extragere a informaţiilor 18 octombrie 2018 Reamintim că în cursu

GHERCĂ MAGDA CASA CORPULUI DIDACTIC BRĂILA PORTOFOLIU EVALUARE INFORMATICĂ ȘI TIC PENTRU GIMNAZIU CLASA A V-A Neamț SERIA 1 GRUPA 1 CURSANT: GHERCĂ G

Laborator 1 suport teoretic Mediul de dezvoltare Eclipse GLOSAR - Aplicaţie: program obţinut în urma aplicării operației BUILD asupra unui proiect (ve

Diapositive 1

Laborator 10 - Paradigme de Programare Corutine - suport nativ pentru paralelism în Kotlin Înainte de a trece la realizarea unei aplicații utilizând c

L7

1 Lucrarea nr. 8 - Structuri de date de tip liste sortate O listă sortată reprezintă un aranjament al înregistrărilor din cadrul listei în funcţie de

Laborator 2: Instrucţiuni Java şi lucru cu şiruri de caractere Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 18 octombrie 2011

Microsoft Word - CarteC.doc

ALGORITMII ŞI REPREZENTAREA LOR Noţiunea de algoritm Noţiunea de algoritm este foarte veche. Ea a fost introdusă în secolele VIII-IX de către Abu Ja f

Microsoft Word - Politică de cookie-uri OK_v1.docx

Strategia de dezvoltare a infrastructurii digit a Universității de Stat din Tiraspol APROBAT La ședința Senatului UST 2017 Context 1. Sistemul educați

Laborator 5 - Paradigme de Programare

ALGORITMICĂ. Seminar 3: Analiza eficienţei algoritmilor - estimarea timpului de execuţie şi notaţii asimptotice. Problema 1 (L) Să se determine număru

Microsoft Word - Curs_09.doc

Declaraţii. Instrucţiuni 19 octombrie 2005 Programarea calculatoarelor 2. Curs 3b Marius Minea

PROIECT DE PROCEDURA privind activitatea de supraveghere audio-video a proceselor de evaluare desfășurate de către centrele de evaluare și certificare

COMENTARII FAZA JUDEŢEANĂ, 9 MARTIE 2013 Abstract. Personal comments on some of the problems presented at the District Round of the National Mathemati

Raport tehnic şi ştiinţific final privind implementarea proiectului PN-III-P2-2.1-PED Acronim: ForVer Răzvan Diaconescu Decembrie Rez

Tablouri (continuare)

Fâciu N. Maria-Ema CASA CORPULUI DIDACTIC BRĂILA PROGRAM DE FORMARE INFORMATICĂ ȘI TIC PENTRU GIMNAZIU CLASA A V-A SERIA 1 GRUPA 2 CURSANT: Fâciu N. M

Aggregating Data

Microsoft Word - cap1p4.doc

Laborator 8: PROIECTAREA BAZELOR DE DATE SUBPROGRAME in PL/SQL (partea II - functii) Un subprogram este un bloc PL/SQL cu nume (spre deosebire de bloc

Lucrarea nr. 4 - Algoritmi de sortare şi ordonare Breviar teoretic Un algoritm de sortare este o metoda prin care se aranjează elementele unui tablou

PowerPoint-Präsentation

PowerPoint-Präsentation

MergedFile

Transcriere:

Paradigme de Programare Conf. dr. ing. Andrei Olaru andrei.olaru@cs.pub.ro cs@andreiolaru.ro Departamentul de Calculatoare 2019 9 : 1 / 38

Cursul 9 Concluzie Paradigma Funcțională 9 : 2 / 38

Cursul 9: Concluzie Paradigma Funcțională 1 Caracteristici ale paradigmelor de programare 2 Variabile și valori de prim rang 3 Legarea variabilelor 4 Modul de evaluare 9 : 3 / 38

Caracteristici ale paradigmelor de programare 9 : 4 / 38

Paradigma de programare Impact în scrierea unui program Paradigma de programare un mod de a: aborda rezolvarea unei probleme printr-un program; structura un program; reprezenta datele dintr-un program; implementa diversele aspecte dintr-un program (cum prelucrăm datele); Un limbaj poate include caracteristici dintr-una sau mai multe paradigme; în general există o paradigmă dominantă; Atenție! Paradigma nu are legătură cu sintaxa limbajului! 9 : 5 / 38

Paradigma de programare Legătura cu mașina de calcul paradigmele sunt legate teoretic de o mașină de calcul în care prelucrările caracteristice paradigmei se fac la nivelul mașinii; dar putem executa orice program, scris în orice paradigmă, pe orice mașină. 9 : 6 / 38

Paradigma de programare Ce o definește În principal, paradigma este definită de elementele principale din sintaxa limbajului e.g. existența și semnificația variabilelor, semnificația operatorilor asupra datelor, modul de construire a programului; modul de construire al tipurilor variabilelor; modul de definire și statutul operatorilor elementele principale de prelucrare a datelor din program (e.g. obiecte, funcții, predicate); legarea variabilelor, efecte laterale, transparență referențială, modul de transfer al parametrilor pentru elementele de prelucrare a datelor. 9 : 7 / 38

Variabile și valori de prim rang 9 : 8 / 38

Variabile Nume date unor valori în majoritatea limbajelor există variabile, ca NUME date unor valori rezultatul anumitor procesări (calcule, inferențe, substituții); variabilele pot fi o referință pentru un spațiu de memorie sau pentru un rezultat abstract; elementele de procesare a datelor pot sau nu să fie valori de prim rang (să poată fi asociate cu variabile). 9 : 9 / 38

Funcții ca valori de prim rang Definiție + Valoare de prim rang O valoare care poate fi: creată dinamic stocată într-o variabilă trimisă ca parametru unei funcții întoarsă dintr-o funcție Ex Să se scrie funcția compose, ce primește ca parametri alte 2 funcții, f și g, și întoarce funcția obținută prin compunerea lor, f g. 9 : 10 / 38

Funcții ca valori de prim rang: Compose C 1 int compose ( int (* f ) ( int ), int (* g ) ( int ), int x ) { 2 return (* f ) ((* g ) ( x ) ) ; 3 } în C, funcțiile nu sunt valori de prim rang; pot scrie o funcție care compune două funcții pe o anumită valoare (ca mai sus) pot întoarce pointer la o funcție existentă dar nu pot crea o referință (pointer) la o funcție nouă, care să fie folosit apoi ca o funcție obișnuită 9 : 11 / 38

Funcții ca valori de prim rang: Java 1 abstract class Func <U, V > { 2 public abstract V apply ( U u ) ; 3 4 public <T > Func <T, V > compose ( final Func <T, U > f ) { 5 final Func <U, V > outer = this ; 6 7 return new Func <T, V >() { 8 public V apply ( T t ) { 9 return outer. apply ( f. apply ( t ) ) ; 10 } 11 }; 12 } 13 } În Java, funcțiile nu sunt valori de prim rang pot crea rezultatul dar este complicat, și rezultatul nu este o funcție obișnuită, ci un obiect. 9 : 12 / 38

Funcții ca valori de prim rang: Compose Racket & Haskell Racket: 1 ( define compose 2 ( lambda ( f g ) 3 ( lambda ( x ) 4 ( f ( g x ) ) ) ) ) Haskell: 1 compose = (.) În Racket și Haskell, funcțiile sunt valori de prim rang. mai mult, ele pot fi aplicate parțial, și putem avea funcționale funcții care iau alte funcții ca parametru. 9 : 13 / 38

Legarea variabilelor 9 : 14 / 38

Legarea variabilelor Impactul asupra programului două posibilități esențiale: un nume este întotdeauna legat (într-un anumit context) la aceeași valoare / la același calcul numele stă pentru un calcul; legare statică. un nume poate fi legat la mai multe valori pe parcursul execuției numele stă pentru un spațiu de stocare fiecare element de stocare fiind identificat printr-un nume; legare dinamică. 9 : 15 / 38

Efecte laterale (side effects) Definiție Ex Exemplu În expresia 2 + (i = 3), subexpresia (i = 3): produce valoarea 3, conducând la rezultatul 5 al întregii expresii; are efectul lateral de inițializare a lui i cu 3. + Efect lateral Pe lângă valoarea pe care o produce, o expresie sau o funcție poate modifica starea globală. Inerente în situațiile în care programul interacționează cu exteriorul I/O! 9 : 16 / 38

Efecte laterale (side effects) Consecințe Ex În expresia x-- + ++x, cu x = 0: evaluarea stânga dreapta produce 0 + 0 = 0 evaluarea dreapta stânga produce 1 + 1 = 2 dacă înlocuim cele două subexpresii cu valorile pe care le reprezintă, obținem x + (x + 1) = 0 + 1 = 1 Importanța ordinii de evaluare! Dependențe implicite, puțin lizibile și posibile generatoare de bug-uri. 9 : 17 / 38

Efecte laterale (side effects) Consecințe asupra programării leneșe În prezența efectelor laterale, programarea leneșă devine foarte dificilă; Efectele laterale pot fi gestionate corect numai atunci când secvența evaluării este garantată garanție inexistentă în programarea leneșă. nu știm când anume va fi nevoie de valoarea unei expresii. 9 : 18 / 38

Transparență referențială Pentru expresii + Transparență referențială Confundarea unui obiect ( valoare ) cu referința la acesta. + Expresie transparentă referențial: posedă o unică valoare, cu care poate fi substituită, păstrând semnificația programului. Ex Exemplu x-- + ++x nu, valoarea depinde de ordinea de evaluare x = x + 1 nu, două evaluări consecutive vor produce rezultate diferite x ar putea fi, în funcție de statutul lui x (globală, statică etc.) 9 : 19 / 38

Transparență referențială Pentru funcții + Funcție transparentă referențial: rezultatul întors depinde exclusiv de parametri. Ex Exemplu int g = 0; int transparent ( int x ) { } return x + 1; int opaque ( int x ) { } return x + ++ g ; opaque(3) - opaque(3)!= 0! Funcții transparente: log, sin etc. Funcții opace: time, read etc. 9 : 20 / 38

Transparență referențială Avantaje Lizibilitatea codului; Demonstrarea formală a corectitudinii programului mai ușoară datorită lipsei stării; Optimizare prin reordonarea instrucțiunilor de către compilator și prin caching; Paralelizare masivă, prin eliminarea modificărilor concurente. 9 : 21 / 38

Modul de evaluare 9 : 22 / 38

Evaluare Mod de evaluare și execuția programelor modul de evaluare al expresiilor dictează modul în care este executat programul; este legat de funcționarea mașinii teoretice corespunzătoare paradigmei; ne interesează în special ordinea în care expresiile se evaluează; în final, întregul program se evaluează la o valoare; important în modul de evaluare este modul de evaluare / transfer a parametrilor. 9 : 23 / 38

Transferul parametrilor Evaluare aplicativă parametrii sunt evaluați înainte de evaluarea corpului funcției. Call by value Call by sharing Call by reference Evaluare normală funcția este evaluată fără ca parametrii să fie evaluați înainte. Call by name Call by need 9 : 24 / 38

Call by value În evaluarea aplicativă Ex Exemplu 1 // C sau Java 2 void f ( int x ) { 3 x = 3; 4 } 1 // C 2 void g ( struct str s ) { 3 s. member = 3; 4 } Efectul liniilor 3 este invizibil la apelant. Evaluarea parametrilor înaintea aplicației funcției și transferul unei copii a valorii acestuia Modificări locale invizibile la apelant C, C++, tipurile primitive Java 9 : 25 / 38

Call by sharing În evaluarea aplicativă Variantă a call by value; Trimiterea unei referințe la obiect; Modificări locale asupra referinței invizibile la apelant; Modificări locale asupra obiectului referit vizibile la apelant; Racket, Java; 9 : 26 / 38

Call by reference În evaluarea aplicativă Trimiterea unei referințe la obiect; Modificări locale asupra referinței și obiectului referit vizibile la apelant; Folosirea & în C++. 9 : 27 / 38

Call by name În evaluarea normală Argumente neevaluate în momentul aplicării funcției substituție directă (textuală) în corpul funcției; Evaluare parametrilor la cerere, de fiecare dată când este nevoie de valoarea acestora; în calculul λ. 9 : 28 / 38

Call by need În evaluarea normală Variantă a call by name; Evaluarea unui parametru doar la prima utilizare a acestuia; Memorarea valorii unui parametru deja evaluat și returnarea acesteia în cazul utilizării repetate a aceluiași parametru (datorită transparenței referențiale, o aceeași expresie are întotdeauna aceeași valoare) memoizare; în Haskell. 9 : 29 / 38

Sfârșitul cursului 9 Elemente esențiale caracteristicile unei paradigme; variabile, funcții ca valori de prim rang; legare, efecte laterale, transparență referențială; evaluare și moduri de transfer al parametrilor. 9 : 30 / 38