Análise e Projeto de Sistemas Orientados a Objeto

Período: 2000.1

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

Professor: Jacques Philippe Sauvé

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

Monitor: Não há

Alunos

Aluno Projeto
Benitz de Souza Vasconcelos  
Carlos Alberto O. de Moraes  
Eliane Cristina de Araújo  
Fabiana Paulino Guedes  
Fábio Roberto Pillatt  
Geoflávia Guilarducci de Alvarenga  
Glaucimar da Silva Aguiar  
José Antonio Leal  
Ladjane Silva de Arruda  
Raquel Vigolvino Lopes  

Plano de Aulas

Dia Real Assunto Planejado
3 de abril de 2000 3 abril
4 abril

Verificar a habilidade de programação dos alunos (se sabem OO, se programam muito, em que linguagens)
Anunciar URL da disciplina: http://vulcano.dsc.ufpb.br/jacques/cursos/2000.1/apoo
Ler o livro e o material da HP antes das aulas
Falar da auto-avaliação
Não tem aula durante o período 17/04 a 30/04
Pedir para não imprimir nas impressoras da Universidade
Avisar para todos olharem as datas importantes
Objetivos da disciplina
Programa da disciplina
Projetos e critérios de avaliação

1. Introdução à Análise e Projeto de Sistemas Orientados a Objeto

1.1 Análise e projeto orientados a objeto (Capítulo 1 do livro de Larman)
1.2 Introdução a um processo de desenvolvimento (Capítulo 2)
1.3 Modelos e artefatos (Capítulo 3)

4 abril 4 abril 2. Fase de Planejamento e Elaboração

2.1 Estudo de caso: Terminal Ponto de Venda (PDV) (Capítulo 4)
2.2 Entendendo requisitos (Capítulo 5)
2.3 Use cases: descrição de processos (Capítulo 6)
2.4 Priorização de use cases  (Capítulo 7)

10 abril 10 abril 3. Fase de Análise 1

3.1 Elaboração de um modelo conceitual (Capítulo 9)
3.2 Modelo conceitual: adição de associações (Capítulo 10)

11 abril 10 abril

3.3 Modelo conceitual: adição de atributos (Capítulo 11)
3.4 Construção do glossário (Capítulo 12)

2 maio 11 abril

3.5 Comportamento dinâmico: diagramas de sequência (Capítulo 13)

8 maio   [Buffer de contingência para as aulas]
9 maio 11 abril

3.6 Comportamento dinâmico: contratos (Capítulo 14)

15 maio 9 maio
22 maio
4. Fase de Projeto 1

4.1 Da análise ao projeto (Capítulo 15)
4.2 Projeto arquitetural (Capítulo 22)

16 maio 23 maio

4.3 Descrição de use cases reais (Capítulo 16)
4.4 Diagramas de colaboração (Capítulo 17)

22 maio 29 maio
30 maio

4.5 Padrões para atribuir responsabilidades (Capítulo 18)

23 maio 5 junho

4.6 Projeto de soluções com objetos e padrões (Capítulo 19)

29 maio 5 junho

4.7 Visibilidade (Capítulo 20)

30 maio   [Buffer de contingência para as aulas]
5 junho 6 junho

4.8 Diagramas de classe para a fase de projeto (Capítulo 21)

6 junho 6 junho
19 junho

4.9 Esquema de banco de dados e mapeamento OO-Relacional (Capítulo 38)

12 junho 20 junho
26 junho
5. Fase de Implementação

5.1 Mapeamento do projeto para código (Capítulo 23)
5.2 Programa exemplo em Java (Capítulo 24)
5.3 Testes de unidade
5.4 Adicionando uma interface com o usuário

13 junho 26 junho 6. Fase de Análise 2

6.1 Escolha de requisitos da segunda iteração (Capítulo 25)
6.2 Relacionando múltiplos use cases (Capítulo 26)
6.3 Extensão do modelo conceitual (Capítulo 27)
6.4 Generalização (Capítulo 28)

