Design <i>patterns</i> no desenvolvimento de software: heróis ou vilões?

Coluna

Digital

Inovação

Tecnologia

26 de fevereiro de 2025

Design patterns no desenvolvimento de software: heróis ou vilões?

Ferramenta reduz a complexidade e possibilita a adaptabilidade do código, mas seus impactos devem ser analisados antes da implementação

Há muito se fala sobre o uso dos design patterns no desenvolvimento de software e seus benefícios. Porém, será mesmo que a simples utilização desses padrões garante a solução dos problemas que eles se propõem a resolver?

Os designs patterns (ou padrões de projeto) são soluções padronizadas para problemas recorrentes em projetos de software, oferecendo modelos para a resolução dos problemas, o que torna o código modular e legível.

A expectativa é que esses padrões sejam utilizados para facilitar a manutenção e otimizar a eficiência do software, melhorar a qualidade do código e facilitar a comunicação entre os integrantes da equipe de desenvolvimento. Além disso, como a ferramenta reduz a complexidade e proporciona o reuso e a adaptabilidade do código, ela também possibilita ganhos de produtividade para a equipe.

O histórico dos padrões de projeto de software não é recente. A ideia surgiu na arquitetura antes de ser aplicada ao desenvolvimento de software. Em 1978, o arquiteto Christopher Alexander catalogou, juntamente com Sara Ishikawa e Murray Silverstein, 253 problemas comuns de arquitetura e suas soluções no livro “A Pattern Language: Towns, Buildings, Construction”.

Alexander definiu que um padrão deveria ter as seguintes características: encapsulamento, generalidade, equilíbrio, abstração, abertura e combinatoriedade. Essas características acabaram influenciando o desenvolvimento dos padrões dos projetos de software.  Mais tarde, em 1987, Kent Beck e Ward Cunningham apresentaram os primeiros padrões na área de ciência da computação, para linguagens orientadas a objetos.

Porém, somente em 1994, por influência do trabalho de Alexander, ocorreu a popularização dos design patterns no desenvolvimento de software. O lançamento do livro “Design Patterns: Elements of Reusable Object-Oriented Software”, da “Gang of Four” (GoF) — Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides —, catalogando 23 padrões de design, formalizou o uso da ferramenta na área.

Ao utilizar design patterns, é fundamental entender cada categoria para escolher o padrão mais adequado para o problema a ser resolvido. Por isso, esses padrões foram divididos em três categorias:

  • Padrões criacionais: permitem criar objetos sem “amarrar” o código a classes específicas, que exigem o controle do processo de criação. É como fazer um pedido de um sanduíche no Subway: você pode escolher o pão, o recheio, o queijo e a salada, mas permite que o atendente monte seu lanche do jeito dele. Isso garante flexibilidade (você pode escolher diferentes tipos de queijo e molhos), reutilização (os mesmos ingredientes podem ser utilizados para produzir lanches diferentes) e independência (novos ingredientes podem ser adicionados, sem que você precise mudar a forma de realizar seu pedido). Alguns exemplos de padrões criacionais são Builder (classe que cria objetos para representar um relatório com diferentes tipos de filtros, colunas e opções de formatação), Factory Method (uma aplicação pode usar este padrão para carregar plugins ou extensões, onde cada plugin é instanciado por uma factory específica) e Singleton (pode ser usado para a criação de um objeto que armazena as configurações da aplicação, como informações de conexão com o banco de dados ou preferências do usuário);
  • Padrões estruturais: focam na construção de sistemas complexos a partir de partes menores (objetos e classes), que podem se encaixar de maneiras diferentes através de uma mesma interface, tornando-se muito adequados quando é necessário garantir alta flexibilidade entre as partes. Funciona como peças de Lego: embora existam peças de diferentes tamanhos, cores e propósitos, o “padrão de encaixe” é sempre o mesmo, permitindo que muitas coisas diferentes sejam construídas com as mesmas peças. Exemplos: Adapter (quando um sistema que usa uma biblioteca de processamento de pagamentos com uma interface específica precisa se comunicar com outra biblioteca de pagamentos com uma interface diferente) e o padrão Facade (por exemplo, durante o cadastro de um usuário no sistema, a interface de cadastro interage com uma classe, que coordena ações necessárias nos subsistemas de validação, como persistência no banco de dados e envio de e-mail de confirmação);
  • Padrões comportamentais: tratam da forma como os objetos de um sistema trabalham juntos ao realizar uma tarefa. Esse padrão é útil quando é necessário ter flexibilidade de comunicação e separação de responsabilidades dentro do sistema. Pense em uma orquestra: cada músico (objeto) toca seu instrumento seguindo a sua própria partitura (seu código) e é responsável por produzir sons diferentes; seu comportamento é determinado pelos comandos do maestro (aumentar volume, mudar o ritmo). Um exemplo muito comum é o padrão Observer (uma plataforma de notícias pode usar esse padrão para notificar assinantes quando uma nova notícia é publicada); outro exemplo é o padrão Command (em aplicações com interfaces gráficas, é usado para representar as ações que podem ser executadas pelos usuários através de menus e botões; cada item de menu ou botão, como “Salvar”, “Abrir”, “Copiar” e “Colar”, pode ser associado a um objeto Command específico, que encapsula a lógica necessária para executar a ação).

