Paradigmas de Programação

Terceiro quadrimestre de 2010
Horário: 2a (19:00-21:00) e 5a (21:00-23:00)
Sala de aula: 306 (2a) e L502 (5a)
Professor: Jerônimo C. Pellegrini
Sala do professor: S 805 (bloco B)
Email do professor: jeronimo.pellegrini ufabc edu br

Monitoria

A monitoria foi cancelada

Novidades:

21/12 -- Nova versão das notas de aula (v.109)
20/12 -- Nova versão das notas de aula (v.108)
19/12 -- Conceitos após o trabalho 2
15/12 -- Nova versão das notas de aula (v.107)
14/12 -- Conceitos após a prova 2
13/12 -- Nova versão das notas de aula (v.106)
12/12 -- Nova versão das notas de aula (v.105)
12/12 -- Nova versão das notas de aula (v.104)
11/12 -- Mais um exemplo de questão de prova (junto com as notas de aula)
04/12 -- Nova versão das notas de aula (v.103)
03/12 -- syn.scm e stm.scm disponíveis
02/12 -- Nova versão das notas de aula (v.102)
01/12 -- Vencedor do Google AI Challenge 2010: um programa Common Lisp!
30/11 -- Nova versão das notas de aula (v.101)
29/11 -- Nova versão das notas de aula (v.100)
29/11 -- Tres livros incluídos na bibliografia (havia esquecido: Andres, Lea e Bloch)
25/11 -- Nova versão das notas de aula (v.99)
25/11 -- Conceitos após o trabalho 1
24/11 -- Nova versão das notas de aula (v.98)
23/11 -- Código do pool de threads e servidor HTTP disponíveis
23/11 -- Nova versão das notas de aula (v.97)
21/11 -- Nova versão das notas de aula (v.96)
20/11 -- Nova versão das notas de aula (v.95)
18/11 -- Nova versão das notas de aula (v.94)
16/11 -- Nova versão das notas de aula (v.93)
15/11 -- Nova versão das notas de aula (v.92)
15/11 -- Nova versão das notas de aula (v.91)
14/11 -- Nova versão das notas de aula (v.90)
11/11 -- Entrega da T1 adiada para 18/nov
10/11 -- Aula de 11/11 cancelada
10/11 -- Monitoria cancelada
08/11 -- Nova versão das notas de aula (v.89)
07/11 -- Nova versão das notas de aula (v.88)
07/11 -- Nova versão das notas de aula (v.87)
06/11 -- Nova versão das notas de aula (v.86)
05/11 -- Conceitos após a P1 disponíveis
05/11 -- Nova versão das notas de aula (v.85)
28/10 -- Nova versão das notas de aula (v.84)
27/10 -- Nova versão das notas de aula (v.83)
26/10 -- Nova versão do tutorial de FFI do Chicken (v.0.0004)
23/10 -- Nova versão das notas de aula (v.82)
21/10 -- Nova versão das notas de aula (v.81)
20/10 -- Nova versão das notas de aula (v.80)
20/10 -- Nova versão das notas de aula (v.79)
20/10 -- metacircular.scm disponível
19/10 -- aula-macros.scm disponível
19/10 -- Nova versão das notas de aula (v.78)
19/10 -- Subsídios para T1: como usar threads e ouvir em portas TCP 
         (no link das notas de aula)
19/10 -- Exemplo de prova disponível
18/10 -- Nova versão das notas de aula (v.77)
18/10 -- aula-continuacoes.scm disponível
17/10 -- aula-estado.scm disponível
16/10 -- Nova versão das notas de aula (v.76)
15/10 -- Nova versão das notas de aula (v.75)
14/10 -- Nova versão das notas de aula (v.74)
12/10 -- Alguns dos programas usados nas aulas estão disponíveis
11/10 -- Nova versão das notas de aula (v.73)
09/10 -- Nova versão das notas de aula (v.72)
08/10 -- Nova versão das notas de aula (v.71)
07/10 -- Descrições dos trabalhos
05/10 -- Horário de monitoria
03/10 -- Nova versão das notas de aula (v.70)
02/10 -- Nova versão das notas de aula (v.69)
29/09 -- Nova versão das notas de aula (v.68)
28/09 -- Nova versão das notas de aula (v.67)
27/09 -- Nova versão das notas de aula (v.66)
25/09 -- Nova versão das notas de aula (v.65)
25/09 -- Nova versão das notas de aula (v.64)
24/09 -- Nova versão das notas de aula (v.63)
23/09 -- Datas de provas e trabalhos marcadas
23/09 -- Nova versão das notas de aula (v.62)
23/09 -- Nova versão das notas de aula (v.61)
23/09 -- Nova versão das notas de aula (v.60)
22/09 -- Nova versão das notas de aula (v.59)
22/09 -- Nova versão das notas de aula (v.58)
21/09 -- Nova versão das notas de aula (v.57)
21/09 -- Nova versão das notas de aula (v.56)
21/09 -- Nova versão das notas de aula (v.55)
20/09 -- Nova versão das notas de aula (v.54)
20/09 -- Nova versão das notas de aula (v.53)
20/09 -- Nova versão das notas de aula (v.52)
19/09 -- Nova versão das notas de aula (v.51)
19/09 -- Nova versão das notas de aula (v.50)
18/09 -- Nova versão das notas de aula (v.49)
18/09 -- Nova versão das notas de aula (v.48)
18/09 -- Nova versão das notas de aula (v.47)
18/09 -- Nova versão das notas de aula (v.46)
17/09 -- Nova versão das notas de aula (v.45)
17/09 -- Nova versão das notas de aula (v.44)
17/09 -- Figuras do tutorial do Eclipse consertadas
17/09 -- Nova versão das notas de aula (v.43)
16/09 -- Nova versão das notas de aula (v.42)
16/09 -- Nova versão das notas de aula (v.41)
16/09 -- Pequenas modificações no tutorial de interface Scheme/C
16/09 -- Atualização nas instruções de instalação do Chicken para Windows
15/09 -- Nova versão das notas de aula (v.40)
14/09 -- Nova versão das notas de aula (v.39)
14/09 -- Nova versão das notas de aula (v.38)

