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

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Classes abstratas e interfaces

1,739

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,739
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
86
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

×