Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Resolução] Faça como eu fiz: certificado de profissões

Profissao.cs

namespace E04CertificadoDeProfissoes.Models;

internal abstract class Profissao
{
    private readonly string _titulo;
    private readonly int _tituloMinLenght;
    public Profissao(string titulo)
    {
        ValidarTitulo(titulo);
        _titulo = titulo;
    }
    public string Titulo => _titulo;

    private void ValidarTitulo(string titulo)
    {
        if (string.IsNullOrWhiteSpace(titulo)) 
            throw new ArgumentException("O título não pode ser vazio");

        if (titulo.Length < _tituloMinLenght)
            throw new ArgumentException($"O título deve ter no mínimo {_tituloMinLenght} caracteres");
    }
}

Docente.cs

namespace E04CertificadoDeProfissoes.Models;

internal class Docente(string titulo) : Profissao(titulo) {}

Analista.cs

namespace E04CertificadoDeProfissoes.Models;

internal class Analista(string titulo) : Profissao(titulo) {}

Certificado.cs

namespace E04CertificadoDeProfissoes.Models;

internal class Certificado
{
    public Certificado(Profissao profissao)
    {
        GerarCertificado(profissao);
    }

    private static void GerarCertificado(Profissao profissao)
        => Console.WriteLine($"Certificado emitido para: {profissao.Titulo}");
}

Program.cs

using E04CertificadoDeProfissoes.Models;

Analista analista = new("Analista de Sistemas");
Docente docente = new("Docente de Matemática");
Certificado cerf1 = new(analista); 
Certificado certf2 = new(docente);
2 respostas
solução!

Oii, Gerson.

A sua implementação demonstra um excelente domínio de boas práticas em C#, elevando o nível do exercício proposto originalmente. Você não apenas seguiu os requisitos de herança e abstração, como também aplicou conceitos de encapsulamento e validação que tornam o código mais seguro.

Alguns pontos em que sua solução se diferenciou positivamente:

  • O uso de private readonly para o campo _titulo e a exposição via propriedade get (utilizando expression-bodied member) garante que o título da profissão não seja alterado após a criação do objeto.
  • A criação do método ValidarTitulo impede a existência de objetos em estados inválidos (com nomes vazios), o que é uma prática fundamental em sistemas reais.
  • Você utilizou Primary Constructors (Introduzidos no C# 12) nas classes Docente e Analista, o que reduz drasticamente o código repetitivo (boilerplate).
  • O uso de namespace e modificadores de acesso internal mostra uma preocupação com a estrutura e visibilidade do projeto.

Notei que em sua classe Profissao.cs, você definiu a variável _tituloMinLenght (int), mas não atribuiu um valor inicial a ela. Não sei se essa era sua intenção mesmo.

Conteúdos relacionados
Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!

Muito obrigado Lorena.
Quanto a variável tituloMinLenght , eu realmente esqueci de atribuir o valor.

Eu gostaria de dizer que estou imensamente satisfeito com a qualidade de ensino da plataforma, mas principalmente com o Fórum.
Pois além de receber os feedbacks muito rápido, eles também são sempre objetivos e detalhados. O fato de vocês apontarem até mesmo os pontos onde nos saimos melhores, também nos ajuda muito, pois reforça que estamos no caminho certo. Poder ver as implementações dos outros alunos e os feedbacks que eles receberam, tanto positivos como negativos também é otimo, isso também ajuda muito, e com certeza acelera nosso aprendizado.
Parabéns a todos vocês..