UFPR · DELT · Contact
Programação Java
Esta aula aborda os seguintes conceitos:
  1. Classes e métodos abstratos.
  2. Interfaces.
  3. Pacotes.
Classes e métodos abstratos
Uma classe abstrata não pode ser instanciada. No entanto, ela pode ser utilizada por outras classes em relações de herança. Um método abstrato não tem código implementado e deve ser implementada pela classe filha. Para referência, ver https://docs.oracle.com/javase/tutorial/java/IandI/abstract.html
Considere o seguinte código:
abstract class Figura { 
    double x;        
    double y; 

    Figura(double x, double y) {         
        this.x = x;         
        this.y = y;         
    }
   abstract double area(); 
}

class Retangulo extends Figura { 
    Retangulo (double a, double b) { 
        super(a, b); 
    } 

    double area() { 
         return x * y; 
    } 
}

class Triangulo extends Figura { 
    Triangulo(double a, double b) { 
        super(a, b); 
    } 
    double area() { 
        return x * y / 2; 
    } 
}

Com relação ao código acima, responda as seguintes perguntas:
  1. O que ocorre se tentarmos instanciar um objeto da classe Figura?
  2. Escreva um programa para testar as classes Quadrado e Triangulo.
  3. Implemente uma nova classe chamada Circulo, escreva o método área de maneira apropriada e teste.
  4. O construtor da classe Figura é chamado quando se instancia um objeto do tipo Quadrado ou Triangulo?
  5. Inclua na classe Figura um método abstrato declarado da seguinte forma: "abstract double perimetro();". O objetivo é retornar o perímetro da figura.
  6. Implemente os métodos correspondentes nas classes Quadrado, Triangulo e Circulo, e escreva um programa para testar.
  7. Uma classe não abstrata pode possuir métodos abstratos? Escreva um programa para testar.
Interfaces
Uma interface é uma definição de um grupo de métodos relacionados, mas sem a especificação do código dos métodos. Quando uma classe implementa uma interface, ela obrigatoriamente tem que definir o código para todos os métodos especificados na interface. Uma classe pode implementar diversas interfaces. A interface é utilizada como um compromisso da classe sendo implementada. Para referência, ver https://docs.oracle.com/javase/tutorial/java/concepts/interface.html
Considere o seguinte código:
public interface Frases { 
   public String saudacao();
   public String mensagem();
   public String despedida();    
}

class Professor implements Frases{ 
    public String saudacao()
    {
        return("Bom dia. ");
    }
    public String mensagem()
    {
        return("Estude sempre. ");
    }
    public String despedida()
    {
        return("Até logo. ");
    }
}

public class Skatista implements Frases { 
    public String saudacao()
    {
        return("Das qualé! Firmeza?");
    }
    public String mensagem()
    {
        return("Vou tirar uns flips na moral seus polenta! ");
    }
    public String despedida()
    {
        return("Vô pegá o busão. ");
    }
}

Com relação ao código acima, responda as seguintes perguntas:
  1. É possível inserir um construtor na interface?
  2. A interface é usada como uma classe, ou seja, agrupando atributos e métodos que definem um tema? Descreva por que sim ou não.
  3. Implemente um programa teste para a classe Professor e Skatista e faça a impressão dos métodos saudacao(), mensagem() e despedida().
  4. Modifique a implementação dos métodos saudacao(), mensagem() e despedida () de modo a escolher um conjunto de frases randomicamente, e implemente um teste realizando uma conversa entre Professores e Skatistas.
  5. Implemente uma classe Estudante que implementa a interface Frases, utilizando também um conjunto de frases pré-definidas. Teste com uma conversa entre Professores-Estudantes e Skatistas-Estudantes.
  6. Descreva quando deve ser utilizada uma classe abstrata e uma interface.
Pacotes
Pacotes são utilizados em Java para organizar as classes disponíveis para uso, além de prevenir conflitos de nomes e permitir o controle de acesso. Alguns pacotes importantes existentes são: Para referência, ver http://www.tutorialspoint.com/java/java_packages.htm
Considere o seguinte código:
//---------------------------------
// Arquivo: Livro.java
package pacotelivro;

public class Livro
{
 private String titulo;
 private String autor;
 
 public Livro(String titulo, String autor)
 {
   this.titulo = titulo;
   this.autor = autor;
 }
 public void show()
 {
   System.out.println(titulo+" "+ autor);
 }
}

//---------------------------------
// Arquivo: TestePacoteLivro.java
import pacotelivro.*;

class TestePacoteLivro
{
 public static void main(String[] args)
 {
  Livro l = new Livro("java","Deitel");
  l.show();
 }
}

Com relação ao código acima, responda as seguintes perguntas:
  1. Compile a classe Livro.java, crie um diretório abaixo do diretório onde estão os fontes chamado "pacotelivro". Copie o arquivo Livro.class para este diretório. Compile e execute o programa TestePacoteLivro
  2. Anote: o que significa "import pacotelivro.*"?
  3. Anote: como a linguagem Java utiliza a variável de ambiente CLASSPATH?
  4. Exercício: implemente o pacote "Animal", conforme sugerido pelo exemplo disponível em http://www.tutorialspoint.com/java/java_packages.htm, incluindo a interface "Animal" e as classes "Mamifero", "Peixe" e "Ave". Implemente um programa teste para utilizar a interface.
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