Alguns estudos mostraram que projetos com equipes de desenvolvimento maiores tendem a utilizar padrões de projeto com mais frequência. Isso demonstra que os padrões são utilizados para melhorar a documentação e a comunicação entre os membros da equipe. Além disso, desenvolvedores com mais experiência em programação e design são mais propensos a utilizar padrões de projeto.

Al-Obeidallah (2021) analisou o impacto do padrão de projeto Adapter na manutenibilidade de software — atributo de qualidade que indica quão fácil de entender e modificar é o software. Os autores criaram versões de quatro sistemas de software sem o padrão Adapter, utilizando técnicas de refatoração, e compararam métricas de software entre as versões com e sem o padrão. A análise dessas métricas, correlacionadas com a manutenibilidade em estudos anteriores, concluiu que o padrão Adapter impacta positivamente a manutenibilidade, reduzindo indicadores como o número de métodos e linhas de código e melhorando a coesão.

Qasim (2021) investigou o impacto do uso de diferentes padrões de projeto no consumo de energia de aplicativos Android. Os autores implementaram cinco padrões (Singleton, Facade, Observer, Template e Abstract Factory) em dois aplicativos open source, medindo o consumo de energia antes e depois da implementação. Os resultados mostraram que padrões como Observer e Abstract Factory reduziram significativamente o consumo de energia, enquanto o Singleton, em contrapartida, causou um aumento.

Over-engineering

Entretanto, a simples utilização de um design pattern não garante as melhorias sugeridas. Em geral, as pesquisas sobre o impacto de design patterns na qualidade do software apresentam resultados mistos e contraditórios, sugerindo que a relação entre design patterns e qualidade do software é complexa e influenciada por vários fatores. Na verdade, existem estudos apontando que alguns padrões podem ter um impacto negativo na qualidade do software.

Paralelamente, alguns desenvolvedores, especialmente os menos experientes, podem tentar aplicar design patterns em situações em que soluções mais simples seriam suficientes, um problema conhecido como over-engineering.

Também é possível ocorrer um impacto negativo na produtividade caso algum padrão seja mal utilizado, adicionando complexidade excessiva e dificultando a compreensão, o que pode tornar as modificações nos códigos mais difíceis. A implementação de padrões “direto ao ponto”, ou seja, sem adaptá-los corretamente ao contexto da aplicação, pode gerar soluções ineficientes.

Há uma carência de estudos empíricos que avaliem o impacto dos padrões de projeto na qualidade do software, e muitos estudos se baseiam em questionários. Dessa forma, é difícil analisar e adotar um determinado padrão de projeto baseando-se em pesquisas e ferramentas.

Como escolher

