Sobrecarga, Sobreposição e Polimorfismo

Documentos relacionados
Aula 9 POO 1 Polimorfismo. Profa. Elaine Faria UFU

Aula 7 POO 1 Herança. Profa. Elaine Faria UFU

Auto-Referenciamento e Herança

Interfaces e Classes Abstratas

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

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

POO29004 Programação Orientada a Objetos

Programação OO em Java. Profa Andréa Schwertner Charão DLSC/CT/UFSM

Programação. Orientada a Objetos: Herança. Objetos. Relacionamento entre classes. Análise e Projeto Orientados a. Objetos

Aula 6 POO 1 Construtores. Profa. Elaine Faria UFU

Construtores. Introdução

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

9 Classes Abstractas e Interfaces

Herança. Herança. Herança. Herança. Herança. Programação Orientada a Objetos

Aula 5 POO 1 Encapsulamento. Profa. Elaine Faria UFU

Classe Abstrata e Interface

Universidade Federal de Uberlândia

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

Conceitos de Programação Orientada a Objetos

Programação OO em Java. Profa Andréa Schwertner Charão DELC/CT/UFSM

POO29004 Programação Orientada a Objetos

Introdução ao Java. Prof. Herbert Rausch Fernandes

Linguagem de Programação III

Programação Java. - Herança e Polimorfismo - Marco Fagundes Marco Fagundes -

COMPORTAMENTOS - Observações

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

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan

Linguagem de Programação. Diagrama de classes

LÓGICA DE PROGRAMAÇÃO (JAVA) HERANÇA. Professor Carlos Muniz

Professor Leonardo Cabral da Rocha Soares Lattes:

Programação Orientada a Objetos JAVA - NETBEANS

Programação Orientada a Objectos - P. Prata, P. Fazendeiro. Hierarquia de classes e mecanismo de ligação

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

Programação Orientada a Objetos

Programação Orientada a Objetos

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

Programação Java (nível intermediário) 4. Polimorfismo

Herança. Fátima L. S. Nunes Luciano A. Digiampietri Norton T. Roman SISTEMAS DE INFORMAÇÃO 1

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

AULA TEÓRICA 9. Tema 8. Herança (continuação) Ø Sobreposição de métodos. Ø Variáveis e métodos estáticos. Ø Hierarquia de classes.

Unidade: sobrecarga, construtores e herança

4 Conceito de Herança

Orientação a Objetos AULA 06

Universidade Federal de Uberlândia

Python Orientação a Objetos. Introdução à Programação SI2

Prof. A. G. Silva. 30 de outubro de Prof. A. G. Silva INE5603 Introdução à POO 30 de outubro de / 1

Avançando em Java com Polimorfismo. Prof.: Hugo Barros

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

Programação Orientada a Objetos

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

POO29004 Programação Orientada a Objetos

Programação Orientada a Objetos

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

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

Linguagem de Programação Orientada a Objeto Abstração - Encapsulamento

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

Polimorfismo e Ligação Dinâmica. Alcides Pamplona Polimorfismo e Ligação Dinâmica

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

Programação por Objectos. Java

A B Classe Genérica D A C. Classe Especializada. Classe Especializada. Características Herdadas

Aula 3 POO 1 Classe e Objeto. Profa. Elaine Faria UFU

Polimorfismo. O que é polimorfismo?

Entender o princípio do Polimorfismo; Conhecer Polimorfismo de Sobreposição e de Inclusão;

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

Ficha Prática 10. António Nestor Ribeiro, Paulo Azevedo, Mário Martins PPIV (LESI) 2005/06

Programação Orientada a Objetos JAVA - NETBEANS

Orientação a objetos. Programação. Orientada a Objetos. Orientação a objetos. Orientação a objetos. Abstração e encapsulamento

Laboratório de programação II

Classes e Objetos. Sintaxe de classe em Java

Programação Orientada a Objetos

Programação Orientada a Objetos II

