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.
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.
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á!
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()
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.
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)
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.
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.
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.
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.
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.
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.
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!
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:
Impulsione a sua carreira com os melhores cursos e faça parte da maior comunidade tech.
1 ano de Alura
Matricule-se no plano PLUS e garanta:
Jornada de estudos progressiva que te guia desde os fundamentos até a atuação prática. Você acompanha sua evolução, entende os próximos passos e se aprofunda nos conteúdos com quem é referência no mercado.
Mobile, Programação, Front-end, DevOps, UX & Design, Marketing Digital, Data Science, Inovação & Gestão, Inteligência Artificial
Formações com mais de 1500 cursos atualizados e novos lançamentos semanais, em Programação, Inteligência Artificial, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.
A cada curso ou formação concluído, um novo certificado para turbinar seu currículo e LinkedIn.
No Discord, você participa de eventos exclusivos, pode tirar dúvidas em estudos colaborativos e ainda conta com mentorias em grupo com especialistas de diversas áreas.
Faça parte da maior comunidade Dev do país e crie conexões com mais de 120 mil pessoas no Discord.
Acesso ilimitado ao catálogo de Imersões da Alura para praticar conhecimentos em diferentes áreas.
Explore um universo de possibilidades na palma da sua mão. Baixe as aulas para assistir offline, onde e quando quiser.
Acelere o seu aprendizado com a IA da Alura e prepare-se para o mercado internacional.
1 ano de Alura
Todos os benefícios do PLUS e mais vantagens exclusivas:
Luri é nossa inteligência artificial que tira dúvidas, dá exemplos práticos, corrige exercícios e ajuda a mergulhar ainda mais durante as aulas. Você pode conversar com a Luri até 100 mensagens por semana.
Aprenda um novo idioma e expanda seus horizontes profissionais. Cursos de Inglês, Espanhol e Inglês para Devs, 100% focado em tecnologia.
Para estudantes ultra comprometidos atingirem seu objetivo mais rápido.
1 ano de Alura
Todos os benefícios do PRO e mais vantagens exclusivas:
Mensagens ilimitadas para estudar com a Luri, a IA da Alura, disponível 24hs para tirar suas dúvidas, dar exemplos práticos, corrigir exercícios e impulsionar seus estudos.
Envie imagens para a Luri e ela te ajuda a solucionar problemas, identificar erros, esclarecer gráficos, analisar design e muito mais.
Escolha os ebooks da Casa do Código, a editora da Alura, que apoiarão a sua jornada de aprendizado para sempre.
Conecte-se ao mercado com mentoria individual personalizada, vagas exclusivas e networking estratégico que impulsionam sua carreira tech para o próximo nível.