SlideShare ist ein Scribd-Unternehmen logo
1 von 22
Downloaden Sie, um offline zu lesen
Programação
      Orientada a Objetos


Unidade V – Elementos Avançados
de Orientação a Objetos com Java
            (Parte I)



                              Prof. Nécio de Lima Veras
               http://lattes.cnpq.br/8284657916723590
Objetivo
Reconhecer o conceito de estruturas
abstratas de programação e suas
funcionalidades aplicando-as com a
linguagem Java.




                                    Prof. Nécio de Lima Veras
                     http://lattes.cnpq.br/8284657916723590
Royalties



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).




                                      Prof. Nécio Veras
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
Classes Abstratas




                Prof. Nécio Veras
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
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
Classes Abstratas
abstract 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
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
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
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
Interfaces




             Prof. Nécio Veras
Interfaces
interface 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
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
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
Interfaces




             Prof. Nécio Veras
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
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 s
e m te r m o s d e o b je to s
1                                                     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
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
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
Diagrama da solução




                Prof. Nécio Veras
Exercício

●   Implemente o seguinte o diagrama:




                                        Prof. Nécio Veras

Weitere ähnliche Inhalte

Was ist angesagt?

Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)Bruno Grange
 
Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)Helder da Rocha
 
Coding standards for java
Coding standards for javaCoding standards for java
Coding standards for javamaheshm1206
 
Introdução ao Spring Framework
Introdução ao Spring FrameworkIntrodução ao Spring Framework
Introdução ao Spring FrameworkNatanael Fonseca
 
Express JS Rest API Tutorial
Express JS Rest API TutorialExpress JS Rest API Tutorial
Express JS Rest API TutorialSimplilearn
 
Desenhando Componentes de Software com UML
Desenhando Componentes de Software com UMLDesenhando Componentes de Software com UML
Desenhando Componentes de Software com UMLRildo (@rildosan) Santos
 
Introdução a Linguagem Java
Introdução a Linguagem JavaIntrodução a Linguagem Java
Introdução a Linguagem JavaUFPA
 
Aula 02 - UML e Padrões de Projeto
Aula 02 - UML e Padrões de ProjetoAula 02 - UML e Padrões de Projeto
Aula 02 - UML e Padrões de ProjetoVinícius de Paula
 
aula 04 - Logica de programacao
aula 04 - Logica de programacaoaula 04 - Logica de programacao
aula 04 - Logica de programacaoAislan Rafael
 
Apresentação mvc
Apresentação mvcApresentação mvc
Apresentação mvcleopp
 
Stored Procedures and Triggers
Stored Procedures and TriggersStored Procedures and Triggers
Stored Procedures and Triggersflaviognm
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetosCleyton Ferrari
 
Aula 2 – Introdução a HTML - conceitos básicos e estrutura
Aula 2 – Introdução a HTML - conceitos básicos e estruturaAula 2 – Introdução a HTML - conceitos básicos e estrutura
Aula 2 – Introdução a HTML - conceitos básicos e estruturaAndré Constantino da Silva
 
Sistemas Distribuídos e PHP - Darkmira Tour BR 2016
Sistemas Distribuídos e PHP - Darkmira Tour BR 2016Sistemas Distribuídos e PHP - Darkmira Tour BR 2016
Sistemas Distribuídos e PHP - Darkmira Tour BR 2016Diana Ungaro Arnos
 

Was ist angesagt? (20)

Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)
 
Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)Curso de Java Persistence API (JPA) (Java EE 7)
Curso de Java Persistence API (JPA) (Java EE 7)
 
Coding standards for java
Coding standards for javaCoding standards for java
Coding standards for java
 
Introdução ao Spring Framework
Introdução ao Spring FrameworkIntrodução ao Spring Framework
Introdução ao Spring Framework
 
Express JS Rest API Tutorial
Express JS Rest API TutorialExpress JS Rest API Tutorial
Express JS Rest API Tutorial
 
Desenhando Componentes de Software com UML
Desenhando Componentes de Software com UMLDesenhando Componentes de Software com UML
Desenhando Componentes de Software com UML
 
Introdução a Linguagem Java
Introdução a Linguagem JavaIntrodução a Linguagem Java
Introdução a Linguagem Java
 
