A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

1 Programação Multi-Paradigma Cristiano Bertolini – Ellison Siqueira – Guilherme Avelino –

Apresentações semelhantes


Apresentação em tema: "1 Programação Multi-Paradigma Cristiano Bertolini – Ellison Siqueira – Guilherme Avelino –"— Transcrição da apresentação:

1 1 Programação Multi-Paradigma Cristiano Bertolini – cbertolini@cin.ufpe.br Ellison Siqueira – ellison.siqueira@gmail.com Guilherme Avelino – gaa@cin.ufpe.br Paulo Caetano – pcs3@cin.ufpe.br Prof. Augusto Sampaio

2 2 Agenda Objetivo Funcional versus Imperativa Mônadas Proposta

3 3 Objetivo Analisar os paradigmas funcionais e imperativos e como eles podem ser implementados em uma mesma linguagem de programação

4 4 Funcional versus imperativa Linguagem FuncionalLinguagem Imperativa Uso de expressões e funções (exclui comandos, variáveis e efeitos laterais) Uso de variáveis, comandos e procedimentos Implementa transparência referencial Não implementa transparência referencial  efeitos laterais Não possui noção de estadoPossuem noção de estados Não possui atribuição direta de valor Possui atribuição direta de valor (setq sum 0); ---- variavel global sum:=0 (defun se (x); ---- define a função se (setq sum(+ sum x))); --- sum:=sum+x A cada chamada de se um novo valor é adicionado a variável global sum

5 5 Mônadas Uma Mônada é uma estrutura algébrica que lida com transformações de estados, exceções e continuações São empregadas em linguagens funcionais para implementar características de linguagem imperativa Permitem criar estruturas computacionais com estilo imperativas que, entretanto, permanecem isoladas do corpo principal do programa funcional. Podem ser utilizadas para manter a transparência referencial ao incluir atribuição e incluem a noção de estado e controle de exceções

6 6 Exemplo Mônada Let var a = 1, b = 0 in c = a / b } Let var a = 1, b = 0 in c = a // b } Sem Mônadas a expressão vai retornar uma exceção Mônadas insere a noção de estado utilizando o operador //: M a = just a | Nothing

7 7 Propostas: construções let var x = 3 in { x := x * x; } let var x = 3 in { x := x * x; x } let var w = 0, var a = fn x.x in { a := let fun soma x y = x + y in soma; a(1)(2) } let var x = 3 in x := x * x;

8 8 Proposta: transparência referencial let var a = 1, var b = 2 in{ a := b; b := let var c = 3 in c * c; b + a } Resultado: 11 let var a = 1, var b = 2 in{ { a := b; } { b := let var c = 3 in c * c; } b + a } Resultado: 3 ou 11? “Tudo o que acontece durante a execução dum programa depende do que está explicitado no corpo e nos argumentos das funções, não existindo qualquer entidade oculta que influencie a execução dos programas e os resultados intermediários e finais” http://ctp.di.fct.unl.pt/lei/ltpa/teoricas/04.html

9 9 Proposta: Mônadas em Haskell Mônada: Família de tipos m a Funções:  return  >>=  >>  Fail Mônadas haskell  Identity, aplica a função definida pela computação subseqüente ao valor retornado pela computação anterior;  [], aplica a todos os elementos de uma lista a computação subseqüente e são retornados os resultados concatenados. Em caso de falha é retornado o valor [];  Maybe representa computações que podem falhar ao retornar um resultado.  IO, responsável pela interação entre os programas Haskell e o mundo exterior.

10 10 Proposta: Mônadas em Haskell Notação DO divisao1::Int->Int->Maybe Int divisao1 a b = return a >>= \x -> return b >>= \y -> if y==0 then Nothing else return (div x y) divisao2::Int->Int->Maybe Int divisao2 a b = do x <- return a y <- return b if y==0 then Nothing else return (div x y)

11 11 Proposta: variáveis monádicas let var x = 1 in let var y = do{ x := 3; x * x } in y + x } Resultado = 10

12 12 Proposta: função monádica let var x = 1 in let fun f1 z = z+1 in let fun teste y = do{ x := y+1; z := 2*x (f1 y) + z} in teste x Resultado = 6

13 13 Proposta de implementação Utilizar Mônadas Incluir Atribuição na LF2 Incorporar o conceito de estado em um contexto específico na LF2 Análise de problemas e implicações no uso de Mônadas

14 14 Proposta: BNF Programa ::= Expressao Expressao ::= Valor | ExpUnaria | ExpBinaria | ExpDeclaracao | Id | Aplicacao | IfThenElse Atribuicao ::= Id ":=" Expressao | Atribuicao ";" Atribuicao Valor ::= ValorConcreto | ValorAbstrato ValorAbstrato ::= ValorFuncao ValorConcreto ::= ValorInteiro | ValorBooleano | ValorString ValorFuncao ::= "fn" Id Id "." Expressao ExpUnaria ::= "-" Expressao | "not" Expressao | "length" Expressao ExpBinaria ::= Expressao "+" Expressao | Expressao "-" Expressao | Expressao "and" Expressao | Expressao "or" Expressao | Expressao "==" Expressao | Expressao "++" Expressao ExpDeclaracao ::= "let" DeclaracaoFuncional "in" Expressao DeclaracaoFuncional ::= DecVariavel | DecFuncao | DecVariavelMonadica | DecFuncaoMonadica | DeclaracaoFuncional "," Declaracao DecVariavel ::= "var" Id "=" Expressao DecFuncao ::= "fun" ListId "=" Expressao DecVariavelMonadica ::= "var" Id "=" "do" “{“Atribuicao ";" Expressao "}“ DecFuncaoMonadica ::= "fun" ListId "=" "do" “{“Atribuicao ";" Expressao "}“ ExpressaoListId ::= Id | Id, ListId Aplicacao:= Expressao"(" ListExp ")“ ListExp ::= Expressao | Expressao, ListExp

15 15 Referências Bibliográficas http://ctp.di.fct.unl.pt/lei/ltpa/teoricas/04.html http://en.wikipedia.org/wiki/Referential_t ANDRADE, Carlos Andreazza Rego. Aspecth: uma extensão de Haskell orientada a aspectos. Recife, 2005. Dissertação (mestrado) - UFPe. CIn. Ciência da Computação; Wadler, P. Monads for funtional programming ALL ABOUT MONADS. http://www.nomaware.com/monads/html/index.html http://www.nomaware.com/monads/html/index.html Watt, David A. Programming Language Concepts and Paradigms, Prentice Hall Bird, R. and Wadler, P. Introduction to Functional Programming, Prentice Hall


Carregar ppt "1 Programação Multi-Paradigma Cristiano Bertolini – Ellison Siqueira – Guilherme Avelino –"

Apresentações semelhantes


Anúncios Google