1
resposta

[Sugestão] Melhoria no enunciado "08 Mão na massa: refatorando uma função" e minha [Resposta]

Sugestão de melhoria no enunciado:

No item que diz “Certifique-se de que a classe Sobremesa mantenha a herança do método aplicar_desconto de ItemCardapio”, a redação pode gerar confusão conceitual, pois aplicar_desconto é um método abstrato.

  1. Talvez ficasse mais claro para quem está aprendendo se o enunciado indicasse explicitamente algo como:

“Implemente o método abstrato aplicar_desconto da classe ItemCardapio” e depois reforçar, na correção, o que seria esse metodo abstrato e sua obrigação de implementação.

  1. Além disso, poderia ser interessante esclarecer no enunciado se o objetivo é:
  • apenas cumprir o contrato (por exemplo, com pass), ou
  • já definir uma regra concreta de desconto (como um percentual específico).
    Isso ajudaria a alinhar melhor o enunciado com a intenção do exercício e evitar ambiguidades para os alunos.

Minha Resposta

  1. Resposta do exercício:
from modelos.cardapio.item_cardapio import ItemCardapio


# 1- Crie uma classe chamada Sobremesa que herda de ItemCardapio,
class Sobremesa(ItemCardapio):
    # 2- adicione atributos específicos como tipo, tamanho e descricao à classe Sobremesa.
    def __init__(
        self, nome: str, preco: float, tipo: str, tamanho: str, descricao: str
    ):
        super().__init__(nome, preco)
        # 3- Ajuste a inicialização da classe para incluir esses novos atributos, possibilitando a criação de um novo item ao cardápio do restaurante.
        self.tipo = tipo
        self.tamanho = tamanho
        self.descricao = descricao

    # 4- Atualize o método __str__ conforme necessário para refletir essas mudanças.

    def __str__(self):
        return self._nome

    # 5- Certifique-se de que a classe Sobremesa mantenha a herança do método aplicar_desconto de ItemCardapio.
    def aplicar_desconto(self):
        self._preco -= self._preco * 0.15
  1. Tentativa de implementação conforme as aulas até o momento da nova classe Sobremesa no método exibir_cardapio da classe Restaurante:
@property
    def exibir_cardapio(self):
        print(f"Cardápio do restaurante {self._nome}\n".upper())
        # para mostrar a lista enumerada começando do 1
        for i, item in enumerate(self._cardapio, start=1):
            # fazer uma validação
            # para verificar se tem o atributo(hasattr)
            if hasattr(item, "tipo"):
                mensagem_sobremesa = f"{i}. Nome: {item._nome} |Preço: R$ {item._preco:.2f} | Tipo: {item.tipo} | Descricao: {item.descricao} | Tamanho: {item.tamanho}"
                print(mensagem_sobremesa)
            elif hasattr(item, "descricao"):
                mensagem_prato = f"{i}. Nome: {item._nome} | Preço: R$ {item._preco:.2f} | Descricao: {item.descricao}"
                print(mensagem_prato)
            else:
                mensagem_bebida = f"{i}. Nome: {item._nome} | Preço: R$ {item._preco:.2f} | Tamanho: {item.tamanho}"
                print(mensagem_bebida)
  1. Implementaçao em app.py
from modelos.restaurante import Restaurante
from modelos.cardapio.bebida import Bebida
from modelos.cardapio.prato import Prato
from modelos.cardapio.sobremesa import Sobremesa

restaurante_praca = Restaurante("praça", "Gourmet")

bebida_suco = Bebida("Suco de Melancia", 5.00, "grande")
bebida_suco.aplicar_desconto()

prato_paozinho = Prato("Pãozinho", 2.00, "O melhor pão da cidade")
prato_paozinho.aplicar_desconto()

sobremesa_pudim = Sobremesa(
    "Pudim", 10.00, "sobremesa", "médio", "Pudim de leite condensado"
)
sobremesa_pudim.aplicar_desconto()

restaurante_praca.adicionar_no_cardapio(bebida_suco)
restaurante_praca.adicionar_no_cardapio(prato_paozinho)
restaurante_praca.adicionar_no_cardapio(sobremesa_pudim)


def main():
    # como é property não precisa usar ()
    restaurante_praca.exibir_cardapio


if __name__ == "__main__":
    main()
  1. saída ao rodar o código:
CARDÁPIO DO RESTAURANTE PRAÇA

1. Nome: Suco de Melancia | Preço: R$ 4.60 | Tamanho: grande
2. Nome: Pãozinho | Preço: R$ 1.90 | Descricao: O melhor pão da cidade
3. Nome: Pudim |Preço: R$ 8.50 | Tipo: sobremesa | Descricao: Pudim de leite condensado | Tamanho: médio
1 resposta

Olá Thaís! Como via?

Muito obrigada por compartilhar suas sugestões e sua implementação!

Concordo que a clareza no enunciado é fundamental para evitar confusões, especialmente quando se trata de conceitos como métodos abstratos e herança. A sua sugestão de reformular o enunciado para "Implemente o método abstrato aplicar_desconto da classe ItemCardapio" é uma ótima ideia, pois deixa claro que o método precisa ser implementado na classe derivada.

Além disso, a sua proposta de esclarecer se o objetivo é apenas cumprir o contrato ou já definir uma regra concreta de desconto é muito válida. Isso poderia ajudar os alunos a entenderem melhor o propósito do exercício.

Quanto à sua implementação, parece que você fez um ótimo trabalho ao criar a classe Sobremesa e implementar o método aplicar_desconto. Você também cuidou de atualizar o método __str__ e de adicionar a lógica para exibir o cardápio no método exibir_cardapio da classe Restaurante. Tudo isso está alinhado com o que foi pedido no exercício.

Espero ter ajudado e bons estudos!

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