0
respostas

[Reclamação] ERRO no enunciado do exercício e na resolução: 07 Hora da prática: criando classes, construtores e métodos

Os desafios da: 07 Hora da prática: criando classes, construtores e métodos, apresentam problemas conceituais importantes que prejudicam o aprendizado de orientação a objetos.

  • Esse ERRO/BUG já foi apontado por outros alunos e mesmo assim o exercício continua sendo sugerido com erro, sem a devida correção. Gostaria de entender o porquê? Não é a primeira vez que vou fazer um exercício que vejo que tem erro e quando olho no fórum outros alunos já apontaram o mesmo erro meses ou até anos atrás e ainda assim o exercício não foi corrigido.
  1. Primeiro pede para:

"1. Crie uma classe chamada ContaBancaria com um construtor que aceita os parâmetros titular e saldo. Inicie o atributo ativo como False por padrão."

  1. Depois no ponto 3 está o erro crucial:

"3.Adicione um método de classe chamado ativar_conta à classe ContaBancaria que define o atributo ativo como True. Crie uma instância da classe, chame o método de classe e imprima o valor de ativo."

O enunciado solicita um método de classe (@classmethod) que deve alterar o atributo ativo de uma instância específica.
Isso é tecnicamente incorreto: métodos de classe trabalham com a classe, não com instâncias.
A solução fornecida utiliza @classmethod recebendo uma instância como argumento, o que viola sua finalidade e gera um uso equivocado do recurso.

A solução oficial implementa:

# 3) Adicione um método de classe chamado `ativar_conta` à classe `ContaBancaria` que define o atributo ativo como `True`. Crie uma instância da classe, chame o método de classe e imprima o valor de ativo.
    @classmethod
    def ativar_conta(cls, conta):
        conta._ativo = True

conta3 = ContaBancaria("Carlos", 200)
print(f"Antes de ativar: Conta ativa? {conta3._ativo}")
ContaBancaria.ativar_conta(conta3)
print(f"Depois de ativar: Conta ativa? {conta3._ativo}")

Isso equivale a um método comum, tornando o uso de @classmethod artificial e incorreto.
Didaticamente, isso ensina o uso errado de um dos principais mecanismos de OOP em Python.

Na etapa seguinte (“Refatore para a forma pythonica”), apenas o construtor é refatorado.
O exercício, porém, não refatora o método do passo anterior nem corrige o uso indevido do método de classe.
Isso gera inconsistência entre as etapas e reforça o erro conceitual.

# 4) Refatore a classe `ContaBancaria` para utilizar a abordagem "pythonica" na criação de atributos. Utilize propriedades, se necessário.
class ContaBancariaPythonica:
    def __init__(self, titular, saldo):
        self._titular = titular
        self._saldo = saldo
        self._ativo = False

    @property
    def titular(self):
        return self._titular

    @property
    def saldo(self):
        return self._saldo

    @property
    def ativo(self):
        return self._ativo

A classe refatorada ignora completamente o método ativar_conta do exercício anterior, como se fosse uma classe nova e independente, quebrando a continuidade do aprendizado.

Esses pontos tornam o exercício incoerente e podem levar o aluno a aprender conceitos errados sobre métodos de classe e boas práticas de design em Python.