Capítulo 12: Polimorfismo e Interfaces 🛡️🔮
Neste capítulo, vamos aprender sobre Polimorfismo e Interfaces no C#. Eles nos permitem tratar objetos diferentes de forma padronizada, com o tema de Batalha de RPG!
📖 O que é Polimorfismo?
Polimorfismo significa “muitas formas”. É a capacidade de um objeto ser tratado como se fosse de outro tipo. Por exemplo, um Mago e um Guerreiro podem ser tratados apenas como “Atacantes”.
📖 O que é uma Interface?
Uma interface é um contrato. Ela diz quais métodos uma classe DEVE ter, mas não diz como eles funcionam. No C#, por convenção, o nome de toda interface começa com a letra I.
📖 Exemplo Guiado: O Contrato de Ataque
Vamos criar uma interface IAtacante e fazer o Guerreiro e o Mago implementarem essa interface.
- Crie o arquivo
rpg_polimorfismo.csna pastasrc/:
using System;
// Código principal
// Criando uma lista de Atacantes (Polimorfismo!)
IAtacante[] equipe = {
new Guerreiro("Arthur"),
new Mago("Merlin")
};
Console.WriteLine("--- Turno de Batalha ---");
foreach (IAtacante atacante in equipe) {
atacante.Atacar(); // Cada um ataca do seu jeito!
}
// Definindo a Interface
public interface IAtacante {
void Atacar(); // Método sem corpo
}
public class Guerreiro : IAtacante {
public string Nome { get; set; }
public Guerreiro(string nome) { Nome = nome; }
public void Atacar() {
Console.WriteLine($"{Nome} atacou com a espada! ⚔️");
}
}
public class Mago : IAtacante {
public string Nome { get; set; }
public Mago(string nome) { Nome = nome; }
public void Atacar() {
Console.WriteLine($"{Nome} lancou um feitico! 🔥");
}
}🕹️ Como Executar e Testar no VS Code
- Execute o projeto usando
dotnet run.
Resultado Esperado:
--- Turno de Batalha ---
Arthur atacou com a espada! ⚔️
Merlin lancou um feitico! 🔥📊 Ilustração Visual: Interfaces
A interface serve como um contrato:
classDiagram class IAtacante { "<<interface>>" +Atacar() } class Guerreiro { +Atacar() } class Mago { +Atacar() } IAtacante <|.. Guerreiro IAtacante <|.. Mago
🛠️ Prática Obrigatória 1: Habilidade de Curar
Crie uma interface chamada ICurador com o método Curar(). Implemente essa interface para uma classe Clerigo (exibindo “Clérigo usou magia de cura”) e para uma classe Pocao (exibindo “Você bebeu a poção”). Crie um array de ICurador e use um laço para fazer todos curarem!
🔑 Gabarito de Código
Prática 1: interfaces_cura.cs
using System;
ICurador[] curadores = { new Clerigo(), new Pocao() };
foreach (ICurador c in curadores) {
c.Curar();
}
public interface ICurador {
void Curar();
}
public class Clerigo : ICurador {
public void Curar() {
Console.WriteLine("Clerigo usou magia de cura! ✨");
}
}
public class Pocao : ICurador {
public void Curar() {
Console.WriteLine("Voce bebeu a pocao e recuperou vida! 🧪");
}
}