Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Tamanho e Likes

Olá, gostaria de entender pq tamanho () não foi incluído dentro do inicializado junto com nome e programas. Com likes eu pensei que não fosse um atributo pq seria incrementado depois, já não sei mais se é essa a lógica.

Quando devo ou não colocar uma funcionalidade como atributo do objeto a ser construído?

4 respostas

Olá Ana, Tudo bem?

Sobre o tamanho: pensa que esse atributo é totalmente dinâmico. Cada vez que um novo programa for adicionado na lista, a gente teria que fazer um tratamento para mudar o tamanho.

Por isso, ao invés de tratar o tamanho como um atributo da classe, vale muito mais a pena criar uma função que retorne naquele momento o tamanho da lista.

Já o like é diferente: você precisa guardar o valor. Afinal, não temos um atributo que guarde esse valor.

Ficou mais claro? Se não ficar, responde aí que tento te ajudar.

Cussa

Quando vc diz:

  • "a gente teria que fazer um tratamento para mudar o tamanho."

Esse "tratamento" seria ir manualmente no atributo tamanho e modificar a quantidade de programas, certo?

No geral acho que entendi a lógica, atributo só recebe valor, não executa nada, certo? E no caso do like, ele recebe valor, mas esse valor seria imutável, certo? Por isso disse que "Afinal, não temos um atributo que guarde esse valor."

"a gente teria que fazer um tratamento para mudar o tamanho."

Sim, exatamente. Pensa que se tamanho fosse um atributo, toda vez que eu adicionasse um novo programa ou excluisse, eu teria que tratar para aumentar/diminuir esse atribute.

Vou apresentar abaixo uma forma diferente de likes para explicar a ideia. Imagine que ao invés de guardar apenas o número de likes, eu tivesse uma lista com os nomes de quem deu o like.

Dessa forma, ao invés de __likes guardar um valor numérico inteiro, ele guardaria uma lista de strings (nomes de quem deu like).

Se eu quisesse saber quantos likes tem um filme, eu poderia retornar simplesmente o tamanho da lista de likes.

E por que não guardar o tamanho num atributo? Porque cada vez que eu fosse adicionar ou remover um nome da lista, eu teria que tratar também esse atributo, o que é um trabalho desnecessário.

No caso da lista de filmes, ainda temos um outro problema: ela é acessível externamente. Isso significa que alguém pode acessar a lista diretamente por fora e adicionar items na lista. E aí teríamos um problema que teríamos que travar este tipo de comportamente caso a gente quisesse tratar manualmente o atributo tamanho.

solução!

Faz todo sentido. Agora ficou bem mais claro a lógica de quando colocar algo no init ou não.

Obrigada pela atenção.