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

Avançando em Java com

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

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

C com introdução a OO

Facetas da Reusabilidade de Software

ACH2002. Orientação a Objetos

POO29004 Programação Orientada a Objetos

Herança Tiago Eugenio de Melo

Interfaces e Classes Abstratas

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

Laboratório de Programação. Aula 2 Java 5COP088. Aula 2 Java Prof. Dr. Sylvio Barbon Junior. Sylvio Barbon Jr

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

LEIC-T LERC MEIC-T 2011/2012 1º Semestre Programação com Objetos 2012/01/07 11h00m 3/10

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

p Imagine que um Sistema de Controle do Banco pode ser acessado, além dos Gerentes, pelos Diretores do Banco

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

Orientação a Objetos Interfaces

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

Universidade Federal de Uberlândia Faculdade de Computação Prof. Fabiano Azevedo Dorça Programação Orientada a Objetos II. Padrões de Projeto

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

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

Introdução a Programação Orientada a Aspectos

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

Usuários. Interface com Usuários. Programa Aplicativo. Interfaces de Programação. Sistema Operacional

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

Computação II Orientação a Objetos

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

Interfaces e polimorfismo

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

Programação Orientada a Objetos para Redes de Computadores. Polimorfismo com Hierarquias de Herança. Exemplo: Hierarquia Animal

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

AULA TEÓRICA 10. Tema 9. Interface. Tema 10. Recursividade


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 com Objectos 1º Teste Tipo 1º Semestre (90 minutos)

ORIENTAÇÃO A OBJETOS Histórico:

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

Projeto Orientado a Objetos

Programação de Computadores - I. Profª Beatriz Profº Israel

Herança Sendo uma linguagem orientada a objetos Java oferece mecanismos para definir classes derivadas a partir de classes existentes; As classes deri

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

Strategy e Template Method. Professor: Hyggo Almeida

Programação Orientada a Objetos. Prof. Diemesleno Souza Carvalho

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