Interface vs. Implementação Herança vs. Composição

Documentos relacionados
Classe Abstrata e Interface

GRASP. Nazareno Andrade (baseado em Hyggo Almeida e Jacques Sauvé)

Introdução a Padrões, GRASP. Nazareno Andrade (baseado no material de Hyggo Almeida e Jacques Sauvé)

Linguagem de Programação III

Capítulo 2. Orientação a Objetos

Introdução à Análise e Projeto de Sistemas

Aula 9 Herança. Prof. Jefersson Alex dos Santos

Programação Orientada a Objetos

Linguagens de Programação Aula 12

Objetivos. Explorar os conceitos fundamentais acerca do uso herança na linguagem Java

AULA 8 Polimorfismo de: coerção, overloading, inclusão e paramétrico Prof. Dr. Fernando Henrique Campos

Programação Orientada a Objetos. Vagner Luz do Carmo - Vluzrmos

Linguagem de programação Programação Orientada a objetos

Conceitos de Programação Orientada a Objetos

C com introdução a OO

Facetas da Reusabilidade de Software

POO29004 Programação Orientada a Objetos

Interfaces e Classes Abstratas

Vejamos o seguinte exemplo public class Exemplo private int testada = 20; public void testapalavra(int testada) JOptionPane.showMessageDialog(null,"Pa

Singleton e Adapter. Professor: Nazareno Andrade (baseado no material de Hyggo Almeida e Jacques Sauvé)

Programação Orientada a Objetos 2 Flávio de Oliveira Silva, M.Sc.

Laboratório de programação II

DCC004 - Algoritmos e Estruturas de Dados II

Programação Java. Marco Fagundes. - Herança, Classes Abstratas e Interfaces Marco Fagundes -

Programação Orientada a Objetos JAVA - NETBEANS

Programação Orientada a Objetos

POO e C++: Herança e Polimorfismo

Linguagem de Programação Orientada a Objeto Polimorfismo, Classes Abstractas e Interfaces

UNIVERSIDADE PAULISTA - UNIP ICET INSTITUTO DE CIÊNCIAS EXATAS E TECNOLÓGIA

POO29004 Programação Orientada a Objetos

Lista 05 Herança. public class PessoaFisica extends Pessoa { private String RG; public PessoaFisica(){ super(); } public String getrg(){ return RG; }

Java para Desktop. Programação Orientada à Objetos 2 JSE

Engenharia de Software. Aula 10 Representação dos Conceitos de Orientação a Objetos. Prof. Me. Rogério Ferreira

SEMINÁRIOS INTEGRADOS EM ADS PROGRAMAÇÃO ESTRUTURADA E ORIENTADA A OBJETOS

Orientação a Objetos (OO) LPG II - Java. Orientação a Objetos (OO) Programação Orientada a Objetos. Programação Procedimental

Orientação a Objetos Classes Abstratas

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Conceitos de Orientação a Objetos

Linguagem de Programação I Apresentação da Disciplina

Programação Orientada a Objetos

Factory Pattern. SISMO - Sistemas e Mobilidade Junho de Departamento de Informática / UFMA

Herança e Polimorfismo

Linguagem de Programação II Herança

Notas de Aula 05: Diretivas de atributos, métodos e classes e o uso de Interfaces.

Programação Orientada a Objetos Classes Abstratas. Sérgio Soares

9 Classes Abstractas e Interfaces

Orientação a Objetos (OO) Java Avançado Revisão do Paradigma de. Orientação a Objetos (OO) Programação Orientada a Objetos. Programação Procedimental

POO29004 Programação Orientada a Objetos

Introdução Diagrama de Classes Diagrama de Seqüência Diagrama de Atividades. Diagramas UML. Classe, Seqüência e Atividades. Marcio E. F.

Computação II Orientação a Objetos

Paradigmas de Linguagens de Programação. Suporte para Programação Orientada a Objeto

Polimorfismo. O que é polimorfismo?

Iteradores. Iteradores. Isabel Harb Manssour. Roteiro. Coleções

Decorator e Composite. Nazareno Andrade (baseado no material de Hyggo Almeida)

Desenvolvimento Web TCC Turma A-1

Java - Herança e Interface

Alguns Exercícios Resolvidos

Modelagem de Dados MODELAGEM DE DADOS. Sistemas de Banco de Dados. Profa. Rosemary Melo

Unidade: Classes Abstratas, Polimorfismo, Sobreposição e Interfaces

Herança (parte 2) Redefinição de métodos AULA 11

Herança. Universidade Católica de Pernambuco Ciência da Computação. Prof. Márcio Bueno.

Programação Orientada a Objetos Flávio de Oliveira Silva 144

UNIVERSIDADE FEDERAL DE SANTA MARIA CENTRO DE TECNOLOGIA AULA 15 PROFª BRUNO CALEGARO

Orientação a objetos. Objetos ou Instâncias I

Programação Orientada a Objetos. Professor: André Luis Meneses Silva br.geocities.com/programacao2ufs

AULA 02. OBJETIVO: Características da Linguagem Orientada a Objetos.

Programação para Games II. Professor Ariel da Silva Dias Orientação a Objetos

6 Polimorfismo. Desenvolvimento OO com Java. Vítor E. Silva Souza ~ vitorsouza

Java First-Tier: Aplicações. Sobrecarga. Orientação a Objetos em Java (II) Sobrecarga de Construtores: Exemplo de Declaração

UNIVERSIDADE FEDERAL DE MATO GROSSO DO SUL SISTEMAS DE INFORMAÇÃO - CÂMPUS DE COXIM FUNDAMENTOS EM ORIENTAÇÃO A OBJETOS

Aula 10 POO 1 Classes Abstratas. Profa. Elaine Faria UFU

TÉCNICAS DE ORIENTAÇÃO A OBJETOS

Recapitulando. Construtores: (Overload assinatura) public Circle() {...} public Circle(double x, double y, double r) {... }

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

Transcrição:

Interface vs. Implementação Herança vs. Composição

O que vimos na última aula? Padrões GRASP Expert Creator Low Coupling High Cohesion 2

O que veremos hoje? Interface e Polimorfismo Interface como uma promessa Tipos e classes Herança de tipo e Herança de implementação Programe para uma interface... Herança versus Composição Por que composição? Quando usar herança? 3

Testando seus conhecimentos!!! Nesta atribuição, quem é o tipo e quem é a classe? Pessoa pessoa1 = new Pessoa(); Quem é a interface e quem é a implementação? 4

Tipo O tipo de um objeto define o conjunto de solicitações às quais ele pode atender O tipo define o que o objeto é capaz de fazer Interface do objeto Promessa de serviços Subtipos, supertipos 5

Objetos são acessados pela sua interface Objetos diferentes, interfaces iguais Ligação dinâmica em tempo de execução Polimorfismo! è Clientes mais simples, objetos mais desacoplados, flexibilidade! Mais fácil mudar cliente Mudar implementação quebra menos o cliente

Classe A classe de um objeto define o estado interno de um objeto e a implementação de suas operações A classe define como o objeto é implementado Implementação do objeto Cumprimento de uma promessa de serviços 7

Relação tipo - classe Forte relacionamento entre tipo e classe Quando uma classe define as suas operações também define o tipo Linguagens como C++ utilizam a mesma estrutura para definir tipo e classe Sem compreender tipo e classe, não há como entender herança de tipo e herança de implementação. 8

Herança de tipo versus Herança de classe Herança de classe (ou de implementação) Define a implementação de um objeto em função da implementação de outro Mecanismo para compartilhamento de código Herança de classe Quero implementar da mesma forma que o outro implementa!!! 9

Herança de tipo (ou de interface) Define quando um objeto pode ser utilizado no lugar do outro......cumprindo a mesma promessa que o outro prometeu. Herança de tipo Quero prometer o mesmo que o outro promete!!! 10

Em Java... Herança de tipo public class NomeDeClasse implements PessoaIF{...} public class NomeDeClasse extends Pessoa{...} Herança de implementação Também implica na herança de tipo 11

Existe alguma diferença, em Java, entre utilizar uma interface e uma classe abstrata onde todos os métodos são também abstratos? 12

Programe para uma interface, e não para uma implementação

Programe para uma interface e não para uma implementação Através da herança de tipo Mesmo utilizando herança de implementação Programe para uma interface (tipo) não para uma classe específica Clientes sem conhecimento do tipo do objeto que estão usando, desde que obedeçam à interface Clientes sem conhecimento da classe que implementa os objetos 14

Flexibilidade!!! A implementação pode ser trocada em tempo de execução Late Binding Em Java, o conceito de interface permite um polimorfismo independente da hierarquia!!! Exemplo: Comparable 15

Programe para uma interface e não para uma implementação Exemplo de projeto pouco flexível... Programando para uma classe!!! Teste Aluno...e se um novo tipo de usuário for adicionado??? Professor, por exemplo 16

Programe para uma interface e não para uma implementação... simples, resolvo com Herança!!! Programando para um tipo usando herança!!! Teste Usuário Aluno Professor... mas... e se o algoritmo de teste de Usuário servir para outras entidades??? Carro, por exemplo 17

... resolvo com interface!!! Agora sim!!! Programando para um tipo usando interface!!! Teste <<interface>> Testavel Aluno Professor Carro...qualquer classe que implemente Testavel poderá ser testada pelo algoritmo de teste! 18

Princípio/Padrão 2: Favoreça composição sobre Herança

Herança versus Composição Mecanismos para reutilizar funcionalidades Composição é geralmente superior à herança Mas por que??? Herança é um acoplamento muito forte!!! Mudar superclasse muda todas as subclasses Uma vez definida em projeto a implementação de um objeto, não se pode mudar em tempo de execução! Subclasse assume estado da superclasse quando o método sobrescrito for chamado 20

Herança versus Composição Eis um problema... Pessoa Tripulante Passageiro Agente Vários papéis podem ser assumidos Várias subclasses? 7 combinações!!! 21

Delegação sempre pode ser usada no lugar de herança Problema??? Mais difícil de entender!!! 22

ou Pessoa <<interface>> Papel Delegação às classes referentes aos papéis Tripulante Passageiro Agente

Outro exemplo: JButton.addActionListener()

Mas então... Quando usar herança? O objeto é um tipo especial de... Transação Dispositivo Reserva Compra Mouse Teclado Pessoa Tripulante Passageiro Agente e não um papel assumido por 25

Mas então... Quando usar herança? O objeto nunca tem que mudar para outra classe Dispositivo Um Tripulante de um vôo pode ser Passageiro de outro. Mouse Teclado Pessoa Um Mouse nunca vai se tornar um Teclado Tripulante Passageiro Agente 26

Mas então... Quando usar herança? As subclasses não sobrescrevem métodos da superclasse (apenas adicionam) Superclasse desenhar() testar() Sobrescreve tudo!? Pra que herdar??? Superclasse desenhar() testar() SubclasseA imprimir() SubclasseB executar() Novas funcionalidades... Compartilha código! SubclasseA desenhar() testar() SubclasseB desenhar() testar() 27

Mas então... Quando usar herança? A superclasse não é uma classe utilitária Vector Principal problema TodoMundo usa ColeçãoA ColeçãoA Não é um vetor... Tem um vetor associado!!! Mas a implementação de ColeçãoA é a de Vector. Se Vector muda, TodoMundo tem que mudar!!! 28

Mas então... Quando usar herança? Se no contexto do problema em questão, papéis representarem tipos!!! Imaginem que existe alguma agência de viagem em que um Tripulante, Passageiro e Agente são fixos! Nesse caso pode ser modelado como um tipo de Pessoa. Pessoa Tripulante Passageiro Agente 29

Mas então... Quando usar herança? De acordo com as leis de utilização da herança... comente a modelagem abaixo!!! FitaVideo calcularpreço( ) Lançamento Normal Infantil calcularpreço( ) calcularpreço( ) calcularpreço( ) Como fazer o projeto usando composição??? 30

O que vimos hoje? Interface e Polimorfismo Interface como uma promessa Tipos e classes Herança de tipo e Herança de implementação Programe para uma interface... Herança versus Composição Por que composição? Quando usar herança? 31

O que veremos na próxima aula? Introdução a padrões de projeto arquitetural Arquitetura de software O que é? Para que serve? Como documentar O que é padrão arquitetural 32

Dúvidas?? 33