SlideShare uma empresa Scribd logo
Classes Abstratas e Interfaces Regis Pires Magalhães [email_address]
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
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
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
Classes Abstratas public 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(); }
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!
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.
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 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.
Interfaces
Interfaces public interface  Autenticavel { public   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 ; } }
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.
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.
Interfaces
Interfaces package  java.io; public   interface  Serializable { }
Interfaces package  java.lang; import  java.util.*; public   interface  Comparable<T> { public   int  compareTo(T o); }
Interfaces package  java.util; public   interface  Collection<E>  extends  Iterable<E> { int  size(); boolean  isEmpty(); boolean  contains(Object o); // ... boolean  add(E e); boolean  remove(Object o); // ... void  clear(); // ... }
Interfaces package  java.util; public   interface  List<E>  extends  Collection<E> { // ... int  indexOf(Object o); int  lastIndexOf(Object o); // ... }
Interfaces package  java.sql; public   interface  Wrapper { <T> T unwrap(java.lang.Class<T> iface)  throws  java.sql.SQLException; boolean  isWrapperFor(java.lang.Class<?> iface)  throws  java.sql.SQLException; }
Interfaces package  java.sql; import  java.util.Properties; public   interface  Connection  extends  Wrapper { // ... void  commit()  throws  SQLException; void  rollback()  throws  SQLException; void  close()  throws  SQLException; // ... int   TRANSACTION_NONE   = 0; int   TRANSACTION_READ_UNCOMMITTED  = 1; int   TRANSACTION_READ_COMMITTED   = 2; int   TRANSACTION_REPEATABLE_READ   = 4; int   TRANSACTION_SERIALIZABLE   = 8; // ... }
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”.

Mais conteúdo relacionado

Mais procurados

Programação Orientada a Objetos
Programação Orientada a ObjetosProgramação Orientada a Objetos
Programação Orientada a Objetos
Igor Takenami
 
Java: Encapsulamento e modificadores de acesso
Java: Encapsulamento e modificadores de acessoJava: Encapsulamento e modificadores de acesso
Java: Encapsulamento e modificadores de acesso
Arthur Emanuel
 
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
Leinylson Fontinele
 
6 estruturas de dados heterogêneas
6  estruturas de dados heterogêneas6  estruturas de dados heterogêneas
6 estruturas de dados heterogêneas
Emília Alves Nogueira
 
Java: Heranca e polimorfismo
Java: Heranca e polimorfismoJava: Heranca e polimorfismo
Java: Heranca e polimorfismo
Arthur Emanuel
 
POO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a ObjetosPOO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a Objetos
Ludimila Monjardim Casagrande
 
aula 04 - Logica de programacao
aula 04 - Logica de programacaoaula 04 - Logica de programacao
aula 04 - Logica de programacao
Aislan Rafael
 
POO - 18 - Sobrecarga e Sobreposição de Métodos
POO - 18 - Sobrecarga e Sobreposição de MétodosPOO - 18 - Sobrecarga e Sobreposição de Métodos
POO - 18 - Sobrecarga e Sobreposição de Métodos
Ludimila Monjardim Casagrande
 
POO - 17 - Interfaces
POO - 17 - InterfacesPOO - 17 - Interfaces
POO - 17 - Interfaces
Ludimila Monjardim Casagrande
 
Aula 2 - POO: Fundamentos da linguagem Java
Aula 2 - POO: Fundamentos da linguagem JavaAula 2 - POO: Fundamentos da linguagem Java
Aula 2 - POO: Fundamentos da linguagem Java
Daniel Brandão
 
Aula 09 - introducao oo
Aula 09 - introducao ooAula 09 - introducao oo
Aula 09 - introducao oo
Moacir Jóse Ferreira Junior Ferreira
 
POO - 19 - Elementos Estáticos
POO - 19 - Elementos EstáticosPOO - 19 - Elementos Estáticos
POO - 19 - Elementos Estáticos
Ludimila Monjardim Casagrande
 
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
Leinylson Fontinele
 
Estrutura de Dados - Aula 02 - Estrutura de Dados e TAD
Estrutura de Dados - Aula 02 - Estrutura de Dados e TADEstrutura de Dados - Aula 02 - Estrutura de Dados e TAD
Estrutura de Dados - Aula 02 - Estrutura de Dados e TAD
Leinylson Fontinele
 
POO - Aula 1
POO - Aula 1POO - Aula 1
POO - Aula 1
Diego Armando
 
Estrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores BináriasEstrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores Binárias
Adriano Teixeira de Souza
 
Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)
Daniel Brandão
 
Introdução à Linguagem de Programação C
Introdução à Linguagem de Programação CIntrodução à Linguagem de Programação C
Introdução à Linguagem de Programação C
Jose Augusto Cintra
 
Estrutura de Dados - Aula 02
Estrutura de Dados - Aula 02Estrutura de Dados - Aula 02
Estrutura de Dados - Aula 02
thomasdacosta
 
Aula 7 banco de dados
Aula 7   banco de dadosAula 7   banco de dados
Aula 7 banco de dados
Jorge Ávila Miranda
 

Mais procurados (20)

Programação Orientada a Objetos
Programação Orientada a ObjetosProgramação Orientada a Objetos
Programação Orientada a Objetos
 
Java: Encapsulamento e modificadores de acesso
Java: Encapsulamento e modificadores de acessoJava: Encapsulamento e modificadores de acesso
Java: Encapsulamento e modificadores de acesso
 
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
Estrutura de dados - Aula de Revisão (Linguagem C/C++, Função, Vetor, Matriz,...
 
6 estruturas de dados heterogêneas
6  estruturas de dados heterogêneas6  estruturas de dados heterogêneas
6 estruturas de dados heterogêneas
 
Java: Heranca e polimorfismo
Java: Heranca e polimorfismoJava: Heranca e polimorfismo
Java: Heranca e polimorfismo
 
POO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a ObjetosPOO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a Objetos
 
aula 04 - Logica de programacao
aula 04 - Logica de programacaoaula 04 - Logica de programacao
aula 04 - Logica de programacao
 
POO - 18 - Sobrecarga e Sobreposição de Métodos
POO - 18 - Sobrecarga e Sobreposição de MétodosPOO - 18 - Sobrecarga e Sobreposição de Métodos
POO - 18 - Sobrecarga e Sobreposição de Métodos
 
POO - 17 - Interfaces
POO - 17 - InterfacesPOO - 17 - Interfaces
POO - 17 - Interfaces
 
Aula 2 - POO: Fundamentos da linguagem Java
Aula 2 - POO: Fundamentos da linguagem JavaAula 2 - POO: Fundamentos da linguagem Java
Aula 2 - POO: Fundamentos da linguagem Java
 
Aula 09 - introducao oo
Aula 09 - introducao ooAula 09 - introducao oo
Aula 09 - introducao oo
 
POO - 19 - Elementos Estáticos
POO - 19 - Elementos EstáticosPOO - 19 - Elementos Estáticos
POO - 19 - Elementos Estáticos
 
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
 
Estrutura de Dados - Aula 02 - Estrutura de Dados e TAD
Estrutura de Dados - Aula 02 - Estrutura de Dados e TADEstrutura de Dados - Aula 02 - Estrutura de Dados e TAD
Estrutura de Dados - Aula 02 - Estrutura de Dados e TAD
 
POO - Aula 1
POO - Aula 1POO - Aula 1
POO - Aula 1
 
Estrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores BináriasEstrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores Binárias
 
Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)
 
Introdução à Linguagem de Programação C
Introdução à Linguagem de Programação CIntrodução à Linguagem de Programação C
Introdução à Linguagem de Programação C
 
Estrutura de Dados - Aula 02
Estrutura de Dados - Aula 02Estrutura de Dados - Aula 02
Estrutura de Dados - Aula 02
 
Aula 7 banco de dados
Aula 7   banco de dadosAula 7   banco de dados
Aula 7 banco de dados
 

Semelhante a Java 10 Classes Abstratas Interfaces

Java11
Java11Java11
UFCG.JCert Reunião 1 - Declarações e Controle de Acesso
UFCG.JCert Reunião 1 - Declarações e Controle de AcessoUFCG.JCert Reunião 1 - Declarações e Controle de Acesso
UFCG.JCert Reunião 1 - Declarações e Controle de Acesso
Anderson Ledo
 
Interface
InterfaceInterface
Interface
Artur Todeschini
 
Orientação a Objetos
Orientação a ObjetosOrientação a Objetos
Orientação a Objetos
José Cléber dos Santos Ferreira
 
A linguagem java
A linguagem javaA linguagem java
A linguagem java
Portal_do_Estudante_Java
 
Aprendendo C# do zero
Aprendendo C# do zeroAprendendo C# do zero
Aprendendo C# do zero
Manawydan
 
Final e aastract
Final e aastractFinal e aastract
Final e aastract
Artur Todeschini
 
Java 09 Heranca Reescrita Polimorfismo
Java 09 Heranca Reescrita PolimorfismoJava 09 Heranca Reescrita Polimorfismo
Java 09 Heranca Reescrita Polimorfismo
Regis Magalhães
 
Texto sobre interface
Texto sobre interfaceTexto sobre interface
Texto sobre interface
wilmaraujo
 
AULA DIA 22-2024 - PROGRAMACAO ORIENTADA A OBJETOS EM JAVA.pptx
AULA DIA 22-2024 - PROGRAMACAO ORIENTADA A OBJETOS EM JAVA.pptxAULA DIA 22-2024 - PROGRAMACAO ORIENTADA A OBJETOS EM JAVA.pptx
AULA DIA 22-2024 - PROGRAMACAO ORIENTADA A OBJETOS EM JAVA.pptx
AurelcioOliveira
 
Padrão De Projeto Adapter
Padrão De Projeto AdapterPadrão De Projeto Adapter
Padrão De Projeto Adapter
Matheus Andrade
 
Programação Defensiva
Programação DefensivaProgramação Defensiva
Programação Defensiva
Glaucio Scheibel
 
Java 08 Modificadores Acesso E Membros De Classe
Java 08 Modificadores Acesso E Membros De ClasseJava 08 Modificadores Acesso E Membros De Classe
Java 08 Modificadores Acesso E Membros De Classe
Regis Magalhães
 
Java - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a ObjetosJava - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a Objetos
Moises Omena
 
Integração de Tecnologias
Integração de TecnologiasIntegração de Tecnologias
Integração de Tecnologias
elliando dias
 
Orientação a Objetos no Delphi - Por onde começar (I)
Orientação a Objetos no Delphi - Por onde começar (I)Orientação a Objetos no Delphi - Por onde começar (I)
Orientação a Objetos no Delphi - Por onde começar (I)
Ryan Padilha
 
Linguagens Poo
Linguagens PooLinguagens Poo
Linguagens Poo
Infogenius
 
Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)
Marcos Castro
 
UML - Criando Diagramas Eficientes
UML - Criando Diagramas EficientesUML - Criando Diagramas Eficientes
UML - Criando Diagramas Eficientes
Rodrigo Cascarrolho
 
Java7
Java7Java7

Semelhante a Java 10 Classes Abstratas Interfaces (20)

Java11
Java11Java11
Java11
 
UFCG.JCert Reunião 1 - Declarações e Controle de Acesso
UFCG.JCert Reunião 1 - Declarações e Controle de AcessoUFCG.JCert Reunião 1 - Declarações e Controle de Acesso
UFCG.JCert Reunião 1 - Declarações e Controle de Acesso
 
Interface
InterfaceInterface
Interface
 
Orientação a Objetos
Orientação a ObjetosOrientação a Objetos
Orientação a Objetos
 
A linguagem java
A linguagem javaA linguagem java
A linguagem java
 
Aprendendo C# do zero
Aprendendo C# do zeroAprendendo C# do zero
Aprendendo C# do zero
 
Final e aastract
Final e aastractFinal e aastract
Final e aastract
 
Java 09 Heranca Reescrita Polimorfismo
Java 09 Heranca Reescrita PolimorfismoJava 09 Heranca Reescrita Polimorfismo
Java 09 Heranca Reescrita Polimorfismo
 
Texto sobre interface
Texto sobre interfaceTexto sobre interface
Texto sobre interface
 
AULA DIA 22-2024 - PROGRAMACAO ORIENTADA A OBJETOS EM JAVA.pptx
AULA DIA 22-2024 - PROGRAMACAO ORIENTADA A OBJETOS EM JAVA.pptxAULA DIA 22-2024 - PROGRAMACAO ORIENTADA A OBJETOS EM JAVA.pptx
AULA DIA 22-2024 - PROGRAMACAO ORIENTADA A OBJETOS EM JAVA.pptx
 
Padrão De Projeto Adapter
Padrão De Projeto AdapterPadrão De Projeto Adapter
Padrão De Projeto Adapter
 
Programação Defensiva
Programação DefensivaProgramação Defensiva
Programação Defensiva
 
Java 08 Modificadores Acesso E Membros De Classe
Java 08 Modificadores Acesso E Membros De ClasseJava 08 Modificadores Acesso E Membros De Classe
Java 08 Modificadores Acesso E Membros De Classe
 
Java - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a ObjetosJava - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a Objetos
 
Integração de Tecnologias
Integração de TecnologiasIntegração de Tecnologias
Integração de Tecnologias
 
Orientação a Objetos no Delphi - Por onde começar (I)
Orientação a Objetos no Delphi - Por onde começar (I)Orientação a Objetos no Delphi - Por onde começar (I)
Orientação a Objetos no Delphi - Por onde começar (I)
 
Linguagens Poo
Linguagens PooLinguagens Poo
Linguagens Poo
 
Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)
 
