Você está na página 1de 5

Herança, Polimorfismo, e Interfaces

1) Criar uma estrutura hierárquica que contenha as seguintes classes:


Veiculo (classe abstracta), Bicicleta e Automóvel.

Os métodos da classe Veiculo são todos abstractos e possuem a seguinte assinatura:


• listarVerificacoes()
• ajustar()
• limpar()

Estes métodos são implementados nas subclasses Automóvel e Bicicleta.


Acrescentar na classe Automóvel o método mudarOleo()

Para desenvolver a classe Teste que é apresentada a seguir é necessário criar também
a classe Oficina que terá dois métodos:
• proximo()que retorna aleatoriamente um objecto do tipo bicicleta ou
automóvel
• manutencao(Veiculo v)que recebe como parâmetro um objecto do
tipo veiculo e chama os métodos definidos na classe veiculo:
• listarVerificacoes()
• ajustar()
• limpar()
• se o veiculo for Automóvel deve também chamar o método
mudarOleo()

class Test{
public static void main(String args[])
{
Oficina o = new Oficina();
Veiculo v;
for(int i=0;i<4;++i)
{
v=o.proximo();
o.manutencao(v);
}
}
}

2) O cálculo do IR deve ser feito da seguinte maneira:


Pessoa Jurídica
O imposto deve corresponder a 10% da renda bruta da empresa.
Pessoa Física
O imposto deve ser calculado de acordo com a seguinte tabela:
Renda Bruta Alíquota Parcela a Deduzir
R$ 0,00 a R$ 1.400,00 0% R$ 0,00
R$ 1.400,01 a R$ 2.100,00 10% R$ 100,00
R$ 2.100,01 a R$ 2.800,00 15% R$ 270,00
R$ 2.800,01 a R$ 3.600,00 25% R$ 500,00
R$ 3.600,01 ou mais 30% R$ 700,00
As classes a seguir devem ser usadas conjuntamente com este enunciado. Elas contêm parte do
código necessário à implementação deste exercício. Você terá que completá-las nos pontos
indicados, de acordo com os objetivos do exercício.

public class PFisica extends Contribuinte


{
protected String cpf;
public PFisica(String n,double r,String c)
{
// inicialização das varáveis de instância
}
public double calcImposto()
{
// Cálculo do imposto
}
}

public class PJuridica extends Contribuinte


{
protected String cnpj;
public PJuridica(String n,double r,String c)
{
// inicialização das varáveis de instância
}
public double calcImposto()
{
// Cálculo do imposto
}
}

public abstract class Contribuinte


{
protected String nome;
protected double rendaBrt;
public static Contribuinte [] listaContr()
{
Contribuinte []lst=new Contribuinte[6];
lst[0]=new PFisica("Joao Santos",3000.00,"11111");
lst[1]=new PJuridica("Lojas AA",150000.00,"10055");
lst[2]=new PFisica("Maria Soares",5000.00,"22222");
lst[3]=new PJuridica("Supermercados B",2000000.00,"10066");
lst[4]=new PFisica("Carla Maia",1500.00,"33333");
lst[5]=new PJuridica("Posto XX",500000.00,"10077");
return lst;
}
public String getNome()
{
return nome;
}

abstract public double calcImposto();


}
public class EX2
{
public static void main(String[] args)
{
Contribuinte []lst;
// obtenha a lista de contribuintes Lst= ;
System.out.printf("NOME IMPOSTO\n");
System.out.printf("==================== =======\n\n");
// coloque aqui o comando for
{
// o printf a seguir deve exibir o nome e o
// imposto que o contribuinte irá pagar
System.out.printf("%-20s %9.2f\n", );
}
}
}

3) Crie uma classe “Produto” que possua os atributos “nomeloja” e “preco”, crie os métodos sets e
gets para estes atributos. Crie também o atributo “descrição” e seu método chamado
“getDescrição” que retorna uma string com o simples conteúdo “Produto de informática”.

Crie duas classes filhas de “Produto”, que serão “Mouse” com o atributo “tipo” e “Livro” com o
atributo “autor”, no método construtor de cada uma dessas classes passe como argumento a
descrição desse produto, por exemplo, Mouse(“Mouse ótico, Saída USB. 1.600 dpi”); Crie o método
“getDescrição” que retorna a descrição que foi passada no argumento do construtor concatenada
com o atributo que a classe tiver, “autor” no caso de livro e “tipo” no caso de mouse, esse método
deve ter a mesma assinatura do método “getDescrição” da classe pai “Produto”.

Crie uma classe “Main” que irá simular a compra de um cliente de vários mouses e livros, deve
haver apenas um vector/arraylist na classe “Main” para armazenamento de todos os livros e
mouses. Esse vector/arraylist deve se chamar “carrinho” que simula o carrinho de compras de
produtos variados de um cliente em um e-commerce. Insira nesse “carrinho” vários mouses e livros
e depois chame o método “getDescrição” de todos os objetos presentes no vector/arraylist. Para o
usuário do carrinho saber as informações dos produtos em seu carrinho.

