Alura > Cursos de Programação > Cursos de Python > Conteúdos de Python > Primeiras aulas do curso Design Patterns em Python: aplicação e melhores práticas

Design Patterns em Python: aplicação e melhores práticas

Introdução a Padrões de Projetos em Python - Introdução

Apresentando o instrutor e o curso

Olá! Bem-vindos ao curso de Padrões de Projeto em Python. Meu nome é Juliano, mas também sou conhecido como Django, e serei o instrutor durante este curso.

Audiodescrição: Juliano é um homem branco, com cabelo curto castanho e olhos castanhos. Ele veste uma camisa azul e está em um ambiente de escritório com uma estante de livros ao fundo.

Este curso foi inicialmente pensado para pessoas desenvolvedoras que já possuem alguma experiência com Python. No entanto, mesmo que não tenham experiência prévia, podem se beneficiar do curso. Encorajamos a participação de todos e, caso surjam dúvidas, utilizem o fórum, onde responderemos o mais rápido possível.

Definindo objetivos do curso

Ao final deste curso, nós pretendemos que você entenda o que é um padrão de projeto, conheça alguns dos principais padrões de projeto e saiba quando utilizá-los e também quando não utilizá-los.

Meu nome é Juliano Fischer Naves.

Audiodescrição: Juliano é um homem branco, com cabelo curto castanho e olhos castanhos. Ele veste uma camisa social azul e está em um ambiente de escritório com uma estante de livros ao fundo.

Compartilhando experiência e contato

Vocês podem conferir meu LinkedIn e meu e-mail, e entrar em contato se acharem necessário. Sou bacharel, mestre e doutor em ciência da computação. Tenho experiência com a linguagem de programação Python desde 2010. Fui professor por cerca de 10 anos em cursos superiores e técnicos, incluindo pós-graduação, e trabalho há algum tempo como engenheiro Python em uma rede social, mais especificamente como Site Reliability Engineer (engenheiro de confiabilidade de site), utilizando Python na minha rotina diária.

Nossa jornada no curso de padrões de projeto em Python começa agora. Vamos lá!

Introdução a Padrões de Projetos em Python - Modulos do singleton

Introduzindo o conceito de Singleton em Python

Bem-vindos de volta ao nosso estudo do padrão Singleton. Temos uma informação importante: módulos são Singleton em Python. Ou seja, os módulos são instanciados apenas uma vez. Podemos aproveitar essa característica para implementar qualquer recurso necessário com o padrão Singleton, simplesmente utilizando módulos.

Para ilustrar isso, vamos criar uma classe Singleton. Esta classe é marcada como "privada" para indicar que não deve ser instanciada manualmente. Veja o código a seguir:

# classe "privada"
class Singleton:
    def __init__(self):
        print("Criando a instância única")

singleton = Singleton()

Demonstrando a instância única de Singleton

No exemplo acima, criamos a classe Singleton e, em seguida, instanciamos um objeto dessa classe. A mensagem "Criando a instância única" será impressa apenas uma vez, quando o objeto for criado.

O que acontece é que, toda vez que importarmos singleton do nosso módulo singleton1_4, estaremos importando esse objeto. Se tentarmos importá-lo mais de uma vez durante a execução do programa, a mensagem "Criando a instância única" não será impressa novamente. Vamos ver isso na prática:

>>> from singleton1_4 import singleton

Se tentarmos importar novamente:

>>> from singleton1_4 import singleton

A mensagem não será impressa novamente porque o objeto já foi criado e importado.

Carregando dados de configuração usando Singleton

Agora, vamos ver um exemplo prático de como podemos usar essa característica para carregar dados de um arquivo de configuração. Primeiro, definimos o nome do arquivo:

NOME_ARQUIVO = "config.json"

Em seguida, abrimos o arquivo em modo de leitura:

with open(NOME_ARQUIVO, "r") as f:

Precisamos importar o módulo json para carregar os dados do arquivo:

import json

Inicializamos a variável dados fora do bloco para que ela possa ser acessada globalmente:

dados = None

Dentro do bloco with, carregamos o conteúdo do arquivo de configuração na variável dados:

dados = json.load(f)

Acessando dados de configuração importados

Feito isso, precisamos sair do terminal interativo e abri-lo novamente. Agora, podemos importar com:

>>> from singleton1_4 import dados

Assim, teremos acesso aos dados. Se tentarmos importar dados novamente, ele não será impresso novamente, mas ainda conseguimos acessá-los:

>>> dados

