1
resposta

Minha solução do desafio

namespace Teste4_Alura.ExercicioOO;

internal class Consultoria : IServico
{
    string tipoTarefa = string.Empty;

    public Consultoria(string tipoTarefa, Funcionario2 funcionario2)
    {
        this.tipoTarefa = tipoTarefa;
        Funcionario2 = funcionario2;
    }

    public Funcionario2 Funcionario2 {  get; set; }



    public void ExcecutarServico()
    {
        //Funcionario2 = new Funcionario2(Funcionario2.Nome,Funcionario2.Departamento);

        Console.WriteLine($"""
            Executando servico de Consultoria: {tipoTarefa}
            Responsavel: {Funcionario2.Nome} - Departamento: {Funcionario2.Departamento}

            """);

    }
}
namespace Teste4_Alura.ExercicioOO;

internal class Manutencao : IServico
{
    string tipoServico = string.Empty;

    public Manutencao(string tipoServico, Funcionario2 funcionario2)
    {
        this.tipoServico = tipoServico;
        Funcionario2 = funcionario2;
    }

    public Funcionario2 Funcionario2 {  get; set; }    

    public void ExcecutarServico()
    {
        Console.WriteLine($"""
            Executando servico de manutencao: {tipoServico}
            Responsavel: {Funcionario2.Nome} - Departamento: {Funcionario2.Departamento}

            """);
    }
}
namespace Teste4_Alura.ExercicioOO;

class Funcionario2
{
    public string Nome { get; set; }
    public string Departamento { get; set; }    
    public Funcionario2(string nome, string departamento)
    {
        Nome = nome;
        Departamento = departamento;
    }


}
namespace Teste4_Alura.ExercicioOO;

internal interface IServico
{
    void ExcecutarServico();
}
#region Desafio Gestao de Servicos
using Teste4_Alura.ExercicioOO;

Funcionario2 tecnico = new Funcionario2("Joao","TI");
IServico s1 = new Manutencao("Atualizacao de servidor", tecnico );

Funcionario2 analista = new Funcionario2("Maria", "Consultoria");
IServico s2 = new Consultoria("Planejamento estrategico",analista);

s1.ExcecutarServico();
s2.ExcecutarServico();

#endregion
1 resposta

Oii Ulysses,

Mais uma vez, excelente trabalho. Você construiu a relação de composição corretamente: suas classes de serviço possuem uma instância de Funcionario2 dentro delas, o que permite acessar os dados (nome e departamento) sem precisar usar herança.

Tenho alguns pontos de atenção e uma observação positiva sobre o recurso moderno que você utilizou:

Pontos de atenção:

  1. Digitação (Typo): Notei que no nome do método da interface e das classes, você escreveu ExcecutarServico (com um "c" extra antes do "e"). Em códigos maiores, isso pode causar confusão na hora de chamar o método. O ideal é ExecutarServico.
  2. Nomenclatura semântica: Dentro das classes Manutencao e Consultoria, você nomeou a propriedade como Funcionario2. Embora funcione, uma boa prática é dar nomes que indiquem o papel daquele objeto. Como o desafio sugeriu, chamar a propriedade de Responsavel deixaria o código mais legível.
  • Ficaria assim: Responsavel.Nome em vez de Funcionario2.Nome.

Ponto positivo:

Você utilizou Raw String Literals (as três aspas $"""..."""). Esse é um recurso que facilita muito a formatação de textos com múltiplas linhas, evitando o uso excessivo de \n ou concatenações. Foi uma ótima escolha para exibir o relatório final no console.

Continue explorando esses recursos novos da linguagem, isso enriquece muito seu código.

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