Monday, November 11, 2013

Treinamento Java 1 Básico - Capítulo 7 - Classes e Objetos


Página 72: Classes e Objetos

Exercício 1: Defina a classe Empregado, contendo os atributos nome e salário. Crie os métodos construtor, seletor e modificador (para cada atributo). Desenvolva as operações para:
a) Calcular e retornar o valor de imposto de renda a ser pago, sabendo que o imposto equivale a 5% do salário.
b) Faça um programa que crie um objeto da classe Empregado (leia o nome e o salário) e informe o nome do funcionário juntamente com o imposto de renda a ser pago.

a) Primeiramente criamos a classe Empregado e depois a classe que servirá de interface:


  1. /*
  2.  * To change this template, choose Tools | Templates
  3.  * and open the template in the editor.
  4.  */
  5. package modelo;

  6. /**
  7.  *
  8.  * @author paulo.cayres
  9.  */
  10. public class Empregado {
  11.     
  12.     private String nome;
  13.     private double salario;

  14.     public Empregado() {
  15.     }
  16.     //Construtor
  17.     public Empregado(String nome, double salario) {
  18.         this.nome = nome;
  19.         this.salario = salario;
  20.     }
  21.    //Método seletor
  22.     public String getNome() {
  23.         return nome;
  24.     }
  25.   //Método modificador
  26.     public void setNome(String nome) {
  27.         this.nome = nome;
  28.     }
  29.   //Método seletor
  30.     public double getSalario() {
  31.         return salario;
  32.     }
  33.  //Método modificador
  34.     public void setSalario(double salario) {
  35.         this.salario = salario;
  36.     }
  37.   //Método que retorna (por isso que é public double) o cálculo do valor do imposto  
  38.     public double calcImpostoDeRenda(){
  39.         return this.salario * 0.05;
  40.     }
  41.     
  42. }
Essa vai ser a classe que irá acessar a classe Empregado


  1. /*
  2.  * To change this template, choose Tools | Templates
  3.  * and open the template in the editor.
  4.  */
  5. package visao;

  6. import java.text.DecimalFormat;
  7. import javax.swing.JOptionPane;
  8. import modelo.Empregado;

  9. /**
  10.  *
  11.  * @author Paulo Henrique Cayres
  12.  */
  13. public class UIEmpregado {
  14.     
  15.     public static void main(String args[]){
  16.         
  17.         Empregado paulo = new Empregado();
  18.         
  19.         paulo.setNome("Paulo Henrique Cayres");
  20.         paulo.setSalario(1234.25);
  21.         
  22.         DecimalFormat df = new DecimalFormat();
  23.         df.applyPattern("R$ #,##0.00");
  24.         
  25.         JOptionPane.showMessageDialog(null, paulo.getNome()+", você terá que pagar "+df.format(paulo.calcImpostoDeRenda())+" de imposto de renda.");
  26.         
  27.     }
  28.     
  29. }
Exercício 2: Defina uma classe Cliente, contendo os atributos: nome e total de despesas que a mesma teve num restaurante. Crie os métodos construtor, seletor e modificador (para cada atributo). Desenvolva as operações para:
a) Calcular e retornar o valor total a ser pago com gorjeta, considerando a taxa de 10%;
b) Faça um programa que crie um objeto da classe Cliente (leia o nome e o total de despesas) e informe o nome do cliente e o valor a ser pago com gorjeta.

a) Primeiro fazer a classe Cliente depois fazer a classe que servirá de interface para chamar a classe Cliente.

  1. /*
  2.  * To change this template, choose Tools | Templates
  3.  * and open the template in the editor.
  4.  */
  5. package modelo;

  6. /**
  7.  *
  8.  * @author paulo.cayres
  9.  */
  10. public class Cliente {
  11.     
  12.     private String nome;
  13.     private double vlrTotalDespesas;
  14.    
  15.    // É necessário criar esse construtor por causa do new na classe que servirá de interface.
  16.     public Cliente() {
  17.     }

  18.    // Método construtor
  19.     public Cliente(String nome, double vlrTotalDespesas) {
  20.         this.nome = nome;
  21.         this.vlrTotalDespesas = vlrTotalDespesas;
  22.     }
  23.     
  24.    // Método que irá acessar o estado de um objeto
  25.     public String getNome() {
  26.         return nome;
  27.     }
  28.     // Método que irá alterar o estado de um  objeto
  29.     public void setNome(String nome) {
  30.         this.nome = nome;
  31.     }
  32.    // Método que irá acessar o estado de um objeto
  33.     public double getVlrTotalDespesas() {
  34.         return vlrTotalDespesas;
  35.     }
  36.    // Método que irá alterar o estado de um  objeto
  37.     public void setVlrTotalDespesas(double vlrTotalDespesas) {
  38.         this.vlrTotalDespesas = vlrTotalDespesas;
  39.     }
  40.    // Método que irá calcular o valor da gorjeta. Repare que é public double por isso tem return.
  41.     public double calcVlrGorjeta(){
  42.         return this.vlrTotalDespesas * 0.1;
  43.     }
  44. }

