Programação Orientada a Objetos (2011.1)

UFPB - Campus IV - Curso de Licenciatura em Ciência da Computação

Carga Horária: 60h

Período: 2011.1

Horário:

Quinta: 10h-12h (BC 8 ou Laboratório 1)

Sexta: 10h-12h (BC 8)

Horários de Atendimento: Terça 13-15h e Sexta 13-15h (Sempre combinar antes com a professora)

Horários de Atendimento Presencial dos Monitores: (Sempre tentar entrar em contato com os monitores antes)

Fagner (fagner.silva@dce.ufpb.br)

Terça: 15-17

Quarta: 15-17

Quinta: 10-12 (horário da aula)

Sexta: 8-10

Leonardo (leonardo.araujo@dce.ufpb.br)

Segunda: 8 às 10h

Quarta: 10 às 12h

Quarta: 19 às 21h

Quinta:19 às 21h

Grupo de Discussões: https://groups.google.com/a/dce.ufpb.br/group/poo_comp?hl=pt

Plano de Curso: Baixe aqui

Notas dos Alunos: Clique aqui

Ementa: Práticas avançadas e aplicação de programação Orientada a Objetos na construção de um software. Uso de ambiente integrado de desenvolvimento. Técnicas de depuração. Exploração de bibliotecas de uma linguagem OO.

Objetivos Programáticos: Discutir e exercitar boas práticas no desenvolvimento de software Orientado a Objetos como modularização de código, uso de testes automáticos e técnicas de depuração e refatoramento de código. Introduzir programação concorrente na Linguagem Java. Fazer com que os alunos vivenciem na prática a investigação e uso de novas tecnologias e bibliotecas para a linguagem OO a ser utilizada (Java).

Objetivos Específicos: Capacitar os alunos a desenvolverem software orientado a objetos utilizando boas práticas de programação. Ao final do curso espera-se que o aluno:

  • Reconheça problemas no design de programas orientados a objetos;

  • Saiba desenvolver um software orientado a objetos, testá-lo, depurá-lo e melhorar a estrutura de seu código;

  • Saiba aprender uma tecnologia ou biblioteca OO com que nunca lidou anteriormente;

  • Saiba desenvolver sistemas concorrentes simples.

Conteúdo Programático:

Unidade I: Revisão de Orientação a Objetos; Uso do Framework de Coleções de Java e Generics; Composição x Herança; Enums e Annotations; Documentação de Código; Teste Automático de Software utilizando JUnit e ambientes integrados de desenvolvimento (IDEs).

Unidade II: Regras básicas de design e refatoramento; Padrões GRASP e Padrão Facade; Separação de interesses; Uso de tecnologias e bibliotecas para a linguagem Java (ex: Android, Swing, Java FX, JSF, Servlets, J2ME).

Unidade III: Programação Concorrente em Java.

Avaliação

Duas avaliações escritas principais e um projeto prático ao fim da disciplina cuja defesa será também avaliada. Exercícios individuais ou em grupo, incluindo minitestes e seminários, serão também utilizados em cada unidade e estes poderão valer até 40% da pontuação máxima de cada estágio.

Bibliografia Básica:

  • BLAHA, M. Modelagem e projetos baseados em objetos com UML 2. 2.ed., Elsevier, 2006. 9 exemplares

  • BLOCH, J. Java Efetivo. 2.ed. Alta Books, 2010. 5 exemplares (português) e 3 exemplares (inglês/ 2008)

  • DEITEL, H. M. JAVA como programar. H. M Deitel e P. J. Deitel - 6a ed. Porto Alegre: Prentice-Hall, 2005. 5 exemplares

  • FOWLER, Martin. Refatoração - Aperfeiçoando o Projeto de Código Existente. Bookman, 2004. 0 exemplares

  • FURGERI, Sérgio. Java 6 – Ensino Didático: Desenvolvendo e Implementando Aplicações. 2a ed. São Paulo : Érica, 2010. 5 exemplares

  • HORSTMANN, C. S e Cornell, G. Core Java 2: Volume I – Fundamentos. 7a Edição. Editora Alta Books, 2005. 5 exemplares

  • HORSTMANN, C. Core Java 2 - Volume 2 – Recursos Avançados. Makron Books, 2002. 1 exemplar

  • LARMAN, C. Utilizando UML e Padrões - 3a. ed. Bookman, 2007.

  • ZAKHOUR et al. The Java Tutorial: A Short Course on the Basics. 4th Edition (Java Series). Prentice Hall, 2006. Versão online: http://java.sun.com/docs /books/tutorial/ 10 exemplares

