Classes Abstratas e Interface Modelagem e Programação Orientada a Objetos Curso Superior de Tecnologia em Sistemas para Internet Prof. Cristiano Stüpp Nunes [email protected] 2 Classe Abstrata Uma classe abstrata serve apenas como modelo para uma classe concreta (classe que comumente usamos); Como classes abstratas são modelos de classes, então, não podem ser instanciadas, devem sempre ser herdadas por classes concretas; Todos os métodos abstratos de uma classe abstrata devem obrigatoriamente ser implementados (sobrescritos) em uma classe concreta. Modelagem e Programação Orientada a Objetos Curso Superior em Tecnologia de Sistemas para Internet 3 Classe Abstrata Um método abstrato não possui corpo, apenas define a assinatura (protótipo) do método; Classes abstratas são úteis quando uma classe define métodos a serem implementados apenas pelas suas subclasses; Usamos o modificador de acesso abstract, uma palavra reservada do Java, para se criar classes abstratas; Usa-se o mesmo modificador de acesso para se definir os métodos abstratos. Modelagem e Programação Orientada a Objetos Curso Superior em Tecnologia de Sistemas para Internet 4 Classe Abstrata Toda classe que possui pelo menos um método abstrato é automaticamente abstrata e deve ser declarada como tal; Uma classe pode ser declarada abstrata mesmo se ela não possuir métodos abstratos; Não existem atributos abstratos. Modelagem e Programação Orientada a Objetos Curso Superior em Tecnologia de Sistemas para Internet 5 Definição de uma Classe Abstrata public abstract class AparelhoEletronico { private boolean ligado; //métodos abstratos – não são implementados public abstract void ligar(); public abstract void desligar(); public void setLigado(boolean ligado) { this.ligado = ligado; } public boolean isLigado() { return ligado; } } Modelagem e Programação Orientada a Objetos Curso Superior em Tecnologia de Sistemas para Internet 6 Estendendo uma Classe Abstrata public class TV extends AparelhoEletronico { private int canal; private int volume; public TV() { } /* implementação dos métodos abstratos */ public void desligar() { super.setLigado(false); setCanal(0); setVolume(0); } public void ligar() { super.setLigado(true); setCanal(3); setVolume(25); } // abaixo teríamos os métodos de get e set para canal e volume... } Modelagem e Programação Orientada a Objetos Curso Superior em Tecnologia de Sistemas para Internet 7 Estendendo uma Classe Abstrata public class Radio extends AparelhoEletronico { public static final short AM = 1; public static final short FM = 2; private int banda; private float sintonia; private int volume; /* implementação dos métodos abstratos */ public void desligar() { super.setLigado(false); setBanda(0); setSintonia(0); } public void ligar() { super.setLigado(true); setBanda(this.FM); setSintonia(88.1f); } // abaixo teríamos todos os métodos de get e set para banda, sintonia e volume... } Modelagem e Programação Orientada a Objetos Curso Superior em Tecnologia de Sistemas para Internet 8 Interface (o termo) O termo interface pode ser confuso em Java, pois pode ser referenciar as duas formações distintas que no fundo tem o mesmo propósito: » 1) Interface (sem ser a palavra reservada): • Compreende o conjunto de métodos públicos que permite acessar os atributos ou invocar comportamentos próprios da classe; • É o meio que permite o objeto a trocar informações com o meio externo. Modelagem e Programação Orientada a Objetos Curso Superior em Tecnologia de Sistemas para Internet 9 Interface (o termo) » 2) Interface (a palavra reservada): • Java estendeu o conceito de interfaces à um nível ainda mais flexível que permite construir entidades que funcionam como um tipo de "contrato", onde são especificados os atributos e métodos que as classes que implementem a interface são obrigadas a implementar. Modelagem e Programação Orientada a Objetos Curso Superior em Tecnologia de Sistemas para Internet 10 Interface (sem ser a palavra reservada) public class Conta { private double saldo; /* ##### Início da Interface dessa classe ##### */ public double getSaldo() { return saldo; } public void setSaldo(double saldo) { this.saldo = saldo; } public void deposite(double deposito) { saldo = saldo + deposito; } public void saque(double saque) { saldo = saldo - saque; } /* ##### Fim da Interface dessa classe ##### */ } Modelagem e Programação Orientada a Objetos Curso Superior em Tecnologia de Sistemas para Internet 11 Interface (a palavra reservada) public interface ControleRemoto { /* Perceba que apenas a assinatura dos métodos estão aqui. E cada método termina com um ponto-e-vírgula (;) ou seja, não são implementados */ void mudarCanal(int canal); void aumentarVolume(int taxa); void diminuirVolume(int taxa); boolean ligar(); boolean desligar(); } Modelagem e Programação Orientada a Objetos Curso Superior em Tecnologia de Sistemas para Internet 12 Interface (a palavra reservada) Como vimos anteriormente, uma classe pode estender suas funcionalidades obtendo as características de outra classe num processo que chamamos de herança; Uma interface não é herdada, mas sim, implementada; É um conjunto de métodos relacionados que não tem corpo, ou seja, sem implementação; Modelagem e Programação Orientada a Objetos Curso Superior em Tecnologia de Sistemas para Internet 13 Interface (a palavra reservada) Todo o código dos métodos da interface deve ser escrito dentro da classe que a implementa; Obtemos as assinaturas dos métodos da interface em uma classe usando a palavra reservada implements; Uma classe só pode estender (herdar) um única superclasse, mas pode implementar várias interfaces, provendo uma maneira de se ter “herança múltipla” em Java. Modelagem e Programação Orientada a Objetos Curso Superior em Tecnologia de Sistemas para Internet 14 Motivação para o uso de Interface Estabelecer um “tipo” comum, um contrato, o qual várias outras classes podem fazer uso, sem necessitar saber da implementação; Necessidade de implementar interfaces múltiplas (“herança múltipla”), por exemplo, quando uma classe pode ter comportamentos variados (um rádio-relógio, por exemplo, pois tem função de rádio e relógio) Modelagem e Programação Orientada a Objetos Curso Superior em Tecnologia de Sistemas para Internet 15 Interface como um “tipo” public interface Funcionario { public String getNome(); public double getSalario(); } public class Pessoa implements Funcionario { private String nome; private double salario; public class ExecutaPessoa { public Pessoa(String nome, double salario) { this.nome = nome; this.salario = salario; } public static void main (String[] args) { Funcionario func = new Pessoa("José Dirceu", 1000000); public String getNome() { return nome; } System.out.println( func.getSalario()); public double getSalario() { return salario; } } } } Modelagem e Programação Orientada a Objetos Curso Superior em Tecnologia de Sistemas para Internet 16 Implementando múltiplas interfaces public interface Radio { public class RadioRelogio implements Radio, Relogio { public void liga(); public void liga() { // Implentação } public void desliga(); public void trocaEstacao( int frequencia); public void desliga() { // Implentação } } public void trocaEstacao (int frequencia) { // Implentação } public interface Relogio { public String getHoras() { // Implentação return null; } public String getHoras(); } } Modelagem e Programação Orientada a Objetos Curso Superior em Tecnologia de Sistemas para Internet 17 Particularidades sobre Interfaces Todos os atributos de uma interface são do tipo public static final (constantes) – mesmo que esses modificadores não sejam explícitos; Todos os métodos de uma interface são implicitamente públicos e abstratos; Todos os métodos de uma interface devem ser escritos na classe que a implementa; Não há como instanciar uma interface, portanto não há método construtor; Modelagem e Programação Orientada a Objetos Curso Superior em Tecnologia de Sistemas para Internet