Missão e objetivos, relevância e motivação, relação com outras disciplinas, metodologia, programa, referências, avaliação.
Crise de software, importância econômica e social do desenvolvimento de software de qualidade, aspectos e fatores de qualidade de software.
Programação `in the small' versus `in the large', critérios e princípios de modularidade, impacto sobre reuso e manutenção.
Objetos, classes, métodos, atributos, mensagens, aspectos de análise orientada a objetos, criação e remoção de objetos, tipos primitivos, estruturas de controle, operadores especiais.
Compilador, interpretador e outras ferramentas de desenvolvimento e programação visual.
Classificação, herança simples e múltipla, polimorfismo, `overriding', `dynamic binding', impacto sobre sistema de tipos (conflitos e anomalias), herança versus encapsulamento, herança baseada em comportamento, classes abstratas, `casts', interfaces, interfaces versus classes, `extends' versus `implements', interfaces e reuso de software.
Programação parametrizada, desenvolvimento de software baseado em componentes, impacto sobre reusabilidade, Java com parametrização, herança versus parametrização.
Desenvolvimento rigoroso de software, impacto sobre confiabilidade, especificações como contratos, documentação, asserções, pré e pós condições, invariantes, tratamento de exceções.
Pacotes e diretórios, ocultando informações, nomeação, importação e reuso de pacotes.
Reusando classes da
biblioteca, elementos de GUI, manipulação de arquivos,
persistência e JDBC, trabalhando com URLs e CGI,
desenvolvimento de Applets.
Discussão sobre a análise, projeto e implementação dos sistemas, dicas sobre a utilização das várias APIs de Java.
Paulo Borba (phmb@di.ufpe.br) |