Professional Documents
Culture Documents
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; }
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
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
Polimorfismo
As partes do programa que exige conhecimento direto das novas classes adicionadas.Modificar somente as classes que instanciam um objeto BOX
Polimorfismo
Herana: objeto instanciado e o mtodo chamado diretamente do objeto Rectangle pRec = new Rectangle(); pRec.Draw();
Polimorfismo
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)