UML - Criando Diagramas Eficientes
UML - Criando Diagramas EficientesUML - Criando Diagramas Eficientes
UML - Criando Diagramas Eficientes
 
Java7
Java7Java7
Java7
 

Mais de Regis Magalhães

High Dimensional Data
High Dimensional DataHigh Dimensional Data
High Dimensional Data
Regis Magalhães
 
Web Scale Data Management
Web Scale Data ManagementWeb Scale Data Management
Web Scale Data Management
Regis Magalhães
 
PHP 10 CodeIgniter
PHP 10 CodeIgniterPHP 10 CodeIgniter
PHP 10 CodeIgniter
Regis Magalhães
 
Prog web 01-php-introducao
Prog web 01-php-introducaoProg web 01-php-introducao
Prog web 01-php-introducao
Regis Magalhães
 
Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosProg web 02-php-primeiros-passos
Prog web 02-php-primeiros-passos
Regis Magalhães
 
Prog web 00-modelo-cliente_servidor_web
Prog web 00-modelo-cliente_servidor_webProg web 00-modelo-cliente_servidor_web
Prog web 00-modelo-cliente_servidor_web
Regis Magalhães
 
Prog web 09-php-crud-mvc
Prog web 09-php-crud-mvcProg web 09-php-crud-mvc
Prog web 09-php-crud-mvc
Regis Magalhães
 