Linguagem de Programação I

Linguagem de Programação III

Encapsulamento. Alberto Costa Neto DComp - UFS

Herança. Prof. Fernando V. Paulovich 23 de agosto de 2010

Programação Orientada a Objetos SANTOS, Rafael

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

Curso teórico: Orientação a Objetos. Matemática computacional Marcos Aurelio Wozhiak Jr webzhiak.com.br

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

Linguagem Algorítmica OO. Linguagem Algorítmica

Palavras Reservadas da Linguagem Java

Programação Orientada por Objetos

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

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

O PARADIGMA ORIENTADO POR OBJETOS

Notas de Aula 04: Herança e polimorfismo.

Ex: carro_desportivo poderá ser uma subclasse de automóvel (carro_desportivo é_um automóvel)

Introdução a orientação a objetos

Linguagem de Programação Orientada a Objeto Construtores e Sobrecarga

Programação Orientada a Objeto: Introdução. Professor: Adonai Estrela Medrado Data: 22/07/2008

Como exemplo, vamos criar uma subclasse da classe Funcionario, vista nos capítulos anteriores.

Modelo do Mundo Real. Abstração. Interpretação

Universidade da Beira Interior Cursos: Engenharia Informática, Matemática /Informática e Ensino da Informática

Linguagem de Programação II Implementação

Programação Orientada a Objetos

Conceitos de Programação Orientada a Objetos

Introdução a Programação Orientada a Objetos

Transcrição:

Sobrecarga, Sobreposição e Polimorfismo José Gustavo de Souza Paiva Sobrecarga de Métodos Numa mesma classe, dois ou mais métodos podem ter o mesmo nome Desde que tenham tipos, quantidade e/ou ordem de parâmetros diferentes Assinatura de um método Nome Tipo dos parâmetros 1

Sobrecarga de Métodos Sobrecarga de Métodos Erro! 2

Sobrecarga de Métodos Exemplo útil: Classe que gerencia uma lista de Objetos do tipo Cliente Atributos: nome, cpf, matricula, idade Operações Busca por nome Busca por cpf Busca por matricula Sobreposição de Métodos 3

Sobreposição de Métodos Antropóide, Macaco e Ser Humano respiram do mesmo jeito Método Respira( ) de Antropóide é utilizado para os objetos da classe Homem e Macaco, da mesma maneira, já que Macaco e Ser Humano herdam esse método Mamíferos andam de formas diferentes Um método Anda( ) em Mamífero não serve para Antropóide e Elefante, por exemplo Sobreposição de Métodos Métodos definidos na superclasse podem ser redefinidos em suas subclasses Nesse caso, a prioridade na definição é sempre a da subclasse Isso permite flexibilidade na definição de comportamentos gerais e específicos em uma hierarquia Permite também um melhor reuso de classes já prontas 8 4

Sobreposição de Métodos Antropóide, Macaco e Ser Humano respiram do mesmo jeito Método Respira( ) de Antropóide será utilizado para os objetos da classe Homem e Macaco, da mesma maneira Mamíferos andam de formas diferentes Um método Anda( ) em Mamífero provavelmente terá que ser redefinido para Antropóide e Elefante, por exemplo Sobreposição de Métodos Restrições Método que sobrepõe não deve restringir o grau de acessibilidade do método sobreposto Um método protected não pode ser sobreposto por outro private Assinaturas dos métodos devem ser idênticas Valor de retorno pode variar 5

