java básico classes abstratas e interfaces - marcoreis.net · java básico classes abstratas e...

20

Click here to load reader

Upload: phungtruc

Post on 13-Dec-2018

216 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Java Básico Classes Abstratas e Interfaces - marcoreis.net · Java Básico Classes Abstratas e Interfaces ... Classe abstrata x Interface Não existe uma regra geral que defina quando

Java Básico

Classes Abstratas e Interfaces

Marco Antonio,Arquiteto de Software – TJDF

[email protected]/2005

Page 2: Java Básico Classes Abstratas e Interfaces - marcoreis.net · Java Básico Classes Abstratas e Interfaces ... Classe abstrata x Interface Não existe uma regra geral que defina quando

Classe abstrata

Recurso avançado da OONão pode ser instanciadaDeve ser instanciada através de uma subclasse concretaPermite modelar com mais precisão as regras de negócioRefinamento do projetoO programador fica obrigado a utilizar as regras definidas pelo projetistaPode ter a implementação para os métodos

Page 3: Java Básico Classes Abstratas e Interfaces - marcoreis.net · Java Básico Classes Abstratas e Interfaces ... Classe abstrata x Interface Não existe uma regra geral que defina quando

Interface

Funciona como um contratoNão pode ser instanciadaPode ser instanciada através de uma classe que a implementeObriga o programador a usar os métodos já definidosNão tem implementação, apenas a assinatura dos métodosMuito útil para diminuir o acoplamento entre os vários módulos do sistema

Page 4: Java Básico Classes Abstratas e Interfaces - marcoreis.net · Java Básico Classes Abstratas e Interfaces ... Classe abstrata x Interface Não existe uma regra geral que defina quando

Classe abstrata x Interface

Não existe uma regra geral que defina quando usar classes abstratas ou interfacesO nível de refinamento deve ser definido antes da implementação, o que diminui o risco de entrar num ciclo de refinamentos sem fim

Page 5: Java Básico Classes Abstratas e Interfaces - marcoreis.net · Java Básico Classes Abstratas e Interfaces ... Classe abstrata x Interface Não existe uma regra geral que defina quando

Dica

Quando haja a possibilidade de reutilização de código, prefira classe abstrataSe o código reaproveitado é muito pequeno, talvez seja mais interessante uma interface

Page 6: Java Básico Classes Abstratas e Interfaces - marcoreis.net · Java Básico Classes Abstratas e Interfaces ... Classe abstrata x Interface Não existe uma regra geral que defina quando

Exemplo de classe abstrata

Vamos utilizar a classe Musico para ilustrar o conceito de classe abstrataBaterista, Guitarrista e Baixista são nossas outras classes do modeloAnalise o relacionamento entre elas

Page 7: Java Básico Classes Abstratas e Interfaces - marcoreis.net · Java Básico Classes Abstratas e Interfaces ... Classe abstrata x Interface Não existe uma regra geral que defina quando

Musicopackage com.javabasico.classesabstratas;

public abstract class Musico { public abstract String getNomeDoInstrumento();

public void afinarInstrumento() { System.out.println("Estou afinando o/a " + getNomeDoInstrumento()); }}

Page 8: Java Básico Classes Abstratas e Interfaces - marcoreis.net · Java Básico Classes Abstratas e Interfaces ... Classe abstrata x Interface Não existe uma regra geral que defina quando

Baixistapackage com.javabasico.classesabstratas;

public class Baixista extends Musico { public String getNomeDoInstrumento() { return "Baixo"; }}

Page 9: Java Básico Classes Abstratas e Interfaces - marcoreis.net · Java Básico Classes Abstratas e Interfaces ... Classe abstrata x Interface Não existe uma regra geral que defina quando

Guitarristapackage com.javabasico.classesabstratas;

public class Guitarrista extends Musico { public String getNomeDoInstrumento() { return "Guitarra"; }}

Page 10: Java Básico Classes Abstratas e Interfaces - marcoreis.net · Java Básico Classes Abstratas e Interfaces ... Classe abstrata x Interface Não existe uma regra geral que defina quando

Bateristapackage com.javabasico.classesabstratas;

public class Baterista extends Musico { public String getNomeDoInstrumento() { return "Bateria"; }}

Page 11: Java Básico Classes Abstratas e Interfaces - marcoreis.net · Java Básico Classes Abstratas e Interfaces ... Classe abstrata x Interface Não existe uma regra geral que defina quando

