MC336 - Paradigmas de Programação

Turma A - Segundo Semestre de 2009

Conteúdo desta página


Avisos Importantes


Docente e Monitor


Dias, Horários e Local das Aulas

Segundas-feiras às 21h (CB10) e quartas-feiras às 19h (CB07).


Dias, Horários e Local de Atendimento

Na ausência de alunos, o horário de atendimento se encerrará às 18h:30h. Caso deseje usar o horário de atendimento, compareça à sala indica até às 18:30h.

Não haverá horário de atendimento nas semanas das provas nem do exame.


Contato por Email

As dúvidas devem, preferencialmente, ser sanadas em sala de aula ou pessoalmente nos horários de atendimento. Use o atendimento via email apenas como último recurso.

Caso necessite enviar um email com questões relativas à disciplina, este deve ser enviado simultaneamente ao professor e ao monitor e deve conter no subject/assunto o texto “[MC336]” seguido do motivo da mensagem. Exemplos:

Em caso de problemas relacionados a códigos de programas, a mensagem deve conter a explicação completa do problema, a indicação do trecho do código onde aparentemente encontra-se o problema e o programa deve ser enviado em anexo.

Todas as mensagens de alunos devem ser assinada com nome completo e RA.

Mensagens que atendam todas as especificações acima serão respondidas em até 48h, respeitando o horário comercial, de segunda a sexta, das 8h às 18h.

Não haverá atendimento via mensagens instantâneas (MSN, Gmail Talk, etc).


Ementa e Programa

Ementa

Visão comparativa de paradigmas de programação. Programação funcional, lógica e orientada a objetos.

Programa

  1. Programaçãoo Lógica (Prolog): fatos, regras, inferência. Modelo de execução. Listas, operadores e predicados primitivos para números e listas. Cut. Estruturas de controle. Outras linguagens lógicas.
  2. Programação Funcional (Lisp): ênfase em recursão e modularidade; ausência de atribuições, efeitos colaterais em geral e controle de fluxo. Escolha de uma linguagem funcional para ilustrar suas características em relação a tipos, modo de avaliação de expressões e argumentos, operações primitivas, estruturas de dados, funções de funções, entrada e saída de dados.
  3. Programação Orientada a Objetos (Java): abstração de dados, objetos, classes e tipos, herança, hierarquias de generalização/especialização, hierarquias de agregação/decomposição, polimorfismo, classes abstratas, interfaces, pacotes/módulos, tratamento de exceções, metaclasses.

Referências Bibliográficas

Referências básicas:

  1. Lisp + Prolog (Notas de Aulas, João Meidanis)
  2. Introdução a Programação Orientada a Objetos usando Java (Notas de Aulas, Cecília Mary Fischer Rubira)

Livros:

  1. Programming in Prolog: Using the ISO Standard, W.F. Clocksin, C.S. Mellish; Springer, 5th edition (2003)
  2. Practical Common Lisp, Peter Seibel; Apress, 1st edition (2005)
  3. Head First Java, Kathy Sierra & Bert Bates; O’Reilly Media, 2nd edition (2005)
  4. Beginning Programming with Java For Dummies, Barry Burd; For Dummies; 2nd edition (2005)
  5. Java How to Program, Harvey M. Deitel & Paul J. Deitel; Prentice Hall, 7th edition (2007)

Outras referências:

  1. ANSI Common Lisp - Paul Graham. Online chapter: Basic Concepts

  2. Common Lisp the Language, 2nd Edition - Guy L. Steele Jr.

  3. Guide to Prolog Programming - Roman Barták (online tutorial)

  4. Adventure in Prolog (online tutorial)

  5. The Java Tutorials (online tutorial)

  6. Java - How to Program Fifth Edition - Deitel & Deitel


Jogo e Campeonato

Clique aqui.


Listas de Exercícios

Listas de exercícios serão sugeridas nesta página ao longo do semestre. Além de servir para maior fixação do material apresentado em classe, o conteúdo dos exercícios é considerado parte integrante do material visto e será assumido como parte da matéria coberta. Como as listas não farão parte da avaliação, suas soluções não serão coletadas. Os alunos são encorajados a resolver todos os exercícios individualmente e, só posteriormente, realizar discussão em grupo. Quaisquer dificuldades devem ser prontamente discutidas com o professor ou com o monitor nos horários de atendimentos. Dúvidas não sanadas geram mais dúvidas.


