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í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 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