Essa vai ser a classe que irá acessar a classe Cliente


  1. /*
  2.  * To change this template, choose Tools | Templates
  3.  * and open the template in the editor.
  4.  */
  5. package visao;

  6. import java.text.DecimalFormat;
  7. import javax.swing.JOptionPane;
  8. import modelo.Cliente;

  9. /**
  10.  *
  11.  * @author paulo.cayres
  12.  */
  13. public class UICliente {
  14.     
  15.     public static void main(String args[]){
  16.         
  17.         Cliente paulo = new Cliente();
  18.         
  19.         paulo.setNome(JOptionPane.showInputDialog("Digite seu nome "));
  20.         paulo.setVlrTotalDespesas(Double.parseDouble(JOptionPane.showInputDialog("Digite o total das despesas: ")));
  21.         
  22.         DecimalFormat df = new DecimalFormat();
  23.         df.applyPattern("R$ #,##0.00");
  24.         
  25.         JOptionPane.showMessageDialog(null, paulo.getNome()+", você terá que pagar "+df.format(paulo.calcVlrGorjeta())+" de gorjeta.");        
  26.         
  27.     }
  28. }

Exercício 3: Implemente a classe Triângulo representada abaixo. Crie um programa que leia os 3 lados do triângulo e diga se ele é equilátero, isósceles ou escaleno, utilizando a interface pública do objeto.
// Propriedade: cada lado de um triângulo é menor do que a soma dos outros dois lados.
boolean ehEscaleno() // tem o comprimento de seus 3 lados diferentes
boolean ehEquilatero() // tem o comprimento dos 3 lados iguais
boolean ehIsosceles() // tem o comprimento de 2 lados iguais.

Primeiramente definimos a classe Triângulo:

  1. /*
  2.  * To change this template, choose Tools | Templates
  3.  * and open the template in the editor.
  4.  */
  5. package modelo;

  6. /**
  7.  *
  8.  * @author paulo.cayres
  9.  */
  10. public class Triangulo {
  11.     
  12.     private int lado1;
  13.     private int lado2;
  14.     private int lado3;

  15.    // Método construtor
  16.     public Triangulo(int lado1, int lado2, int lado3) {
  17.         this.lado1 = lado1;
  18.         this.lado2 = lado2;
  19.         this.lado3 = lado3;
  20.     }

  21.     public int getLado1() {
  22.         return lado1;
  23.     }

  24.     public void setLado1(int lado1) {
  25.         this.lado1 = lado1;
  26.     }

  27.     public int getLado2() {
  28.         return lado2;
  29.     }

  30.     public void setLado2(int lado2) {
  31.         this.lado2 = lado2;
  32.     }

  33.     public int getLado3() {
  34.         return lado3;
  35.     }

  36.     public void setLado3(int lado3) {
  37.         this.lado3 = lado3;
  38.     }

  39. //Método que calcula se o triângulo é escaleno
  40.     private boolean ehEscaleno(){
  41.         
  42.         if(this.lado1 != this.lado2 && this.lado1 != this.lado3 && this.lado2 != this.lado3)
  43.             return true;
  44.         else
  45.             return false;
  46.     }

  47.     private boolean ehEquilatero(){
  48.         
  49.         if(this.lado1 == this.lado2 && this.lado2 == this.lado3)
  50.             return true;
  51.         else
  52.             return false;
  53.     }

  54.     private boolean ehIsosceles(){
  55.         
  56.         if(this.lado1 == this.lado2 || this.lado1 == this.lado3 || this.lado2 == this.lado3)
  57.             return true;
  58.         else
  59.             return false;
  60.     }
  61.     
  62.     public String isTriangulo(){
  63.         if (this.ehEquilatero())
  64.             return "O triângulo é Equilátero.";
  65.         else if(this.ehIsosceles())
  66.             return "O triângulo é Isosceles.";
  67.         else if(this.ehEscaleno())
  68.             return "O triângulo é Escaleno.";
  69.         else
  70.             return "As medidas informadas não formam um triângulo!";
  71.         
  72.     }

  73. }
Depois devemos criar a classe que chamará a classe Triângulo


  1. /*
  2.  * To change this template, choose Tools | Templates
  3.  * and open the template in the editor.
  4.  */
  5. package visao;

  6. import javax.swing.JOptionPane;
  7. import modelo.Triangulo;

  8. /**
  9.  *
  10.  * @author Paulo Henrique Cayres
  11.  */
  12. public class UITriangulo {
  13.     
  14.     public static void main(String args[]){
  15.         
  16.         Triangulo triangulo = new Triangulo(3, 4, 5);
  17.         JOptionPane.showMessageDialog(null, triangulo.isTriangulo(),"Tipo do Triângulo",JOptionPane.INFORMATION_MESSAGE);
  18.         
  19.     }
  20.     
  21. }

