Coletânea Python do ZERO às Redes Neurais Artificiais

Modularização

 

Uma vez entendido como trabalhamos com funções, sejam elas pré definidas ou personalizadas, hora de entendermos o que significa modularizações em programação.

Apesar do nome assustar um pouco, um módulo nada mais é do que pegarmos blocos de nosso código e o salvar em um arquivo externo, de forma que podemos importar o mesmo posteriormente conforme nossa necessidade.

Raciocine que como visto em capítulos anteriores, uma função é um bloco de código que está ali pré-configurado para ser usado dentro daquele código, mas e se pudéssemos salvá-lo de forma a reutilizar o mesmo em outro código, outro programa até mesmo de um terceiro. Isto é possível simplesmente o transformando em um módulo.

Como já mencionado anteriormente diversas vezes, Python é uma linguagem com pilhas inclusas, e isto significa que ela já nos oferece um ambiente pré-configurado com uma série de bibliotecas e módulos pré carregados e prontos para uso.

Além disto é possível importar novos módulos para adicionar novas funcionalidades a nosso código assim como também é possível criarmos um determinado bloco de código e o exportar para que se torne um módulo de outro código.

Seguindo com nosso raciocínio aqui é onde começaremos a trabalhar mais diretamente importando e usando o conteúdo disponível em arquivos externos, e isto é muito fácil de se fazer desde que da maneira correta.

Em modularização tudo começa com um determinado bloco de código que se tornará um módulo, código pronto e revisado, sem erros e pronto para executar a sua função desejada, salve o mesmo com um nome de fácil acesso e com a extensão .py. Em Python todo arquivo legível pela IDE recebe inicialmente a extensão reservada ao sistema .py.

Posteriormente compilando o executável de seu programa isto pode ser alterado, mas por hora, os arquivos que estamos trabalhando recebem a extensão .py.

Partindo para prática:

Vamos modularizar o código abaixo:

 

Salve este bloco de código com um nome de fácil identificação, por exemplo, boasvindas.py

Representação visual:

 

Agora vamos importar esse módulo para dentro de outro arquivo de seu código. Em sua IDE, abra ou crie outro arquivo em branco qualquer, em seguida vamos usar o comando import para importar para dentro desse código o nosso módulo previamente salvo boasvindas.py.

 

Em seguida, importado o módulo, podemos dar comandos usando seu nome seguido de uma instrução, por exemplo ao digitarmos boasvindas e inserirmos um ponto, a IDE irá nos mostrar que comandos podemos usar de dentro dele, no nosso caso, usaremos por enquanto a primeira opção, que se refere a função msg_boas_vindas( ).

Se mandarmos rodar o código, o retorno será: Seja Muito Bem Vindo ao Meu Programa

Seguindo com o uso de nosso módulo, temos uma segunda função criada que pode receber uma string como argumento.

Então pela lógica usamos o nome do módulo, “ponto”, nome da função e passamos o argumento. Por exemplo a string ‘Fernando’.

 

O Retorno será: Seja Muito Bem Vindo ao Meu Programa

Fernando, espero que esteja tendo uma boa experiência...

Outro exemplo, supondo que estamos criando uma calculadora, onde para obtermos uma performance melhor (no que diz respeito ao uso de memória), separamos cada operação realizada por essa calculadora em um módulo diferente.

Dessa forma, no corpo de nossa aplicação principal podemos nos focar ao código que irá interagir com o usuário e chamar módulos e suas funções enquanto as funções em si só são executadas de forma independente e no momento certo.

Ex: Inicialmente criamos um arquivo de nome soma.py que ficará responsável por conter o código da função que irá somar dois números.

 

Repare no código, dentro desse arquivo temos apenas três linhas que contém tudo o que precisamos, mas em outras situações, a ideia de modularizar blocos de código é que eles podem ser bastante extensos dependendo de suas funcionalidades.

Aqui apenas criamos uma função de nome soma( ) que recebe como parâmetros duas variáveis num1 e num2, internamente a variável temporária s realiza a operação de somar o primeiro número com o segundo e guardar em si esse valor. Por fim, esse valor é retornado para que possa ser reutilizado fora dessa função.

Agora criamos um arquivo de nome index.py e dentro dele o seguinte código:

 

Note que inicialmente estamos importando o arquivo soma.py (na importação não é necessário o uso da extensão do arquivo).

Por fim criamos uma mensagem onde na máscara de substituição estamos executando a função soma e passando como parâmetros (para num1 e num2) os números 8 e 3. Nesse caso o retorno será 11.

Representação visual:

 

Caso você queira criar a interação com o usuário, para nesse exemplo

anterior, que o mesmo digite os números, esse processo deve ser feito dentro do módulo da função.

Em soma.py

 

Em index.py

 

Apenas note que este código é idêntico ao anterior, e na execução do programa, esses valores 0 e 0 definidos aqui serão substituídos e processados pelos valores que o usuário digitar.

 

Uma dúvida bastante comum a quem está aprendendo a programar em Python é se precisamos usar a extensão do arquivo quando importamos algum módulo e a resposta é não.

Porém, o arquivo de módulo em questão precisa estar na mesma pasta em que estamos trabalhando com os demais arquivos, para que a IDE o ache e consiga o importar.

Na verdade, o Python inicialmente procurará o arquivo em questão no diretório atual, se não encontrar ele buscará o arquivo nos diretórios salvos como PATH. O recomendável é que você mantenha seus arquivos agrupados em um diretório comum.

 

Outro conceito importante de ser citado a esta altura é o conceito de Pacotes. Em Python não existe uma grande distinção entre esta forma de se trabalhar com módulos se comparado a outras linguagens de programação.

Raciocine que, à medida que você for modularizando seu código, é interessante também dividir categorias de módulos em pastas para melhor organização em geral.

Toda vez que criarmos pastas que guardam módulos dentro de si, em Python costumamos chamar isso de um pacote.

Raciocine também que quanto mais modularizado e organizado é seu

código, mais fácil será fazer a manutenção do mesmo ou até mesmo a implementação de novas funcionalidades porque dessa forma, cada funcionalidade está codificada em um bloco independente, e assim, algum arquivo corrompido não prejudica muito o funcionamento de todo o programa.

Por fim, na prática, a grande diferença que haverá quando se trabalha

com módulos agrupados por pacotes será a forma com que você irá importar os mesmos para dentro de seu código principal.