19 junho 27 junho

6.5 Organizando o modelo conceitual com packages (Capítulo 29)
6.6 Refinamento do modelo conceitual (Capítulo 30)
6.7 Modelo conceitual no estudo de caso (Capítulo 31)

20 junho   [Buffer de contingência para as aulas]
26 junho 27 junho

6.8 Comportamento do sistema: Diagramas de sequência e contratos na segunda iteração (Capítulo 32)
6.9 Comportamento do sistema: Diagramas de estado (Capítulo 33)

27 junho 03 julho 7. Fase de projeto 2

7.1 Polimorfismo

3 julho 03 julho
04 julho

7.2 Interfaces
7.3 Composição versus herança

4 julho 10 julho

7.4 Padrões de Projeto (Design Patterns)

7.4.1 O que são Design Patterns?
7.4.2 Elementos essenciais de um Design Pattern
7.4.3 Design Pattern: Factory Method

10 julho 11 julho

7.4.4 Design Pattern: Iterator
7.4.5 Design Pattern: Composite

11 julho 17 julho

7.4.6 Design Pattern: Strategy
7.4.7 Design Pattern: Decorator

17 julho   [Buffer de contingência para as aulas]
18 julho 25 julho

7.4.8 Design Pattern: Template Method
7.4.9 Design Pattern: Observer

24 julho  

7.4.10 Comentários finais sobre Design Patterns

8. Tópicos Avançados

8.1 Refactoring
8.2 Extreme Programming
8.3 Frameworks
8.4 Componentes

25 julho   [Buffer de contingência para as aulas]
31 julho   [Buffer de contingência para as aulas]

Bibliografia

Atenção! Este é um curso de pós-graduação 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.

Leia pelo menos um livro sobre Análise e Projeto OO, pelo menos um livro sobre UML e pelo menos um livro sobre Java. Quem não fizer isto dificilmente poderá acompanhar a disciplina. Quem o fizer aprenderá muito.

[Sugiro ler "Applying UML and Patterns" pois grande parte do material é tirada deste livro].

Bibliografia sobre OO

  1. Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design, Larman, Prentice-Hall, 1998.
    Isso é nosso livro texto principal. Ver também http://www.phptr.com/larman
    Este livro deve sair em português pela Bookman em abril 2000. Verificar em http://www.artmed.com.br/ (seção Bookman).
  2. Object-Oriented Modeling and Design for Database Applications, Blaha e Premerlani, Prentice Hall, 1998.
  3. Database Design for Smarties, Muller, Morgan Kaufmann Publishers, 1999.
  4. Object Oriented Analysis and Design with Applications, 2nd Ed. Booch, Benjamin/Cummings, 1994.
  5. Design Patterns: Elements of Reusable Object-oriented Software, Gamma, Helm, Johnson e Vlissides, Addison-Wesley, 1995.
    Tradução: Padrões de Projeto, Soluções Reutilizáveis de Software Orientado a Objetos, Ed. Bookman, Porto Alegre, 2000.
  6. Object-Oriented Modeling and Design, Rumbaugh, Blaha, Premerlani, Eddy e Lorensen. Prentice Hall, 1991.
  7. Object-Oriented Software Engineering, Jacobson, Christerson, Jonsson e Overgaard. Addison-Wesley, 1992.
  8. Object-Oriented Systems Analysis, Shlaer e Mellor. Yourdon Press, 1988.
  9. Designing Object-Oriented Software, Wirfs-Brock, Wilkerson e. Wiener. Prentice Hall, 1990.
  10. Mastering Object-Oriented Design in C++, Horstmann, John Wiley, 1995.
  11. The CRC Card Book, Bellin e Simone, Addison-Wesley, 1997.
  12. Object Solutions - Managing the Object-Oriented Project, Booch, Addison-Wesley, 1996.
  13. Surviving Object-Oriented Projects - A Manager's Guide, Cockburn, Addison-Wesley,1998.
  14. Analysis Patterns - Reusable Object Models, Fowler, Addison-Wesley,1997.
  15. Software Reuse - Architecture, Process, and Organization for Business Success, Jacobson, Griss e Jonsson, Addison-Wesley,1997.
  16. Software Project Management - A Unified Framework, Royce, Addison-Wesley,1998.
  17. Applying Use Cases, Schneider e Winters, Addison-Wesley,1998.
  18. Enterprise Computing with Objects - From Client/Server Environments to the Intertnet, Shan e Earle, Addison-Wesley,1998.