Prog web 08-php-mvc
Prog web 08-php-mvcProg web 08-php-mvc
Prog web 08-php-mvc
Regis Magalhães
 
Prog web 07-pdo
Prog web 07-pdoProg web 07-pdo
Prog web 07-pdo
Regis Magalhães
 
Prog web 06-php-oo
Prog web 06-php-ooProg web 06-php-oo
Prog web 06-php-oo
Regis Magalhães
 
Prog web 05-php-mysql
Prog web 05-php-mysqlProg web 05-php-mysql
Prog web 05-php-mysql
Regis Magalhães
 
Prog web 04-php-gd
Prog web 04-php-gdProg web 04-php-gd
Prog web 04-php-gd
Regis Magalhães
 
Prog web 03-php-sessoes-cookies_cabecalhos
Prog web 03-php-sessoes-cookies_cabecalhosProg web 03-php-sessoes-cookies_cabecalhos
Prog web 03-php-sessoes-cookies_cabecalhos
Regis Magalhães
 
Prog web 03-php-sessoes-cookies_cabecalhos
Prog web 03-php-sessoes-cookies_cabecalhosProg web 03-php-sessoes-cookies_cabecalhos
Prog web 03-php-sessoes-cookies_cabecalhos
Regis Magalhães
 
Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosProg web 02-php-primeiros-passos
Prog web 02-php-primeiros-passos
Regis Magalhães
 
Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosProg web 02-php-primeiros-passos
Prog web 02-php-primeiros-passos
Regis Magalhães
 
