UFPR · DELT · Contact
Especificação de Trabalhos TE253

Trabalho 1
Desenvolva um programa em Java para gerenciar notas de estudantes das diversas disciplinas do curso de Engenharia Elétrica da UFPR. O programa deve contemplar:
  1. Cadastro, consulta e exclusão de estudantes.
  2. Cadastro, consulta e exclusão de professores.
  3. Cadastro, consulta e exclusão de disciplinas. A disciplina contempla uma ementa, carga horária e referências. Um estudante pode participar de várias turmas. Um professor pode ser responsável por várias turmas. Considere que uma turma pode ter apenas um professor.
  4. Cadastro, consulta e exclusão de turmas. Uma turma é a realização de uma disciplina, com um professor responsável e seus alunos.
  5. O programa deve permitir que sejam inseridas as notas dos estudantes.
  6. Devem ser diponibilizados os seguintes relatórios: estudantes aprovados por turma, estudantes reprovados por turma, professor por turma, estudante por turma.
  7. A interface com o usuário deve ser do tipo texto.
  8. Para apresentação, o código deve criar por default 3 turmas com 10 estudantes cada.
Este trabalho pode ser desenvolvido por equipes de até dois alunos.
O trabalho deve ser apresentado no dia 04/04/2014, durante a aula prática.
Peso deste trabalho na nota final: 10%.

Critérios de Avaliação.
  1. Até 100% da nota: Uso adequado da orientação objetos. Uso adequado da herança. Funcionamento sem erros.
  2. Até 75% da nota: Uso adequado da orientação objetos. Uso adequado da herança. Funcionamento com eventuais erros.
  3. Até 50% da nota: Alguns erros no uso da orientação objetos. Funcionamento com eventuais erros.
  4. Até 25% da nota: Erros no uso da orientação objetos. Funcionamento com muitos erros.

Trabalho 2
Este trabalho irá utilizar o software Robocode para fixar conteúdos na área de programação orientada a objetos. A tarefa será desenvolver um conjunto de robôs com diversas capacidades, variando em complexidade de implementação. Será necessário instalar o software Robocode, que está disponível em http://robocode.sourceforge.net/.
As atividades serão desenvolvidas em 3 partes.
  1. Em uma primeira tarefa, você deve desenvolver os seguintes robôs:
    • Caminhador1. Se movimenta 100 pixels a cada rodada, e quando atingir uma parede reverte a direção.
    • Caminhador2. Se movimenta até o centro do campo. Quando estiver no centro, iniciar um movimento em círculo de aproximadamente 150 pixels de raio.
    • Caminhador3. Se movimenta até o centro do campo, e uma vez no centro escolher randomicamente uma direção entre 0 e 360o e se deslocar sobre esta linha até atingir a parede. Quando atingir a parede, voltar para o centro do campo.
    • Seguidor. Segue os movimentos do primeiro inimigo detectado.
    • Atirador1. Ficar parado. Rotacionar a torre. Quando encontrar um inimigo, atire nele.
    • Atirador2. Ficar parado. Rotacionar a torre. Quando encontrar um inimigo, atire com potência proporcional a distância do seu inimigo.
  2. A segunda tarefa será desenvolver um robô com capacidade de competição. O seu robô deve ser capaz de competir com os robôs Walls, Corners, Crazy, Fire, Tracker, Trackfire e Spinbot, pré-implementados pelo Robocode. Para isso, você deve projetar as ações desejadas para seu robô relacionadas com:
    • Movimento: qual a sua estratégia para movimento do robô?
    • Seleção de alvos: como você pretende encontrar os outros robôs?
    • Tiro: em que circunstâncias você deve atirar nos outros robôs?
    Você deve indicar quais dos robôs podem ser vencidos pelo seu, observando os resultados em 10 rodadas (o Robocode já fornece este resultado).
  3. A terceira tarefa será indicar quais os conceitos de orientação a objetos foram necessários para a implementação do Robocode. Particularmente, você deve responder as seguintes perguntas:
    • Como o Robocode implementa as chamadas a eventos (ex. onHitByBullet(), onHitRobot(), OnHitWall()) ?
    • Onde está o código que atualiza os desenhos na tela? Porque você não teve que se preocupar com isso?
    • Como foram utilizadas classes abstratas, métodos abstratos e interfaces na implementação?
    • Como foram utilizadas Threads na implementação do Robocode? Qual o reflexo na implementação de seu robô?

    Este trabalho pode ser desenvolvido por equipes de até dois alunos.
    O código deve ser desenvolvido pela equipe. No entanto, admite-se que sejam utilizado trechos de códigos de outros, desde que a origem seja citada e o trecho copiado represente menos de 50% do total. Cópias simples serão avaliadas com grau zero (Plágio e Direito do Autor no Universo Acadêmico (PUCRio)). O trabalho deve ser apresentado no dia 09/05/2014, durante a aula prática.
    No dia da apresentação será avaliado o código produzido. Também deve ser entregue um documento escrito respondendo as perguntas realizadas e citando as referências utilizadas.

    Peso deste trabalho na nota final: 10%.

    Dicas:
    • Os métodos ahead(double distance) e back(double distance) avança ou retrocede o robô em uma distância medida em pixels.
    • Os métodos turnLeft(double degrees) e turnRight(double degrees) vira o corpo do robô em um certo número de graus.
    • Os métodos turnGunLeft(double degrees) e turnGunRight(double degrees) vira a arma do robô em um certo número de graus.
    • Os métodos turnRadarLeft(double degrees) e turnRadarRight(double degrees) vira o radar do robô em um certo número de graus.
    • A especificação das classes e métodos está disponível em http://robocode.sourceforge.net/docs/robocode/
    • Uma série de tutoriais sobre o Robocode pode ser encontrado em http://robowiki.net/wiki/Robocode_Basics