Afinal, como escolher o design pattern mais adequado? Essa escolha deve ser feita levando em consideração diversos fatores. Em primeiro lugar, é necessário identificar exatamente qual é o problema que se pretende resolver por meio de um padrão. Os design patterns são soluções para problemas recorrentes, portanto, devemos verificar se a parte do software a ser padronizada pode ser identificada como um problema recorrente.

Somente após esse passo deve-se analisar a intenção de cada padrão, isto é, o tipo particular de problema que cada padrão pode resolver. É preciso também ponderar sobre as consequências e trade-offs que o design pattern escolhido vai trazer para o desenvolvimento e a equipe.  O padrão selecionado deve facilitar a comunicação entre os membros da equipe, e não dificultar. Por isso, é importante considerar também a familiaridade que a equipe possui com os padrões.

Como os design patterns são soluções prontas, pode ser que seja necessária uma adaptação ao contexto do problema, a fim de obter a melhor relação entre o custo de implementação e os benefícios que a solução trará para o projeto. Afinal, os padrões de design foram pensados para melhorar a qualidade do código, caso contrário, é melhor definir a própria implementação, de maneira simplificada, buscando garantir os mesmos parâmetros de qualidade.

A fim de avaliar o impacto e a melhoria de qualidade do software, algumas métricas podem ser calculadas antes e depois de uma refatoração para uso de um determinado design pattern. Alguns indicadores, como o Índice de Manutenibilidade, o Acoplamento de Classes e Coesão e até mesmo o Tempo de Execução, podem ser relevantes para avaliar os benefícios da adoção do padrão de projeto em questão. No entanto, pode ser muito difícil obter essas métricas para realizar essa avaliação mais criteriosa.

Os design patterns não são a “bala de prata” para todos os tipos de problemas. É importante analisar muito bem a situação antes de utilizá-los em algum projeto de software, para verificar se trarão vantagens significativas. Em primeiro lugar, deve-se avaliar a real necessidade de adotá-los no projeto.

Muitas vezes, um bom ponto de equilíbrio pode ser desenvolver um código mais simples, sem seguir um determinado padrão, e depois refatorá-lo para utilizar algum design pattern, evitando alguns problemas de implementação. Utilizando métricas e a percepção geral do time, será possível avaliar se a utilização do padrão após a refatoração melhorou a qualidade do código e trouxe benefícios para todos.

Independentemente do exposto, é importante que todo desenvolvedor aprenda sobre design patterns, para conseguir identificá-los e contribuir mais facilmente em diferentes projetos open source, por exemplo. Aprender mais sobre esses padrões expande os horizontes e permite que o desenvolvedor encontre novas formas de resolver problemas e propor melhorias em sistemas existentes, criando softwares com muito mais qualidade.

Para ter acesso às referências desse texto clique aqui.

Este conteúdo foi produzido por:

Lucas Schiolin Silveira

LinkedIn

Formado em Ciências da Computação pela Unesp de Rio Claro, possui MBA em Data Science e Analytics pela USP/ESALQ. Trabalha como desenvolvedor e líder técnico na Skylar. É estudante de IA, Machine Learning e Data Science.

Quem publicou esta coluna

Skylar

"Startup" de tecnologia e legendagem que faz parte das iniciativas do Pecege, utiliza inteligência artificial e técnicas linguísticas para fazer legendagem em tempo real. Atuante nas áreas de educação, eventos, agronegócio, tecnologia, saúde, entretenimento e esportes, entre outras. Acesse o site!

Você também pode gostar

09 de outubro de 2026

Baixa Produção de Conteúdo Gerado Pelo Usuário em Colaborações de Cosméticos nas Plataformas Digitais