Exercício 1 pág. 73: Defina uma classe Funcionário, contendo os atributos: nome, salário-base e nível do cargo (I, II ou III). Crie os métodos construtor, seletor e modificador (para cada atributo). Desenvolva as operações para:
a) Calcular o adicional por nível de cargo: não há para nível 1, 10% para nível 2 e 15% para nível 3;
b) Calcular o desconto de Imposto de renda sobre o salário-bruto: não há para salário até 1499,99, 7,5% para salário-bruto até 1999,99, 15% para salário-bruto até 2999,99 e de 20% para salário-bruto acima de 3000,00.
c) Calcular o desconto de Previdência Social: 5% para salário-bruto até 999,99, 9% para salário-bruto até 1799,99 e de 11% para salário-bruto até 3500,00. A partir de 3500,00 é descontado o teto, ou seja, 11% sobre 3500,00 (que é 385,00).
d) Mostrar o contracheque: exibe o nome do funcionário, seu salário-base, adicional, IRRF, INSS e o salário-líquido.
e) Faça um programa que crie um objeto da classe Funcionário (leia o nome, o salário-base e o nível do cargo) e mostre seu contracheque.

  1. /*
  2.  * To change this template, choose Tools | Templates
  3.  * and open the template in the editor.
  4.  */
  5. package modelo;

  6. import java.text.DecimalFormat;

  7. /**
  8.  *
  9.  * @author Paulo Henrique Cayres
  10.  */
  11. public class Funcionario {
  12.     
  13.     private String nome;
  14.     private double salBruto;
  15.     private String nivelCargo;
  16.     private double salLiquido;
  17.     
  18.     private final double TETO = 3500.00;

  19.     public Funcionario() {
  20.     }

  21. //Método construtor
  22.     public Funcionario(String nome, double salBruto, String nivelCargo) {
  23.         this.nome = nome;
  24.         this.salBruto = salBruto;
  25.         this.nivelCargo = nivelCargo;
  26.     }

  27.     public String getNome() {
  28.         return nome;
  29.     }

  30.     public void setNome(String nome) {
  31.         this.nome = nome;
  32.     }

  33.     public double getSalBruto() {
  34.         return salBruto;
  35.     }

  36.     public void setSalBruto(double salBruto) {
  37.         this.salBruto = salBruto;
  38.     }

  39.     public String getNivelCargo() {
  40.         return nivelCargo;
  41.     }

  42.     public void setNivelCargo(String nivelCargo) {
  43.         this.nivelCargo = nivelCargo;
  44.     }

  45. //Método que calcula o adicional dependendo do nível    
  46.     private double calcAdicionalNivel(){        
  47.         if (this.nivelCargo.equals("I"))
  48.             return 0.0;
  49.         else if (this.nivelCargo.equals("II"))
  50.             return this.salBruto * 0.10;
  51.         else if (this.nivelCargo.equals("III"))
  52.             return this.salBruto * 0.15;
  53.         
  54.         return 0.0;
  55.     }

  56.     private double calcDescImpostoRenda(){        
  57.         if (this.salBruto <= 1499.99)
  58.             return 0.0;
  59.         else if (this.salBruto <= 1999.99)
  60.             return this.salBruto * 0.075;
  61.         else if (this.salBruto <= 2999.99)
  62.             return this.salBruto * 0.15;
  63.         else
  64.             return this.salBruto * 0.20;
  65.     }

  66.     private double calcDescPrevicenciaSocial(){
  67.         if (this.salBruto <= 999.99)
  68.             return this.salBruto * 0.05;
  69.         else if (this.salBruto <= 1799.99)
  70.             return this.salBruto * 0.09;
  71.         else if (this.salBruto <= 3500.00)
  72.             return this.salBruto * 0.11;
  73.         else
  74.             return this.TETO * 0.11;
  75.     }
  76.     
  77.     public String exibeContraCheque(){
  78.         
  79.         String frase;

  80.         this.salLiquido = (this.salBruto+this.calcAdicionalNivel()) - (this.calcDescImpostoRenda()+this.calcDescPrevicenciaSocial());
  81.         
  82.         DecimalFormat df = new DecimalFormat();
  83.         df.applyPattern("R$ #,##0.00");
  84.        
  85.         frase = "Contra Cheque";
  86.         frase += "\nSalário Bruto: "+df.format(this.salBruto);
  87.         frase += "\nAdicional: "+df.format(calcAdicionalNivel());
  88.         frase += "\nIRRF: "+df.format(calcDescImpostoRenda());
  89.         frase += "\nINSS: "+df.format(calcDescPrevicenciaSocial());
  90.         frase += "\n\nSalário Líquido: "+df.format(this.salLiquido);
  91.         
  92.         return frase;
  93.     }
  94.     
  95. }


Para chamar a classe Funcionário criamos a classe que chama:


  1. /*
  2.  * To change this template, choose Tools | Templates
  3.  * and open the template in the editor.
  4.  */
  5. package visao;

  6. import javax.swing.JOptionPane;
  7. import modelo.Funcionario;

  8. /**
  9.  *
  10.  * @author Paulo Henrique Cayres
  11.  */
  12. public class UINFuncionario {
  13.     
  14.     public static void main(String args[]){
  15.      
  16.         Funcionario funcionario = new Funcionario("Paulo Henrique Cayres", 1234.56, "II");
  17.         
  18.         JOptionPane.showMessageDialog(null, funcionario.exibeContraCheque());
  19.         
  20.     }    
  21. }


Exercício 2 pág 73:

2) Defina uma classe Produto, contendo os atributos: código, descrição, quantidade disponível e quantidade mínima (os atributos de quantidade não podem ser negativos) e também o preço de venda. Crie os métodos construtor, seletor e modificador (conforme necessário). Desenvolva as operações para:
a) reporEstoque (quantidade): dada uma quantidade comprada, aumentar a quantidade disponível do produto
b) alterarPreco (taxa): dada uma taxa, atualizar o preço de venda do produto
c) darBaixa (quantidade): dada uma quantidade vendida, diminuir a quantidade disponível do produto
d) precisaRepor: informa verdadeiro caso a quantidade disponível seja menor ou igual a quantidade mínima.