Bibliografia Complementar:

  • ARAUJO, Kleitor Franklint Correa de. Java EE 5. 2a. ed. Erica, 2007. 5 exemplares

  • BARNES, David J.; KÖLLING, Michael. Programação Orientada a Objetos em JAVA: uma introdução prática usando o BLUEJ. Pearson, 2004. 9 exemplares

  • ECKEL, B. Thinking in java. 4th ed. 2008. 3 exemplares

  • FREEMAN, E. Use a cabeça: padrões e projetos. 2.ed. Rio de Janeiro: Alta Books, 2007. 5 exemplares

  • GOODRICH, Michael T., TAMASSIA, Roberto. Estruturas de dados e algoritmos em Java. 2.ed Bookman, 2006. 4 exemplares

  • MESZAROS, Gerard. XUnit Test Patterns. Addison-Wesley, 2007. 7 exemplares

  • ORAM, Andy. Beautiful Code. O’Reilly, 2007. 5 exemplares

  • SANTOS, Rafael. Introdução à Programação Orientada a Objetos Usando JAVA. Rio de Janeiro : Campus, 2003. 9 exemplares

  • SIERRA, K.; BATES, B. Java – Use a Cabeça. Editora Alta Books, 2.edição, 2007. 8 exemplares

  • SIERRA, Kathy. Certificação Sun Para Programador Java 6 Guia de Estudo. AltaBooks, 2008. 5 exemplares (versão 2005)

Exercícios:

  • Exercícios sobre a Agenda:

    • Exercício 1: Miniteste inicial com exercício pode ser baixado aqui

    • Exercício 2: Fazer o main para o programa Agenda

    • Exercício 3: Estender exemplo da Agenda para usar Map (criar uma nova classe que implementa a interface AgendaDeAniversarios, chamada MinhaAgendaDeAniversariosComMap) e criar um main para exercitar a nova classe.

    • Exercício 4: Criar testes JUnit para a classe MinhaAgendaDeAniversariosComMap. Utilize esse código da agenda aqui, que tem bugs, para exercitar seu teste. Há no zip um exemplo de teste para que você se baseie. É importante testar a adição de um mesmo aniversariante duas vezes e a remoção de aniversariantes, para verificar se exceção está sendo lançada. Aproveite para corrigir o(s) bug(s) que detectar no código, sempre fazendo antes um teste que captura o problema identificado.

    • Exercício 5: Estender a Agenda para que o mês de aniversário seja do tipo Enum.

  • Exercício do dia 15/09 (Figura geométrica): O exercício pode ser baixado aqui. Coloque aqui sua solução.

  • Exercício do dia 16/09 (classe Banco): Pode ser baixado aqui.

  • Jogo de Forca (esse todos devem fazer inicialmente): O jogo pode se referir a diferentes áreas do conhecimento. No início do jogo o jogador pode escolher uma delas ou todas. Uma vez iniciado o jogo são mostrados a forca e um conjunto de tracinhos representando a palavra a ser descoberta. A partir daí o jogador sugere letras que possam fazer parte da palavra. Se acertar, os tracinhos (_ _ _ _ _) são preenchidos com a letra indicada nos locais onde ela aparecer na palavra. Caso contrário, na forca vão sendo adicionadas novas partes do corpo do jogador (cabeça, pescoço, corpo, braços e pernas). O jogador tem a chance de pedir dicas também. Se mesmo com a dica ele oferecer uma letra errada, 3 partes do corpo novas aparecerão na forca. O jogador perde quando todo o corpo estiver na forca. O jogo deve guardar os recordes para cada tamanho de palavra, de forma a indicar ao jogador quando ele bater esse recorde (acertar uma palavra daquele tamanho no tempo mínimo).

  • Exercício do dia 03/11: Com base no código da Agenda que pode ser baixado aqui, siga este tutorial para elaborar a sua interface gráfica.

Aulas:

18/08: Apresentação do plano da disciplina e exercício de sondagem sobre o conhecimento de OO.

19/08: Revisão de OO: Definição e implementação de interfaces, construtores, documentação de classes através de Javadoc, Casting, implementação do método "equals" e acompanhamento da execução de programas.

25/08: Revisão de OO: Revisão de Herança, Encapsulamento, Classes Abstratas e Interfaces, Modificadores de Acesso, Criação de Classes e Métodos, Sobrecarga de Métodos, Sobrescrita de Métodos (Override), Polimorfismo. Documentação de classes e interfaces usando Javadoc e a relação com a API Java.

26/08: Instanciação de Objetos (Exemplo usando Agenda e usando a ferramenta Jeliot). Framework de Coleções de Java (interfaces principais e o que as caracteriza) e uso de Generics no Framework. Iterando sobre elementos através de for e for-each.

01/09: Não houve aula. Protesto na entrada de Rio Tinto.

02/09: Aula com o professor Rodrigo sobre Framework de Coleções (iterando sobre coleções com Iterator e utilizando Mapas). Introdução a exceções.

08/09: Exceções. Teste automático de Software usando JUnit.

09/09: Revisão sobre Collections Framework, Exceções e Testes. Enums e Annotations.

