Paradigmas de Programação

Terceiro quadrimestre de 2012
Horários:

Sala de aula: Segundas: Lab 409-2;   Quartas/quintas: 301-3
Professor: Jerônimo C. Pellegrini
Sala do professor: S 805 (bloco B)
Email do professor: jeronimo.pellegrini ufabc edu br

CONFIRA SEU CONCEITO

Veja se seu conceito está faltando no site!

Vista de prova

Para a turma do noturno, a vista de prova será hoje, no horário da aula, junto com a entrega do trabalho. As notas serão divulgadas no máximo hoje à tarde.

O pessoal do diurno pode ver a prova na sexta das 14 às 15.

Novidades:

10/04 -- Conceitos que estavam faltando já estão no site. CONFIRA se seu conceito está lá!
05/04 -- Conceitos após T. Se seu conceito está faltando me mande um email
04/04 -- Conceitos após P2 no site
04/04 -- Noturno: vista de prova (P2) HOJE!
26/03 -- Conceitos após P1
23/03 -- Prova II hipotética no site
22/03 -- Tópicos para P2 atualizados
05/02 -- Vários grupos (para o trabalho) adicionados à lista
28/02 -- Mais código para usar no trabalho
27/02 -- Código útil para fazer os trabalhos disponível (será atualizado com mais código depois...)
26/02 -- Grupos para o trabalho prático agora listados no site
19/02 -- Nova versão (131) das notas de aula
17/02 -- Seleção de tópicos das notas para leitura disponível
15/02 -- Nova versão (130) das notas de aula
07/02 -- Trabalho prático com descrições detalhadas
06/02 -- Nova versão (129) das notas de aula
05/02 -- Lista de tópicos para trabalho prático no site
29/01 -- Nova versão (128) das notas de aula
29/01 -- Instruções para instalar Emacs+Quack atualizadas [ NOVAMENTE INSTUÇÕES PARA WINDOWS! ]
25/01 -- Incluída data da prova da turma noturna
23/01 -- Instruções para instalar Emacs+Quack atualizadas
23/01 -- Data da prova definida para turma matutina
22/01 -- Nova versão (127) das notas de aula
18/01 -- Nova versão (126) das notas de aula disponível

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:

Ementa

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

Objetivo

Tradicionalmente, cursos de Ciência da Computação incluem uma disciplina obrigatória onde linguagens e suas características são comparadas. O objetivo nesse tipo de curso é construir 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.

Neste curso a abordagem terá forte componente prática: os conceitos serão exemplificados e construídos em uma linguagem de programação -- construiremos, a partir de um mínimo, diversas características de diferentes linguagens. Isto deverá dar ao aluno a experiência da programação em diversos paradigmas, além da prática da construção de diferentes funcionalidades e mecanismos para linguagens.

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.

Prova hipotética

Está aqui

Trabalho prático

Veja a lista de possíveis trabalhos.

Os grupos estão aqui.

código Scheme disponível para fazer o trabalho. Somente o xml.scm não tem documentação no próprio arquivo, mas você pode ver como usá-lo nas notas de aula (procure nas notas o gerador de XML e o gerador de SVG).

Conceitos

Aqui

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
     Programação em Lógica
     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
         Thread pools
     Passagem de mensagens:
         Passagem de mensagens síncrona e assíncrona

Datas das avaliações:

Bibliografia e ferramentas

Seleção de tópicos das notas de aula

Aqui há uma seleção dos tópicos importantes

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).