classes abstratas e interfaces

22
Prof. Nécio de Lima Veras http://lattes.cnpq.br/8284657916723590 Programação Orientada a Objetos Unidade V – Elementos Avançados de Orientação a Objetos com Java (Parte I)

Upload: necio-de-lima-veras

Post on 27-May-2015

1.713 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Classes abstratas e interfaces

Prof. Nécio de Lima Verashttp://lattes.cnpq.br/8284657916723590

Programação Orientada a Objetos

Unidade V – Elementos Avançados de Orientação a Objetos com Java

(Parte I)

Page 2: Classes abstratas e interfaces

Prof. Nécio de Lima Verashttp://lattes.cnpq.br/8284657916723590

Objetivo

Reconhecer o conceito de estruturas abstratas de programação e suas funcionalidades aplicando-as com a linguagem Java.

Page 3: Classes abstratas e interfaces

Prof. Nécio Veras

RoyaltiesRoyalties

Estes slides foram gentilmente cedidos pelo prof. Régis Pires (IFPI-Parnaíba) com algumas

adaptações do prof. Nécio de Lima Veras (IFPI-Parnaíba).

Page 4: Classes abstratas e interfaces

Prof. Nécio Veras

Classes AbstratasClasses Abstratas

– Usamos a palavra chave abstract para impedir a instanciação de uma classe.

– Classes abstratas normalmente possuem um ou mais métodos abstratos.

– 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

Page 5: Classes abstratas e interfaces

Prof. Nécio Veras

Classes AbstratasClasses Abstratas

Page 6: Classes abstratas e interfaces

Prof. Nécio Veras

Classes AbstratasClasses Abstratas

● Regras sobre métodos abstratos e as classes que os contêm:

– Toda classe que possui métodos abstratos é automaticamente abstrata e deve ser declarada como tal.

– Uma classe pode ser declarada abstrata mesmo se ela não possuir métodos abstratos.

– Uma classe abstrata não pode ser instanciada.

– Uma subclasse de uma classe abstrata pode ser instanciada se:

● Sobrescreve cada um dos métodos abstratos de sua superclasse● Fornece uma implementação para cada um deles

Page 7: Classes abstratas e interfaces

Prof. Nécio Veras

Classes AbstratasClasses Abstratas

– Se uma subclasse de uma classe abstrata não implementa todos os métodos abstratos que ela herda, então a subclasse também é abstrata

– Para declarar um método abstrato coloque a palavra-chave abstract no início do protótipo do método

– Para declarar uma classe abstrata coloque a palavra-chave abstract no início da definição da classe

Page 8: Classes abstratas e interfaces

Prof. Nécio Veras

Classes AbstratasClasses Abstratasabstract class Conta {

protected double saldo;

public void retira(double valor) {this.saldo -= valor;

}

public void deposita(double valor) {this.saldo += valor;

}

public double getSaldo() {return this.saldo;

}

public abstract void atualiza();}

Page 9: Classes abstratas e interfaces

Prof. Nécio Veras

InterfacesInterfaces

● Problema

– Suponha que você define as classes abstratas Forma e Desenhavel e a classe Circulo (que estende Forma)

– Como criar a classe CirculoDesenhavel que é ao mesmo tempo Circulo e Desenhavel?

public class CirculoDesenhavel extends Circulo, Desenhavel { ... }

– Mas... o código acima está ERRADO!● Java, diferentemente de C++, não permite que uma classe

possua duas superclasses diretas, ou seja, não suporta herança múltipla!

Page 10: Classes abstratas e interfaces

Prof. Nécio Veras

InterfacesInterfaces

● Solução

– Para resolver esse tipo de problema Java define o conceito de interfaces

● Uma interface é semelhante a uma classe abstrata, exceto pelo fato de utilizar a palavra chave interface no lugar de abstract class na definição da classe.

– Interface é um contrato onde quem assina se responsabiliza por implementar os métodos definidos na interface (cumprir o contrato).

– Ela só expõe o que o objeto deve fazer, e não como ele faz, nem o que ele tem. Como ele faz vai ser definido em uma implementação dessa interface.

Page 11: Classes abstratas e interfaces

Prof. Nécio Veras

InterfacesInterfaces

● Quais as diferenças entre interface e classe abstrata?

