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
Download

Apresentação da Disciplina (Ementa)