Primeiramente criamos a classe Produto:

  1. /*
  2.  * To change this template, choose Tools | Templates
  3.  * and open the template in the editor.
  4.  */
  5. package modelo;

  6. /**
  7.  *
  8.  * @author paulo.cayres
  9.  */
  10. public class Produto {
  11.     
  12.     private int codigo;
  13.     private String nome;
  14.     private double precoVenda;
  15.     private double qtdMinima;
  16.     private double qtdDisponivel;

  17. //Método construtor
  18.     public Produto() {
  19.     }

  20.     public Produto(int codigo, String nome, double precoVenda, double qtdMinima, double qtdDisponivel) {
  21.         this.codigo = codigo;
  22.         this.nome = nome;
  23.         this.precoVenda = precoVenda;
  24.         this.qtdMinima = qtdMinima;
  25.         this.qtdDisponivel = qtdDisponivel;
  26.     }

  27.     public int getCodigo() {
  28.         return codigo;
  29.     }

  30.     public void setCodigo(int codigo) {
  31.         this.codigo = codigo;
  32.     }

  33.     public String getNome() {
  34.         return nome;
  35.     }

  36.     public void setNome(String nome) {
  37.         this.nome = nome;
  38.     }

  39.     public double getPrecoVenda() {
  40.         return precoVenda;
  41.     }

  42.     public void setPrecoVenda(double precoVenda) {
  43.         this.precoVenda = precoVenda;
  44.     }

  45.     public double getQtdMinima() {
  46.         return qtdMinima;
  47.     }

  48.     public void setQtdMinima(double qtdMinima) {
  49.         this.qtdMinima = qtdMinima;
  50.     }

  51.     public double getQtdDisponivel() {
  52.         return qtdDisponivel;
  53.     }

  54.     public void setQtdDisponivel(double qtdDisponivel) {
  55.         this.qtdDisponivel = qtdDisponivel;
  56.     }
  57.     
  58.     public void reporEstoque(int qtd){
  59.         
  60.         this.qtdDisponivel += qtd;
  61.         
  62.     }
  63.     
  64.     public void alterarPreco(double tx){
  65.         
  66.         this.precoVenda += (this.precoVenda * tx) / 100;
  67.         
  68.     }
  69.     
  70.     public boolean darBaixa(int qtd){
  71.         
  72.         if( (this.qtdDisponivel - qtd) >= 0){
  73.             this.qtdDisponivel -= qtd;
  74.             return true;
  75.         }
  76.         else
  77.             return false;
  78.             
  79.     }
  80.     
  81.     public boolean precisaRepor(){
  82.         
  83.         if(this.qtdDisponivel < this.qtdMinima)
  84.             return true;
  85.         else
  86.             return false;
  87.     }
  88.     
  89. }


Segue a interface para executar a classe:

  1. /*
  2.  * To change this template, choose Tools | Templates
  3.  * and open the template in the editor.
  4.  */
  5. package visao;

  6. import java.text.DecimalFormat;
  7. import javax.swing.JOptionPane;
  8. import modelo.Produto;

  9. /**
  10.  *
  11.  * @author paulo.cayres
  12.  */
  13. public class UIProduto {
  14.     
  15.     public static void main(String args[]){
  16.         
  17.         Produto p = new Produto(123, "Arroz", 12.34, 10, 13);
  18.         DecimalFormat df = new DecimalFormat();
  19.         df.applyPattern("R$ #,##0.00");
  20.         
  21.         int op = 5;
  22.         do{
  23.             String menu = "Menu de Opções\n\n1 - Registro da Compra\n2 - Alterar Preço de Venda\n3 - Registro da Venda\n4 - Verificar Reposição\n5 - Sair";
  24.             
  25.             op Integer.parseInt(JOptionPane.showInputDialog(menu));
  26.             switch(op){
  27.                 case 1:
  28.                     int qtdade = Integer.parseInt(JOptionPane.showInputDialog("Informe a quantidade comprada: "));
  29.                     p.reporEstoque(qtdade);
  30.                     break;
  31.                 case 2:
  32.                     double novoPreco = Double.parseDouble(JOptionPane.showInputDialog("Informe o novo preço de venda: "));
  33.                     p.alterarPreco(novoPreco);
  34.                     break;
  35.                 case 3:
  36.                     int qtdVenda = Integer.parseInt(JOptionPane.showInputDialog("Informe a quantidade comprada: "));
  37.                     if(p.darBaixa(qtdVenda))
  38.                         JOptionPane.showMessageDialog(null, "valor total da Venda: "+ df.format((qtdVenda*p.getPrecoVenda())),"Mensagem", JOptionPane.INFORMATION_MESSAGE);
  39.                     else
  40.                         JOptionPane.showMessageDialog(null, "Estoque insuficiente","Mensagem", JOptionPane.INFORMATION_MESSAGE);
  41.                         
  42.                     break;
  43.                 case 4:
  44.                     if(p.precisaRepor())
  45.                         JOptionPane.showMessageDialog(null, "Produto com estoque baixo. Efetuar compra para normalizar estoque.","Mensagem", JOptionPane.INFORMATION_MESSAGE);
  46.                     break;
  47.                 default:
  48.                     
  49.             }
  50.             
  51.         }while(op != 5);
  52.     }
  53.     
  54. }


Exercício 3 página 73: Faça um programa que crie um objeto da classe Produto (leia o código, a descrição e a quantidade mínima desejada) e mostre o menu:
1 - Registro da Compra (reporEstoque).
2 - Alterar Preço de venda (alterarPreco)
3 - Registro da Venda (dada a quantidade desejada do produto, verificar se há estoque. Se sim, dar baixa e informar o valor total da venda; se não, informar 'estoque insuficiente').
4 - Verificar Reposição (precisaRepor)
5 - Fim