Aula 02 - UML e Padrões de Projeto
Aula 02 - UML e Padrões de ProjetoAula 02 - UML e Padrões de Projeto
Aula 02 - UML e Padrões de Projeto
 
aula 04 - Logica de programacao
aula 04 - Logica de programacaoaula 04 - Logica de programacao
aula 04 - Logica de programacao
 
Apresentação mvc
Apresentação mvcApresentação mvc
Apresentação mvc
 
Stored Procedures and Triggers
Stored Procedures and TriggersStored Procedures and Triggers
Stored Procedures and Triggers
 
Introdução APIs RESTful
Introdução APIs RESTfulIntrodução APIs RESTful
Introdução APIs RESTful
 
Arquitetura MVC
Arquitetura MVCArquitetura MVC
Arquitetura MVC
 
Aula15 - Array PHP
Aula15 - Array PHPAula15 - Array PHP
Aula15 - Array PHP
 
Padrões MVC
Padrões MVCPadrões MVC
Padrões MVC
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetos
 
Front End x Back End
Front End x Back EndFront End x Back End
Front End x Back End
 
Aula 2 – Introdução a HTML - conceitos básicos e estrutura
Aula 2 – Introdução a HTML - conceitos básicos e estruturaAula 2 – Introdução a HTML - conceitos básicos e estrutura
Aula 2 – Introdução a HTML - conceitos básicos e estrutura
 
Javascript aula 01 - visão geral
Javascript   aula 01 - visão geralJavascript   aula 01 - visão geral
Javascript aula 01 - visão geral
 
Sistemas Distribuídos e PHP - Darkmira Tour BR 2016
Sistemas Distribuídos e PHP - Darkmira Tour BR 2016Sistemas Distribuídos e PHP - Darkmira Tour BR 2016
Sistemas Distribuídos e PHP - Darkmira Tour BR 2016
 

Ähnlich wie Classes abstratas e interfaces

