programare declarativa - introducere în programarea...

19
Programare declarativ ˘ a 1 Introducere în programarea funct , ional ˘ a folosind Haskell Traian Florin S , erb ˘ anut , ˘ a Ioana Leus , tean Departamentul de Informatic ˘ a, FMI, UNIBUC [email protected] [email protected] 1 bazat pe cursul Informatics 1: Functional Programming de la University of Edinburgh Traian Florin S , erb ˘ anut , ˘ a Ioana Leus , tean (UNIBUC) PD—Introducere 1 / 16

Upload: others

Post on 30-Aug-2019

32 views

Category:

Documents


0 download

TRANSCRIPT

Programare declarativa1

Introducere în programarea funct,ionala folosind Haskell

Traian Florin S, erbanut,aIoana Leus, tean

Departamentul de Informatica, FMI, [email protected]

[email protected]

1bazat pe cursul Informatics 1: Functional Programming de la University of EdinburghTraian Florin S, erbanut,a Ioana Leus, tean (UNIBUC) PD—Introducere 1 / 16

Programare declarativa vs. imperativa

Programare declarativa vs. imperativaCe vs. cum

Programare imperativa (Cum)

Explic mas, inii, pas cu pas, algoritmic, cum sa faca ceva s, i ca rezultat, seîntâmpla ce voiam sa se întâmple.

limbaje procedurale

limbaje de programare orientate pe obiecte

Programare declarativa (Ce)

Îi spun mas, inii ce vreau sa se întâmple s, i o las pe ea sa s, tie cum sarealizeze acest lucru. :-)

limbaje de interogare a bazelor de date

limbaje de programare logica

limbaje de programare funct,ionala

Traian Florin S, erbanut,a Ioana Leus, tean (UNIBUC) PD—Introducere 2 / 16

Programare declarativa vs. imperativa

Programare declarativa vs. imperativaCe vs. cum

Programare imperativa (Cum)

Explic mas, inii, pas cu pas, algoritmic, cum sa faca ceva s, i ca rezultat, seîntâmpla ce voiam sa se întâmple.

limbaje procedurale

limbaje de programare orientate pe obiecte

Programare declarativa (Ce)

Îi spun mas, inii ce vreau sa se întâmple s, i o las pe ea sa s, tie cum sarealizeze acest lucru. :-)

limbaje de interogare a bazelor de date

limbaje de programare logica

limbaje de programare funct,ionala

Traian Florin S, erbanut,a Ioana Leus, tean (UNIBUC) PD—Introducere 2 / 16

Programare declarativa vs. imperativa

Programare imperativa vs. declarativaDiferent,e

Modelul de computat,ie: algoritm vs. relat,ie

Ce exprima un program: cum vs. ce

Variabile/parametrii: atribuire distructiva vs. non-distructiva

Structuri de date: alterabile vs. explicite

Ordinea de execut,ie: efecte laterale vs. neimportanta

Expresii ca valori: nu vs. da

Controlul execut,iei: responsabilitatea programatorului vs a mas, inii

Traian Florin S, erbanut,a Ioana Leus, tean (UNIBUC) PD—Introducere 3 / 16

Programare declarativa vs. imperativa

Agregarea datelor dintr-o colect, ie (JS)C. Boesch, Declarative vs Imperative Programming - Talk.JShttps://www.youtube.com/watch

Traian Florin S, erbanut,a Ioana Leus, tean (UNIBUC) PD—Introducere 4 / 16

Programare declarativa vs. imperativa

Agregarea datelor dintr-o colect, ie (JS)C. Boesch, Declarative vs Imperative Programming - Talk.JShttps://www.youtube.com/watch

Traian Florin S, erbanut,a Ioana Leus, tean (UNIBUC) PD—Introducere 5 / 16

Programare declarativa vs. imperativa

Programare funct, ionala în Haskell

Programarea funct,ionala e din ce în ce mai importanta în industrieHaskell e folosit în proiecte de Facebook, Google, Microsoft, . . .mai multe la https://wiki.haskell.org/Haskell_in_industry

Programare funct,ionala în limbajul vostru preferat de programare:

Java 8, C++x11, C#, Python, PHP, JavaScriptFunct, ii anonime (λ-abstract, ii)Funct, ii de procesare a fluxurilor de date: filter, map, reduce

De ce Haskell? (din cartea Real World Haskell)

