Desenvolvimento Web – TCC-00.226
Turma A-1 / 2013.2
Professor Leandro A. F. Fernandes
Instituto de Computação Universidade Federal Fluminense
Lista de Exercícios 02
Orientação a Objetos
1) Identifique as classes, atributos e métodos necessários para modelar e implementar:
a) Uma conta corrente que possui um número, um saldo, um status que informa se ela é especial ou não, um limite e um conjunto de movimentações.
b) Uma movimentação que possui uma descrição, um valor e uma informação se ela é uma movimentação de crédito ou débito.
c) Um banco que armazene um conjunto de contas e forneça métodos que permitam que sejam feitos criações de conta, exclusão de contas, saques (uma conta corrente só pode fazer saques desde que o saldo remanescente não seja negativo), depósitos, emissão de saldo e extrato e transferência entre contas.
Uma vez feita a modelagem, aguarde a aulas sobre herança e encapsulamento e implemente as classe em Java.
2) Implemente uma classe Bicicleta para representar uma bicicleta. Toda bicicleta tem uma velocidade (atributo velocidade) e uma marcha (atributo marcha). Além disto, a bicicleta pode: acelerar (método acelerar), frear (método frear) e apresentar o seu estado atual (método imprimirEstados). Em sua construção a classe deve iniciar na marcha 0 (zero) e com velocidade 0 (zero).
Implemente uma segunda classe como sendo a classe principal do sistema. Ela deve ter o método main e ser responsável por criar objetos do tipo bicicletas, interagir com seus métodos e, a cada interação, imprimir da saída padrão o estado atual a bicicleta manipulada. 3) Altere a classe do exercício anterior para que ela apresente um novo atributo que representa a
velocidade máxima desempenhada pela bicicleta. De forma específica:
a) Inclua o atributo velocidadeMaxima, que representa o valor máximo que o atributo velocidade pode apresentar.
b) O valor de velocidadeMaxima deve ser atribuído no momento em que o objeto é criado utilizando um construtor de inicialização. A classe Bicicleta não deverá mais ter construtor padrão.
c) O método imprimirEstados, quando invocado, deve apresentar (na saída padrão) o valor da velocidadeMaxima que foi atribuída ao objeto, além dos valores dos outros atributos.
d) Ao incrementar a velocidade, o objeto deve impedir que a velocidade da bicicleta supere a velocidadeMaxima.
4) Implemente um time de futebol onde cada jogador pode apresentar uma posições táticas. O seu programa deve apresentar:
a) Uma classe Time que deve ter 11 jogadores e métodos que permitam a substituição e consulta dos jogadores atuais.
b) Uma classe Jogador que apresenta uma posição tática, um número e um nome. Crie um construtor para inicializar esses atributos e métodos para consultar seus estados.
c) Um tipo enumerado PosicaoTatica que codifica as seguintes posições: goleiro, zagueiro, lateral, meia e atacante.
A classe principal do programa deve conter apenas o método principal. A partir deste método deverá ser criada uma instância de time, instâncias de jogadores e chamadas aos métodos de atribuição e consulta implementados.
5) Uma moeda apresenta um valor e um tipo monetário. São exemplos de tipos monetários: Real, Dólar ou Euro. Cada tipo monetário apresenta uma cotação em relação ao Real, isto é: R$1,00 vale R$1,00; US$1,00 vale R$2,25; e €1,00 vale R$3,01.
Usando a classe Scanner, escreva um programa que peça para o usuário informar um valor expresso em um dos tipos monetários disponíveis no sistema e o converta para outro dos tipos monetários disponíveis. Os tipos de origem e destino também devem ser escolhidos pelo usuário. O método principal deverá apresentar o resultado da conversão para o usuário via saída padrão.
O nome da classe principal deverá ser ConversorMonetario. O valor informado pelo usuário e o tipo monetário de origem deverão ser utilizados na criação de uma instância da classe Valor. Um tipo monetário é representado pela classe Moeda, que possui como atributos seu nome e valor de conversão para Real.
A classe Valor deverá ter os dois atributos citados anteriormente, um construtor de inicialização, métodos de consulta a seus atributos e um método que recebe como argumento uma instância de Moeda e retorna uma instância de Valor que representa o objeto Valor corrente convertido para a moeda indicada.
6) Implemente uma classe que represente polinômios com uma variável. Esta classe deve conter:
a) Diferentes construtores. b) Métodos de acesso.
c) Operações de adição e multiplicação.
d) Um método que faça a avaliação do polinômio, dado um número real .
Escreva, também, uma classe principal que testa os comportamentos da classe que representa o polinômio.
7) A hierarquia de classificação científica dos seres vivos segue a taxonomia de Lineu. Abaixo é apresentado um sumário parcial do mais geral (reino) para o mais específico (Espécie) na classificação. Neste sumário, Império, Domínio e Sub/Superdivisões são omitidos por simplicidade:
a) Reino
b) Filo (animais) / Divisão (plantas) c) Classe
d) Ordem e) Família f) Gênero g) Espécie
Com base no sumário acima, a classificação do homem, cão e mosca é dada por:
Homem Cão Mosca
Reino Animalia Animalia Animalia
Filo Chordata Chordata Arthropoda
Classe Mammalia Mammalia Insecta
Ordem Primata Carnívora Díptera
Família Hominidae Canidae Muscidae
Gênero Homo Canis Musca
Espécie Homo sapiens Canis familiaris Musca domestica
Fica evidente a partir deste exemplo que existe uma organização hierárquica nas classificações para o homem, cão e mosca. Esta hierarquia pode ser expressão por uma árvore:
Neste exercício:
a) Represente por meio de classes Java a hierarquia de classificação que envolve homem, cão e mosca na taxonomia de Lineu.
b) Em sua modelagem verifique se faz sentido todas as classes serem concretas ou se é preciso definir alguma(s) delas como abstrata(s).
Animalia
Chordata Arthropoda
Mammalia Insecta
Primata Carnívora Díptera
Hominidae Canidae Muscidae
Homo Canis Musca
c) Implemente o método String obterDescricao() em Animalia e sobrescreva este método em toda subclasse, de modo que quando invocado retorne toda a taxonomia de uma dada instância. Por exemplo, para uma instância de Homo sapiens o String retornado seria:
Reino Aimalia Filo Chordata Classe Mammalia Ordem Primata Família Hominidae Gênero Homo
Espécie Homo sapiens
8) De forma incremental, traduza o seguinte conjunto de classes em um programa Java. Importante: Não são permitidas chamadas diretas ou indiretas a System.in, System.out ou similares de dentro das classes criadas.
a) Classe: Porta
Atributos: aberta, cor, dimensaoX, dimensaoY, dimensaoZ
Métodos: void abrir(), void fechar(), void pintar(Cor cor), boolean estaAberta()
Para testar, crie uma porta, abra e feche a mesma, pinte-a de diversas cores (um tipo enumerado criado por você), altere suas dimensões e use o método estaAberta para verificar se ela está aberta.
b) Classe: Casa
Atributos: cor, porta1, porta2, porta3
Método: void pintar(Cor cor), int totalDePortas(), int quantidadeDePortasAbertas()
Para testar, crie uma casa e pinte-a. Crie três portas e coloque-as na casa; abra e feche as mesmas como desejar. Utilize o método quantasPortasEstaoAbertas para imprimir o número de portas abertas.
c) Classe: Edificio
Atributos: cor, totalDePortas, totalDeAndares, portas[] Métodos: void pintar(Cor cor), int totalDePortas(),
int quantasPortasEstaoAbertas(), void adicionarAndar(), void adicionaPorta(Porta p), int totalDeAndares()
d) Para testar, crie um edifício e pinte-o. Crie seis portas e coloque-as no edifício através do método adicionaPorta, abra e feche-as como desejar. Utilize o método quantasPortasEstaoAbertas para imprimir o número de portas abertas e o método totalDePortas para imprimir o total de portas em seu edifício. Crie alguns andares utilizado o método adicionarAndar e retorne o número total de andares utilizando o método totalDeAndares.
e) As classes Casa e Edificio ficaram muito parecidas. Crie a classe Imovel e coloque nela tudo o que Casa e Edificio têm em comum. Faça Imovel superclasse de Casa e Edificio. Note que alguns métodos em comum não poderão ser implementados por Imovel (e.g., quantasPortasEstaoAbertas e totalDePortas). Logo, esses deverão ser declarados como métodos abstratos. 9) Implemente um conjunto de classes que representam uma variação do jogo Batalha Naval.
Nesta variação, o tabuleiro possui 8×8 casas e sobre essas casas são distribuídas três peças, cada uma ocupando uma casa. Cada uma das peças possui uma pontuação (10, 20 e 30 pontos, respectivamente). Elas são caracterizadas por instâncias da classe Peca, sendo
posicionadas aleatoriamente no momento de criação do objeto da classe Tabuleiro. O jogador poderá executar até 5 tiros para tentar atingir as peças. A qualquer momento do jogo o jogador poderá consultar o tabuleiro para verificar quantos pontos fez na partida. Utilize adequadamente o conceito de encapsulamento ao programar as duas classes requeridas. Note que o jogador não poderá ver a localização das peças. Caso contrário fica fácil acertá-las.
10) Crie uma classe abstract de polígono. Todo polígono deve saber calcular sua área. Crie três tipos de especializações, respectivamente, para círculo, retângulo e triângulo. Sobrescreva nas especializações o método abstrato de cálculo de área declarado na classe de polígono. Crie uma classe de polígono complexo que pode ser constituída por um ou mais polígonos. Forneça um método que calcule a área deste de polígonos completos. Utilize o princípio de polimorfismo sempre que possível.
11) A integral de uma função para um determinado intervalo é a soma de sua área naquele intervalo. Ela pode ser calculada numericamente a partir de aproximações de retângulos. Implemente:
a) A classe Integral juntamente com o método
double calcularIntegral(Funcao f, double a, double b),
que recebe um objeto Funcao e um intervalo [a, b] para calcular a integral no intervalo. A classe Integral tem um atributo denominado iD (intervalo de discretização), que corresponde a largura fixa de cada retângulo.
b) A classe Funcao é uma classe abstrata que tem um método
double avaliar(double x), que recebe um valor x e retorna o valor da função em x.
c) Classes Exponencial e Cubica como especializações da classe Funcao para calcular, respectivamente, as funções ( ) = e ( ) = , sobrescrevendo o método avaliar da classe ancestral.
d) Uma classe descendente da classe Funcao denominada FuncaoAgregadora, que tem um vetor de objetos descendentes da classe Funcao. O valor retornado pelo método avaliar de FuncaoAgregadora é obtido por meio da soma de diversas funções que fazem parte desta função.