Página 80:  Herança

 1) Defina a classe Funcionário, contendo os atributos nome, RG e total de vendas em R$. Crie o método construtor padrão e os métodos seletores e modificadores para cada um de seus atributos.


  1. /*
  2.  * To change this template, choose Tools | Templates
  3.  * and open the template in the editor.
  4.  */
  5. package modelo.exHeranca;

  6. /**
  7.  *
  8.  * @author Aluno
  9.  */
  10. public class Funcionario {
  11.     
  12.     private String nome;
  13.     private String rg;
  14.     private double totVendas;

  15.     public Funcionario(String nome, String rg, double totVendas) {
  16.         this.nome = nome;
  17.         this.rg = rg;
  18.         this.totVendas = totVendas;
  19.     }

  20.     public String getNome() {
  21.         return nome;
  22.     }

  23.     public void setNome(String nome) {
  24.         this.nome = nome;
  25.     }

  26.     public String getRg() {
  27.         return rg;
  28.     }

  29.     public void setRg(String rg) {
  30.         this.rg = rg;
  31.     }

  32.     public double getTotVendas() {
  33.         return totVendas;
  34.     }

  35.     public void setTotVendas(double totVendas) {
  36.         this.totVendas = totVendas;
  37.     }    
  38.     
  39. }


2) Defina a classe Vendedor, contendo o atributo valor comissão. Esta classe é subclasse da classe Funcionário e deverá implementar o método construtor padrão e os métodos seletores e modificadores para cada um de seus atributos. Implemente um método que calcule o retorno o valor da comissão do vendedor, sendo que o valor da comissão é de 5% sobre o valor total das vendas.


  1. /*
  2.  * To change this template, choose Tools | Templates
  3.  * and open the template in the editor.
  4.  */
  5. package modelo.exHeranca;

  6. /**
  7.  *
  8.  * @author Aluno
  9.  */
  10. public class Vendedor extends Funcionario {
  11.     
  12.     public Vendedor(String nome, String rg, double totVendas) {
  13.         super(nome, rg, totVendas);
  14.     }
  15.     
  16.     public double calculaComissao(){
  17.         return getTotVendas()*0.05;
  18.     }
  19.     
  20. }


A interface para chamar a classe acima é:


  1. /*
  2.  * To change this template, choose Tools | Templates
  3.  * and open the template in the editor.
  4.  */
  5. package visao;

  6. import java.text.DecimalFormat;
  7. import modelo.exHeranca.Vendedor;
  8. import modelo.exHeranca.Gerente;

  9. /**
  10.  *
  11.  * @author Aluno
  12.  */
  13. public class UIFuncionario {
  14.     
  15.     public static void main(String[] args) {
  16.         
  17.         Vendedor v = new Vendedor("João da Silva","123456-7",1254.89);
  18.         Gerente g = new Gerente("Maria da Glória", "987654-4",5984.62);
  19.         
  20.         DecimalFormat df = new DecimalFormat();
  21.         df.applyPattern("R$ #,##0.00");
  22.         System.out.println(v.getNome()+" - "+df.format(v.calculaComissao()));
  23.         System.out.println(g.getNome()+" - "+df.format(g.calculaComissao()));
  24.         
  25.     }    
  26. }

3) Defina a classe Gerente, contendo o atributo valor comissão. Esta classe é subclasse da classe Funcionário e deverá implementar o método construtor padrão e os métodos seletores e modificadores para cada um de seus atributos. Implemente um método que calcule o retorno, o valor da comissão do gerente, sendo que o valor da comissão é de 7,5% sobre o valor total das vendas.
4) Desenvolva uma classe executável que instancie um objeto da classe Vendedor e depois calcule e escreva o valor da comissão a qual ele terá direito a receber.
5) Desenvolva uma classe executável que instancie um objeto da classe Gerente e depois calcule e escreva o valor da comissão a qual ele terá direito a receber.


  1. /*
  2.  * To change this template, choose Tools | Templates
  3.  * and open the template in the editor.
  4.  */
  5. package modelo.exHeranca;

  6. /**
  7.  *
  8.  * @author Aluno
  9.  */
  10. public class Gerente extends Funcionario {
  11.     
  12.     public Gerente(String nome, String rg, double totVendas) {
  13.         super(nome, rg, totVendas);
  14.     }
  15.     
  16.     public double calculaComissao(){
  17.         return getTotVendas()*0.075;
  18.     }
  19.     
  20. }

A classe que instancia a classe Gerente é:


  1. /*
  2.  * To change this template, choose Tools | Templates
  3.  * and open the template in the editor.
  4.  */
  5. package visao;

  6. import java.text.DecimalFormat;
  7. import modelo.exHeranca.Vendedor;
  8. import modelo.exHeranca.Gerente;

  9. /**
  10.  *
  11.  * @author Aluno
  12.  */
  13. public class UIFuncionario {
  14.     
  15.     public static void main(String[] args) {
  16.         
  17.         Vendedor v = new Vendedor("João da Silva","123456-7",1254.89);
  18.         Gerente g = new Gerente("Maria da Glória", "987654-4",5984.62);
  19.         
  20.         DecimalFormat df = new DecimalFormat();
  21.         df.applyPattern("R$ #,##0.00");
  22.         System.out.println(v.getNome()+" - "+df.format(v.calculaComissao()));
  23.         System.out.println(g.getNome()+" - "+df.format(g.calculaComissao()));
  24.         
  25.     }    
  26. }


Página 82: Polimorfismo

1) Defina a classe Empregado, contendo os atributos nome e salário. Crie o método construtor padrão e os métodos seletores e modificadores para cada um de seus atributos. Implemente o método aumentarSalario() que aplique e retorne 5% de aumento no salário.

  1. /**
  2.  * a7_heranca: classe Empregado (superclasse)
  3.  * - polimorfismo para aumentarSalario
  4.  */

  5. package modelo.exPolimorfismo;

  6. import java.text.DecimalFormat;

  7. /**
  8.  * Superclasse para Gerente e Programador
  9.  */
  10. public class Empregado {

  11.     protected String nome;
  12.     protected float salario ;

  13.     public Empregado(String nome, float salario) {
  14.         this.nome = nome;
  15.         this.salario = salario;
  16.     }

  17.     public void aumentarSalario(){
  18.         salario = salario * 1.05f ;
  19.     }

  20.     public String getSalario() {
  21.         DecimalFormat df = new DecimalFormat();
  22.         
  23.         df.applyPattern("R$ #,##0.00");
  24.         return df.format(salario);
  25.     }
  26.    
  27. }
