1.1 Objetos e classes
Hoje você vai aprender como é estruturado um típico programa em Python. E a principal novidade: cada programa em Python é composto por classes e objetos. Python é uma linguagem orientada a objetos, e tudo nele é objeto: números, strings, funções e até mesmo classes são objetos.
Então, o que são classes?
Vou começar com uma analogia. Imagine que você quer construir um navio pequeno. Primeiro, você precisa fazer um desenho, depois entregá-lo à fábrica, onde serão montados o navio com base nesse desenho. Ou uma dúzia. Na verdade, quantos navios você quiser. O importante é que dezenas de navios idênticos são construídos a partir de um desenho.
Na programação Python é a mesma coisa.
Desenhos
O programador é como um designer. Só que, em vez de desenhar, o programador Python escreve classes. Depois, com base nos desenhos, são criadas as peças, e com base nas classes, os objetos.
Primeiro, escrevemos classes (fazemos os desenhos), e depois, durante a execução do programa, o Python cria objetos baseados nessas classes. Assim como os navios são criados com base nos desenhos.
O desenho é único, mas pode haver muitos navios. Os navios são diferentes, têm nomes diferentes, transportam cargas diferentes. Mas são muito parecidos: todos são navios com uma estrutura idêntica e podem realizar tarefas semelhantes.
Ou então, aqui vai outra analogia...
Formigueiro
O formigueiro é um bom exemplo de interação entre objetos. No formigueiro mais simples, existem três classes de formigas: a rainha, os guerreiros e as formigas operárias.
A quantidade de formigas de cada classe é diferente. A rainha é uma só em todo o formigueiro, os guerreiros são dezenas e as formigas operárias são centenas. Três classes e centenas de objetos. As formigas interagem entre si, com formigas da mesma classe e de outras classes sob regras rígidas.
É um exemplo perfeito. Em um programa típico, é exatamente assim. Existe um objeto principal que cria objetos para todas as outras classes. Os objetos começam a interagir entre si e com o "mundo externo" do programa. Dentro desses objetos, seu comportamento é rigidamente programado.
Essas duas explicações são dois lados da mesma moeda. A verdade está no meio. O primeiro exemplo (sobre o desenho e os navios) mostra a relação entre a classe e os objetos dessa classe. A analogia é muito forte. O segundo exemplo (sobre o formigueiro) mostra a relação entre os objetos que existem durante a execução do programa e as classes escritas.
Primeiro, você deve escrever classes para todos os objetos existentes no programa e depois descrever suas interações. Parece complexo, mas é mais fácil do que parece.
Em Python, todas as entidades durante a execução do programa são objetos e escrever o programa é descrever diversas maneiras pelas quais os objetos interagem. Os objetos simplesmente chamam métodos uns dos outros e passam os dados necessários.
Documentação
Mas como saber quais dados passar para os métodos? Já pensaram nisso antes de você.
Geralmente, cada classe tem uma descrição que indica para que foi criada. Da mesma forma, cada método público geralmente tem uma descrição: o que ele faz e quais dados precisam ser passados para ele.
Para usar uma classe, é preciso ter uma noção geral do que ela faz. Além disso, você precisa saber exatamente o que cada um de seus métodos faz. Não é necessário saber como ele faz. É tipo uma varinha mágica.
Vamos dar uma olhada no código — copiando um arquivo:
src = open('source.txt', 'r')
dst = open('destination.txt', 'w')
for line in src:
dst.write(line)
src.close()
dst.close()
Se você ler esse código linha por linha, pode adivinhar o que ele faz em termos gerais. Embora seja preciso experiência e prática. Depois de um tempo, este código parecerá familiar e compreensível.
1.2. Projeto de um programa
Projetar um programa é uma arte. É simples e complexo ao mesmo tempo. Simples, porque não há leis rígidas: tudo que não é proibido é permitido. E complexo também por essa razão: há muitas maneiras de fazer algo, e é difícil encontrar a melhor.
Projetar um programa é como escrever um livro. Por um lado, você simplesmente escreve letras, palavras, frases. Por outro lado, a trama, os personagens, os conflitos internos, o estilo narrativo, o suspense, etc., são importantes.
O principal é entender para quem você está escrevendo o código. Lembre-se de que o seu código é destinado a outros programadores.
Desenvolver qualquer produto é fazer alterações: adicionar aqui, remover ali, ajustar aqui. E assim, com pequenas iterações, nascem projetos grandes, enormes e gigantescos.
A principal exigência para o código é que ele deve ser compreensível para outros programadores. Código errado, mas compreensível, pode ser corrigido. Código correto e incompreensível não pode ser melhorado. Ele só pode ser descartado.
Então, como escrever um código bom e compreensível?
Para isso, você precisa fazer três coisas:
- Escrever código bom e compreensível dentro de métodos — a parte mais fácil.
- Decidir quais entidades devem estar no programa.
- Dividir o programa corretamente em partes lógicas.
O que está por trás desses conceitos?
Escrever código bom dentro de métodos
Se você tem pelo menos um nível básico de inglês, talvez tenha notado como o código pode ser fácil de ler: como frases em inglês:
-
class Cat(Pet)
– a classe Gato estende a classe AnimalDeEstimacao. while stream
: – enquanto o fluxo não estiver vazio...-
a if a < b else b
– sea
for menor queb
, retornea
, caso contrário, retorneb
.
Isso foi feito de propósito. Python é uma das poucas linguagens em que é fácil escrever código autodescritivo: código que é compreensível sem comentários. Em um bom código Python, muitos métodos são lidos como frases em inglês.
Sua tarefa ao escrever o código é torná-lo o mais simples e conciso possível. Pense em quão fácil será ler seu código, e você começará a seguir na direção certa.
É padrão em Python escrever código de fácil leitura. Idealmente, cada método deve caber na tela inteira (comprimento do método — 20-30 linhas). Esta é a norma para toda a comunidade Python. Se o código puder ser melhorado, ele deve ser melhorado.
A melhor maneira de aprender a escrever um bom código é a prática constante. Escreva muito código, estude o código dos outros, peça aos colegas mais experientes que revisem seu código. E lembre-se, no momento em que você disser para si mesmo "isso serve", seu desenvolvimento parará.
Decidir quais entidades devem estar no programa
Você precisa escrever código que seja compreensível para outros programadores. Se 9 em 10 programadores, ao projetar um programa, criarem classes A, B e C nele, você também deverá criar classes A, B e C em seu programa. Você deve escrever código que seja compreensível para os outros.
Um código excelente, funcional, rápido, mas não convencional, é um código ruim.
Você precisa estudar projetos de outras pessoas: é o melhor, mais rápido e mais fácil jeito de absorver toda a sabedoria acumulada na indústria de TI ao longo de décadas.
E, por sinal, você já tem à mão um projeto excelente, popular e bem documentado — Python SDK. Comece por ele.
Analise as classes e as estruturas das classes. Pense sobre por que alguns métodos são estáticos e outros não. Por que os métodos têm esses parâmetros e não outros. Por que exatamente esses métodos, por que as classes têm esses nomes e estão nesses pacotes.
Quando você começar a entender as respostas para todas essas perguntas, poderá escrever um código compreensível para os outros.
No entanto, quero alertá-lo sobre analisar o código nos métodos do Python SDK. O código de muitos métodos foi reescrito para maximizar a velocidade de execução — sua legibilidade é questionável.
Dividir o programa corretamente em partes lógicas
Qualquer programa geralmente é dividido em partes ou módulos. Cada parte é responsável por seu aspecto no programa.
O computador tem uma unidade de sistema, um monitor, um teclado, e essas são todas partes separadas, pouco dependentes. Além disso, sua interação é padronizada: USB, HDMI, etc. Assim, se você derramar café no teclado, pode apenas lavá-lo na torneira, secá-lo e continuar usando.
Já o laptop é um exemplo de arquitetura monolítica: as partes lógicas estão lá, mas são muito mais integradas. No Macbook Pro, para limpar o teclado, é necessário desmontar metade do laptop. Derramar café no laptop é motivo para comprar um novo. Só não café.
1.3 Criando suas próprias classes
Quando você está apenas começando a programar, é importante começar pequeno - aprender a criar suas próprias classes.
Você, claro, já as criou antes, mas precisa entender quais classes devem existir no programa, como elas devem ser nomeadas, quais métodos elas devem ter. E como elas devem interagir entre si.
Lista de entidades
Se você não sabe por onde começar, comece pelo começo.
No início do projeto do programa, você pode simplesmente anotar uma lista de entidades (objetos) que devem estar no programa. Depois, programe-os com este princípio: cada entidade é uma classe separada.
Exemplo
Suponha que você queira escrever um jogo de xadrez. Você precisará de entidades como: o tabuleiro de xadrez e 6 tipos de peças. As peças se movem de forma diferente, têm valores diferentes - faz sentido ter classes separadas. E na verdade, no início, quanto mais classes, melhor.
Encontrar um programador iniciante que, em vez de duas classes, tenha escrito dez é raro. Mas, em vez de dez escrever duas ou até mesmo uma - os iniciantes adoram fazer isso. Então, mais classes, pessoal. E seu código será mais compreensível para todos, exceto, talvez, para você 😛
Xadrez
Suponha que decidimos escrever classes para xadrez: como essas classes seriam?
O tabuleiro de xadrez é simplesmente uma matriz 8 por 8? Melhor fazer uma classe separada para ele, que ao menos armazena uma referência para a matriz. Então, você pode adicionar muitos métodos úteis à classe "tabuleiro de xadrez", que, por exemplo, verifica se uma casa está vazia ou ocupada.
Em geral, no começo, você sempre pode seguir o princípio: o programa tem diferentes Entidades, e uma Entidade tem um tipo. Esse tipo é a classe.
GO TO FULL VERSION