Bibliografia sobre UML

  1. UML Toolkit, Eriksson e Penker, John Wiley, 1998.
  2. The Unified Software Development Process, Jacobson, Booch, Rumbaugh, Addison-Wesley, 1999.
  3. The Unified Modeling Language User Guide, Booch, Rumbaugh, Jacobson, Addison-Wesley, 1999.
  4. The Unified Modeling Language Reference Manual, Rumbaugh, Booch, Jacobson, Addison-Wesley, 1999.
  5. UML Distilled: Applying the Standard Modeling Language, Fowler, Addison-Wesley, 1998.
  6. Objects, Components, and Frameworks with UML - The Catalysis Approach, D'Souza e Wills, Addison-Wesley,1999.
  7. Real-Time UML - Developing Efficient Objects for Embedded Systems, Douglass, Addison-Wesley,1998.
  8. Visual Modeling with Rational Rose and UML, Quatrani, Addison-Wesley,1998.
  9. The Object Constraint Language - Precise Modeling with UML, Warmer e Kleppe, Addison-Wesley,1999.

Bibliografia sobre Java

  1. Thinking In Java : The Definitive Introduction To Object-Oriented Programming The Language Of The World Wide Web, Bruce Eckel, Prentice Hall, 1998.
  2. Core Java 2: Volume I - Fundamentals, Horstmann e Cornell, Prentice-Hall, 1999.
  3. The Java Programming Language, Arnold e Gosling, Addison-Wesley, 1998.
  4. ... e centenas de outros livros

Avaliação

O curso é baseado em grande parte num projeto completo não trivial. Uma lista de lista de projetos possíveis é dada aqui mas você poderá desenvolver outro projeto se assim desejar (e se assim me convencer!). Caso seja algo associado a seu trabalho de dissertação de mestrado, 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.

A avaliação será feita com mini-testes dados esporadicamente durante as aulas e com o projeto. O projeto será avaliado através de 5 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. Alunos podem faltar a até 15% dos mini-testes, sem prejuízo. Perde-se 5% do valor da nota dada ao projeto para cada dia de atraso na entrega.

Evento de Avaliação Peso
Mini-testes 50%
Modelo de Use Cases (Requisitos) 5%
Modelo de Análise 10%
Projeto Arquitetural 5%
Modelo de Projeto (Design) 10%
Código final (completude e qualidade) 20%

Datas Importantes

Milestone 1 do projeto (Use Cases) 14/04/2000 (Entregar via email. Vou viajar no dia 15/04/2000)
Milestone 2 do projeto (Análise) 02/05/2000
Milestone 3 do projeto (Projeto Arquitetural) 23/05/2000
Milestone 4 do projeto (Design de baixo nível) 13/06/2000
Milestone 5 do projeto (Entrega final do projeto) 25/07/2000

Recursos

Sobre o Estudo de Caso Utilizado nas Aulas

Sobre OO

Sobre a UML

Sobre Java

Sobre "Boa Programação"

Sobre mapeamento OO-Relacional

Sobre Refactoring

Sobre Frameworks

Sobre Extreme Programming

Sobre Design Patterns

Sobre Pedagogical Patterns

Sobre Testing Patterns