Valores, expressões, tipos básicos, funções,
semântica via reescrita de termos, funções
de alta ordem, tipos estruturados, considerações
sobre prova e transformação de programas.
Tipos de dados - 4h
Tipos enumerados, polimorfismo, tipos recursivos e abstratos,
classificação para sistemas de tipos.
Estado, controle e comandos - 8h
Estado e atribuição, consequências práticas
e teóricas, fluxo de controle, estruturas sequencial, condicional
e repetitiva, iteração versus recursão, não
determinismo, semântica operacional e denotacional para
comandos.
Sistemas de módulos, módulos versus funções
de alta ordem.
Técnicas de Modularização - 2h
De módulos e ADTs para orientação a objetos,
decomposição funcional e orientada por dados, visão
geral de orientação a objetos, vantagens, distribuir
projetos.
Conceitos de Orientação a Objetos e Java
- 4h
Objetos, classes, métodos, atributos, mensagens, criação
e remoção de objetos, tipos primitivos, estruturas
de controle, pacotes, interfaces, operadores especiais.
Classificação, herança simples e múltipla,
polimorfismo, overriding, dynamic binding, impacto sobre sistema
de tipos (conflitos e anomalias).
Alternativas de Projeto - 2h
Classes versus Módulos, Herança versus Parametrização,
Valores versus Objetos.
Alternativas de Projeto - 2h
Herança versus Encapsulamento, Herança versus
Clientela, Herança versus Subtipos (herança sintática
versus herança comportamental, baseada em refinamento).
Alternativas de Projeto - 2h
Objetos e tipos (interfaces), classes abstratas, especialização
de métodos, ativação de métodos múltipla
versus ativação simples, anomalias.