15/09: Exercício sobre exceções, listas e testes.

16/09: Exercício sobre testes e Map.

22/09: Herança x Composição. Regras básicas de design e reuso.

23/09: Revisão sobre testes. Introdução a Padrões. Padrões GRASP: Information Expert. Visão geral do padrão Facade e do padrão Strategy.

29/09: Primeira Avaliação

30/09: Padrões GRASP

06/10: Acompanhamento dos projetos (Projeto da fachada e de testes automáticos para ela)

07/10: Mais detalhes sobre o Padrão Facade e os padrões GRASP (Creator, Alta Coesão, Baixo Acoplamento, Expert) e seu uso na prática no projeto Forca.

13/10: Acompanhamento e avaliação parcial dos projetos.

14/10: Regras básicas de design e refatoramento. Exercício de design OO com o projeto Forca.

20/10 e 21/10: Sem aula. SESITEAC

26/10: Aula extra às 13h

27/10: Segundo estágio e Reposição do 1o.

28/10: Padrão Controller e visão geral de Swing em Java.

03/11: Exercício sobre o uso de bibliotecas para criação de interface gráfica.

04/11: Introdução a Threads

10/11: Acompanhamento dos projetos

11/11: Mais sobre Threads em Java. Uso de synchronized e problemas de concorrência entre threads.

17/11: Exercício sobre Robocode e Threads.

18/11: Revisão sobre design OO e o padrão Facade.

24/11: Acompanhamento de projetos e exercício sobre Threads.

25/11: Uso de wait, notify e notifyAll em programas multi-threaded. Início do exemplo do Produtor/Consumidor.

01/12: Mais sobre programas concorrentes.

02/12: Introdução à API de Concorrência de Java. Exemplo do Produtor/Consumidor com BlockingQueue.

08/12: Sem aula. Feriado

09/12 (manhã e tarde) : Apresentação dos Projetos.

16/12: 3o. Estágio.

17/12: Reposição

22/12: PROVA FINAL

SUGESTÕES DE PROJETOS (Projetá-los de forma a facilmente migrá-los para diferentes dispositivos - desktop/celular/tablets/web)

  • Jogo de Tabuleiro com Dados: Jogo em se joga um dado ou se usa um dado eletrônico e que indica o número de casas a andar. Cada casa pode propor um desafio. Caso o jogador acerte, pode avançar e caso erre pode retroceder, vencendo o que chegar primeiro ao final. Desafios podem ser de diferentes áreas do conhecimento (ex: questões do ENEM/ENADE, História, Física, Matemática, etc)

  • Jogo de Imagem e Ação Eletrônico: Semelhante ao jogo anterior e que poderia ser projetado para Tablet utilizando Android. A diferença é que o desafio são palavras sobre as quais se podem fazer mímicas ou desenhar. Além disso, só quem vai fazer a mímica pode ver a palavra desafio. Deve haver um cronômetro marcando o tempo para que a equipe descubra a palavra desafio. O jogo pode oferecer também uma interface para que na própria tela sejam desenhadas as dicas para que a equipe descubra a palavra.

  • Jogo da Memória: Semelhante ao jogo da memória tradicional e pode ter múltiplos jogadores. Deve ser um jogo educativo. A intenção é que ao acertar as cartas iguais deve ser apresentada alguma informação que acrescente novos conhecimentos aos jogadores. Um exemplo de jogo desse tipo é um que explore a nova ortografia brasileira, sendo as cartas palavras que mudaram sua grafia. Quando um jogador acertar um par de palavras, a regra da ortografia é mostrada junto com alguns outros exemplos de palavras que seguem essa regra.

  • Jogo de Atirar em Elementos que vão surgindo na tela representando inimigos e de alcançar elementos representando vidas ou pontos. Deve seguir o modelo desse tipo de jogo, só que de tempos em tempos ou ao atingir pontos como "portas" desafios educacionais devem ser propostos e indicarão se o jogador pode partir para a próxima fase ou não.

  • TODO list adaptativa: Aplicação adaptativa para gerenciar tarefas (TODO List) e usando Android. Ideia é que aplicação guarde tudo que você tem a fazer e ordene essa lista dependendo do ambiente em que você esteja. Existem TODOs da universidade, de casa, do trabalho, de uma viagem, etc. Cada TODO pode ter uma data limite e tem um local associado. Isso pode ser usado inclusive numa viagem, onde se pode cadastrar diferentes locais para ver e dependendo de onde se chega, a aplicação mostra os TODOs ou talvez até anúncios direcionados à sua localização.

  • JGonometria: Jogo para explorar regras da trigonometria quanto aos ângulos complementares. Inspirado na idéia do PyGonometria.

  • JQuimica: Jogo para explorar as nomenclaturas químicas. Inspirado na ideia do PyQuimica.