Notas de aula

Não deixe de verificar periodicamente as notas de aula!

Curiosidades e coisas relacionadas

Estes quadrinhos dão uma idéia de como programadores Lisp vêem sua linguagem:

O vencedor do desafio de IA do Google em 2010 é Gábor Melis, com um programa feito em Common Lisp. Veja o ranking!

A empresa americana ITA, especialista em informação sobre vôos, foi adquirida pelo Google. A ITA mantém um sistema grande e complexo escrito em Common Lisp; é um exemplo de história de sucesso de uma empresa que se manteve fora da "monocultura Java".

O App Inventor para o Android tem código Scheme! (Kawa):

"The compiler that translates the visual blocks language for implementation on Android uses the Kawa Language Framework and Kawa's dialect of the Scheme programming language, developed by Per Bothner and distributed as part of the Gnu Operating System by the Free Software Foundation."

Ementa

Visão comparativa entre os paradigmas de programação. Paradigma funcional. Paradigma concorrente

Objetivo

Queremos que o aluno construa uma compreensão das linguagens de programação a partir de suas diferentes características e da maneira como estas características interagem.

O curso deverá trazer à atenção do aluno as diversas diferenças fundamentais entre grandes famílias de linguagens de programação, tanto em teoria como de forma prática. Esta visão tem efeitos importantes, nem sempre imediatamente perceptíveis: ao apreciar diversas técnicas de programação e mecanismos peculiares de linguagens de programação diferentes, o estudante expande seu leque de técnicas e rompe sua rigidez de concepção a respeito do que vem a ser programar. Além disso, há situações onde um paradigma se aplicará com mais sucesso do que outro. Pode-se sem dúvida afirmar que a programação em diferentes paradigmas auxilia na melhoria da qualidade da programação de forma geral.

Espera-se que o estudante se torne capaz de programar fluentemente nas linguagens escolhidas para exemplificar os diferentes paradigmas; que compreenda os fundamentos teóricos de cada paradigma de programação; que passe a conhecer diferentes mecanismos de funcionamento para as diferentes características de linguagens de programação (por exemplo passagem de parâmetros, vinculação de variáveis, tratamento de exceções e avaliação estrita ou preguiçosa); que se torne capaz de utilizar seletivamente conceitos e técnicas de diferentes paradigmas e linguagens em outros, quando for conveniente; e finalmente, que comreenda minimamente como linguagens de programação são projetadas, capacitando-se a desenvolver de maneira coerente e eficaz linguagens de domínio limitado.

Avaliação

O conceito final da disciplina poderá ser:

A avaliação ser composta de:

A avaliação final de cada aluno não será o resultado de alguma "conta" feita a partir dos valores das três avaliações. O resultado de cada avaliação reflete o desempenho do aluno em todo o curso até aquele instante, e não é apenas uma "nota isolada". Isso significa que cada avaliação leva em conta também o resultado das avaliações anteriores. De maneira simples, cada avaliação mostra qual seria o conceito final do aluno se o curso terminasse naquele instante.

Não há "prova substitutiva", porque tal conceito não faz sentido no sistema de avaliação descrito acima.

Trabalho I

As descrições dos trabalhos estão aqui:

Trabalho II

Conceitos

A coluna T1? indica se o trabalho 1 foi entregue (um "X" significa atraso, um "*" significa entregue no prazo).

RA        após P1  T1?  após T1  após P2  após T2
-------------------------------------------
11102108        C   X         F		F   F
11033909        A   *	      B		A   A
11078407        F
11014007
11037708        C   *         B		B   C
11026006        
11014507
11076508        F
11043008        F   *         C		F   F
11068807        F
11103908        C   *         B		B   C
11105408        F   *         C	
11106808        B
11031807        F
11056408        F
11079208        B   *         C		F   C
11114808        F   *         F		F   F
11022409        A   *         B		B   A
11090608
-------------------------------------------  

Programa aproximado

Este programa está sujeito a mudanças simples. Grandes mudanças não devem acontecer.

 I - PROGRAMAÇÃO FUNCIONAL EM SCHEME
     Elementos básicos de Scheme
     Procedimentos
     Variáveis: ambientes, extensão e escopo
     Sistemas de tipos (estático/dinâmico; seguro/inseguro)
     Listas e vetores
     Fechos
     (POO com fechos)
     Metaprogramação
     Avaliação preguiçosa
     Streams (aplicação de av. preguiçosa)
     Continuações
     Aplicações de continuações: escape, multitarefa, backtracking, exceções
     Modelos de gerenciamento de memória; coleta de lixo
II - PROGRAMAÇÃO CONCORRENTE
     Processos, threads e formas de concorrência
     Problemas inerentes à programação concorrente
     Memória compartilhada:
         Semáforos
         Monitores
         Memória Transacional
     Passagem de mensagens:
         Passagem de mensagens síncrona e assíncrona

Datas das avaliações:

Bibliografia e ferramentas

Links

Ferramentas

Usaremos no curso

Interessante, mas não essencial para o curso

Bibliografia Principal

Secundária

A bibliografia secundária contém obras que, embora relacionadas ao curso, não são diretamente usadas (ou são de difícil obtenção).

Outras coisas importantes

Aqui há outras coisas para quem se interessar (incluem-se aqui outros paradigmas, e não apenas o funcional).