Laboratório de Java
Classes Concretas e AbstratasClasses Concretas e Abstratas(Lab. IV)(Lab. IV)
Prof. Guido AraújoProf. Guido Araújo
Classes Concretas
Livro
+bloqueia()
+desbloqueia()
+empresta()
+retorna()
• Classe que pode ser instanciada diretamente
class Livro { .... public void bloqueia() { .... } ....}
public static void main() { ....
Livro livro; ....
}
Herança é tudo ?
Fita
+alteraNivel()
+empresta()
+retorna()
• Considere uma biblioteca de livros e fitas
Livro
+bloqueia()
+desbloqueia()
+empresta()
+retorna()
Livro
Livro
Fita
Fita
Classes Abstratas
Fita
+alteraNivel()
+empresta()
+retorna()
• Captura aspectos comuns e abstratos do objeto• Classe não pode ser instanciada diretamente
Livro
+bloqueia()
+desbloqueia()
+empresta()
+retorna()
abstract Item
+empresta()
+retorna()
abstract class Item { .... public void empresta(); public void 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
InterfacesInterfaces(Lab. IV cont.)(Lab. IV cont.)
Prof. Guido AraújoProf. 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
Interface
Classe
Abstrata Concreta
Objeto
Projeto
Implementação
Execução
Regras de OuroOuro do Bom Projeto
interface Item { ....}
class Livro implements Item{ .... public: somente métodos da interface.... }
class Usuario { Livro livro; CD cd; .......
}
• Todo tipo abstrato de dados deve possuir uma interface
• Públicos somente tipos da interface
• Instâncias devem usar a interface
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çãoTratamento de Exceção(Lab. IV cont.)(Lab. IV cont.)
Prof. Guido AraújoProf. Guido Araújo
Hierarquia de Exceções
Throwable
Error Exception
VirtualMachineError
. . . . . . .
. . . . . . . . . . . . . .
. . . . . . . OutOfMemoryError
RuntimeException
ArithmeticException
Fluxo de uma Exceção
throw e . . .
try {
}
catch (Exception e) {
}finally {
}
Fluxo Normaltry {
}
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
throw e . . .
try {
}
catch (Arithmeticexception e) {
}
finally {
}
catch (Runtimeexception e) {
}
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
finally
catch
finally catch
NÃO TRATA
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() {
try
catch
finally
void chamado() throws Exception {
}
}
chamado()
throw e
. . . .
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