Abaixo definimos uma classe que irá criar uma instancia da classe empregado 

  1. /*
  2.  * To change this template, choose Tools | Templates
  3.  * and open the template in the editor.
  4.  */
  5. package visao;

  6. import modelo.exPolimorfismo.Empregado;
  7. import modelo.exPolimorfismo.Gerente;
  8. import modelo.exPolimorfismo.Programador;

  9. /**
  10.  *
  11.  * @author Aluno
  12.  */
  13. public class UIEmpregado {

  14.     public static void main(String[] args) {
  15.         
  16.         Empregado e = new Empregado("Empregado 1", 1250.13f);
  17.         Programador p = new Programador("Empregado 1", 1250.13f);
  18.         Gerente g = new Gerente("Empregado 1", 1250.13f);

  19.         //Repare que está sendo utilizado o método aumentarSalário e SERÁ impresso logo abaixo com
  20. //o método getSalario que está na classe Empregado
  21.         e.aumentarSalario();
  22.         p.aumentarSalario();
  23.         g.aumentarSalario();
  24.         
  25.         System.out.println("Salário do empregado: "+e.getSalario());
  26.         System.out.println("Salário do programador: "+p.getSalario());
  27.         System.out.println("Salário do gerente: "+g.getSalario());
  28.         
  29.     }
  30. }



2) Defina a classe Programador. Esta classe é subclasse da classe Empregado. Implemente o método aumentarSalario() que aplique e retorne 10% de aumento de salário.

  1. /*
  2.  * To change this template, choose Tools | Templates
  3.  * and open the template in the editor.
  4.  */
  5. package modelo.exPolimorfismo;

  6. /**
  7.  *
  8.  * @author paulo.cayres
  9.  */
  10. public class Programador extends Empregado {

  11.     public Programador(String nome, float salario) {
  12.         super(nome, salario);
  13.     }

  14.     @Override
  15.     public void aumentarSalario(){
  16.         salario = salario * 1.1f ;
  17.     }
  18.     
  19. }
Abaixo definimos uma classe que irá criar uma instancia da classe programador


  1. /*
  2.  * To change this template, choose Tools | Templates
  3.  * and open the template in the editor.
  4.  */
  5. package visao;

  6. import modelo.exPolimorfismo.Empregado;
  7. import modelo.exPolimorfismo.Gerente;
  8. import modelo.exPolimorfismo.Programador;

  9. /**
  10.  *
  11.  * @author Aluno
  12.  */
  13. public class UIEmpregado {

  14.     public static void main(String[] args) {
  15.         
  16.         Empregado e = new Empregado("Empregado 1", 1250.13f);
  17.         Programador p = new Programador("Empregado 1", 1250.13f);
  18.         Gerente g = new Gerente("Empregado 1", 1250.13f);

  19.         //Repare que está sendo utilizado o método aumentarSalário e SERÁ impresso logo abaixo com
  20. //o método getSalario que está na classe Empregado
  21.         e.aumentarSalario();
  22.         p.aumentarSalario();
  23.         g.aumentarSalario();
  24.         
  25.         System.out.println("Salário do empregado: "+e.getSalario());
  26.         System.out.println("Salário do programador: "+p.getSalario());
  27.         System.out.println("Salário do gerente: "+g.getSalario());
  28.         
  29.     }
  30. }
3) Defina a classe Gerente. Esta classe é subclasse da classe Empregado. Implemente o método aumentarSalario() que aplique e retorne 15% de aumento no salário.


  1. /**
  2.  * a6_heranca: subclasse
  3.  * - polimorfismo para aumentarSalario
  4.  */


  5. package modelo.exPolimorfismo;

  6. /**
  7.  * Subclasse Gerente de Empregado
  8.  */
  9. public class Gerente extends Empregado {

  10.     public Gerente(String nome, float salario) {
  11.         super(nome, salario);
  12.     }

  13.     @Override
  14.     public void aumentarSalario(){
  15.         salario = salario * 1.15f;
  16.     }
  17. }

Abaixo definimos uma classe que irá criar uma instancia da classe Gerente

  1. /*
  2.  * To change this template, choose Tools | Templates
  3.  * and open the template in the editor.
  4.  */
  5. package visao;

  6. import modelo.exPolimorfismo.Empregado;
  7. import modelo.exPolimorfismo.Gerente;
  8. import modelo.exPolimorfismo.Programador;

  9. /**
  10.  *
  11.  * @author Aluno
  12.  */
  13. public class UIEmpregado {

  14.     public static void main(String[] args) {
  15.         
  16.         Empregado e = new Empregado("Empregado 1", 1250.13f);
  17.         Programador p = new Programador("Empregado 1", 1250.13f);
  18.         Gerente g = new Gerente("Empregado 1", 1250.13f);

  19.         //Repare que está sendo utilizado o método aumentarSalário e SERÁ impresso logo abaixo com
  20. //o método getSalario que está na classe Empregado
  21.         e.aumentarSalario();
  22.         p.aumentarSalario();
  23.         g.aumentarSalario();
  24.         
  25.         System.out.println("Salário do empregado: "+e.getSalario());
  26.         System.out.println("Salário do programador: "+p.getSalario());
  27.         System.out.println("Salário do gerente: "+g.getSalario());
  28.         
  29.     }
  30. }