(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012Luís Cobucci
 
Hangout OOD – princípio da responsabilidade única
Hangout OOD – princípio da responsabilidade únicaHangout OOD – princípio da responsabilidade única
Hangout OOD – princípio da responsabilidade únicaPriscila Mayumi
 
Removendo o cheiro ruim do seu código - SoLiSC 2011
Removendo o cheiro ruim do seu código - SoLiSC 2011Removendo o cheiro ruim do seu código - SoLiSC 2011
Removendo o cheiro ruim do seu código - SoLiSC 2011Luís Cobucci
 
Poo slides01
Poo slides01Poo slides01
Poo slides01jmtofoli
 
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++Sérgio Souza Costa
 
Engenharia de Software II - Atividade: Diagramas da UML
Engenharia de Software II - Atividade: Diagramas da UMLEngenharia de Software II - Atividade: Diagramas da UML
Engenharia de Software II - Atividade: Diagramas da UMLAlessandro Almeida
 
Java: Classes Abstratas, Anônimas, Interface
Java: Classes Abstratas, Anônimas, InterfaceJava: Classes Abstratas, Anônimas, Interface
Java: Classes Abstratas, Anônimas, InterfaceArthur Emanuel
 
POO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfPOO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfAndreCosta502039
 
Charla TestingUy 2019 - Patterns Para Enseñar Testing a Personas que No Desar...
Charla TestingUy 2019 - Patterns Para Enseñar Testing a Personas que No Desar...Charla TestingUy 2019 - Patterns Para Enseñar Testing a Personas que No Desar...
Charla TestingUy 2019 - Patterns Para Enseñar Testing a Personas que No Desar...TestingUy
 
Reflexões sobre Apresentações de Pesquisa
Reflexões sobre Apresentações de PesquisaReflexões sobre Apresentações de Pesquisa
Reflexões sobre Apresentações de PesquisaTiago Massoni
 

Ähnlich wie Classes abstratas e interfaces (20)

(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012
 
Java aula 2
Java aula 2Java aula 2
Java aula 2
 
Code Smells
Code SmellsCode Smells
Code Smells
 
Hangout OOD – princípio da responsabilidade única
Hangout OOD – princípio da responsabilidade únicaHangout OOD – princípio da responsabilidade única
Hangout OOD – princípio da responsabilidade única
 
Java11
Java11Java11
Java11
 
Introdução ao paradigma OO
Introdução ao paradigma OOIntrodução ao paradigma OO
Introdução ao paradigma OO
 
Aula 3.ppt
Aula 3.pptAula 3.ppt
Aula 3.ppt
 
Removendo o cheiro ruim do seu código - SoLiSC 2011
Removendo o cheiro ruim do seu código - SoLiSC 2011Removendo o cheiro ruim do seu código - SoLiSC 2011
Removendo o cheiro ruim do seu código - SoLiSC 2011
 
7 interfaces
7 interfaces7 interfaces
7 interfaces
 
Poo slides01
Poo slides01Poo slides01
Poo slides01
 
Java - Boas práticas
Java - Boas práticasJava - Boas práticas
Java - Boas práticas
 
Ambientação_Atividade com Corpus - Lexical Approach
Ambientação_Atividade com Corpus  - Lexical ApproachAmbientação_Atividade com Corpus  - Lexical Approach
Ambientação_Atividade com Corpus - Lexical Approach
 
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
 
Engenharia de Software II - Atividade: Diagramas da UML
Engenharia de Software II - Atividade: Diagramas da UMLEngenharia de Software II - Atividade: Diagramas da UML
Engenharia de Software II - Atividade: Diagramas da UML
 
Java: Classes Abstratas, Anônimas, Interface
Java: Classes Abstratas, Anônimas, InterfaceJava: Classes Abstratas, Anônimas, Interface
Java: Classes Abstratas, Anônimas, Interface
 
POO - Aula 003
POO - Aula 003POO - Aula 003
POO - Aula 003
 
POO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfPOO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdf
 
Solid / DRY Princípios
Solid / DRY PrincípiosSolid / DRY Princípios
Solid / DRY Princípios
 
Charla TestingUy 2019 - Patterns Para Enseñar Testing a Personas que No Desar...
Charla TestingUy 2019 - Patterns Para Enseñar Testing a Personas que No Desar...Charla TestingUy 2019 - Patterns Para Enseñar Testing a Personas que No Desar...
Charla TestingUy 2019 - Patterns Para Enseñar Testing a Personas que No Desar...
 
Reflexões sobre Apresentações de Pesquisa
Reflexões sobre Apresentações de PesquisaReflexões sobre Apresentações de Pesquisa
Reflexões sobre Apresentações de Pesquisa
 

Mehr von Nécio de Lima Veras

Introdução à analise e complexidade de algoritmos
Introdução à analise e complexidade de algoritmosIntrodução à analise e complexidade de algoritmos
Introdução à analise e complexidade de algoritmosNécio de Lima Veras
 
Uma Abordagem Baseada em Agentes para Planejamento e Monitoramento de Serviço...
Uma Abordagem Baseada em Agentes para Planejamento e Monitoramento de Serviço...Uma Abordagem Baseada em Agentes para Planejamento e Monitoramento de Serviço...
Uma Abordagem Baseada em Agentes para Planejamento e Monitoramento de Serviço...Nécio de Lima Veras
 
Introdução à Engenharia de Software Orientada a Agentes com JaCaMo
Introdução à Engenharia de Software Orientada a Agentes com JaCaMoIntrodução à Engenharia de Software Orientada a Agentes com JaCaMo
Introdução à Engenharia de Software Orientada a Agentes com JaCaMoNécio de Lima Veras
 
Jason: Componentes personalizados
Jason: Componentes personalizados Jason: Componentes personalizados
Jason: Componentes personalizados Nécio de Lima Veras
 
Ambientes em Sistemas Multi-agentes
Ambientes em Sistemas Multi-agentesAmbientes em Sistemas Multi-agentes
Ambientes em Sistemas Multi-agentesNécio de Lima Veras
 
Arquiteturas concretas de agentes inteligentes - bdi agents
Arquiteturas concretas de agentes inteligentes - bdi agentsArquiteturas concretas de agentes inteligentes - bdi agents
Arquiteturas concretas de agentes inteligentes - bdi agentsNécio de Lima Veras
 
Especificações iniciais de agentes inteligentes
Especificações iniciais de agentes inteligentesEspecificações iniciais de agentes inteligentes
Especificações iniciais de agentes inteligentesNécio de Lima Veras
 
Processos iniciais do mapeamento OR
Processos iniciais do mapeamento ORProcessos iniciais do mapeamento OR
Processos iniciais do mapeamento ORNécio de Lima Veras
 

Mehr von Nécio de Lima Veras (20)

Introdução ao JavaFX
Introdução ao JavaFXIntrodução ao JavaFX
Introdução ao JavaFX
 
Introdução à analise e complexidade de algoritmos
Introdução à analise e complexidade de algoritmosIntrodução à analise e complexidade de algoritmos
Introdução à analise e complexidade de algoritmos
 
Teste de software
Teste de softwareTeste de software
Teste de software
 
Versionamento com git
Versionamento com gitVersionamento com git
Versionamento com git
 
Uma Abordagem Baseada em Agentes para Planejamento e Monitoramento de Serviço...
Uma Abordagem Baseada em Agentes para Planejamento e Monitoramento de Serviço...Uma Abordagem Baseada em Agentes para Planejamento e Monitoramento de Serviço...
Uma Abordagem Baseada em Agentes para Planejamento e Monitoramento de Serviço...
 
Introdução à Engenharia de Software Orientada a Agentes com JaCaMo
Introdução à Engenharia de Software Orientada a Agentes com JaCaMoIntrodução à Engenharia de Software Orientada a Agentes com JaCaMo
Introdução à Engenharia de Software Orientada a Agentes com JaCaMo
 
Jason: Componentes personalizados
Jason: Componentes personalizados Jason: Componentes personalizados
Jason: Componentes personalizados
 
Agentes inteligentes com jason
Agentes inteligentes com jasonAgentes inteligentes com jason
Agentes inteligentes com jason
 
Ambientes em Sistemas Multi-agentes
Ambientes em Sistemas Multi-agentesAmbientes em Sistemas Multi-agentes
Ambientes em Sistemas Multi-agentes
 
Arquiteturas concretas de agentes inteligentes - bdi agents
Arquiteturas concretas de agentes inteligentes - bdi agentsArquiteturas concretas de agentes inteligentes - bdi agents
Arquiteturas concretas de agentes inteligentes - bdi agents
 
Revisão de matemática
Revisão de matemáticaRevisão de matemática
Revisão de matemática
 
Especificações iniciais de agentes inteligentes
Especificações iniciais de agentes inteligentesEspecificações iniciais de agentes inteligentes
Especificações iniciais de agentes inteligentes
 
Notas sobre agentes inteligentes
Notas sobre agentes inteligentesNotas sobre agentes inteligentes
Notas sobre agentes inteligentes
 
Anotações do mapeamento OR
Anotações do mapeamento ORAnotações do mapeamento OR
Anotações do mapeamento OR
 
Hibernate-consultas
Hibernate-consultasHibernate-consultas
Hibernate-consultas
 
Mapeamento de herança OR
Mapeamento de herança ORMapeamento de herança OR
Mapeamento de herança OR
 
Relacionamentos do mapeamento OR
Relacionamentos do mapeamento ORRelacionamentos do mapeamento OR
Relacionamentos do mapeamento OR
 
Processos iniciais do mapeamento OR
Processos iniciais do mapeamento ORProcessos iniciais do mapeamento OR
Processos iniciais do mapeamento OR
 
Java swing
Java swingJava swing
Java swing
 
Introdução à linguagem UML
Introdução à linguagem UMLIntrodução à linguagem UML
Introdução à linguagem UML
 

Classes abstratas e interfaces

  • 1. Programação Orientada a Objetos Unidade V – Elementos Avançados de Orientação a Objetos com Java (Parte I) Prof. Nécio de Lima Veras http://lattes.cnpq.br/8284657916723590
  • 2. Objetivo Reconhecer o conceito de estruturas abstratas de programação e suas funcionalidades aplicando-as com a linguagem Java. Prof. Nécio de Lima Veras http://lattes.cnpq.br/8284657916723590
  • 3. Royalties 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). 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 Abstratas abstract 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. Interfaces interface 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 s e m te r m o s d e o b je to s 1 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