Sobreposição de Métodos 11 Sobreposição Exemplo Java public class Pessoa { protected String nome, CPF, RG; protected int idade; public Pessoa(String n, String cpf, String rg, int id) { nome = n; CPF = cpf; RG = rg; idade = id; 12 6

Sobreposição Exemplo Java public class Funcionario extends Pessoa { protected int matricula; protected float salariobase; public Funcionario(String n, String CPF, String RG, int idade,int mat) { super(n,cpf,rg,idade); matricula = mat; salariobase = 1000; public float calculasalario() { return salariobase; 13 Sobreposição Exemplo Java public class Piloto extends Funcionario { private int numhoras; public Piloto(String n, String CPF, String RG, int idade, int mat, int nh) { super(n,cpf,rg,idade,mat); numhoras = nh; public float calculasalario() { return (salariobase + numhoras*4); 14 7

Sobreposição Exemplo Java public class Atendente extends Funcionario { private float comissao; private int numvendas; public Atendente(String n, String CPF, String RG, int idade, int mat) { super(n,cpf,rg,idade,mat); comissao = 0.45f; numvendas = 0; public void computavenda() { numvendas++; public float calculasalario() { return (salariobase + numvendas*comissao); 15 Sobreposição de Métodos 8

Sobreposição de Métodos Os métodos print() das classes CD e DVD terão prioridade ao método print() da classe Item No entanto, os métodos da superclasse não são automaticamente chamados, como ocorre com os construtores Para execução em forma cascata, como proceder? Sobreposição de Métodos Os métodos print() das classes CD e DVD terão prioridade ao método print() da classe Item No entanto, os métodos da superclasse não são automaticamente chamados, como ocorre com os construtores Para execução em forma cascata, como proceder? Utilização do super chamando o método da superclasse 9

Problema Criar um vetor de funcionários Vetor deve abranger atendentes e pilotos Como ficaria a declaração do vetor? Vetores só podem conter um tipo de dado Problema Criar um vetor de funcionários Vetor deve abranger atendentes e pilotos Como ficaria a declaração do vetor? Vetores só podem conter um tipo de dado Solução: criar um vetor para funcionário, um para piloto e outro para atendente Solução ruim! 10

Polimorfismo Polimorfismo: várias formas o alvo (executor) de um método pode ter várias formas (classes) Quem chama um método (envia uma mensagem) em um objeto não precisa saber a que classe esse objeto pertence Programar no geral ao invés de programar no específico Polimorfismo Necessário na chamada: saber que esse objeto pode realizar essa operação (comportamento) Não é necessário saber nem a classe do objeto nem como essa operação é implementada É possível até trocar o objeto que implementa a operação sem avisar os usuários de seus métodos 11

Polimorfismo Objetos respondem de maneiras diferentes à mesma mensagem, dependendo da classe a qual pertencem Representam tipos dinâmicos de variáveis Mesma mensagem, enviada a uma variedade de objetos, tem muitas formas de processamento Recurso importante aliado à herança Objetos que compartilham a mesma superclasse em uma hierarquia de classes podem ser tratados como se fossem objetos da superclasse 23 Polimorfismo O polimorfismo ocorre quando um programa invoca um método por meio de uma variável da superclasse e em tempo de execução, a versão correta da subclasse do método é chamada O mesmo nome e assinatura de método podem ser utilizados para fazer com que diferentes ações ocorram Em Java, todas as variáveis de objeto utilizam polimorfismo Um objeto de uma classe A pode se referir a A ou a qualquer classe que seja descendente de A 24 12

Polimorfismo Exemplo programa para simulação do movimento de vários tipos de animais Criação da classe Animal Criação das classes Peixe, Anfíbio e Pássaro que estendem a classe Animal Todas contém o método mover() Cada subclasse implementa um método mover() de maneira diferente Cada objeto saberá como executar adequadamente quando mover() for invocado 25 Polimorfismo Vantagens Flexibilidade na definição e gerenciamento do conjunto de classes em uma hierarquia O programador não precisa verificar qual a natureza do objeto para saber qual método invocar Basta que ele participe da hierarquia Facilidade na criação e manipulação de estruturas de dados heterogêneas Projeto e implementação de sistemas facilmente extensíveis 26 13

Polimorfismo Exemplo em Java É possível criar uma estrutura que represente o conjunto de funcionários da empresa Utilizando um array Funcionario[] qe = new Funcionario[5]; qe[0] = new Piloto( Rui, 123, 344,30,225,300); qe[1] = new Atendente( Joe, 125, 345,26,226); qe[2] = new Funcionario( Ana, 237, 375,47,227); qe[3] = new Piloto( Pat, 587, 366,54,228,4500); qe[4] = new Atendente( Ben, 799, 533,25,229); 27 Polimorfismo Exemplo em Java Para calcular o salário de todos os funcionários for (int i=0;i<qe.length;i++) System.out.println(qE[i].calculaSalario()); 28 14

Polimorfismo instanceof Em alguns casos, é necessário descobrir a classe à qual o objeto pertence (ao invés de tratá-lo como um objeto de sua superclasse) Para isso, utiliza-se o comando instanceof Exemplo: contar o número de pilotos int cp = 0; for (int i=0;i<qe.length;i++) if (qe[i] instanceof Piloto) cp++; System.out.println( Num Pilotos: +cp); 29 Problema 15

Problema Figura[] v = new Figura[2]; v[0] = new Retangulo(); v[1] = new Circulo(); v[1].getraio(); ERRO, mesmo sabendo que a classe Circulo contém esse método Casting As vezes é necessário executar operações específicas em uma subclasse, que está referenciada como sua superclasse (polimorfismo) Casting permite a atribuição da subclasse para a superclasse IMPORTANTE: Não é possível atribuir a superclasse para subclasse! 16

Casting Exemplo Figura[] v = new Figura[2]; v[0] = new Retangulo(); v[1] = new Circulo(); v[1].getraio(); ERRO, mesmo sabendo que a classe Circulo contém esse método Casting corrige isso: ((Circulo)v[1]).getRaio(); Casting ArrayList lista = new ArrayList(); lista.add("alo"); String elemento = lista.get(0); erro! Com Casting String elemento = (String)lista.get(0); 17

Resumindo Herança reaproveitamento de atributos e métodos de classes em outras classes, criando uma hierarquia Generalização especialização Reutilização de código Construção de softwares de maneira mais rápida, mais segura, mais extensiva e de melhor manutenção 35 Resumindo Polimorfismo propriedade pela qual mensagens podem significar coisas diferentes, dependendo do objeto que a recebe Manipulação de diversas subclasses através de operações definidas na superclasse Possibilidade de manipulação de estruturas heterogêneas Tais recursos são importantes e diferenciam as linguagens Orientadas a Objetos de linguagens que envolvem o paradigma estruturado 36 18

Exercício Implemente uma hierarquia de formas geométricas, de acordo com a Figura do próximo slide Cada forma bidimensional deve conter o método obterarea(), e cada forma tridimensional deve conter o método obterarea() e obtervolume() Crie um programa que utilize um vetor de formas para objetos dessa hierarquia Crie métodos para mostrar uma descrição textual do objeto ao qual cada elemento se refere O programa também deve percorrer o vetor e, se for uma forma bidimensional, mostrar sua área, e se for uma forma tridimensional, mostrar seu volume 37 Exercício 19

Áreas Circunferência: πr 2 Quadrado: L 2 Triângulo: B*H Esfera: 4πR 2 Cubo: 6L 2 Tetraedro: L 2 3 Volumes Esfera: (4/3)πR 3 Cubo: L 3 Tetraedro: (1/3)A base *H Fórmulas Referências DEITEL, H. M., DEITEL, P. J., Java: Como Programar, Bookman, São Paulo, 2002 BARNES, D. J., KOLLING, M., Programação Orientada a Objetos com Java, 2004, ISBN: 8576050129 Casagrande, L. M., Slides de Programação Orientada a Objetos - Sobrecarga e Sobreposição de Métodos, disponivel em http://www.slideshare.net/ludimila_monjardim/po o-19sobrecarga-sobreposio Moreira, D., Conceitos básicos em POO, disponível em http://java.icmc.usp.br/drupal6/web-courses 20