Your SlideShare is downloading. ×
  • Like
Classes abstratas e interfaces
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Classes abstratas e interfaces

  • 1,539 views
Published

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
1,539
On SlideShare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
71
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Programação Orientada a ObjetosUnidade V – Elementos Avançadosde Orientação a Objetos com Java (Parte I) Prof. Nécio de Lima Veras http://lattes.cnpq.br/8284657916723590
  • 2. ObjetivoReconhecer o conceito de estruturasabstratas de programação e suasfuncionalidades aplicando-as com alinguagem Java. Prof. Nécio de Lima Veras http://lattes.cnpq.br/8284657916723590
  • 3. RoyaltiesEstes 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). Prof. Nécio Veras
  • 4. Classes 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 Prof. Nécio Veras
  • 5. Classes Abstratas Prof. Nécio Veras
  • 6. Classes 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 Prof. Nécio Veras
  • 7. Classes 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 Prof. Nécio Veras
  • 8. Classes 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();} Prof. Nécio Veras
  • 9. Interfaces● 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! Prof. Nécio Veras
  • 10. Interfaces● 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. Prof. Nécio Veras
  • 11. Interfaces● 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. Prof. Nécio Veras
  • 12. Interfaces Prof. Nécio Veras
  • 13. Interfacesinterface Autenticavel { boolean autentica(int senha);}class Gerente extends Funcionario implements Autenticavel { private int senha; // outros atributos e métodos public 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; }} Prof. Nécio Veras
  • 14. Heranç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. Prof. Nécio Veras
  • 15. 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. Prof. Nécio Veras
  • 16. Interfaces Prof. Nécio Veras
  • 17. Regras 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”. Prof. Nécio Veras
  • 18. 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 s1 2 I s to é u m a m e s a I s to é u m a m e s a ! c o m r o d in h a s ! 3 A a p lic a ç ã o p o d e , e m a lg u m I s to é u m a m e s a m o m e n to , u s a r a m e s a p u r a , d e p in g p o n g e m o u tr o , c o m r o d in h a s , e m o u tr o , c o m r o d in h a s ! c o m r e d e d e p in g p o n g , e tc . Prof. Nécio Veras
  • 19. 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? Prof. Nécio Veras
  • 20. Um ó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! Prof. Nécio Veras
  • 21. Diagrama da solução Prof. Nécio Veras
  • 22. Exercício● Implemente o seguinte o diagrama: Prof. Nécio Veras