Este estudo analisou a relação entre colaborações de marcas, conhecidas como “collabs”, no setor de cosméticos e a produção de conteúdo gerado pelo usuário (UGC) em plataformas digitais. A pesquisa abordou a relevância do tema diante do crescimento do mercado de beleza e da intensificação das estratégias de “co-branding” como ferramenta de diferenciação e inovação. O objetivo principal foi compreender de que forma essas colaborações influenciaram o comportamento do consumidor digital, com foco na criação de UGC e na intenção de compra. Para isso, a metodologia adotada foi exploratória e descritiva, com a aplicação de um questionário online a 493 respondentes da região Sudeste do Brasil. Os dados coletados foram analisados por meio de estatística descritiva. Os resultados indicaram que, embora as “collabs” gerassem engajamento entre os consumidores, a produção de UGC ativo foi baixa, predominando interações passivas como curtidas, salvamentos e reações rápidas. Adicionalmente, as colaborações demonstraram influência limitada na intenção de compra e na disposição a pagar mais pelos produtos. Concluiu-se que, apesar do potencial estratégico das “collabs” para o mercado de cosméticos, sua efetividade dependeu de fatores como a relevância percebida, a identificação com a marca e a presença de estímulos adicionais para a criação de conteúdo pelo usuário.

Palavras-chave: Comportamento online; Co-branding; Engajamento do consumidor; Intenção de compra; Interação digital.

09 de outubro de 2026

Ferramentas e técnicas de gestão do tempo utilizadas por técnicos da capacitação profissional rural e promoção social

A gestão do tempo configura-se como um elemento essencial para a melhoria da produtividade e da qualidade das entregas, ao permitir a organização, priorização e execução eficiente das atividades, contribuindo diretamente para o alcance de metas e a otimização dos resultados no contexto profissional e pessoal. Objetivou-se compreender como práticas, ferramentas e técnicas de gestão do tempo, adotadas por instrutores de formação profissional rural e de promoção social, se associaram a dois desfechos centrais: a realização das atividades diárias planejadas e a percepção do impacto dessas práticas no bem-estar e produtividade. Os dados foram coletados por meio de questionário on-line estruturado, composto por 18 questões, e as análises foram realizadas no ambiente Python com bibliotecas estatísticas. Os resultados revelaram que a elevada formação acadêmica e maturidade profissional não se traduziu em maior eficácia na gestão do tempo. Observou-se amplo conhecimento sobre ferramentas e técnicas, mas sua utilização prática foi limitada e desigual. Ferramentas mais simples e intuitivas, como listas de tarefas, apresentaram maior adesão, enquanto técnicas que exigem transformações comportamentais, como a Técnica Pomodoro, tiveram baixa aplicação. Houve predominância do uso de soluções digitais, com destaque para o Google Agenda. Evidenciou-se uma percepção quase unânime de que a gestão do tempo influencia diretamente a produtividade e o bem-estar. Concluiu-se que a melhoria da gestão do tempo não dependeu exclusivamente da adoção de ferramentas e técnicas, mas, sobretudo, do desenvolvimento de habilidades práticas e comportamentais, aliado a ajustes nas condições de trabalho.

Palavras-chave: 5W2H; Matriz de Eisenhower; Matriz GUT; Multitarefa; Procrastinação.

09 de outubro de 2026

Análise de Correspondência Aplicada a Dados Periciais: Identificação de Padrões Para Melhoria dos Serviços de Atendimento

A necessidade de otimizar recursos e compreender a complexa dinâmica criminal motivou a exploração de dados periciais, frequentemente subutilizados em laudos textuais. Aplicou-se a Análise de Correspondência Múltipla (ACM) em atendimentos periciais na Macrorregião de Bauru, SP. O objetivo foi investigar e identificar padrões de associação entre o tipo de ocorrência, o período do dia, o dia da semana e a localização, visando subsidiar decisões operacionais. Utilizaram-se dados da Superintendência da Polícia Técnico-Científica (SPTC), coletados entre maio de 2023 e janeiro de 2026. A metodologia englobou a limpeza, transformação e categorização das variáveis, além da construção de matrizes de contingência processadas em Python. A análise descritiva inicial revelou que furtos e colisões predominaram no volume total de ocorrências, enquanto crimes violentos, como homicídios, estupros e feminicídios, representaram uma parcela menor, mas demandaram tempos de resposta significativamente maiores. A ACM mapeou visualmente as correlações estruturais, demonstrando associações claras entre crimes noturnos e de finais de semana com regiões específicas. Identificaram-se dois agrupamentos principais: um perfil noturno e de fim de semana, associado a choques, atropelamentos e suicídios, com destaque para Bauru; e um perfil diurno em dias úteis, dominado por furtos e danos à propriedade. Demonstrou-se que o uso de técnicas exploratórias de aprendizado de máquina transformou dados periciais brutos em informações estratégicas vitais, fornecendo subsídios para a alocação eficiente de equipes e fundamentando a elaboração de políticas públicas baseadas em evidências.

