poo - aula 10 - polimorfismo
DESCRIPTION
Aula 10 da disciplina de Programação Orientada a Objetos, ministrada pelo Departamento de Computação da Universidade Federal de Sergipe. Apresenta os conceitos sobre Polimorfismo.TRANSCRIPT
Polimorfismo
Universidade Federal de SergipeDepartamento de ComputaçãoProgramação Orientada a Objetos
Última Atualização em Novembro de 2011
Felipe J. R. Vieira
2
Recapitulando
103403 – Programação Orientada a Objetos
3103403 – Programação Orientada a Objetos
Sumário
➢ Polimorfismo.
4
Polimorfismo
103403 – Programação Orientada a Objetos
➢ Na herança, vimos que todo Gerente é um Funcionario, pois é uma extensão deste.
➢ Podemos nos referir a um Gerente como sendo um Funcionario.
➢ Pois Gerente é um Funcionario. Essa é a semântica da herança.
5
Polimorfismo
103403 – Programação Orientada a Objetos
➢ Na herança, vimos que todo Gerente é um Funcionario, pois é uma extensão deste.
➢ Podemos nos referir a um Gerente como sendo um Funcionario.
➢ Pois Gerente é um Funcionario. Essa é a semântica da herança.
6
Polimorfismo
103403 – Programação Orientada a Objetos
➢ Polimorfismo é a capacidade de um objeto poder ser referenciado de várias formas;
➢ O polimorfismo permite programar no geral em vez de programar no específico.
7
Polimorfismo
103403 – Programação Orientada a Objetos
➢ É a capacidade de tipos mais abstratos representarem comportamentos de tipos mais específicos;
➢ Com polimorfismo, podemos projetar e implementar sistemas que são facilmente extensíveis – novas classes podem ser adicionadas a partes gerais do programa com pouca ou nenhuma modificação, contanto que as novas classes façam parte da hierarquia de herança que o programa processa genericamente.
8
Polimorfismo
103403 – Programação Orientada a Objetos
➢ A ideia de polimorfismo só tem sentindo com a existência do paradigma de herança;
➢ Consiste na possibilidade de que uma referência a objetos de uma classe possa se conectar também com objetos descendentes desta.
9
Polimorfismo
103403 – Programação Orientada a Objetos
Funcionário Gerente
10
Polimorfismo
103403 – Programação Orientada a Objetos
➢ Deve-se deixar claro que podemos acessar apenas as operações pertencentes a classe associada a referência. O resto das operações do objeto não são acessíveis através desta referência.
11
Outros Tipos de Polimorfismo
● Tipo Genérico - ao definir um elemento(que pode ser uma classe, um método ou alguma outra estrutura da linguagem), a definição do tipo sozinha ela é incompleta, ela precisa parametrizar este tipo, ou seja, teoricamente não existiria o tipo sozinho, o que sim existe e o tipo de alguma coisa de alguma coisa;
Polimorfismo
public class Agenda {
public static void main(String[] args){ArrayList<Pessoa> objetos = new ArrayList<Pessoa>();Objetos.add(new Empregado());Objetos.add(new Pessoa());
}}
12
Tipos de Polimorfismo Estáticos
● Polimorfismo estático normalmente é entendido como uma característica da linguagem e não como uma forma de polimorfismo.
● Sobrecarga - é a capacidade de poder definir dois, ou mais métodos, numa mesma classe com o mesmo nome;
Polimorfismo
public class Agenda {
public int calculaIdade (int ano , int mes, int dia);public int calculaIdade ( Date data ) ;public int calculaIdade ( Calendar data ) ;
}
13
Tipos de Polimorfismo Estáticos
● Sobrescrita - é a capacidade de poder redefinir a implementação de um método que já foi definido e implementado em uma classe superior na hierarquia de herança.
Polimorfismo
public class Somador { public int calculaSoma ( int inicio, int fim ){
int soma = 0 ;for ( int i = inicio ; i <= fim ; i++ ){
soma += i;} return soma;
}}public class SomadorInteligente extends Somador {
public int calculaSoma ( int inicio, int fim ){int umAteInicio = inicio ( inicio+ 1 ) / 2 ;int umAteFim = fim ( fim+ 1 ) / 2 ;return umAteFim – umAteInicio;
}}
14
Tipos de Polimorfismo Estáticos
● Sombreamento - é a capacidade de poder definir duas, ou mais, variáveis com o mesmo nome em escopos diferentes;
Polimorfismo
public class Teste {String nome; // variável no escopo “classe”public void setName ( String nome ){ // variável no escopo “método”
this .nome = nome;}
}
● Auto-boxing e Auto-unboxing - Em algumas situações é necessário converter valores primitivos para objetos. Isso é conhecido como boxing (colocar em caixas). O processo inverso é chamado unboxing (retirar das caixas). Auto-boxing e Auto-umboxing acontece quando próprio compilador faz essa operação.
15
Referências
103403 – Programação Orientada a Objetos
➢ Java: Como Programar 6ª Edição.
➢ Material da Caelum.