Traian Florin S, erbanut,a Ioana Leus, tean (UNIBUC) PD—Introducere 6 / 16

Programare declarativa vs. imperativa

Programare funct, ionala în Haskell

Programarea funct,ionala e din ce în ce mai importanta în industrieHaskell e folosit în proiecte de Facebook, Google, Microsoft, . . .mai multe la https://wiki.haskell.org/Haskell_in_industry

Programare funct,ionala în limbajul vostru preferat de programare:Java 8, C++x11, C#, Python, PHP, JavaScriptFunct, ii anonime (λ-abstract, ii)Funct, ii de procesare a fluxurilor de date: filter, map, reduce

De ce Haskell? (din cartea Real World Haskell)

The illustration on our cover is of a Hercules beetle. These beetles areamong the largest in the world. They are also, in proportion to their size, thestrongest animals on Earth, able to lift up to 850 times their own weight.Needless to say, we like the association with a creature that has such a highpower-to-weight ratio.

Traian Florin S, erbanut,a Ioana Leus, tean (UNIBUC) PD—Introducere 6 / 16

Programare declarativa vs. imperativa

Programare funct, ionala în Haskell

Programarea funct,ionala e din ce în ce mai importanta în industrieHaskell e folosit în proiecte de Facebook, Google, Microsoft, . . .mai multe la https://wiki.haskell.org/Haskell_in_industry

Programare funct,ionala în limbajul vostru preferat de programare:

Java 8, C++x11, C#, Python, PHP, JavaScriptFunct, ii anonime (λ-abstract, ii)Funct, ii de procesare a fluxurilor de date: filter, map, reduce

De ce Haskell? (din cartea Real World Haskell)[It] is a deep language and [...] learning it is a hugely rewarding experience.

Nou Radical diferit de limbajele cu care suntem obis, nuit,i

Puternic Cod concis, rapid s, i sigur

Placut Tehnici elegante pentru rezolvarea de probleme concrete

Traian Florin S, erbanut,a Ioana Leus, tean (UNIBUC) PD—Introducere 6 / 16

Programare declarativa vs. imperativa

Nou

Programarea funct,ionala

O cale profund diferita de a concepe ideea de software

În loc sa modificam datele existente, calculam valori noi din valorileexistente, folosind funct,ii

Funct,iile sunt pure: aceleas, i rezultate pentru aceleas, i intrari

Distinct,ie clara între part,ile pure s, i cele care comunica cu mediul extern

Haskell e lenes, : orice calcul e amânat cât de mult posibilSchimba modul de concepere al programelorPermite lucrul cu colect, ii potent, ial infinite de date precum [1..]

Traian Florin S, erbanut,a Ioana Leus, tean (UNIBUC) PD—Introducere 7 / 16

Programare declarativa vs. imperativa

Puternic

Puritatea asigura consistent,a

O bucata de cod nu poate corupe datele altei bucat, i de cod.Mai us, or de testat decât codul care interact, ioneaza cu mediul

Evaluarea lenes, a poate fi exploatata pentru a reduce timpul de calculfara a denatura codul

f i r s t K k xs = take k ( sort xs )

Minimalism: mai put,in cod, în mai put,in timp, s, i cu mai put,ine defecte. . . rezolvând totus, i problema :-)

numbers = [1 ,2 ,3 ,4 ,5 ]t o t a l = f o l d l ( * ) 0 numbersdoubled = map ( * 2) numbers

Ofera suport pentru paralelism s, i concurent,a

Traian Florin S, erbanut,a Ioana Leus, tean (UNIBUC) PD—Introducere 8 / 16

Programare declarativa vs. imperativa

Elegant

Idei abstracte din matematica devin instrumente puternice practicerecursivitate, compunerea de funct, ii, functori, monadefolosirea lor permite scrierea de cod compact s, i modular

Rigurozitate: ne fort,eaza sa gândim mai mult înainte, dar ne ajuta sascriem cod mai corect s, i mai curat

Curba de învat,are în treptePutem scrie programe mici destul de repedeExpertiza în Haskell necesita multa gândire s, i practicaDescoperirea unei lumi noi poate fi un drum distractiv s, i provocatorhttp://wiki.haskell.org/Humor

Traian Florin S, erbanut,a Ioana Leus, tean (UNIBUC) PD—Introducere 9 / 16

