Programação Orientada a Objetos - 2017.1

Grupo da Disciplina: Clique aqui.

Plano de Ensino: Clique aqui (versão atual e completa pode ser acessada via Sigaa).

Horário: Ter 9h50-11h30 e Sex 9h50-11h30

Local: Terça RA 204 e Sexta na RA 203 quando não for no laboratório (RC-201).

Horários dos monitores e tutores: Clique aqui.

Slides e outros Materiais da disciplina: Clique aqui

Exercícios:

  • Exercício 1: Revisão de Java e OO com o exemplo do Sistema de Amigo Secreto

  • Exercício 2: Testes Unit

  • Exercício 3: Exercício sobre listas e testes

  • Exercício 4: Exercício sobre Map

  • Exercícios de Revisão sobre Figuras Geométricas e sobre o SisBula.

  • Exercício 5: Criar repositório GitHub e colocar lá os seguintes itens relativos ao projeto que está fazendo:

    • Diagrama das principais classes que seu sistema

    • Arquivo readme.txt contendo uma descrição do seu projeto e da lista das principais funcionalidades que ele apresenta, além do link para o quadro (board) do trello.com com as atividades planejadas para concluir seu projeto

    • Pasta "src" com o código parcial do seu projeto onde ao menos uma das funcionalidades deve estar implementada por completo, incluindo um teste automático para esta funcionalidade.

    • Arquivo melhorias.txt indicando pontos de melhoria de seu código que você identificou considerando "Bad Smells" (Mau cheiros) do livro sobre Refatoração da Biblioteca do Sigaa

  • Exercício 6: Avaliação parcial do projeto

  • Exercício 7: Roteiro Robocode

  • Exercício 8: Criar uma classe ProdutoraDeMensagens, que é uma Thread que adiciona x vezes uma mensagem em uma lista de mensagens e vai dormir após cada adição (mensagens.wait(tempo)). Criar uma classe ConsumidoraDeMensagens, que também é uma Thread, e compartilha com a outra a mesma lista de mensagens. Essa thread vê se a lista tem alguma mensagem e se tiver, a imprime, retirando-a da lista e terminando sua execução. Caso contrário, ela espera até que alguma mensagem seja colocada na lista. Criar também um programa principal que cria uma thread produtora e 3 consumidoras e as inicia, passando para todas as threads a List<String> correspondente à lista de mensagens. Lembrar de usar blocos synchronized que utilizem como lock a lista de mensagens e de usar wait e notify/notifyAll para esquemas de espera e notificação.

  • Exercício 9: Revisão para terceiro estágio. Entregar em papel até o dia da prova.

Planejamento do Conteúdo:

1a. Unidade:

1.1 Revisão de Orientação a Objetos

1.2 Uso do Framework de Coleções de Java e Generics

1.3 Composição x Herança

1.4 Enums e Annotations

1.5 Documentação de Código

1.6 Teste Automático de Software utilizando JUnit

1.7. Uso de ambientes integrados de desenvolvimento (IDEs).

2a. Unidade:

2.1. Regras básicas de design e refatoramento

2.2 Padrões GRASP e Padrão Facade

2.3. Separação de interesses

2.4 Uso de tecnologias e bibliotecas para a linguagem Java (ex: Android, Swing, Java FX, JSF, Servlets, etc).

3a. Unidade:

3.1 Projeto e Desenvolvimento de Software OO na Prática

3.2 Programação Concorrente em Java.

Aulas:

18/07: Apresentação do plano de curso, detalhando contexto em que se insere o que será aprendido na disciplina.

21/07: Revisão de Java através do Exercício 1

25/07: Dúvidas sobre o Exercício 1. Revisão sobre exceções e listas.

28/07: Exceções, criação do main e de testes de unidade JUnit.

01/08: Exercício 2 (Testes com JUnit)

04/08: Revisão de herança, exceções, modelagem OO, testes e array.

08/08: Revisão de conceitos de OO: sobrecarga, sobrescrita, encapsulamento, instâncias, classes, objetos, interfaces, construtores, exceções checked/unchecked.

11/08: Expotec. Vídeo aula com resolução do Exercício 3.

15/08: Revisão do exercício 3 e introdução ao uso de Map/HashMap.

18/08: Exercício 4 para casa.

22/08: Map/HashMap e Enums. Exercícios de revisão.

25/08: Revisão.

29/08:Primeiro Estágio

01/09: Correção coletiva do primeiro estágio. Introdução ao projeto.

05/09: Uso do github e prática de análise e projeto de software orientado a objetos.

08/09: Dúvidas sobre o projeto.

12/09: Regras básicas de design e refatoramento.

15/09: Noções de requisitos e planejamento de projetos. Uso de bibliotecas (swing)

19/09: Refatoração e noções de Swing em Java.

22/09: Apresentação dos projetos

26/09: Revisão arquivos. Padrões Grasp. Padrão Facade.

29/09: Exercício sobre o projeto

03/10: Acompanhamento de projetos

06/10: Acompanhamento de projetos

10/10: Apresentação dos projetos

13/10: Apresentação dos projetos

17/10: Apresentação dos projetos

20/10: Aula inicial sobre Threads

24/10: Exercício 7: Roteiro Robocode

27/10: Não tivemos aula (ENID). Exercícios para casa (Robocode e conclusão do projeto)

31/10: Não tivemos aula (CBIE). Exercícios para casa (Robocode e conclusão do projeto)

03/11: Aula de dúvidas sobre Threads.

07/11: Sincronização de Threads e Exercício 8.

10/11: Mais detalhes sobre sincronização de threads, uso de wait e notify/notifyAll.

14/11: Exercício de revisão para terceiro estágio a ser entregue em papel.

17/11: Revisão para 3o. estágio.

21/11: Terceiro estágio.

24/11: Reposição

28/11: Apresentação de Projetos

01/12: Final