Laboratório de Java
Classes Concretas e Abstratas
(Lab. IV)
Prof. Guido Araújo
Classes Concretas
•
Classe que pode ser instanciada diretamente
Livro
+bloqueia()
+desbloqueia()
+empresta()
class Livro {
....
public void bloqueia() { .... }
....
}
public static void main() {
....
Livro livro;
+retorna()
....
}
Herança é tudo ?
•
Considere uma biblioteca de livros e fitas
Livro
Fita
+bloqueia()
+alteraNivel()
+desbloqueia()
+empresta()
+empresta()
+retorna()
+retorna()
Livro
Fita
Fita
Livro
Classes Abstratas
•
•
Captura aspectos comuns e abstratos do objeto
Classe não pode ser instanciada diretamente
abstract class Item {
....
public void empresta();
public void retorna();
....
}
abstract Item
+empresta()
+retorna()
Livro
Fita
+bloqueia()
+alteraNivel()
+desbloqueia()
+empresta()
+empresta()
+retorna()
+retorna()
class Livro extends Item {
....
}
Métodos Abstratos
•
Possuem somente a assinatura
•
É abstrata se possui pelo menos
um único método abstrato
•
Sub-classe de classe abstrata
precisa implementar todos
métodos senão é abstrata
abstract class Item {
....
abstract public void empresta();
....
}
class Livro extends Item {
....
public void empresta() {...}
public void retorna();
....
}
Exercício
•
No diretório abstrata
•
Compile o programa TestandoAbstrata.java
•
Efetue todas as correções (são 2 erros)
•
Em main, remova o comentário da instanciação de Livro
•
Coloque o comentário de volta novamente
Laboratório de Java
Interfaces
(Lab. IV cont.)
Prof. Guido Araújo
Interfaces
•
Especifica um tipo abstrato de dados (API)
– Conjunto de assinaturas de métodos
– Não implementa métodos nem estrutura de dados
– Permite constantes: final float pi = 3.1415926;
interface ItemEmprestaval {
....
boolean estaDisponivel();
boolean estaEmprestado();
....
}
Utilizando Interfaces
interface ItemEmprestavel {
....
boolean estaDisponivel();
boolean estaEmprestado();
....
}
class Livro implements ItemEmprestavel {
....
public boolean estaDisponivel() { .... }
public boolean estaEmprestado() { .... }
....
}
Utilizando Interface
Projeto
Interface
Implementação
Classe
Abstrata
Concreta
Execução
Objeto
Regras de Ouro do Bom Projeto
interface Item {
....
}
•
Todo tipo abstrato de dados
deve possuir uma interface
•
Públicos somente tipos da
interface
class Livro implements Item{
.... public: somente métodos da interface....
}
•
Instâncias devem usar a
interface
class Usuario {
Livro livro;
CD cd;
.......
Item item;
}
Exercício
•
No diretório interface
•
Compile, execute e entenda SemInterface.java
•
Compile, execute e entenda ComInterface.java
•
Qual a diferença entre eles no que se refere à
complexidade ?
Laboratório de Java
Tratamento de Exceção
(Lab. IV cont.)
Prof. Guido Araújo
Hierarquia de Exceções
Throwable
Error
Exception
.......
VirtualMachineError
OutOfMemoryError
.......
RuntimeException
ArithmeticException
.......
.......
Fluxo de uma Exceção
try {
throw e
.
.
.
}
catch (Exception e) {
}
finally {
}
Fluxo Normal
try {
}
catch (Exception e) {
}
finally {
}
Exercício 3
•
No diretorio excecoes
•
Compile, execute e entenda ExceptionTeste.java
•
Altere deuErro para true
•
Compile, execute e entenda o que ocorreu
Ordem de Tratamento
try {
throw e
.
.
.
catch (Arithmeticexception e) {
}
}
catch (Runtimeexception e) {
finally {
}
catch (Exception e) {
}
}
Exercício
•
No diretorio excecoes
•
Compile OrdemTratamento.java
•
Altere o programa para que ele compile corretamente
•
Compile, execute e entenda
•
Instancie agora uma Exception ao invés de uma
ExceptionNeta
•
Compile e descubra o que ocorreu
Hierarquia do Tratamento (interna)
try
try
catch
NÃO TRATA
finally
catch
finally
Exercício 3
•
No diretorio excecoes
•
Compile, execute e entenda HierarquiaTratamento.java
•
Altere o valor de numException para 2
•
Compile, execute e entenda
Throw em Método (externa)
void chamador() {
chamado()
....
void chamado() throws Exception {
try
throw e
catch
finally
}
}
Exercício
•
No diretorio excecoes
•
Compile ThrowEmMetodo.java
–
–
O compilador espera um tratador para a execução
lançada dentro de chamado().
O que fazer para informar que a exceção é tratada for a
de chamado().
•
Efetue a correção apropriada, compile e execute
•
Atribua true a deuErro, compile, execute e entenda
Download

lab4