Página 93: Interfaces

2) Defina uma classe abstrata Veículo, cujos objetos representam veículos, contendo as seguintes informações: número de cilindradas, preço e combustível. Implemente construtor(es), e um método abstrato que possibilite a impressão de todos os atributos do objeto instanciado
a) Defina uma classe Moto, subclasse da classe Veículo, que contenha as seguintes informações adicionais: tipo de motor (2 ou 4 tempos, carburado, etc.) e tipo de freio (ventilado, a disco etc.). Redefina o construtor de objetos da classe e de impressão de suas informações de maneira apropriada.
b) Defina uma classe Carro, subclasse da classe Veículo, que contenha as seguintes informações adicionais: número de passageiros e capacidade do porta-malas. Redefina o construtor de objetos da classe e de impressão de suas informações de maneira apropriada.
c) Defina uma classe Caminhão, subclasse da classe Veículo, que contenha as seguintes informações adicionais: peso do veículo e peso da carga. Redefina o construtor de objetos da classe e de impressão de suas informações de maneira apropriada.
d) Desenvolva uma interface para instanciar um objeto de cada uma das classes implementadas e que imprima uma frase composta por todos os valores de seus atributos próprios e herdados. A classe de interface deverá estar no pacote visão (visão).

a)


  1. /*
  2.  * To change this template, choose Tools | Templates
  3.  * and open the template in the editor.
  4.  */
  5. package modelo;

  6. /**
  7.  *
  8.  * @author Aluno
  9.  */
  10. public abstract class Veiculo {
  11.     
  12.     private int nrCilindradas;
  13.     private double vlrCombustivel;

  14.     public Veiculo(int nrCilindradas, double vlrCombustivel) {
  15.         this.nrCilindradas = nrCilindradas;
  16.         this.vlrCombustivel = vlrCombustivel;
  17.     }

  18.     public int getNrCilindradas() {
  19.         return nrCilindradas;
  20.     }

  21.     public double getVlrCombustivel() {
  22.         return vlrCombustivel;
  23.     }
  24.     
  25. // metodo abstrato que determinara a area
  26.     public abstract String imprime();
  27.     
  28. }



  1. /*
  2.  * To change this template, choose Tools | Templates
  3.  * and open the template in the editor.
  4.  */
  5. package modelo;

  6. /**
  7.  *
  8.  * @author Aluno
  9.  */
  10. public class Moto extends Veiculo{

  11.     private String tipoMotor;
  12.     private String tipoFreio;

  13.     public Moto(int nrCilindradas, double vlrCombustivel) {
  14.         super(nrCilindradas, vlrCombustivel);
  15.     }

  16.     
  17.     public Moto(String tipoMotor, String tipoFreio, int nrCilindradas, double vlrCombustivel) {
  18.         super(nrCilindradas, vlrCombustivel);
  19.         this.tipoMotor = tipoMotor;
  20.         this.tipoFreio = tipoFreio;
  21.     }
  22.     
  23.     
  24.     @Override
  25.     public String imprime() {
  26.         
  27.         return "Informações da Moto\n"+
  28.                 "Nr. Cilindradas: "+this.getNrCilindradas()+"\n"+
  29.                 "Valor Combustível: "+this.getVlrCombustivel()+"\n"+
  30.                 "Tipo Freio: "+this.tipoFreio+"\n"+
  31.                 "Tipo Motor: "+this.tipoMotor;
  32.     }
  33.     
  34. }
b) 

  1. /*
  2.  * To change this template, choose Tools | Templates
  3.  * and open the template in the editor.
  4.  */
  5. package modelo;

  6. /**
  7.  *
  8.  * @author Aluno
  9.  */
  10. public class Carro extends Veiculo {
  11.     
  12.     private int nrPassageiros;
  13.     private int capacidadePortaMalas;

  14.     public Carro(int nrCilindradas, double vlrCombustivel) {
  15.         super(nrCilindradas, vlrCombustivel);
  16.     }

  17.     public Carro(int nrPassageiros, int capacidadePortaMalas, int nrCilindradas, double vlrCombustivel) {
  18.         super(nrCilindradas, vlrCombustivel);
  19.         this.nrPassageiros = nrPassageiros;
  20.         this.capacidadePortaMalas = capacidadePortaMalas;
  21.     }

  22.     @Override
  23.     public String imprime() {
  24.         return "Informações do Carro\n"+
  25.                 this.getNrCilindradas()+"\n"+
  26.                 this.getVlrCombustivel()+"\n"+
  27.                 this.nrPassageiros+"\n"+
  28.                 this.capacidadePortaMalas;
  29.         
  30.     }
  31.  
  32. }
c) 
  1. /*
  2.  * To change this template, choose Tools | Templates
  3.  * and open the template in the editor.
  4.  */
  5. package modelo;

  6. /**
  7.  *
  8.  * @author Aluno
  9.  */
  10. public class Caminhao extends Veiculo {
  11.     
  12.     private double peso;
  13.     private double carga;

  14.     public Caminhao(int nrCilindradas, double vlrCombustivel) {
  15.         super(nrCilindradas, vlrCombustivel);
  16.     }

  17.     public Caminhao(double peso, double carga, int nrCilindradas, double vlrCombustivel) {
  18.         super(nrCilindradas, vlrCombustivel);
  19.         this.peso = peso;
  20.         this.carga = carga;
  21.     }

  22.     @Override
  23.     public String imprime() {
  24.         return "Informações do Carro\n"+
  25.                 this.getNrCilindradas()+"\n"+
  26.                 this.getVlrCombustivel()+"\n"+
  27.                 this.carga+"\n"+
  28.                 this.peso;        
  29.     }
  30. }
