Вы находитесь на странице: 1из 10

GABARITO - Lista de Exerccios 7

1. Implemente a hierarquia de classes Forma abaixo. Cada FormaBidimensional deve conter o mtodo para calcular a rea da forma bidimensional especfica. Cada FormaTridimensional deve ter mtodos para obterArea e ObterVolume para calcular a rea e o volume, respectivamente da forma tridimensional. Crie um programa que utilize um array de referncias Forma para objetos de cada classe concreta na hierarquia. O programa deve imprimir uma descrio de texto ao qual cada elemento no array se refere (mtodo toString()). Alm 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{

private double raio; public Circulo(double r) { this.raio = r; } public double calcularArea() { return raio*Math.PI*Math.PI; } public String toString() { return "Eu sou um Circulo."; } } public class Quadrado extends FormaBidimensional{ private double lado; public Quadrado(double l) { this.lado = l; } public double calcularArea() { return lado*lado; } public String toString() { return "Eu sou um Quadrado."; } }

public class Triangulo extends FormaBidimensional{ private double altura; private double base; public Triangulo(double a, double b) { this.altura = a; this.base = b; } public double calcularArea() { return base*altura/2; } public String toString() { return "Eu sou um Triangulo. "; }

public class Esfera extends FormaTridimensional{

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

public String toString() { return "Eu sou um TetraEdro."; } } public class GeraFormas { public static void main(String[] args) { Forma[] arrayForma = new Forma[6]; // Cria objetos das formas e os instancia em cada posicao do array arrayForma[0] = new Circulo(1.5); arrayForma[1] = new Triangulo(3.0,1.5); arrayForma[2] = new Quadrado(2.0); arrayForma[3] = new Esfera(1.5); arrayForma[4] = new Cubo(2.0); arrayForma[5] = new Tetraedro(2.0,3.0); for (int i=0; i<6 ; i++) { System.out.println(arrayForma[i]); if (arrayForma[i] instanceof FormaBidimensional) System.out.println("Area: " ((FormaBidimensional)arrayForma[i]).calcularArea()); else { System.out.println("Area: " ((FormaTridimensional)arrayForma[i]).obterArea()); System.out.println("Volume: " ((FormaTridimensional)arrayForma[i]).obterVolume()); } } } }

+ + +

2. Modifique a hierarquia de Funcionario (veja lista 5, exercicio 5) para incluir a subclasse ComissionadoPlus (extenso de Comissionado). Esta classe possui o atributo salPlus e os mtodos de acesso a esse atributo privado. O modo como seu salrio calculado tambm e particular: o salrio do funcionario comissionado Plus o salrio base mais a comisso (como um funcionrio comissionado qualquer) mais o salPlus que s esse tipo de funcionrio recebe a mais. Construa mtodos para cada classe concreta que imprima o nome e o salrio de cada objeto (toString() ). Para testar as modificaes crie um programa que instancie um objeto de cada classe concreta e imprima um relatrio com nome e salrio. package aula8; 4

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

} Incluso do mtodo toString() nas classes: CLT: public String toString() { return "Sou o funcionario CLT " + getNome() + " e o meu salario eh R$ " + calculaRendimento(); }

Incluso do mtodo toString() nas classes: Horista: public String toString() { return "Sou o funcionario Horista " + getNome() + " e o meu salario eh R$ " + calculaRendimento(); }

Incluso do mtodo toString() nas classes: Comissionado: public String toString() { return "Sou o funcionario Comissionado " + getNome() + " e o meu salario eh R$ " + calculaRendimento(); }

3. Modifique mais uma vez a hierarquia Funcionrio. Agora voc deve incluir a varivel privada dataAniversario na classe Funcionario. Utilize o diagrama de classe abaixo para determinar a classe Data que representa o aniversrio do funcionrio. Crie mtodos de acesso a seus atributos e o mtodo toString(). Rode um programa teste, com uma instncia de cada subclasse concreta de Funcionrio. Imprima nome e salrio para cada funcionrio mas, conceda um acrescimo de 10% ao salrio de cada funcionrio se for o ms de aniversrio dele.

Na classe Data, valide o dia (intervalo de [1,31] confirme o mes), o ms ([1,12]). O mtodo toString() deve retornar uma data no formato dd/mm/aaaa. 6

package aula7; public class Data { private int dia; private int mes; private int ano; public Data(int d, int m, int a) { mes=validaMes(m); this.ano = a; dia=validaDia(d); } public int validaDia(int dia) { int[] diaDoMes = {0,31,28,31,30,31,31,30,31,30,31,30,31}; // verica se dia esta no intervalo de 0 a 31 if ((dia > 0) && (dia<=diaDoMes[mes])) return dia; // verifica ano bissesto if ((mes==2) && ((ano%400==0) || (ano%4 == 0) || (ano%100 !=0))) return dia; // Caso contrario System.out.println("Dia invalido, sera setado como dia 1."); return 1; // mantm objeto em estado

consistente }

1.");

public int validaMes(int mes) { if ((mes > 0) && (mes<13)) return mes; else { System.out.println("Mes invalido, sera setado como mes return 1; } // mantm objeto em estado

consistente }

public int getMes() { return mes; } public String toString(){

return (dia+"/"+mes+"/"+ano); } } package aula7; import aula8.ComissionadoPlus; public class geraRelatorio { public static void main(String[] args) { Funcionario[] arrayFuncionario = new Funcionario[4]; Data hoje = new Data(01,11,2007); Data data = new Data(10,01,1971); arrayFuncionario[0] = new Horista("Maria de Sa",1209,1500,data, 40,160); data = new Data(14,02,1968); arrayFuncionario[1] = new CLT("Alberto Correa",3456, 1500,data,560); data = new Data(23,05,1957); arrayFuncionario[2] = new Comissionado("Pedro Mello",1348,1500, data,1000); data = new Data(30,11,1978); arrayFuncionario[3] = new ComissionadoPlus("Luciana Pereira",4688,1500, data,1000,3500); for (int i=0; i<4; i++) { if (arrayFuncionario[i].getDataAniversario().getMes() hoje.getMes()) arrayFuncionario[i].setSalBase(arrayFuncionario[i].getSalBase()*1.1); System.out.println(arrayFuncionario[i]); } } } ==

Alterao na classe Funcionario: // atributos private String nome; private int cpf; private double salBase; private Data dataAniversario; // Construtor public Funcionario(String nome, int cpf, double sal, Data data) 8

this.nome = nome; this.cpf = cpf; this.salBase = sal; this.dataAniversario = data;

} // Metodos de Acesso public Data getDataAniversario() { return dataAniversario; } public void setDataAniversario(Data data) { this.dataAniversario = data; }

Alterao na classe CLT: // Construtor public CLT (String nome, int cpf, double sal, Data data, double desconto) { super(nome, cpf, sal); this.desconto = data; } public String toString() { return "Sou o funcionario CLT " + getNome() + " com data de aniversario em " + getDataAniversario() + " e o meu salario eh R$ " + calculaRendimento(); }

Alterao na classe Horista: // Construtor public Horista(String nome, int cpf, double sal, Data data, double vh, double nm) { super(nome, cpf, sal); this.valorHora = valorHora; this.numeroHoras = numeroHoras; } public String toString() { return "Sou o funcionario Horista " + getNome() + " com data de aniversario em " + getDataAniversario() + " e o meu salario eh R$ " + calculaRendimento(); }

Alterao na classe Comissionado: // Construtor

public Comissionado (String nome, int cpf, double sal, Data data, double comissao) { super(nome, cpf, sal); this.comissao = comissao; } public String toString() { return "Sou o funcionario Comissionado " + getNome() + " com data de aniversario em " + getDataAniversario() + " e o meu salario eh R$ " + calculaRendimento(); }

Alterao na classe Comissionado Plus: // Construtor public ComissionadoPlus (String nome, int cpf, double sal, Data data, double comissao, double salplus) { super(nome, cpf, sal, comissao); 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(); }

10

Вам также может понравиться