Material Didático

Recomenda-se o estudo do programa da disciplina através do material didático preparado pelo professor Cid Carvalho de Souza especialmente para esta disciplina (slides em formato PDF).


Downloads


Avaliação

O curso será dividido em três linguages: Prolog (L1), Lisp (L2), e Java (L3).

A avaliação de cada linguagem será constituída de uma prova (P) e de um projeto baseado em campeonato (C).

Ao longo do curso deverão ser implementados jogadores em Prolog, Lisp e Java, que se enfrentarão em campeonatos.

O campeonato oficial de cada linguagem é um período de 8 dias consecutivos onde serão realizados tantos campeonatos quanto possível (veja datas abaixo). As submissões de jogadores estarão liberadas pelo menos 2 semanas antes do início do campeonato oficial. Cada aluno poderá realizar quantas submissões desejar, antes e até mesmo depois do ínicio do campeonato oficial. Não serão aceitas submissões após o encerramento dos campeonatos oficiais.

A nota do campeonato será dada de acordo com o desempenho dos jogadores em todas as partidas campeonato oficial, sendo assim, para concorrer a nota máxima, os alunos devem submeter seus jogadores antes do início do campeonato oficial.

Ao final do semestre será disputado um “Mega-Campeonato” com os jogadores implementados nas três linguagens. A nota de cada aluno neste último campeonato será dada pela média geométrica das notas obtidas por cada um dos seus 3 jogadores (em Prolog, Lisp e Java). A nota obtida no “Mega-Campeonato” será utilizada como bônus (B) ao fim do semestre. Não haverá submissões específicas para o “Mega-Campeonato”, ou seja, apenas os jogadores submetidos para os campeonatos de Prolog, Lisp e Java poderão participar deste último campeonato.

Veja maiores informações sobre o jogo e o campeonato.

A nota de cada linguagem será dada pela fórmula: Li = (2Pi + Ci)/3, para 1 ≤ i ≤ 3

A nota final antes do exame (N) será calculada pela média geométrica simples das três linguagens utilizando-se a seguinte fórmula: N = (L1 x L2 x L3) 1/3

Se N < 5, o aluno terá direito a fazer o exame. O exame será composto de duas partes. A primeira parte será composta por 3 questões, onde serão solicitadas implementações de predicados, funções e classes, respectivamente, em Prolog, Lisp e Java. A primeira parte do exame terá peso 2/3 e sua nota será calculada pela média geométrica simples entre as três primeiras questões. A segunda parte do exame terá peso 1/3 e será composta de uma ou mais questões, sendo que sua nota será calculada pela média aritmética simples entre as questões da segunda parte.

A nota final da disciplina (F) após o exame (E) será calculada pela fórmula:

Observações:

  1. Não haverá provas ou projetos substitutivos.
  2. As provas e o exame terão de duração de 1:40h e serão realizados sem consulta a qualquer material.
  3. Qualquer tentativa de fraude nas provas ou nos projetos implicará em média do semestre N = 0 (ZERO) para todos os envolvidos, sem prejuízo de outras sanções.
  4. Não será cobrada presença em sala de aula.

Notas

Consulte as notas aqui.


Datas Importantes

Prolog Lisp Java Exame
Prova 16/09/2009 04/11/2009 09/12/2009 21/12/2009
Campeonato
Oficial
19/09/2009
26/09/2009
31/10/2009
07/11/2009
05/12/2009
12/12/2009
15/12/2009
22/12/2009
Notas 28/09/2009 16/11/2009 14/12/2009 23/12/2009

As notas das provas e dos campeonatos serão divulgadas no site da disciplina.

Após corrigidas, as provas poderão ser consultadas nos horários de atendimento do professor, até no máximo duas semanas após a divulgação das notas.

As provas corrigidas não serão levadas a sala de aula.

Não haverá aulas na semana de 28/09/2009 a 02/10/2009, devido as festividades de 40 anos do Instituto de Computação da Unicamp.

Verifique os demais dias sem aulas no Calendário Oficial da Unicamp.