Utilização de Polimorfismo

Olá a todos!!

Bom, o objetivo deste post é demonstrar a utilização de polimorfismo, um conceito básico para um bom conhecimento de orientação a objetos. As vezes tenho a impressão que para muitos com quem converso, incluindo meus alunos e amigos, é que polimorfismo é um conceito que as pessoas “nunca viram nem comeram, só ouviram falar“… Quando pergunto a algum aluno ou algum amigo se ele sabe o que é polimorfismo, sempre tenho uma resposta positiva e sempre escuto a definição padrão “polimorfismo é a capacidade que a instância do objeto tem de ter várias formas”. Bom, isso é verdade, qualquer livro sobre orientação objeto estará escrito algo mais ou menos parecido com essa definição.

Então estes post tentará desmistificar um pouco o assunto e mostrar a utilização de polimorfismo.

Essencialmente, existem apenas duas entidades na orientação a objetos que podem ser polimórficas: referências e funções.

  • Referências: A referência a um objeto é polimórfica já que a referência a um objeto pode denotar objetos de tipos distintos em momento distintos. (Obs: Desde que todas as referências estejam abaixo da hierarquia da definição do tipo do objeto).
  • Funções: A função pode ser polimórfica quando ele pode receber parâmetros polimórficos.

A figura 1 exibe um diagrama de classe para exemplificar.

Figura 1 - Diagrama de ClassesFigura 1 – Diagrama de Classes

As figura 2 e 3  ilustram melhor a definição de Referência Polimórfica.

Figura 2Figura 2

Como ilustrado na figura figura 2, uma referência para um tipo Pessoa pode ser instanciado como sendo uma Pessoa, um Funcionario, ou qualquer outro objeto que esteja abaixo da hierarquia de Pessoa.

Figura 3Figura 3

Já na figura 3 existe uma pequena alteração no código. Agora existe uma linha onde pessoa1 = pessoa2. Neste caso a referencia pessoa1 que era a referência para uma instância de um objeto do tipo Pessoa passa a ser a referência para a instância de um objeto do tipo Funcionário. Em outras palavras, pessoa1 que se comportava com uma Pessoa depois da atribuição pessoa1 = pessoa2, passou a se comportar como um Funcionário. Então isso é uma referência polimórfica.

Quando pessoa1 = pessoa2, então pessoa1 deixa de apontar para o endereço de memória que um objeto do tipo Pessoa foi alocado e passa a apontar para para a área de memória que o objeto do tipo Funcionário foi alocado, que por “coincidência” é a mesma área apontada por pessoa2.

Aí, alguém perguntaria: Então o que irá acontecer com o objeto Pessoa que perdeu a referência? Bom, em linguagens mais novas como Java e C# que implementam o gabage collection em algum momento da execução da aplicação irá rodar essa referências perdidas serão limpas automáticamente.

Aí alguém perguntaria novamente: E o que acontece em linguagens como C++ e Object Pascal? Bom, neste caso a responsabilidade de desalocar é explicitamente o programador, se ele esqueceu, um abraço! nunca mais será desalocado enquanto o programa estiver em execução.

Uma outra questão importante a saber para entender o polimorfismo é o PAPEL DE APONTADORES EM POO

  • Toda linguagem orientada por objetos tem que ter apontadores.
  • Se não houver apontadores na linguagem perde-se o polimorfismo porque os objetos são sempre monomórficos.
  • A referência é que é polimórfica. A cada momento ela representa uma coisa diferente.
  • Se não houver apontadores, tem-se que ter referência no lugar, como em Java. Caso contrário, tudo fica estático e não dinâmico.
  • Os apontadores são essenciais para a implementação de mecanismo como polimorfismo e binding dinâmico.

A figura 4 ilustra melhor a definição de Função Polimórfica.

Figura 4Figura 4

O método “fazQualquerCoisa” recebe com parâmetro um objeto do tipo Pessoa. Então qualquer referência de objeto do tipo Pessoa ou do tipo de qualquer subclasse de Pessoa será aceito como parâmetro da função. Desse modo, sempre que você se deparar com uma função desse tipo, parabéns, você está diante de uma função polimórfica. No Java você um monte delas…

Note que Referência Polimórfica ou Função Polimórfica somente existirão se houver um relacionamento de herança entre suas classes.

Como pode ser visto neste post o conceito de polimorfismo é relativamente simples. O interessante é que vários Design Patterns implementam mecanismos polimórficos e entender polimorfismo é mandatório para entendê-los.  Se você tem os conceitos de Orientação a Objetos bem claros e definidos, então você não terá dificuldade para entender frameworks e novas linguagens de programação.

O fato é que utilizando polimorfismo e os outros recursos de OO, sua aplicação poderá ser cada vez mais escalável, coesa, desacoplada e de fácil manutenção.

Bom é isso, espero ter ajudado!

Compartilhe:
  • Print
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • email
  • PDF
  • RSS
  • Twitter

One Response to “Utilização de Polimorfismo”

  1. [New Post] Condições para uso de herança – via @twitoaster http://edgarddavidson.com/?p=97
    via Twitoaster

Leave a Reply

Procurar


Edgard Davidson
nova Profissional especialista em engenharia de software e desenvol- vimento de sistemas, professor universitário, coordenador do curso de pós graduação em Engenharia de Software Centrada em Métodos Ágeis ofertado pela UNA, mestrando em Engenharia Elétrica com ênfase em Engenharia de Software, Especialista em Engenharia de Software, Graduado em Sistemas de Informação. Sou sócio da MÉRITA - ENGENHARIA DE SERVIÇOS E SISTEMAS e criei este blog dedicado a assuntos como: desenvolvimento e engenharia de software, opiniões pessoais sobre assuntos pertinentes. Os posts deste blog são escritos sem muito rigor científicos e expressam opiniões exclusivamente minhas

Mérita - Engenharia de Serviços e Sistemas

Curso de Pós Graduação em Engenharia de Software Centrada em Métodos Ágeis

Categorias

Arquivo

Tags

Pagea