TesteDoMusicopackage com.javabasico.classesabstratas;

public class TesteDoMusico { public static void main(String[] args) { Musico baixista = new Baixista(); baixista.afinarInstrumento(); Musico batera = new Baterista(); batera.afinarInstrumento(); Musico guitarrista = new Guitarrista(); guitarrista.afinarInstrumento(); }}

Page 12: Java Básico Classes Abstratas e Interfaces - marcoreis.net · Java Básico Classes Abstratas e Interfaces ... Classe abstrata x Interface Não existe uma regra geral que defina quando

Exemplo de interface

• Vamos utilizar a interface Veiculo no nosso exemplo

• Além desta, também teremos Carro, Moto e Caminhao

Page 13: Java Básico Classes Abstratas e Interfaces - marcoreis.net · Java Básico Classes Abstratas e Interfaces ... Classe abstrata x Interface Não existe uma regra geral que defina quando

Veiculopackage com.javabasico.interfaces;

public interface Veiculo {

public int quantidadeDePneus();

public boolean isVeiculoDePasseio();

public int quantidadeDeCavalos();

}

Page 14: Java Básico Classes Abstratas e Interfaces - marcoreis.net · Java Básico Classes Abstratas e Interfaces ... Classe abstrata x Interface Não existe uma regra geral que defina quando

Carropackage com.javabasico.interfaces;

public class Carro implements Veiculo { public int quantidadeDePneus() { return 4; }

public boolean isVeiculoDePasseio() { return true; }

public int quantidadeDeCavalos() { return 80; }}

Page 15: Java Básico Classes Abstratas e Interfaces - marcoreis.net · Java Básico Classes Abstratas e Interfaces ... Classe abstrata x Interface Não existe uma regra geral que defina quando

Motopackage com.javabasico.interfaces;

public class Moto implements Veiculo{ public int quantidadeDePneus() { return 2; }

public boolean isVeiculoDePasseio() { return true; }

public int quantidadeDeCavalos() { return 30; }}

Page 16: Java Básico Classes Abstratas e Interfaces - marcoreis.net · Java Básico Classes Abstratas e Interfaces ... Classe abstrata x Interface Não existe uma regra geral que defina quando

Caminhaopackage com.javabasico.interfaces;

public class Caminhao implements Veiculo { public int quantidadeDePneus() { return 6; }

public boolean isVeiculoDePasseio() { return false; }

public int quantidadeDeCavalos() { return 130; }}

Page 17: Java Básico Classes Abstratas e Interfaces - marcoreis.net · Java Básico Classes Abstratas e Interfaces ... Classe abstrata x Interface Não existe uma regra geral que defina quando

TesteDoVeiculopackage com.javabasico.interfaces;

public class TesteDoVeiculo { public static void main(String[] args) { Veiculo minhaMoto = new Veiculo(); }}

Page 18: Java Básico Classes Abstratas e Interfaces - marcoreis.net · Java Básico Classes Abstratas e Interfaces ... Classe abstrata x Interface Não existe uma regra geral que defina quando

Qual o problema?

Qual o problema da classe de teste?Simples: uma interface não pode ser instanciada

new Veiculo();Não existe, no modelo anterior, um objeto do tipo Veiculo (o veículo é apenas conceitual)Existem apenas Carros, Motos e CaminhoesToda interface deve ter uma classe que a implemente, caso contrário, não faz sentido esse tipo de refinamento

Page 19: Java Básico Classes Abstratas e Interfaces - marcoreis.net · Java Básico Classes Abstratas e Interfaces ... Classe abstrata x Interface Não existe uma regra geral que defina quando

TesteDoVeiculopackage com.javabasico.interfaces;

public class TesteDoVeiculo { public static void main(String[] args) { Veiculo minhaMoto = new Moto(); System.out.println("Quantidade de cavalos da moto:" + minhaMoto.quantidadeDeCavalos()); Veiculo meuCarro = new Carro(); System.out.println("Quantidade de pneus do carro: " + meuCarro.quantidadeDePneus()); Veiculo meuCaminhao = new Caminhao(); System.out.println("O caminhão é veículo de passeio? " + meuCaminhao.isVeiculoDePasseio()); }}

Page 20: Java Básico Classes Abstratas e Interfaces - marcoreis.net · Java Básico Classes Abstratas e Interfaces ... Classe abstrata x Interface Não existe uma regra geral que defina quando

Dúvidas?