d) Interface:
  1. /*
  2.  * To change this template, choose Tools | Templates
  3.  * and open the template in the editor.
  4.  */
  5. package visao;

  6. import modelo.Moto;

  7. /**
  8.  *
  9.  * @author Aluno
  10.  */
  11. public class UIVeiculo {
  12.     
  13.     public static void main(String[] args) {
  14.         
  15.         Moto m = new Moto("4 tempos","a disco",4,2.45);
  16.         javax.swing.JOptionPane.showMessageDialog(null, m.imprime(),"Mensagem",javax.swing.JOptionPane.INFORMATION_MESSAGE);
  17.         
  18.     }
  19.     
  20. }



Exemplo de interface Cartão que servirá para que sejam criadas classes que implementem a interface de acordo com a data comemorativa.


  1. /*
  2.  * To change this template, choose Tools | Templates
  3.  * and open the template in the editor.
  4.  */
  5. package modelo;

  6. /**
  7.  *
  8.  * @author Aluno
  9.  */
  10. public interface Cartao {
  11.     
  12.     public String showMessage();
  13.     
  14. }

Classe Aniversário que implementa a interface Cartão

  1. /*
  2.  * To change this template, choose Tools | Templates
  3.  * and open the template in the editor.
  4.  */
  5. package modelo;

  6. /**
  7.  *
  8.  * @author paulo983
  9.  */
  10. public class Aniversario implements Cartao{

  11.     private String destinatario;

  12.     public Aniversario(String destinatario) {
  13.         this.destinatario = destinatario;
  14.     }

  15.     public String getDestinatario() {
  16.         return destinatario;
  17.     }

  18.     public void setDestinatario(String destinatario) {
  19.         this.destinatario = destinatario;
  20.     }
  21.     
  22.     @Override
  23.     public String showMessage() {
  24.         return "Prezado(a) "+this.getDestinatario()+",\n\n" +
  25.                 "Feliz Aniversário!\n\n" +
  26.                 "Que sua vida seja pontilhada de bons e felizes momentos.\n\n"+
  27.                 "João";
  28.     }
  29.     
  30. }


Classe DiaDosNamorados que implementa a classe Cartão

  1. /*
  2.  * To change this template, choose Tools | Templates
  3.  * and open the template in the editor.
  4.  */
  5. package modelo;

  6. /**
  7.  *
  8.  * @author Aluno
  9.  */
  10. public class DiaDosNamorados implements Cartao{
  11.     
  12.     private String destinatario;

  13.     public DiaDosNamorados(String destinatario) {
  14.         this.destinatario = destinatario;
  15.     }

  16.     public String getDestinatario() {
  17.         return destinatario;
  18.     }

  19.     public void setDestinatario(String destinatario) {
  20.         this.destinatario = destinatario;
  21.     }

  22.     @Override
  23.     public String showMessage() {
  24.         return "Querido(a) "+this.getDestinatario()+",\n\n" +
  25.                 "Feliz Dia dos Namorados! \n\n" +
  26.                 "Espero que esse tenha sido o único cartão do dia dos namorados que tenha ganhado nessa data! \n" +
  27.                 "De todo meu coração,\n\n" +
  28.                 "João";
  29.     }    
  30. }


Classe Natal que implementa a classe Cartão



  1. /*
  2.  * To change this template, choose Tools | Templates
  3.  * and open the template in the editor.
  4.  */
  5. package modelo;

  6. /**
  7.  *
  8.  * @author paulo983
  9.  */
  10. public class Natal implements Cartao {

  11.     private String destinatario;

  12.     public Natal(String destinatario) {
  13.         this.destinatario = destinatario;
  14.     }

  15.     public String getDestinatario() {
  16.         return destinatario;
  17.     }

  18.     public void setDestinatario(String destinatario) {
  19.         this.destinatario = destinatario;
  20.     }

  21.     @Override
  22.     public String showMessage() {
  23.         
  24.         return "Prezado(a) "+this.getDestinatario()+",\n\n" +
  25.                 "Feliz Natal!\n\n"+
  26.                 "A Melhor mensagem de Natal é aquela que sai em silêncio de nossos corações\n"+
  27.                 "e aquece com ternura os corações daqueles que nos acompanham em nossa caminhada pela vida.\n\n"+
  28.                 "João";
  29.     }
  30.     
  31. }

Essa classe chama as outras:


  1. /*
  2.  * To change this template, choose Tools | Templates
  3.  * and open the template in the editor.
  4.  */
  5. package visao;

  6. import javax.swing.JOptionPane;
  7. import modelo.Aniversario;
  8. import modelo.Cartao;
  9. import modelo.DiaDosNamorados;
  10. import modelo.Natal;

  11. /**
  12.  *
  13.  * @author Aluno
  14.  */
  15. public class UICartao {
  16.     
  17.     public static void main(String[] args) {
  18.         
  19. //Repare que foi criado um array de objetos do tipo Cartao
  20.         Cartao[] dn = {new DiaDosNamorados("Cátia"),
  21.                        new Natal("Maria da Glória"),
  22.                        new DiaDosNamorados("Paula"),
  23.                        new Aniversario("Carlos Eduardo")
  24.         };
  25.         
  26.         for(Cartao cartoes : dn)
  27.             JOptionPane.showMessageDialog(null, cartoes.showMessage(),"Mensagem",javax.swing.JOptionPane.INFORMATION_MESSAGE);
  28.         
  29.     }
  30. }

No comments:

Post a Comment