Construindo Aplicações C# – Polimorfismo
O polimorfismo é um dos princípios fundamentais da programação orientada a objetos e é uma técnica que permite que um objeto se comporte de diferentes maneiras em diferentes contextos. Em C#, o polimorfismo pode ser alcançado através do uso de herança e interfaces.
A herança é um mecanismo em que uma classe pode herdar os atributos e métodos de outra classe. Uma classe que herda de outra é chamada de classe derivada ou subclasse, e a classe da qual ela herda é chamada de classe base ou superclasse. O polimorfismo de subtipos pode ser alcançado através da herança.
A interface, por outro lado, é um contrato que define um conjunto de métodos e propriedades que uma classe deve implementar. Uma classe que implementa uma interface é obrigada a fornecer implementações para todos os métodos e propriedades definidos na interface. O polimorfismo de interface pode ser alcançado através do uso de interfaces.
A seguir, vamos ver exemplos de como o polimorfismo pode ser alcançado em C# através de herança e interfaces.
Exemplo de polimorfismo de subtipos usando herança:
using System;
public class Animal
{
public virtual void FazSom()
{
Console.WriteLine("O animal faz um som");
}
}
public class Cachorro : Animal
{
public override void FazSom()
{
Console.WriteLine("O cachorro late");
}
}
public class Gato : Animal
{
public override void FazSom()
{
Console.WriteLine("O gato mia");
}
}
public class Program
{
public static void Main()
{
Animal[] animais = new Animal[3];
animais [0] = new Animal();
animais [1] = new Cachorro();
animais [2] = new Gato();
foreach (Animal animal in animals)
{
animal.FazSom();
}
}
}
Neste exemplo, temos uma classe base Animal
que define um método virtual FazSom()
. As classes derivadas Cachorro
e Gato
substituem o método FazSom()
da classe base e fornecem suas próprias implementações.
Na classe Program
, criamos um array de objetos Animal
. Os elementos desse array podem ser objetos da classe Animal
, Cachorro
ou Gato
. Ao chamar o método FazSom()
em cada objeto, a implementação apropriada é chamada de acordo com o tipo de objeto.
Exemplo de polimorfismo de interface usando interfaces:
using System;
public interface IFormato
{
void Desenhar();
}
public class Circulo: IFormato
{
public void Desenhar()
{
Console.WriteLine("Desenhando um círculo");
}
}
public class Retangulo: IFormato
{
public void Desenhar()
{
Console.WriteLine("Desenhando um retângulo");
}
}
public class Program
{
public static void Main()
{
IFormato[] formatos = new IFormato[2];
formatos[0] = new Circulo();
formatos[1] = new Retangulo();
foreach (IFormato formato in formatos )
{
formato.Desenhar();
}
}
}
Neste exemplo, temos uma interface IShape
que define um método Draw()
. As classes Circle
e Rectangle
implementam a interface IShape
e fornecem suas próprias implementações do método Draw()
.
Na classe Program
, criamos um array de objetos IFormatos
. Os elementos desse array podem ser objetos das classes Circulo
ou Retangulo
. Ao chamar o método Desenhar()
em cada objeto, a implementação apropriada é chamada de acordo com o tipo de objeto.
O polimorfismo de interface é útil em situações em que uma classe pode implementar várias interfaces e, portanto, ter vários comportamentos diferentes. Isso permite que as classes sejam mais flexíveis e reutilizáveis em diferentes contextos.
Conclusão:
O polimorfismo é uma técnica poderosa na programação orientada a objetos que permite que um objeto se comporte de diferentes maneiras em diferentes contextos. Em C#, o polimorfismo pode ser alcançado através do uso de herança e interfaces. O polimorfismo de subtipos usa a herança para permitir que as classes derivadas substituam métodos da classe base, enquanto o polimorfismo de interface usa interfaces para permitir que as classes implementem vários comportamentos diferentes. O polimorfismo é uma parte fundamental da programação orientada a objetos e é uma técnica importante para escrever código flexível e reutilizável.