Prog web 00-modelo-cliente_servidor_web
Prog web 00-modelo-cliente_servidor_webProg web 00-modelo-cliente_servidor_web
Prog web 00-modelo-cliente_servidor_web
Regis Magalhães
 
Prog web 01-php-introducao
Prog web 01-php-introducaoProg web 01-php-introducao
Prog web 01-php-introducao
Regis Magalhães
 
Linked Data Tutorial - Conferencia W3C Brasil 2011
Linked Data Tutorial - Conferencia W3C Brasil 2011Linked Data Tutorial - Conferencia W3C Brasil 2011
Linked Data Tutorial - Conferencia W3C Brasil 2011
Regis Magalhães
 
Linked Data - Minicurso - SBBD 2011
Linked Data - Minicurso - SBBD 2011Linked Data - Minicurso - SBBD 2011
Linked Data - Minicurso - SBBD 2011
Regis Magalhães
 

Mais de Regis Magalhães (20)

High Dimensional Data
High Dimensional DataHigh Dimensional Data
High Dimensional Data
 
Web Scale Data Management
Web Scale Data ManagementWeb Scale Data Management
Web Scale Data Management
 
PHP 10 CodeIgniter
PHP 10 CodeIgniterPHP 10 CodeIgniter
PHP 10 CodeIgniter
 
