3 – Polimorfismo – P.O.O.

Paradigmas de Programação – Programação Orientada a Objetos

Introdução

Ola!

Neste documento temos a continuação sobre POO abordada no artigo anterior falando sobre Herança. Link para quem não acompanhou: Herança.

Ainda seguindo um modelo de explicação simplificado, trarei somente o conteúdo sobre Objetos ao fim de apresentar os conceitos ligados a Classes. Pois para melhor entendimento, assuntos como Classes, Herança, Polimorfismo, Encapsulamento são assuntos mais estratégicos com relação ao assunto Objetos, esse por sua vez sendo mais prático, pois fala de um elemento que realmente realiza operações.

Para esclarecimento, você pode postar suas dúvidas no grupo de estudos, no seguinte link:
Grupo Objective-C Brasil.

Para quem gostou e gostaria de acompanhar as novidades no blog é só entrar na página no Facebook: Objectice-C Brasil.

E dar o seu like se gostar :D!!!

Para quem quiser ajudar, o que seria muito legal, basta entrar em contato comigo pelo meu email ou deixar um post no blog.

Email para contato: tiagofly@outlook.com

Bons Estudos!!!

POLIMORFISMO

Todo mundo tem um vizinho, ou segue uma rotina diária onde encontramos com pessoas todos os dias, e as comprimentamos com um “Como vai?”. Esta simplespergunta pode nos retornar diferentes respostas… Segue um exemplo muito legal é no filme Hobbit, onde o personagem Bilbo encontra com o personagem Gandalf e ele responde ao “Bom Dia!” de Bilbo com diversas alternativas. Gandalf é o Cara! :p

Portanto uma visão mais apurada de Polimorfirmo dentro de uma linguagem de programação seria ser diferentes respostas, ou retornos, da mesma mensagem enviada para objetos diferentes.

Seguindo o mesmo exemplo citado do “Como vai?”, podemos perceber que ao enviar esta esta mensagem a outros indivíduos, eles podem nos dar respostas diferentes. E é preciso ficar atento a certos requisitos para que esta mensagem retorne, ou volte algum resultado com sucesso. Por exemplo é necessário que o receptor da mensagem entenda seu idioma, que ele estja disponível para ouvir, que ele seja um ser humano.

Em programação isso quer dizer que o Objeto que recebe a mensagem, deve ao menos possuir um método do mesmo nome e que possua variáveis que possam receber os argumentos se for preciso. O programador deve ficar atento se esta mensagem poderá ser entendida pelo objeto receptor. Principalmente se esse objeto não pertence a mesma classe do objeto que enviou a mensagem, e que o método siga a mesma assinatura, oque quer dizer que ela deverá conter variáveis para receber os dados, se for um método com argumentos.

Este conceito, nos levará a outros pontos interessantes em POO. Um deles são as classes abstratas.

Uma classe abstrata, é uma classe que não pode ser instanciada, ou seja, ela não gera nenhum objeto. Mas uma subclasse baseada nela pode ser instanciada, portando seus novos atributos e métodos. Uma classe abstrata serve para definir uma série de métodos e atributos, que em prática são utilizados por suas subclasses.

Um exemplo visual disso é a definição de Liquidos. Existem vários tipos de líquidos, e podemos então definir alguns parâmetros que nos ajudam a entender a qual tipo de líquido estamos trabalhando. Vamos definir rapidamente uma classe chamada Liquido.

A idéia geral de líquido é abstrata, já que podemos ter vários tipos diferentes de líquidos, mas eles ainda assim possuem características comuns. Esses líquidos podem também ter reações diferentes quando submetidos as mesmas circunstâncias. Por exemplo, se submetermos a Água a uma temperatura de 100 graus celsius ela entrará em processo de ebulição e começará a evaporar, o mesmo já não irá acontecer com o Óleo.

Os líquidos Água, Ácido e Óleo são subclasses que extendem a classe Líquido. Ficou claro agora o que é uma classe abstrata? Qualquer dúvida é só comentar postar na página do grupo.

Estas subclasses possuem variáveis e métodos próprios que a definem e a especializam para exercer uma tarefa. Mas como são baseadas em uma classe comum elas poderiam responder perfeitamente ao método infoMolar(), e retornar valores diferentes.

O Pomorfismo não ocorre somente com derivações de uma classe abstrata, esse mecanismo também pode ser utilizado em objetos de classes que também podem ser instanciadas. E ele também pode ser usado em objetos de classes diferentes.

Outro ponto interessante, é no que diz respeito quanto ao método. Em muitos casos, um método para poder interpretar corretamente um valor de variável, será necessário, “importar” ou “exportar”, dependendo do ponto de vista, o valor para um outro tipo. Ou seja, fazer oque é chamado de Casting.

Por exemplo, digamos que você esteja trabalhando com um programa que efetue operações com somente números inteiros, mas os valores inseridos para realizar os cálculas sejam provenientes de um valor não preciso, ou seja, que seja um valor aproximado. Logo teríamos um programa que so trabalhe com números do tipo inteiro (do tipo int), e que pudesse gerar um erro, caso tetarmos realizar uma operação com um número fracionário(do tipo float).

Então antes de realizar a operação teremos que fazer uma conversão do tipo float para o tipo int, esse processo é chamado de casting.

Casting é um procedimento que realiza a conversão do tipo de uma variável e é feito conforme a necessidade da aplicação, não somente em casos de polimorfismo.

Um grande benefício do mecanismo de Polimorfismo, é poder realizar pequenas alterações no código, sem se preocupar com a interface da classe, já que o mesmo método pode possuir o mesmo nome. Portanto, só precisaremos nos preocupar na implementação de cada nova subclasse. Neste caso, um override de método será o suficiente, e assim o programador não precisaria se preocupar com qual método será chamado em cada subclasse, ficando isso a cargo do compilador, ele somente terá que se lembrar de como foi criada a interface geral utilizada.

Outro ponto que irei destacar aqui é de que o nome de um método está restrito dentro de sua classe. Ou seja, você pode ter dois objetos diferentes, de classes diferentes, mas com um ou mais métodos de mesmo nome. Isso não afetará em nada o funcionamento da aplicação. Diferente do que acontece com outras linguagens procedurais, onde uma função deve ter seu nome único dentro da biblioteca.

Espero que tenham gostado e que isso possa ajudá-los!

Qualquer dúvida é só entrar no nosso grupo e postar lá sua dúvida. O link está no começo deste tutorial.

Abração e bons estudos!

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s