Métodos Avançados de Programação

Período: 2000.2

As Pessoas A Disciplina A Avaliação Outros
Professor Objetivos Forma de avaliação Datas Importantes
Monitor Programa Notas dos Alunos Lista de Discussão
Alunos Plano de Aulas Avaliação da disciplina Recursos
  Bibliografia Projeto  
  Material da disciplina (html on-line) Auto Avaliação  
  Material da disciplina (html zipado) Gabaritos  

Professor: Jacques Philippe Sauvé

Horários das Aulas e de Atendimento a Alunos pelo Professor

Monitor: Não há

Alunos

Aluno Observação
Adriano Laurentino da Silva  
Bruno Gama Catão  
Fabiana Ferreira do Nascimento  
Giselle Regina Chaves da Rocha  
Jarbas Jocênio F. de Lima  
Kalina Ramos Porto  
Karla Maidy Brandão de Souza  
Kylly Araújo de Oliveira  
Raoni Kulesza  
Rodrigo de A. Vilar de Miranda  
Rodrigo Rebouças  
Vivianne da Nóbrega Medeiros  
Wesley Reuel de Paula  

Plano de Aulas

Dia Planejado Dia Realizado

Assunto

27/11/2000   Verificar habilidade de programação dos alunos (se sabem OO, se programam muito, em que linguagens)
Anunciar URL da disciplina: http://www.dsc.ufpb.br/~jacques/cursos/2000.2/map
Pegar lista de alunos com e-mail
Não haverá aula na semana de 20/11/2000
Falar da auto-avaliação
Pedir para não imprimir nas impressoras da Universidade
Avisar para todos olharem as datas importantes
Objetivos da disciplina
Programa da disciplina
Trabalhos e critérios de avaliação

1. Facetas da Reusabilidade de Software

29/11   2. Design Patterns

2.1 O que são Design Patterns?
2.2 Elementos essenciais de um Design Pattern
2.3 Design Pattern: Factory Method

04/12  

2.4 Design Pattern: Iterator
2.5 Design Pattern: Composite

06/12   Entrega dos requisitos funcionais e de interface dos programas a desenvolver

2.6 Design Pattern: Strategy
2.7 Design Pattern: Decorator

11/12   [Buffer de contingência para as aulas]
13/12  

2.8 Design Pattern: Template Method
2.9 Design Pattern: Abstract Factory

18/12  

2.10 Design Pattern: Abstract Factory
2.11 Design Pattern: Observer

20/12  

2.12 Comentários finais sobre Design Patterns

29/01/2001  

3. Software Baseado em Componentes

3.1 O que são componentes?
3.2 Aspectos técnicos do desenvolvimento baseado em componentes

31/01  

3.3 Construção de componentes: JavaBeans

05/02   [Buffer de contingência para as aulas]
07/02   Entrega do primeiro programa

3.3 Construção de componentes: JavaBeans

12/02  

3.4 Server components: Enterprise JavaBeans

14/02   Entrega do segundo programa

3.4 Server components: Enterprise JavaBeans
3.5 A evolução de componentes e comparação de arquiteturas

19/02  

4. Frameworks

4.1 O que é um framework?
4.2 Vantagens e desvantagens no uso de frameworks
4.3 Tipos de frameworks
4.4 Uma lista de frameworks

21/02  

Entrega do terceiro programa

4.5 Detalhamento de um framework horizontal: JUNIT

26/02   [Buffer de contingência para as aulas]
28/02  

4.6 Detalhamento de um framework vertical

05/03  

4.7 Construção de frameworks: Um processo evolutivo. Análise do paper Evolving Frameworks A Pattern Language for Developing Object-Oriented Frameworks

07/03   Entrega do design do framework

5. Refactoring

5.1 O que é refactoring?
5.2 Um primeiro exemplo

12/03  

5.3 Princípios no refactoring

14/03  

5.4 Quando o código fede
5.5 Construção de testes

19/03  

5.6 Algumas técnicas de refactoring

5.6.1 Composição de métodos
5.6.2 Mover funcionalidade entre objetos

21/03   Entrega do framework com 3 aplicações. Uma demo deve ser marcada com o professor.

