No vídeo a função "receber_avaliacao()" está declarada na classe "restaurante". Não seria melhor declarar este método na classe "avaliacao"?
No vídeo a função "receber_avaliacao()" está declarada na classe "restaurante". Não seria melhor declarar este método na classe "avaliacao"?
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!