Organizare

Plan curs

Partea I: Not,iuni de baza de programare funct,ionalaFunct, ii, recursie, funct, ii de ordin înalt, tipuriOperat, ii pe liste: filtrare, transformare, agregare

Partea II: Not,iuni avansate de programare funct,ionalaPolimorfism, clase de tipuri, modularizareTipuri de date algebrice - evaluarea expresiilorOperat, iuni Intrare/Ies, ire

Partea III: Capitole speciale de Haskell s, i programare funct,ionalaAgregare pe tipuri algebrice, monade, etc.

Traian Florin S, erbanut,a Ioana Leus, tean (UNIBUC) PD—Introducere 10 / 16

Organizare

Resurse

Paginile cursului:http://moodle.fmi.unibuc.ro/course/view.php?id=367http://unibuc.ro/~ileustean/PD.html

Prezentarile cursurilor, forumuri, resurse electroniceS, tiri legate de curs vor fi postate pe ambele paginiNotele la teste vor fi postate tot pe Moodle

http://bit.do/progdecl

Cele mai noi variante ale cursurilor si laboratoarelor.

Cartea online „Learn You a Haskell for Great Good”http://learnyouahaskell.com/

Pagina Haskell http://haskell.orgHoogle https://www.haskell.org/hoogleHaskell Wiki http://wiki.haskell.org

Traian Florin S, erbanut,a Ioana Leus, tean (UNIBUC) PD—Introducere 11 / 16

Organizare

Evaluare

Notare2 part,iale (par1, par2), examen (ex)

Nota finala: 1 (oficiu) + par1 + par2 + ex

Notele vor fi postate (doar) pe pagina Moodle a cursului.

Condit,ie de promovabilitate

Nota finala cel put,in 55 > 4.99

Activitate laboratorLa sugestia profesorului coordonator al laboratorului, se poate notaactivitatea în plus fat,a de cerint,ele obs, nuite

Maxim 1 punct (bonus la nota finala)

Traian Florin S, erbanut,a Ioana Leus, tean (UNIBUC) PD—Introducere 12 / 16

Organizare

Part, ial 1

Valoreaza 4 puncte din nota finala

Sâmbata dintre a 6-a s, i a 7-a saptamâna (11 noiembrie)

Pe calculatoare

Durata: 1 ora

Acopera materia din Partea I — Not,iuni de baza

Cu acces la materiale descarcate pe calculator

Fara acces la ret,ea/internet

Traian Florin S, erbanut,a Ioana Leus, tean (UNIBUC) PD—Introducere 13 / 16

Organizare

Part, ial 2

Valoreaza 3 puncte din nota finala

Sâmbata dinainte de vacant,a de iarna (16 decembrie)

Pe calculatoare

Durata: 1 ora

Materia din Partea II — Not,iuni avansate

Cu acces la materiale descarcate pe calculator

Fara acces la ret,ea/internet

Traian Florin S, erbanut,a Ioana Leus, tean (UNIBUC) PD—Introducere 14 / 16

Organizare

Examen final

Valoreaza 2 puncte din nota finala

În sesiune

Pe hârtie

Materia: toata

Durata: 2 ore

Cu acces la materiale tiparite

Fara acces la ret,ea/internet

Traian Florin S, erbanut,a Ioana Leus, tean (UNIBUC) PD—Introducere 15 / 16

Organizare

Observat, ii despre teste s, i notare

Nu este necesar sa dat,i toate testele pentru promovarepar1 = 6, 25 ∧ par2 = 5 =⇒ final = 5par1 = 10 =⇒ final = 5Dar este necesara nota agregata cel put, in 5

Pentru a lua nota finala 10 sunt necesare toate cele 3 testepar1 = 10 ∧ par2 = 10 ∧ lab = 10 =⇒ final = 9par1 = 10 ∧ par2 = 10 ∧ lab = 10 ∧ ex = 2, 50

=⇒ final = 9, 50 ≈ 10test1 = 9 ∧ test2 = 9 ∧ lab = 4 ∧ test3 = 9

=⇒ final = 9, 50 ≈ 10

Cursurile se bazeaza unele pe altele∀j < i. examenul i presupune construct, ii s, i concepte acoperite deexamenul j

Traian Florin S, erbanut,a Ioana Leus, tean (UNIBUC) PD—Introducere 16 / 16