– Declaração de métodos● Em uma classe abstrata podem ser definidos métodos

abstratos e não-abstratos● Todos os métodos de uma interface são implicitamente

abstratos (NÃO precisam ser declarados como tal)

– Declaração de variáveis● Em uma classe abstrata podem ser definidas variáveis de

instância, de classe e constantes● Todos os atributos de uma interface são sempre public

static final (constantes), mesmo que essas palavras reservadas não sejam usadas.

Page 12: Classes abstratas e interfaces

Prof. Nécio Veras

InterfacesInterfaces

Page 13: Classes abstratas e interfaces

Prof. Nécio Veras

InterfacesInterfacesinterface Autenticavel {

boolean autentica(int senha);}

class Gerente extends Funcionario implements Autenticavel {

private int senha;

// outros atributos e métodospublic boolean autentica(int senha) {

if (this.senha != senha) {return false;

}// pode fazer outras possiveis verificacoes,

// como saber se esse departamento do // gerente tem acesso ao Sistema

return true;}

}

Page 14: Classes abstratas e interfaces

Prof. Nécio Veras

Herança entre InterfacesHerança entre Interfaces

– Diferentemente das classes, uma interface pode herdar de mais de uma interface.

– É como um contrato que depende de que outros contratos sejam fechados antes deste valer.

– Você não herda métodos e atributos, e sim responsabilidades.

Page 15: Classes abstratas e interfaces

Prof. Nécio Veras

Para que usar interfaces?Para que usar interfaces?

– Para deixar o código mais flexível, e possibilitar a mudança de implementação sem maiores traumas.

– Elas também trazem vantagens em não acoplar as classes.

● Uma vez que herança através de classes traz muito acoplamento, muitos autores clássicos dizem que em muitos casos herança quebra o encapsulamento.

Page 16: Classes abstratas e interfaces

Prof. Nécio Veras

InterfacesInterfaces

Page 17: Classes abstratas e interfaces

Prof. Nécio Veras

Regras de OuroRegras de Ouro

● No livro Design Patterns, logo no início os autores citam 2 regras “de ouro”:

– “Evite herança, prefira composição”.– “Programe voltado a interface e não a

implementação”.

Page 18: Classes abstratas e interfaces

Prof. Nécio Veras

Um exemplo destas regras:Um exemplo destas regras:

Q u e r e m o s m o d e la r e s ta s m e s a se m te r m o s d e o b je to s

I s t o é u m a m e s a !

1

I s t o é u m a m e s a !I s t o é u m a m e s a !

1

I s t o é u m a m e s ac o m r o d in h a s !

2

I s t o é u m a m e s ac o m r o d in h a s !I s t o é u m a m e s ac o m r o d in h a s !

2

I s to é u m a m e s ad e p in g p o n g

c o m r o d in h a s !

3

I s to é u m a m e s ad e p in g p o n g

c o m r o d in h a s !

I s to é u m a m e s ad e p in g p o n g

c o m r o d in h a s !

3

A a p l i c a ç ã o p o d e , e m a l g u m m o m e n to , u s a r a m e s a p u r a ,e m o u t r o , c o m r o d i n h a s , e m o u t r o , c o m r e d e d e p i n g p o n g , e tc .

Page 19: Classes abstratas e interfaces

Prof. Nécio Veras

Problema: Como resolver?Problema: Como resolver?

● Usando herança?

– Solução mais “natural”;

– Adição estática de responsablidades;

– Cliente não tem como controlar como e quando colocar rodinhas, a rede de ping-pong ou outras coisas:

– Responsabilidade é atribuída a classe e não a cada objeto

– Não é facilmente extensível;

– E se quisermos usar a mesa para jantar?

Page 20: Classes abstratas e interfaces

Prof. Nécio Veras

Um ótima soluçãoUm ótima solução

● Por que não decorar?

– Embelezar a mesa com objeto que adiciona rodinhas, outro objeto que adiciona rede de ping-pong, etc;

– Cada objeto que “embeleza” a mesa é um decorator (Design Patterns);

– Isto é, Composição de objetos!

Page 21: Classes abstratas e interfaces

Prof. Nécio Veras

Diagrama da soluçãoDiagrama da solução

Page 22: Classes abstratas e interfaces

Prof. Nécio Veras

ExercícioExercício

● Implemente o seguinte o diagrama: