UFMG – DCC – ICEX Disciplina: Programação Orientada a Objetos Prof. Marco Túlio Valente Trabalho Prático – Java - Grupos: dois alunos Parte I – Valor: 3 pontos – Entrega: 09/04/2012 (nova data) Implemente em Java uma agenda telefônica simples, conforme descrito a seguir: Dados a serem armazenados: nome, telefone fixo, celular e e-mail. Operações: cadastrar nova entrada na agenda, listar todas as entradas, substituir uma entrada, remover uma entrada. Sugestão: tente usar uma das estruturas de dados padrões de Java. Mais informações: http://docs.oracle.com/javase/1.4.2/docs/api/java/util/package-summary.html Parte II – Valor: 12 pontos – Entrega: 16/04/2012 (nova data) Desenvolver um sistema onde seja possível definir um circuito lógico, e então calcular as saídas desse circuito. O circuito poderá ser constituído das seguintes portas lógicas: AND, OR, NAND, NOR, XOR, XNOR. Dado uma entrada, o programa deve ser capaz de calcular os valores das saídas. Veja um exemplo de circuito que o sistema deverá aceitar: Circuito exemplo 1 No circuito acima, se as entradas forem A = 1, B = 1 e C = 0, o programa deverá retornar D = 1. No circuito não haverá referências circulares, isto é, conexões onde a saída de uma porta lógica seja a entrada da própria porta lógica direta ou indiretamente. O exemplo abaixo, portanto, não precisa ser tratado. Circuito inválido, não haverá circuitos cíclicos Entrada de dados A definição do circuito será realizada no próprio programa, por meio de uma classe com um método responsável por essa tarefa. Mais especificamente, nessa classe poderão ser definidos apenas: a) os valores de entrada do sistema, e b) as portas lógicas e suas ligações. Não poderá informar valores intermediários do circuito nessa classe. Estrutura de classes O aluno deverá definir a estrutura de classes necessária para construir o sistema. No entanto, as seguintes dicas podem ajudar: Observe que os elementos do sistema são portas lógicas. Tente criar uma hierarquia de portas lógicas para seu sistema. Toda porta tem duas entradas e uma saída. Comece implementando um circuito com apenas uma porta, depois faça testes com combinações de portas e atualize seu programa se necessário para suportar mais de uma porta. Exemplo de Implementação A implementação abaixo mostra um sistema lógico com apenas uma porta lógica OR. Esse sistema é bem rústico, uma vez que suporta apenas uma porta, o seu sistema deverá ser bem mais robusto. Uma limitação clara desse sistema, é que a implementação da porta OR não suporta qualquer tipo de ligação com outras portas, o valor de entrada é informado diretamente. //essa classe configura o circuito public class Prototipo { public static void main(String[] args) { PortaOr portaOr = new PortaOr(1, 0); //configuração System.out.println(portaOr.getSaida());//resultado } } //essa classe representa uma porta lógica OR public class PortaOr { int entradaA; int entradaB; public PortaOr(int entradaA, int entradaB) { this.entradaA = entradaA; this.entradaB = entradaB; } public int getSaida(){ //para uma porta OR, se qualquer entrada é 1 a saida é 1 if(entradaA == 1){ return 1; } if(entradaB == 1){ return 1; } return 0; } } Avaliação Os principais aspectos do trabalho a serem avaliados são: Se o sistema compila. Se o resultado do sistema está correto. Se as regras de entrega foram respeitadas. Se cada circuito está definido em uma classe separada e apenas a definição do circuito está contida nessa classe. Organização da arquitetura, hierarquia, interação entre as classes. A organização do código, padrão de nomenclatura e comentários. Trabalhos idênticos ou muito parecidos serão avaliados com nota zero.