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