Prog web 01-php-introducao
Prog web 01-php-introducaoProg web 01-php-introducao
Prog web 01-php-introducao
 
Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosProg web 02-php-primeiros-passos
Prog web 02-php-primeiros-passos
 
Prog web 00-modelo-cliente_servidor_web
Prog web 00-modelo-cliente_servidor_webProg web 00-modelo-cliente_servidor_web
Prog web 00-modelo-cliente_servidor_web
 
Prog web 09-php-crud-mvc
Prog web 09-php-crud-mvcProg web 09-php-crud-mvc
Prog web 09-php-crud-mvc
 
Prog web 08-php-mvc
Prog web 08-php-mvcProg web 08-php-mvc
Prog web 08-php-mvc
 
Prog web 07-pdo
Prog web 07-pdoProg web 07-pdo
Prog web 07-pdo
 
Prog web 06-php-oo
Prog web 06-php-ooProg web 06-php-oo
Prog web 06-php-oo
 
Prog web 05-php-mysql
Prog web 05-php-mysqlProg web 05-php-mysql
Prog web 05-php-mysql
 
Prog web 04-php-gd
Prog web 04-php-gdProg web 04-php-gd
Prog web 04-php-gd
 
Prog web 03-php-sessoes-cookies_cabecalhos
Prog web 03-php-sessoes-cookies_cabecalhosProg web 03-php-sessoes-cookies_cabecalhos
Prog web 03-php-sessoes-cookies_cabecalhos
 
Prog web 03-php-sessoes-cookies_cabecalhos
Prog web 03-php-sessoes-cookies_cabecalhosProg web 03-php-sessoes-cookies_cabecalhos
Prog web 03-php-sessoes-cookies_cabecalhos
 
Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosProg web 02-php-primeiros-passos
Prog web 02-php-primeiros-passos
 
Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosProg web 02-php-primeiros-passos
Prog web 02-php-primeiros-passos
 
Prog web 00-modelo-cliente_servidor_web
Prog web 00-modelo-cliente_servidor_webProg web 00-modelo-cliente_servidor_web
Prog web 00-modelo-cliente_servidor_web
 
Prog web 01-php-introducao
Prog web 01-php-introducaoProg web 01-php-introducao
Prog web 01-php-introducao
 
Linked Data Tutorial - Conferencia W3C Brasil 2011
Linked Data Tutorial - Conferencia W3C Brasil 2011Linked Data Tutorial - Conferencia W3C Brasil 2011
Linked Data Tutorial - Conferencia W3C Brasil 2011
 
Linked Data - Minicurso - SBBD 2011
Linked Data - Minicurso - SBBD 2011Linked Data - Minicurso - SBBD 2011
Linked Data - Minicurso - SBBD 2011
 

Java 10 Classes Abstratas Interfaces

  • 1. Classes Abstratas e Interfaces Regis Pires Magalhães [email_address]
  • 2. 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
  • 3. 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
  • 4. 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
  • 5. Classes Abstratas public 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(); }
  • 6. 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!
  • 7. 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.
  • 8. 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 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.
  • 10. Interfaces public interface Autenticavel { public 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 ; } }
  • 11. 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.
  • 12. 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.
  • 14. Interfaces package java.io; public interface Serializable { }
  • 15. Interfaces package java.lang; import java.util.*; public interface Comparable<T> { public int compareTo(T o); }
  • 16. Interfaces package java.util; public interface Collection<E> extends Iterable<E> { int size(); boolean isEmpty(); boolean contains(Object o); // ... boolean add(E e); boolean remove(Object o); // ... void clear(); // ... }
  • 17. Interfaces package java.util; public interface List<E> extends Collection<E> { // ... int indexOf(Object o); int lastIndexOf(Object o); // ... }
  • 18. Interfaces package java.sql; public interface Wrapper { <T> T unwrap(java.lang.Class<T> iface) throws java.sql.SQLException; boolean isWrapperFor(java.lang.Class<?> iface) throws java.sql.SQLException; }
  • 19. Interfaces package java.sql; import java.util.Properties; public interface Connection extends Wrapper { // ... void commit() throws SQLException; void rollback() throws SQLException; void close() throws SQLException; // ... int TRANSACTION_NONE = 0; int TRANSACTION_READ_UNCOMMITTED = 1; int TRANSACTION_READ_COMMITTED = 2; int TRANSACTION_REPEATABLE_READ = 4; int TRANSACTION_SERIALIZABLE = 8; // ... }
  • 20. 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”.