You are on page 1of 19

Linguagem de Programao III

Professor: Alexandre, 2012.

Polimorfismo

Polimorfismo conhecido como o terceiro pilar da programao orientada a objeto, aps o encapsulamento e herana. Polimorfismo uma palavra grega que significa "muitos moldado" e ele tem dois aspectos distintos:

Polimorfismo

1. Em tempo de execuo, objetos de uma classe derivada pode ser tratados como objetos de uma classe; 2. Classes base podem definir e implementar mtodos virtuais, e as classes derivadas podem substitu-los, que significa que eles fornecem suas prprias definio e implementao.

Polimorfismo

Em tempo de execuo quando o cdigo do objeto chama o mtodo, o CLR procura o tipo de tempo de execuo do objeto e invoca a substituio do mtodo virtual.

Polimorfismo

O polimorfismo alcanado com auxlio do uso de herana nas classes e a reescrita (overriding) de mtodos das superclasses nas suas subclasses. Duas subclasses de uma mesma classe podem ter implementaes completamente diferentes de um mesmo mtodo, o que leva os objetos a se comportarem de forma diferente, dependendo do seu tipo (classe).

Polimorfismo

Exemplo:

Podemos imaginar um programa que faa a impresso de um relatrio, por meio de uma classe chamada Impressora, que uma interface de acesso s funcionalidades da impressora usada, por meio de um driver fornecido pelo fabricante.

Uma impressora a laser tem um mecanismo de impresso totalmente diferente de uma impressora a jato de tinta, mas isso no importa para o programa.

Polimorfismo

Exemplo:

Ele manda uma simples mensagem de imprimir para a impressora, e o modo como a impressora imprime no papel varia de acordo com o tipo de impressora usada, ou seja, a impresso se d de formas diferentes para a mesma mensagem de imprimir.

Polimorfismo

Polimorfismo

Classe Shape

public class Shape { public int X { get; private set; } public int Y { get; private set; } public int Height { get; set; } public int Width { get; set; }

public virtual void Draw() { Console.WriteLine("Classe base"); }


}

Polimorfismo

Classe Circle

class Circle : Shape { public override void Draw() { Console.WriteLine(Desenhando um circulo"); base.Draw(); } }

Polimorfismo

Classe Rectangle

class Rectangle : Shape { public override void Draw() { Console.WriteLine(Desenhando um retangulo"); base.Draw(); } }

Polimorfismo

Classe Triangle

class Triangle : Shape { public override void Draw() { Console.WriteLine("Desenhando um triangulo"); } }

Polimorfismo
No

programa principal criamos um vetor de referncias a objetos das vrias subclasses da Shape simulando os desenhos. Programa envia mensagem a cada objeto e cada tipo especfico de figura geomtrica responde mensagem de maneira diferente.

Polimorfismo

Mtodo Main

class Program { static void Main(string[] args) { Shape[] pShape = new Shape[3]; pShape[0] = new Rectangle(); pShape[0].Draw(); pShape[1] = new Circle(); pShape[1].Draw(); pShape[2] = new Triangle(); pShape[2].Draw(); Console.WriteLine("Pressione uma tecla para finalizar."); Console.ReadKey(); } }

Polimorfismo

Conceito chave de polimorfismo:


Cada objeto sabe fazer a coisa certa em resposta mesma chamada de mtodo.

Projeto e implementao de sistemas que so facilmente extensveis


Novas classes podem ser adicionadas a partes gerais do programa com pouca ou nenhuma modificao

O que necessrio alterar no programa quando uma nova classe gerada?

Polimorfismo

As partes do programa que exige conhecimento direto das novas classes adicionadas.Modificar somente as classes que instanciam um objeto BOX

Polimorfismo

Qual a diferena entre polimorfismo e herana?

Herana: objeto instanciado e o mtodo chamado diretamente do objeto Rectangle pRec = new Rectangle(); pRec.Draw();

Polimorfismo: o mtodo a ser executado decidido em tempo de execuo


Shape [] vetor = new Shape[3];

Polimorfismo

Polimorfismo promove extensibilidade


O software que invoca comportamento polimrfico independente dos tipos para os quais as mensagens so enviadas

Novos tipos de objetos que podem responder a chamadas de mtodo existente podem ser incorporados sem exigir modificaes no sistema bsico. Para utilizar polimorfismo, os objetos devem executar as mesmas aes (mtodos), mesmo que com comportamento diferente.

Exerccio
1 Considerando uma empresa com funcionrios, gerentes de diviso e gerente de departamento, modelar e escrever um programa em C# que contemple as seguintes caractersticas: Funcionrios: Atributos: nome, id, cpf, salario, bonificacao; Gerente de Departamento: Atributos: nome, id, cpf, id_departamento,salario, bonificacao; Gerente de Diviso: Atributos: nome, id, cpf, id_divisao, salario, bonificacao; Implementar duas solues, uma usando herana e outra polimorfismo. Regra da bonificao: a) O funcionrio tem sua bonificao de 0,15 vezes seu salrio b) O gerente de Diviso tem bonificao de 0,3 vezes seu salrio c) O gerente de Departamento tem bonificao de 1,3 vezes seu salrio. Em cada situao crie 3 instncias (funcionario, gerente de departamento e gerente de divisao)

You might also like