Trabalho 3
O objetivo deste trabalho será desenvolver habilidades de programação sockets utilizando a linguagem Java.
Deve ser desenvolvido um programa servidor de rede utilizando o protocolo TCP que permite o cadastro e a visualização de oportunidades de estágio. O servidor deve aguardar conexão em duas portas do protocolo TCP.

A primeira porta deve ser utillizada para o cadastro de oportunidades. A equipe deve propor um protocolo, chamado Simple Internship-Opportunities Registration Protocol (SIORP). O SIORP deve obrigar que o interessado informe o seguinte: nome da empresa, nome do supervisor, telefone, horário, atividades propostas. O programa servidor deve armazenar as oportunidades em um arquivo, que deve ser lido e carregado em memória quando o servidor inicializar.

A segunda porta deve ser utilizada para o acesso das oportunidades. O servidor deve formatar as oportunidades cadastradas utilizando o padrão HTML e responder uma requisição HTTP, gerada por um browser.
O protocolo HTTP recebe uma requisição com a seguinte estrutura: --------------------------------------

GET / HTTP/1.1\r\n
Host: www-users.cselabs.umn.edu
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:29.0) Gecko/20100101 Firefox/29.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
--------------------------------------

O protocolo HTTP responde as requisições da seguinte forma:
--------------------------------------
HTTP/1.1 200 OK
Date: Fri, 16 May 2014 13:59:59 GMT
Content-Type: text/html
Content-Length: 16

resposta em HTML
---------------------------------------

Este trabalho pode ser desenvolvido por equipes de até dois alunos.
O trabalho deve ser apresentado no dia 05/06/2014.
Peso deste trabalho na nota final: 10%.

Critérios de Avaliação.
  1. Até 100% da nota: Funcionamento sem erros.
  2. Até 75% da nota: Funcionamento com eventuais erros.
  3. Até 50% da nota: Funcionamento com muitos erros.
  4. Até 25% da nota: Funcionamento comprometido.

Ponto Extra!:Será considerado extra o desenvolvimento de uma interface gráfica com bom padrão de qualidade na implementação do cliente. Considero como bom padrão de qualidade uma interface que apresente: menu funcional, janelas de entrada de dados (incluindo validações de entradas), ícones de atalho e help.

Voltar para página da TE253