1
resposta

Boas práticas na declaração de métodos

No vídeo a função "receber_avaliacao()" está declarada na classe "restaurante". Não seria melhor declarar este método na classe "avaliacao"?

1 resposta

Olá, Guilherme! Tudo bem?

A sua dúvida é bastante pertinente e demonstra uma boa compreensão das práticas de design em programação orientada a objetos. Vamos analisar a situação:

A função receber_avaliacao() está, de fato, dentro da classe Restaurante. A razão para isso é que ela é responsável por associar uma avaliação específica a um restaurante. O método cria uma instância da classe Avaliacao e a adiciona à lista de avaliações do restaurante. Isso faz sentido porque a avaliação, neste contexto, é uma característica ou propriedade do restaurante.

No entanto, você está certo ao pensar que a lógica de criação de uma avaliação poderia ser colocada na própria classe Avaliacao. Isso pode ser feito através de métodos estáticos ou de classe que criam e retornam instâncias de Avaliacao. Assim, a responsabilidade de criar uma avaliação estaria encapsulada na própria classe Avaliacao.

Por exemplo, você poderia criar um método de classe na Avaliacao para criar uma nova avaliação:

class Avaliacao:
    def __init__(self, cliente, nota):
        self._cliente = cliente
        self._nota = nota

    @classmethod
    def criar_avaliacao(cls, cliente, nota):
        return cls(cliente, nota)

E então, no método receber_avaliacao da classe Restaurante, você poderia usar esse método de classe:

def receber_avaliacao(self, cliente, nota):
    avaliacao = Avaliacao.criar_avaliacao(cliente, nota)
    self._avaliacao.append(avaliacao)

Essa abordagem mantém a responsabilidade de criar uma avaliação dentro da classe Avaliacao, enquanto a classe Restaurante continua a gerenciar suas próprias avaliações.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.