15.12.2022 Views

Python Eficaz

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

que é absolutamente difícil de ler.

def average_grade(self, name):

by_subject = self._grades[name]

score_sum, score_count = 0, 0

for subject, scores in by_subject.items():

subject_avg, total_weight = 0, 0

for score, weight in scores:

# ...

return score_sum / score_count

Usar a classe também fica mais difícil, pois não fica claro o que significam todos

esses números nos argumentos posicionais.

book.report_grade('Albert Einstein', 'Math', 80, 0.10)

Quando esse tipo de complexidade começa a aparecer, é hora de abandonar os

dicionários e as tuplas e migrar para uma hierarquia de classes.

De início, não sabíamos que seria necessário calcular médias ponderadas,

portanto não valia a pena enfrentar a complexidade de desenvolver uma classe

auxiliar a mais. Os dicionários e as tuplas, tipos nativos do Python, tornam fácil

seguir adiante a cada novo requisito, adicionando camada sobre camada de

registros interdependentes. Porém, devemos evitar esse caminho quando houver

mais de um nível de aninhamento (ou seja, evite dicionários que contenham

dicionários). Esse expediente torna a leitura do código muito difícil para outros

programadores e é um pesadelo para manter no futuro – uma armadilha mortal!

Assim que perceber que os registros estão ficando complicados, desmembre-os

em classes diferentes. Com isso, é possível definir interfaces bem-feitas que

encapsulam melhor os dados, e também permite criar uma camada de abstração

entre as interfaces e a implementação concreta.

Refatorando o código para incluir classes

Podemos começar migrando para o esquema de classes pela base da árvore de

dependências: uma nota individual. Uma classe parece ser algo sofisticado

demais para uma informação tão simples. Uma tupla, por outro lado, parece ser

bastante apropriada porque as notas são imutáveis. No exemplo a seguir, uma

tupla (score, weight) é empregada para manter o registro de notas em uma lista:

www.full-ebook.com

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!