Palavras-chave: Crimes violentos; Matriz de contingência; Priorização de serviços; Python; Tempos de resposta.

09 de outubro de 2026

O comportamento das gerações de consumidores digitais de materiais para construção: análise da Geração X

Analisou-se o comportamento da Geração X na compra de materiais para construção, considerando a articulação entre canais digitais e físicos e as percepções de varejistas e indústrias sobre esse processo. O objetivo foi investigar como esse público utiliza os canais digitais e físicos no processo decisório e relacionar os achados às respostas de varejistas e indústrias. Realizou-se uma pesquisa descritiva e exploratória, com abordagem quantitativa e interpretação qualitativa, por meio de três questionários aplicados a 37 consumidores, 25 varejistas e 25 representantes da indústria. Os dados de cada grupo foram analisados separadamente e, em seguida, relacionados por eixos temáticos. Os resultados indicaram que os consumidores da Geração X utilizam meios digitais para pesquisa e comparação, mas valorizam a loja física para contato com o produto, confiança e atendimento consultivo. Os varejistas reconheceram a transformação, mas apresentaram diferentes níveis de adaptação, enquanto as indústrias relataram uso heterogêneo de tecnologias e reconheceram seu papel de apoio ao varejo. Concluiu-se que o comportamento da Geração X se caracteriza por uma jornada híbrida, que exige maior integração entre os canais e os agentes da cadeia de materiais para construção.

Palavras-chave: Comportamento do consumidor; Geração X; Jornada de compra híbrida; Transformação digital; Varejo de materiais para construção.

Neurociência E Aprendizagem Na Educação

09 de outubro de 2026

Fundamentos para estruturação de currículos baseados em habilidades de raciocínio

Nas últimas décadas, observou-se uma transição educacional de modelos focados em conteúdo para o desenvolvimento de competências, impulsionada pela ubiquidade da informação. Nesse contexto, as habilidades de raciocínio tornaram-se pedagogicamente cruciais por embasarem a compreensão, relação e adaptação de conteúdos em cenários complexos. Com base nessa perspectiva, buscou-se consolidar um modelo detalhado das habilidades que compõem o raciocínio cognitivo, visando servir de base para a elaboração de currículos e programas pedagógicos. Para tanto, realizou-se uma pesquisa qualitativa e exploratória, que envolveu uma síntese multidisciplinar de conhecimentos da filosofia da mente, epistemologia, semiótica, psicologia cognitiva e neurociência. Essa abordagem proporcionou uma visão abrangente da natureza e das funções do raciocínio humano. O modelo resultante classificou as habilidades em quatro funções cognitivas principais, subdivididas em níveis crescentes de complexidade, que acompanharam o desenvolvimento cognitivo humano. A estrutura final mostrou-se bem fundamentada e aplicável à elaboração de currículos e programas pedagógicos, oferecendo uma taxonomia de habilidades do raciocínio diretamente utilizável no sequenciamento instrucional e na avaliação de competências cognitivas.

Palavras-chave: Currículo baseado em competências; Desenvolvimento cognitivo; Habilidades cognitivas; Pensamento crítico; Raciocínio cognitivo.

Inscreva-se em nossa newsletter!

Receba conteúdos e fique sempre atualizado sobre as novidades em gestão, liderança e carreira com a Revista E&S.

Ao preencher o formulário você está ciente de que podemos enviar comunicações e conteúdos da Revista E&S. Confira nossa Política de Privacidade