Podemos usar módulos de maneira bastante inteligente para objetos Singleton em Python, sem precisar implementar classes Singleton, sem precisar de get_instance, nem usar o método construtor __new__ ou sobrescrevê-lo. Esse é mais um recurso da linguagem Python que podemos utilizar.

Encerrando o vídeo e introduzindo o próximo

Por este vídeo é só. No próximo vídeo, veremos alguns exemplos de objetos ou valores que são Singleton na linguagem Python, ou em módulos e bibliotecas bastante utilizados. Nos vemos no próximo vídeo.

Introdução a Padrões de Projetos em Python - Entendendo o que são padrões de projeto

Introduzindo o conceito de design patterns

Bem-vindos de volta ao curso de Design Patterns em Python. O objetivo desta aula é compreender o que são design patterns. Vamos começar pelo início. Podemos afirmar que o início dos design patterns na engenharia de software se deu com a publicação do livro "Design Patterns – Elements of Reusable Object-Oriented Software". Este livro foi publicado por quatro autores pela primeira vez em 1994. Esses autores ficaram conhecidos como o Gang of Four, ou grupo dos quatro. O livro buscava inspiração em padrões de projeto construtivos da arquitetura e aplicava esse conceito na engenharia de software, criando uma variedade de padrões que foram compilados, explicados e catalogados.

Podemos definir um design pattern como uma solução de software reutilizável, ou seja, uma solução que pretende resolver um problema relativamente frequente. Não faz sentido criar um padrão e chamá-lo de padrão se ele pode ser utilizado apenas uma vez. Portanto, ele deve ser reutilizável. O conceito é o seguinte: se nos depararmos com um determinado problema, podemos resolvê-lo com um design pattern. O objetivo do padrão é fornecer um código compreensível, manutenível, ou seja, fácil de dar manutenção, e padronizado.

Comparando design patterns a receitas de cozinha

Podemos pensar nos padrões como receitas de cozinha. Imagine que, se tivermos uma receita e dez pessoas a seguirem, muito provavelmente o resultado final será diferente. Se uma pessoa com muita experiência, como um chef de cozinha, seguir a receita, é muito provável que o prato final seja melhor do que o de uma pessoa iniciante. Esses padrões foram catalogados no livro e divididos em três categorias: padrões criacionais, padrões estruturais e padrões comportamentais.

Os padrões criacionais definem como os objetos são criados ou como devem ser criados. Os padrões estruturais definem como os objetos se relacionam e como se compõem. Por último, os padrões comportamentais definem como os objetos interagem entre si. Inicialmente, pode parecer um pouco difícil diferenciar entre estruturais e comportamentais, mas, no decorrer do curso, quando analisarmos um padrão estrutural e depois um padrão comportamental, ficará mais fácil compreender.

Avaliando as vantagens dos design patterns

Quais são as vantagens da utilização de design patterns? Podemos afirmar que são soluções testadas; muitas pessoas já desenvolveram esses padrões, já os testaram, e eles funcionam, o que é muito importante. Além disso, proporcionam uma linguagem comum. Por exemplo, ao mencionar Factory, Builder ou Singleton, a pessoa que compreende o padrão já entenderá do que se trata e como foi construído. Isso visa reduzir erros de design, pois, sendo soluções testadas, a probabilidade de incorrer em um erro de design será menor. Por fim, obviamente, facilita a manutenção e a escalabilidade do software.

Discutindo as desvantagens dos design patterns

Quais são as desvantagens? Existe uma curva de aprendizagem, pois é necessário aprender o que são padrões. Uma vez que aprendemos, é comum, especialmente para iniciantes, querer aplicar todos os padrões possíveis em todos os softwares. Isso pode resultar em uma quantidade excessiva de abstração, dificultando a compreensão do código ou até atrasando o desenvolvimento, quando poderia ser mais rápido.

Concluindo a introdução aos design patterns

Por esta aula, é só. Esperamos que tenham compreendido um pouco melhor o que são design patterns. No próximo vídeo, na próxima aula, aprenderemos mais sobre o nosso primeiro design pattern. Até mais!

Sobre o curso Design Patterns em Python: aplicação e melhores práticas

O curso Design Patterns em Python: aplicação e melhores práticas possui 169 minutos de vídeos, em um total de 87 atividades. Gostou? Conheça nossos outros cursos de Python em Programação, ou leia nossos artigos de Programação.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda Python acessando integralmente esse e outros cursos, comece hoje!

Conheça os Planos para Empresas