 |
Métodos de Programação I - 2002/03
|
[ DI/UM ]
|
---|
J.N. Oliveira 406006
Aula Teórica de 02.09.24 [Ref:4]:
|
Sumário: Apresentação da disciplina. Equipa docente.
Programa da disciplina e seu enquadramento no plano de estudos.
Teoria e método em programação.
Arquitectura do «software».
Composicionalidade.
Interfaces. Combinadores de programas. Modularidade e reutilização.
«Pacotes» de programação.
Regime de avaliação.
Bibliografia.
Informação electrónica sobre a disciplina:
URL: http://www.di.uminho.pt/~jno/html/mpi.html.
Aula Teórica de 02.09.26 [Ref:5]:
|
Sumário: Introdução à Programação funcional.
Conceito de função. A função como contrato. Diagramas de blocos.
Domínio e codomínio de uma função. Diagramas funcionais. Setas f : A -> B.
Notação funcional com ou sem variáveis.
Início do estudo dos combinadores de programas
funcionais:
A composição f ·g como combinador elementar de funções.
Associatividade da composição:
f ·(g ·h) = (f ·g) ·h .
Função identidade id.
O polimorfismo de id e a propriedade
f ·id = id ·f = f e seu diagramas comutativo.
Aula Teórica de 02.10.01 [Ref:4]:
|
Sumário: Estudo dos combinadores de programas
funcionais (cont.):
O combinador <f,g> e o produto A × B
(analogia com «struct» em C) e suas projecções.
O combinador [f,g] e o coproduto A + B
(analogia com «union» em C) e suas injecções.
Apresentação da extensão Mpi.hs ao
Prelude.hs do Hugs 98.
Aula Teórica de 02.10.03 [Ref:5]:
|
Sumário: Estudo dos combinadores de programas
funcionais (cont.):
Propriedades universais de <f,g> e de [f,g] .
Propriedades de reflexão- × e reflexão-+.
Introdução à noção de isomorfismo entre tipos de dados.
Motivação: a função swap = <pi2,pi1>,
sua propriedade involutiva
( swap ·swap = id ) e o isomorfismo
A × B =B × A .
Funções bijectivas ou isomorfismos.
Função inversa.
Aula Teórica de 02.10.08 [Ref:4]:
|
Sumário: Estudo dos combinadores de programas funcionais
(cont.)
:
Propriedades de cancelamento- × e
cancelamento-+.
Propriedades de fusão- × e fusão-+.
Aula Teórica de 02.10.10 [Ref:5]:
|
Sumário: Estudo dos combinadores de programas funcionais
(cont.)
:
Os combinadores f × g e f + g .
Propriedades de absorção-+, × . Propriedades functoriais.
Aula Teórica de 02.10.15 [Ref:4]:
|
Sumário: Estudo dos combinadores de programas funcionais (cont.)
:
Lei da troca. Diagrama da lei da troca.
Exemplo de aplicação da lei da troca: undistr
e o isomorfismo
(A × B) + (A × C) =A × (B+C).
Predicados e guardas. Condicional de McCarthy.
Enunciado das leis de fusão do condicional de McCarthy:
f ·(p -> g, h)
=
p -> f ·g , f ·h
(p -> f, g) ·h
=
(p ·h) -> (f ·h), (g ·h)
.
Aula Teórica de 02.10.17 [Ref:5]:
|
Sumário: Não houve aula (dispensa de aulas devida aos festejos académicos).
Aula Teórica de 02.10.22 [Ref:4]:
|
Sumário: Funções de ordem superior. Noção de espaço funcional.
O combinador curry f e o operador ap.
A exponenciação B^A e seus isomorfismos
(eg. curry, split, either, etc).
Aula Teórica de 02.10.24 [Ref:5]:
|
Sumário: Propriedade universal da exponenciação B^A .
Leis da exponenciação (cancelamento, reflexão e fusão).
Tipos elementares genéricos:
0 , 1 e 2
(resp. Void, () e Bool em HASKELL).
Aula Teórica de 02.10.29 [Ref:4]:
|
Sumário: As funções ! : A ->1 e ? : 0 ->A .
Funções constantes. O combinador c . Propriedades.
Polimorfismo da função constante: c = c ·f.
O conceito de «apontador» 1 + A
(Maybe a em HASKELL). Funções parciais.
Costumização de produtos e coprodutos em HASKELL.
Álgebras e coálgebras de tipos de dados.
Exemplo: o tipo
data Error a = Err String | Ok a
de valores ou mensagens de erro.
Sua álgebra e sua coálgebra.
Aula Teórica de 02.10.31 [Ref:5]:
|
Sumário: Introdução à composição funcional monádica
:
Motivação: funções parciais e sua composição.
Manipulação de erros e mecanismos de excepção («exception handling»).
Funções monádicas envolvendo listas.
Aula Teórica de 02.11.05 [Ref:4]:
|
Sumário: Composição funcional monádica
:
Mónadas versus functores.
Noção de functor.
Propriedades functoriais.
Functores em HASKELL: a class Functor e o operador
fmap.
Exemplos simples: functor identidade e functor constante.
Functor exponencial.
Regra geral para a composição monádica.
Aula Teórica de 02.11.07 [Ref:5]:
|
Sumário: Bifunctores e respectivas propriedades.
Transformações naturais entre functores.
Polimorfismo em HASKELL e «teoremas grátis».
Exemplos.
Aula Teórica de 02.11.12 [Ref:4]:
|
Sumário: Programação funcional monádica
(cont.)
:
Definição formal. Composição e sua unidade.
Multiplicação e suas propriedades.
Exemplos: listas e Maybe.
Aula Teórica de 02.11.14 [Ref:5]:
|
Sumário: Programação funcional monádica
(cont.)
:
Mónadas em HASKELL: a class Monad e os operadores
return,
(»=) e
».
A notação do.
Introdução à notação em compreensão.
A definição fmap f x = do { a <- x ; return (f a) }
e sua generalização à promoção monádica de operações n-árias.
Exemplos: listas, Maybe e IO.
Aula Teórica de 02.11.19 [Ref:4]:
|
Sumário: Programação funcional monádica
(conclusão)
:
Apresentação da mónada de IO e da
mónada de estado.
Noção de autómato (determinístico).
Função de transição de estado e sua codificação usando exponenciais.
Exemplo: autómato de gestão de uma agenda de telemóvel.
Aula Teórica de 02.11.21 [Ref:5]:
|
Sumário: Introdução aos tipos de dados indutivos a partir de uma analogia com
a programação imperativa
:
Tipos de dados recursivos vistos como equações.
As listas ligadas e a equação L =1 + A × L .
Aula Teórica de 02.11.26 [Ref:4]:
|
Sumário: Introdução aos tipos indutivos (cont.)
:
Apresentação do módulo RList.hs.
Estudo da triologia cata-ana-hilo associada ao tipo
RList.
O algoritmo de cálculo do quadrado de um número visto como
hilomorfismo sobre a estrutura RList a.
O algoritmo de ordenação por inserção simples visto como
hilomorfismo sobre a estrutura RList a.
Introdução ao tipo de dados árvores binárias simples,
ou listas bi-lineares:
data BTree a = Empty | Node(a, (BTree a, BTree a)).
Aula Teórica de 02.11.28 [Ref:5]:
|
Sumário: Apresentação dos módulos BTree.hs e LTree.hs
:
Estudo da triologia cata-ana-hilo associada ao tipo
BTree.
Exemplo: o hilomorfismo qSort (`quick sort').
Estudo da triologia cata-ana-hilo associada ao tipo
LTree.
Exemplos: os hilomorfismos dfac (duplo factorial) e
fib (série de Fibonacci).
O hilomorfismo mSort (`merge sort').
Aula Teórica de 02.12.03 [Ref:4]:
|
Sumário: Noções de functor e bifunctor
(cont.)
:
Noção de bi-functor. Propriedades.
Bi-functores em HASKELL: a class BiFunctor e o operador
bmap.
Exemplos: bifunctores produto e coproduto.
Functores polinomiais.
Propriedades naturais.
Aula Teórica de 02.12.05 [Ref:5]:
|
Sumário: Noções de functor e bifunctor
(cont.)
:
síntese de fmap para o tipo LTree como um
catamorfismo.
Parametrização e polimorfismo.
Introdução ao conceito de functor de tipo
(`type functor').
Aula Teórica de 02.12.10 [Ref:4]:
|
Sumário: Definição genérica de um tipo indutivo de dados.
Noção de functor de base.
Operadores fmap vs catamorfismos:
Politipismo da definição t a =b(a,t a)
de um tipo indutivo genérico paramétrico.
Noção de functor de tipo e sua formulação genérica
como o catamorfismo t f =cata (in ·b(f,id)).
Aula Teórica de 02.12.12 [Ref:5]:
|
Sumário: Propriedade universal de um catamorfismo cata (f)
do tipo genérico t a =b(a,t a)
e suas derivadas: cancelamento-cata e reflexão-cata.
Preenchimento do questionário de avaliação da disciplina.
Aula Teórica de 02.12.17 [Ref:4]:
|
Sumário: Classificação algorítmica.
Quadro sinóptico dos principais algoritmos analisados e
estudados ao longo da disciplina:
Polimorfismo versus politipismo. Programação dita «genérica».
Aula Teórica de 02.12.19 [Ref:5]:
|
Sumário: Conclusão
:
Síntese final.
Revisão dos sumários.
Articulação da disciplina com outras que se lhe seguem no plano
de estudos.
Encerramento da disciplina.
jno
2003-01-06