[Buffer de contingência para as aulas]

26/03  

5.6.3 Organização de dados
5.6.4 Simplificações de expressões condicionais

28/03  

5.6.5 Simplificação de chamadas de métodos
5.6.6 Generalização

02/04  

5.6.7 Refactoring em larga escala

5.7 Comentários finais

04/04   [Buffer de contingência para as aulas]
A definir   Prova Final

Bibliografia

Atenção! Este é um curso avançado e exige-se que você leia o material associado à disciplina antes das aulas. Por este motivo, as aulas terão um ritmo rápido. Leva suas dúvidas para a aula.

Os exemplos da disciplina são dados em Java. Se você não conhece a linguagem, leia um livro sobre Java agora. Recomendamos Thinking in Java.

Espera-se que você leia os livros recomendados. Quem não fizer isto dificilmente poderá acompanhar a disciplina. Quem o fizer aprenderá muito.

Bibliografia Recomendada

  1. [Design Patterns] Design Patterns: Elements of Reusable Object-Oriented Software, Gamma, Helm, Johnson e Vlissides, Addison-Wesley, 1995.
  2. [Componentes] Component Software - Beyond Object-Oriented Programming, Szyperski, Addison Wesley, 1999.
  3. [Frameworks] Building Application Frameworks : Object-Oriented Foundations of Framework Design, Fayad et. al., John Wiley & Sons, 1999.
  4. [Refactoring] Refactoring : Improving the Design of Existing Code, Fowler, Beck, Brant, Opdyke, Roberts, Addison-Wesley, 1999.

Bibliografia Adicional

  1. Java Application Frameworks, Govoni, John Wiley, 1999.
  2. Analysis Patterns - Reusable Object Models, Fowler, Addison-Wesley,1997.
  3. Software Reuse - Architecture, Process, and Organization for Business Success, Jacobson, Griss e Jonsson, Addison-Wesley,1997.
  4. Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design, Larman, Prentice-Hall, 1998.
  5. Objects, Components, and Frameworks with UML - The Catalysis Approach, D'Souza e Wills, Addison-Wesley,1999.

Avaliação

A avaliação será feita através de:

O curso é baseado em grande parte num projeto de desenvolvimento envolvendo os assuntos do curso. Uma alternativa de projeto é dada aqui mas você poderá desenvolver outro projeto se assim desejar (e se assim me convencer!). Caso seja algo associado a seu trabalho de iniciação científica, você deverá trabalhar sozinho. Caso contrário, poderá formar equipe com uma (e apenas uma) pessoa. O projeto é importante e você deverá trabalhar duro para completá-lo. É assim que vai aprender algo.

O projeto será avaliado através de 6 milestones distintos e listados abaixo. Os detalhes do que deve ser entregue para o professor estão aqui.

Os pesos atribuídos aos vários eventos de avaliação são indicados abaixo. Perde-se 5% do valor da nota dada a um milestone do projeto para cada dia de atraso na entrega.

Evento de avaliação

Peso

Minitestes 50%
Entrega dos requisitos funcionais e de interface dos programas a desenvolver 5%
Entrega do primeiro programa 10%
Entrega do segundo programa 5%
Entrega do terceiro programa 5%
Entrega do design do framework 15%
Entrega do framework com 3 aplicações 10%

Datas Importantes

Entregue via e-mail para jacques@dsc.ufpb.br, mesmo que não haja aula na data especificada, por algum motivo.

Entrega dos requisitos funcionais e de interface dos programas a desenvolver 06/12/2000
Entrega do primeiro programa 07/02/2001
Entrega do segundo programa 14/02/2001
Entrega do terceiro programa 21/02/2001
Entrega do design do framework 11/04/2001
Entrega do framework com 3 aplicações

(Marque uma demo com o professor)

23/04/2001

Recursos

Outras Disciplinas do Professor Com Assuntos Relacionados

Sobre Orientação a Objetos em Geral

Sobre o Framework de Testes JUNIT (para Java)

Sobre Design Patterns

Sobre Pedagogical Patterns

Sobre Testing Patterns

Sobre Componentes

Sobre Frameworks

Sobre Refactoring

Sobre Extreme Programming