You are on page 1of 10

GABARITO - Lista de Exercícios 7

1. Implemente a hierarquia de classes Forma abaixo. Cada FormaBidimensional deve conter o método para calcular a área da forma bidimensional específica. Cada FormaTridimensional deve ter métodos para obterArea e ObterVolume para calcular a área e o volume, respectivamente da forma tridimensional. Crie um programa que utilize um array de referências Forma para objetos de cada classe concreta na hierarquia. O programa deve imprimir uma descrição de texto ao qual cada elemento no array se refere (método toString()). Além disso, no loop que processa todas as formas do array determine se cada forma é uma forma bidimensional ou tridimensional. Se for uma forma bidimensional, imprima sua área, se for uma forma tridimensional, imprima sua área e o volume.
Forma

FormaBidimensional

FormaTridimensional

Circulo

Quadrado

Triangulo

Esfera

Cubo

Tetraedro

public class Forma { public Forma() {} } public abstract class FormaBidimensional extends Forma{ public FormaBidimensional() {} } public abstract double calcularArea() ;

public abstract class FormaTridimensional extends Forma{ public abstract double obterArea() ; public abstract double obterVolume() ; } public class Circulo extends FormaBidimensional{

this.PI*Math. } public double calcularArea() { return base*altura/2.base = b.".".raio = r. double b) { this. } public String toString() { return "Eu sou um Circulo.lado = l. } public String toString() { return "Eu sou um Triangulo.private double raio. ".altura = a.PI. } public double calcularArea() { return raio*Math. public Quadrado(double l) { this. } } public class Triangulo extends FormaBidimensional{ private double altura. } } public class Esfera extends FormaTridimensional{ 2 . } } public class Quadrado extends FormaBidimensional{ private double lado. } public double calcularArea() { return lado*lado. public Circulo(double r) { this. } public String toString() { return "Eu sou um Quadrado. private double base. public Triangulo(double a.

} public double obterVolume() { return aresta*aresta*aresta. public Esfera(double r) { this. } } public class Tetraedro extends FormaTridimensional{ private double aresta. } public String toString() { return "Eu sou uma Esfera.private double raio. double h) { this.aresta = a.sqrt(3). public Tetraedro(double a. } public double obterVolume() { return (4*Math. } public double obterArea() { return 6*aresta*aresta.sqrt(3).raio = r. public Cubo(double a){ this. } public double obterVolume() { return aresta*aresta*aresta*Math.PI*raio*raio*raio)/3. } 3 ." . } public String toString() { return "Eu sou um Cubo. } public double obterArea() { return aresta*aresta*Math. } } public class Cubo extends FormaTridimensional{ private double aresta. } public double obterArea() { return 4*Math.aresta = aresta." .PI*raio*raio.

0).0.3. // Cria objetos das formas e os instancia em cada posicao do array arrayForma[0] = new Circulo(1. O modo como seu salário é calculado também e particular: o salário do funcionario comissionado Plus é o salário base mais a comissão (como um funcionário comissionado qualquer) mais o salPlus que só esse tipo de funcionário recebe a mais. } } } } + + + 2. } } public class GeraFormas { public static void main(String[] args) { Forma[] arrayForma = new Forma[6].println(arrayForma[i]).calcularArea()).obterVolume()). i<6 .out.obterArea()). arrayForma[5] = new Tetraedro(2. arrayForma[1] = new Triangulo(3.println("Volume: " ((FormaTridimensional)arrayForma[i]). exercicio 5) para incluir a subclasse ComissionadoPlus (extensão de Comissionado). else { System. Para testar as modificações crie um programa que instancie um objeto de cada classe concreta e imprima um relatório com nome e salário.public String toString() { return "Eu sou um TetraEdro.5).println("Area: " ((FormaBidimensional)arrayForma[i]). System. package aula8.".0). arrayForma[4] = new Cubo(2. 4 .5).out.0).1. arrayForma[3] = new Esfera(1. for (int i=0.5). i++) { System.0. arrayForma[2] = new Quadrado(2. Modifique a hierarquia de Funcionario (veja lista 5.out. Esta classe possui o atributo salPlus e os métodos de acesso a esse atributo privado.println("Area: " ((FormaTridimensional)arrayForma[i]).out. if (arrayForma[i] instanceof FormaBidimensional) System. Construa métodos para cada classe concreta que imprima o nome e o salário de cada objeto (toString() ).

*.salPlus = val. i++) System.1000. double comissao. } // Metodos de Acesso public double getSalPlus() { return salPlus. comissao). arrayFuncionario[2] = new Comissionado("Pedro Mello".40. double sal. } public String toString() { return "Sou o funcionario comissionado PLUS " + getNome() + " e o meu salario eh R$ " + calculaRendimento(). sal.1500. this.3500).1500.3456. public class GeraRelatorio { public static void main(String[] args) { Funcionario[] arrayFuncionario = new Funcionario[4]. } 5 .1000).1500.out. double sp) { super(nome.// importa pacote onde esta a classe comissionado (e toda a hierarquia de classe de Funcionario) import aula7. i<4. public ComissionadoPlus(String nome. } public void setComissao(double val) { this. arrayFuncionario[3] = new ComissionadoPlus("Luciana Pereira".560).salPlus = sp.*.4688. public class ComissionadoPlus extends Comissionado{ private double salPlus. arrayFuncionario[0] = new Horista("Maria de Sa". } public double calculaRendimento() { return ((super. //importa pacote onde toda a hierarquia de classe de Funcionario import aula7. } } package aula8.1209. int cpf.calculaRendimento()) + salPlus).160). for (int i=0.println(arrayFuncionario[i]).1348. cpf.1500. arrayFuncionario[1] = new CLT("Alberto Correa".

} 3.} Inclusão do método toString() nas classes: CLT: public String toString() { return "Sou o funcionario CLT " + getNome() + " e o meu salario eh R$ " + calculaRendimento(). o mês ([1. O método toString() deve retornar uma data no formato dd/mm/aaaa. Imprima nome e salário para cada funcionário mas.31] confirme o mes). Na classe Data. Utilize o diagrama de classe abaixo para determinar a classe Data que representa o aniversário do funcionário. Modifique mais uma vez a hierarquia Funcionário. } Inclusão do método toString() nas classes: Comissionado: public String toString() { return "Sou o funcionario Comissionado " + getNome() + " e o meu salario eh R$ " + calculaRendimento(). Rode um programa teste.12]). com uma instância de cada subclasse concreta de Funcionário. Crie métodos de acesso a seus atributos e o método toString(). 6 . } Inclusão do método toString() nas classes: Horista: public String toString() { return "Sou o funcionario Horista " + getNome() + " e o meu salario eh R$ " + calculaRendimento(). Agora você deve incluir a variável privada dataAniversario na classe Funcionario. valide o dia (intervalo de [1. conceda um acrescimo de 10% ao salário de cada funcionário se for o mês de aniversário dele.

out."). public int validaMes(int mes) { if ((mes > 0) && (mes<13)) return mes.package aula7. dia=validaDia(d). } public int validaDia(int dia) { int[] diaDoMes = {0.31.31.31. sera setado como mes return 1. } // mantém objeto em estado consistente } public int getMes() { return mes. // verica se dia esta no intervalo de 0 a 31 if ((dia > 0) && (dia<=diaDoMes[mes])) return dia.28.30.out. } public String toString(){ 7 .").31. sera setado como dia 1.println("Dia invalido.30. return 1. int m.30. public Data(int d. private int mes. this. int a) { mes=validaMes(m).31. // mantém objeto em estado consistente } 1.println("Mes invalido. private int ano.31.31}. else { System.ano = a. // verifica ano bissesto if ((mes==2) && ((ano%400==0) || (ano%4 == 0) || (ano%100 !=0))) return dia. public class Data { private int dia. // Caso contrario System.30.

1978).1500. data = new Data(23. // Construtor public Funcionario(String nome. Data data = new Data(10. int cpf. private int cpf.getMes() hoje. public class geraRelatorio { public static void main(String[] args) { Funcionario[] arrayFuncionario = new Funcionario[4]. arrayFuncionario[2] = new Comissionado("Pedro Mello".1209. arrayFuncionario[1] = new CLT("Alberto Correa". } } } == Alteração na classe Funcionario: // atributos private String nome.getDataAniversario().11. data = new Data(30.out.3500). 40.1500.160).data. arrayFuncionario[0] = new Horista("Maria de Sa".1348.4688. } } package aula7. private double salBase.1968). System.1971).560). Data hoje = new Data(01.11.1000). arrayFuncionario[3] = new ComissionadoPlus("Luciana Pereira". Data data) 8 . for (int i=0. data. double sal. import aula8.getSalBase()*1.getMes()) arrayFuncionario[i].2007). data. data = new Data(14. i<4.1957).println(arrayFuncionario[i]).setSalBase(arrayFuncionario[i]. 1500.return (dia+"/"+mes+"/"+ano).3456.1500.data. private Data dataAniversario.1000.02.1). i++) { if (arrayFuncionario[i].ComissionadoPlus.01.05.

valorHora = valorHora. } Alteração na classe Horista: // Construtor public Horista(String nome.{ this. Data data. this. this.salBase = sal. double sal. this. int cpf. double vh. this. double nm) { super(nome. sal). Data data. cpf. } // Metodos de Acesso public Data getDataAniversario() { return dataAniversario. sal). int cpf. } public String toString() { return "Sou o funcionario Horista " + getNome() + " com data de aniversario em " + getDataAniversario() + " e o meu salario eh R$ " + calculaRendimento(). this.nome = nome. double desconto) { super(nome. cpf. double sal. } public String toString() { return "Sou o funcionario CLT " + getNome() + " com data de aniversario em " + getDataAniversario() + " e o meu salario eh R$ " + calculaRendimento(). } Alteração na classe CLT: // Construtor public CLT (String nome.desconto = data. } public void setDataAniversario(Data data) { this.dataAniversario = data.cpf = cpf.numeroHoras = numeroHoras. this. } Alteração na classe Comissionado: // Construtor 9 .dataAniversario = data.

int cpf. double comissao) { super(nome. cpf. double salplus) { super(nome. double comissao. } Alteração na classe Comissionado Plus: // Construtor public ComissionadoPlus (String nome. Data data. sal). double sal. int cpf. } 10 . this.salplus = salplus. } public String toString() { return "Sou o funcionario ComissionadoPlus " + getNome() + " com data de aniversario em " + getDataAniversario() + " e o meu salario eh R$ " + calculaRendimento().public Comissionado (String nome. cpf. comissao).comissao = comissao. this. Data data. sal. double sal. } public String toString() { return "Sou o funcionario Comissionado " + getNome() + " com data de aniversario em " + getDataAniversario() + " e o meu salario eh R$ " + calculaRendimento().