🧩 Exercícios: Herança, Polimorfismo, Classes Abstratas e Interfaces
Spec Sistemas Csharp • Trilha Progressiva em 4 Níveis
🎯 Nível 1: Fundamentos
Problema 11.1 — Contrato com Interface e Injeção de Dependências
Contexto: Contrato com Interface e Injeção de Dependências no contexto de Herança, Polimorfismo, Classes Abstratas e Interfaces.
Requisitos de Execução:
- Declarar interface
IPagamentoServicee implementar classe concretaCartaoCreditoService.
Resultado Esperado
Contrato de interface implementado desacoplando componentes.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_11_1_SeuNome - Envie na tarefa:
Atividade Cap 11 - Herança, Polimorfismo, Classes Abstratas e Interfaces
🔑 Gabarito de Código & Solução Comentada
// InterfaceDemo.cs
public interface IPagamentoService {
bool Processar(decimal valor);
}
public class CartaoCreditoService : IPagamentoService {
public bool Processar(decimal valor) {
Console.WriteLine($"Processando R$ {valor} via Cartao de Credito.");
return true;
}
}
IPagamentoService servico = new CartaoCreditoService();
servico.Processar(150.0m);
🔍 Nível 2: Prática
Problema 11.2 — Classes Abstratas com abstract, override e sealed
Contexto: Classes Abstratas com abstract, override e sealed no contexto de Herança, Polimorfismo, Classes Abstratas e Interfaces.
Requisitos de Execução:
- Criar classe base abstrata
DocumentoFiscalcom método abstratoCalcularImposto()e selar método na derivada.
Resultado Esperado
Cálculo polimórfico executado na classe derivada com método selado.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_11_2_SeuNome - Envie na tarefa:
Atividade Cap 11 - Herança, Polimorfismo, Classes Abstratas e Interfaces
🔑 Gabarito de Código & Solução Comentada
// AbstractDemo.cs
public abstract class DocumentoFiscal {
public abstract decimal CalcularImposto(decimal valor);
}
public class NotaFiscalServico : DocumentoFiscal {
public sealed override decimal CalcularImposto(decimal valor) => valor * 0.05m;
}
DocumentoFiscal doc = new NotaFiscalServico();
Console.WriteLine($"Imposto ISS: R$ {doc.CalcularImposto(1000m)}");
⚡ Nível 3: Integração
Problema 11.3 — Default Interface Methods no C# Moderno
Contexto: Default Interface Methods no C# Moderno no contexto de Herança, Polimorfismo, Classes Abstratas e Interfaces.
Requisitos de Execução:
- Declarar método com implementação padrão diretamente na interface sem quebrar implementações existentes.
Resultado Esperado
Método padrão de interface invocado via referência de interface.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_11_3_SeuNome - Envie na tarefa:
Atividade Cap 11 - Herança, Polimorfismo, Classes Abstratas e Interfaces
🔑 Gabarito de Código & Solução Comentada
// DefaultInterface.cs
public interface ILogger {
void Log(string msg);
void LogAlerta(string msg) => Log($"[ALERTA] {msg}"); // Default Method
}
public class ConsoleLogger : ILogger {
public void Log(string msg) => Console.WriteLine(msg);
}
ILogger logger = new ConsoleLogger();
logger.LogAlerta("Espaco em disco baixo.");
🏆 Nível 4: Desafio Corporativo
Problema 11.4 — Explicit Interface Implementation para Desambiguação de Métodos
Contexto: Explicit Interface Implementation para Desambiguação de Métodos no contexto de Herança, Polimorfismo, Classes Abstratas e Interfaces.
Requisitos de Execução:
- Implementar duas interfaces com métodos de mesmo nome desambiguando através de implementação explícita.
Resultado Esperado
Métodos colidentes isolados via implementação explícita de interface.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_11_4_SeuNome - Envie na tarefa:
Atividade Cap 11 - Herança, Polimorfismo, Classes Abstratas e Interfaces
🔑 Gabarito de Código & Solução Comentada
// ExplicitInterface.cs
interface ISalvavelBanco { void Salvar(); }
interface ISalvavelArquivo { void Salvar(); }
class Repositorio : ISalvavelBanco, ISalvavelArquivo {
void ISalvavelBanco.Salvar() => Console.WriteLine("Salvo no Banco de Dados.");
void ISalvavelArquivo.Salvar() => Console.WriteLine("Salvo no Arquivo Local.");
}
Repositorio repo = new();
((ISalvavelBanco)repo).Salvar();
((ISalvavelArquivo)repo).Salvar();