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:

  1. Declarar interface IPagamentoService e implementar classe concreta CartaoCreditoService.

Resultado Esperado

Contrato de interface implementado desacoplando componentes.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_11_1_SeuNome
  2. 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:

  1. Criar classe base abstrata DocumentoFiscal com método abstrato CalcularImposto() 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)

  1. Salve o arquivo como: Atividade_11_2_SeuNome
  2. 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:

  1. 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)

  1. Salve o arquivo como: Atividade_11_3_SeuNome
  2. 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:

  1. 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)

  1. Salve o arquivo como: Atividade_11_4_SeuNome
  2. 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();