4) Utilizando interfaces (Java) você pode especificar comportamentos semelhantes para classes
possivelmente não relacionadas ou díspares. Há uma preocupação atual com as pegadas de
carbono (emissões anuais de gás carbônico na atmosfera) a partir de instalações que queimam
vários tipos de combustíveis para aquecimento, veículos que queimam combustíveis para se
mover, e assim por diante. Nesse cenário:
• Crie três pequenas classes não relacionadas por herança - classes Building, Car, e Bicycle. Dê a
cada classe alguns atributos e comportamentos (métodos) únicos que ela não tem em comum com
as outras classes. Sugestões:

- Building: número de pessoas (int), uso de energia renovável (boolean), número de lâmpadas (int),
uso de ar-condicionado (boolean).
- Car: combustível (string), cilindrada (float).
• Escreva uma interface CarbonFootprint com um método getCarbonFootprint. Faça cada uma das
suas classes implementar essa interface, para que seu método getCarbonFootprint calcule uma
pegada de carbono apropriada a cada classe (usando os atributos sugeridos ou outros).

• Escreva um aplicativo que crie 2 objetos de cada uma das três classes. Crie um objeto
ArrayList<CarbonFootprint> e insira as referências dos objetos instanciados nessa coleção.
Finalmente, itere pela coleção, chamando polimoficamente o método getCarbonFootprint de cada
objeto.

Modifique o código, tornando Building uma classe abstrata, e implementando duas novas
subclasses concretas House e School.

• O aplicativo que cria a coleção de objetos vai continuar funcionando após a modificação na
estrutura das classes?
• Modifique o aplicativo para que passe a instanciar diretamente objetos House e School, incluindo-
os na coleção.

5) Considere as seguintes tarefas.


a) Defina a classe Produto
 Os atributos de um produto são: código, descrição e quantidade com a visibilidade protegida
 O construtor deve receber todos atributos por parâmetro
 A classe deve oferecer rotinas tipo “get” para todos os campos
 Deve oferecer uma rotina onde se informa certa quantidade a ser retirada do estoque e
outra onde se informa uma certa quantidade a ser acrescida ao estoque
 A rotina onde se informa uma quantidade a ser retirada do estoque deve retornar a
quantidade que efetivamente foi retirada (para os casos em que havia menos produtos do
que o solicitado)

b) Defina a classe ProdutoPerecivel


 Esta deve ser derivada de Produto
 Possui um atributo extra que guarda a data de validade do produto
 As rotinas por meio das quais se informa as quantidades a serem retiradas ou acrescidas do
estoque devem ser alteradas
 A rotina de retirada deve receber também por parâmetro a data do dia corrente
 Se os produtos já estiverem armazenados há mais de 2 meses a rotina deve zerar o
estoque e devolver 0, pois produtos vencidos são jogados fora
 A rotina de acréscimo no estoque só deve acrescentar os novos produtos caso o estoque
esteja zerado, de maneira a evitar misturar produtos com prazos de validade diferenciados

c) Defina a classe ProdutoPerEsp


 Esta é derivada de ProdutoPerecivel
 Oferece uma rotina de impressão de dados capaz de imprimir uma nota de controle onde
consta o código, a descrição, a quantidade em estoque e a data de validade do produto
d) Defina a classe ProdutoComPreco
 Esta é derivada de Produto
 Deve possuir campos para armazenar o preço unitário do produto
 A classe deve oferecer rotinas para permitir obter o preço unitário, alterar o preço unitário
(sempre positivo)

e) Defina a classe Estoque


 Esta mantém uma lista com os produtos em estoque (do tipo ProdutoComPreco)
 A classe deve ter métodos para cadastrar produtos, consultar produtos, inserir e retirar
produtos do estoque, bem como para informar o custo total do estoque armazenado

6) Considere uma classe com funcionalidades de exibição de texto na tela do computador. Esta
classe recebe o texto e o exibe de diferentes maneiras:
- sem formatação;
- com formatação de estilo: itálico, negrito, ou underline;
- com fonte especial, neste caso o nome da fonte deve ser passado;
- com cor, sendo que um código de cor deve ser passado.
Considere que quem usa esta classe não quer se preocupar com todos os parâmetros necessários
todas vez que for usá-la, mas apenas com os parâmetros que interessam para um determinado
uso.
Escreva o código desta classe – sem preencher os métodos.

7) Imagine um sistema operacional para computadores pessoais. Este sistema usa vários
dispositivos, como vídeo, impressora, mouse, e teclado. São todos dispositivos distintos, mas que
para trabalhar com o dado sistema operacional devem ter as seguintes funcionalidades em seus
drivers:
- ligar/desligar;
- checar status, o que retorna um número indicado a condição do dispositivo;
- calibrar.

Qual solução de projeto você adotaria para que os desenvolvedores de dispositivos pudessem
desenvolver dispositivos para este sistema sem que o código do sistema fosse revelado?
Escreva o correspondente código.

Você também pode gostar