UFPR · DELT · Contact
Programação Básica em Java
Esta aula aborda os seguintes conceitos:
  1. Representação de dados em memória.
  2. Herança e polimorfismo.
Representação de dados em memória: valor e referência
A linguagem Java representa os tipos primitivos por valor e os demais (objetos e vetores) por referência. Anote as explicações da aula. Para referência, ver http://www.javabuilding.com/academy/java-language/objectos-variaveis-e-referencias.html
Considere o seguinte código:
public class Deposito {
   private int saldo;
   public Deposito(int x) {
     saldo = x;
   }
   public int getSaldo() {
     return saldo;
   }
   public void setSaldo(int saldo) {
     this.saldo=saldo;
   }
}

public class TesteDeposito {
 public static void main(String args[]) {
       Deposito d1, d2;
       int x;

       d1 = new Deposito(100);

       System.out.printf("\nSaldo: %d\n",d1.getSaldo());
  
       x=200;  
       d1.setSaldo(x); 
       d2 = d1;
 
       System.out.printf("\nSaldo: %d\n",d2.getSaldo());
    }
}
  1. Com relação ao código acima, responda as seguintes perguntas:
    1. Descreva como os objetos d1 e d2 são representados em memória. Desenhe um diagrama.
    2. Descreva como a variável x é representada em memória. Quais os tipos primitivos do Java?
    3. O que ocorreria se fosse suprimida a linha "d1 = new Deposito(100);"
    4. Porque a chamada d1.getSaldo() e d2.getSaldo() retorna o mesmo valor?
  2. A representação de vetores em Java também é por referência. Escreva uma programa que ordena um vetor de inteiros digitados pelo usuário. (solução: Ordena.java
  3. Escreva um programa que cria um vetor de objetos do tipo Depósito, inicializados com saldo digitado pelo usuário. (solução: Deposito.java e VetorDeposito.java


Herança e Polimorfismo
  1. Ver exemplo em http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html
  2. Considere o seguinte código:
    public class Pai {
    
        public int a, b;    
    
        public void teste1() {
           System.out.println("\n1");
        }
        public void teste2() {
           System.out.println("\n2");
        }
        Pai() //Construtor
        {
           System.out.println("\nConstrutorPai");
           a=1;
           b=1;
        }
    }
    
    public class Filho extends Pai {
        
        public int b,c;
    
        public void teste2() {
           System.out.println("\n3");
        }
        public void teste3() {
           System.out.println("\n4");
        }
        Filho() //Construtor 
        {
           System.out.println("\nConstrutorFilho");
           b=2;
           c=2;
        }
    }
    
    Com relação ao código acima, responda as seguintes perguntas:
    • Suponha que seja criado um objeto do tipo Filho. Verifique qual a ordem de chamada dos construtores.
    • Suponha que seja criado um objeto do tipo Filho. As chamadas aos métodos teste1(), teste2(), e teste3() correspondem a qual código?
    • Suponha que o programador da classe Filho deseja re-escrever o método teste2() fazendo uma chamada ao método teste2() da classe Pai. Mostre como isso pode ser feito.
    • Suponha que seja criado um um objeto do tipo Filho. Qual o valor do atributo a, b e c? Em qual classe cada atribudo foi definido? Em qual classe cada atributo foi inicializado?
    • Suponha que seja criada uma classe Avô. A classe pai foi extendida da classe avô. A classe filho foi extendida da classe pai. Quando foi criada um objeto do tipo filho, qual a ordem de chamada dos construtores?
    • Suponha que a classe Avô defina o atributo a do tipo inteiro, e em seu construtor seja atribuído o valor inicial 0. Um objeto do tipo Filho possuirá um atributo a com qual valor inicial?
  3. Suponha um programa para calcular salários de funcionários de uma empresa. Nesta empresa, todos os funcionários possuem um salário base. O salário é calculado através do salário base, somado ao número de horas extras trabalhadas. Por simplificação, considere uma carga de 40 horas semanais e considere o valor da hora extra igual à hora regular. Escreva um método para calcular o salário. Considere que um Corretor é remunerado também por comissão e o Engenheiro é remunerado de acordo com o salário base, acrescido de muitas horas extras. Suponha que um vendedor possui o salário calculado da mesma forma, mas somando um valor de comissões recebidas. Modele as classes Funcionário, Corretor e Engenheiro. Adicione um método para o cálculo do salário. Utilize o conceito de herança e polimorfismo. Escreva um programa para testar o uso das classes implementadas.


Soluções
Soluções para os problemas propostos podem ser encontradas em http://www.eletrica.ufpr.br/pedroso/2015/TE091/Programas/java

Voltar para página da TE091