<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Marcelo Vinícius Assunção Santos</title>
    <description>The latest articles on DEV Community by Marcelo Vinícius Assunção Santos (@marcelo_vinciusassuno).</description>
    <link>https://dev.to/marcelo_vinciusassuno</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4123660%2F73a87456-abd9-4d15-8e44-caf74e52f0c2.jpg</url>
      <title>DEV Community: Marcelo Vinícius Assunção Santos</title>
      <link>https://dev.to/marcelo_vinciusassuno</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/marcelo_vinciusassuno"/>
    <language>en</language>
    <item>
      <title>Design Patterns na prática: entendendo padrões de projeto sem complicação</title>
      <dc:creator>Marcelo Vinícius Assunção Santos</dc:creator>
      <pubDate>Sun, 13 Sep 2026 23:30:17 +0000</pubDate>
      <link>https://dev.to/marcelo_vinciusassuno/design-patterns-na-pratica-entendendo-padroes-de-projeto-sem-complicacao-5c84</link>
      <guid>https://dev.to/marcelo_vinciusassuno/design-patterns-na-pratica-entendendo-padroes-de-projeto-sem-complicacao-5c84</guid>
      <description>&lt;p&gt;Se você já começou a desenvolver projetos maiores, provavelmente já percebeu uma coisa:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;fazer o código funcionar é apenas uma parte do problema.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No começo, é comum colocar algumas funções, criar algumas classes e adicionar vários &lt;code&gt;if&lt;/code&gt; até tudo funcionar.&lt;/p&gt;

&lt;p&gt;E tudo bem.&lt;/p&gt;

&lt;p&gt;O problema aparece quando o projeto começa a crescer.&lt;/p&gt;

&lt;p&gt;Uma alteração simples passa a quebrar outra parte do sistema, uma classe começa a ter responsabilidades demais e você percebe que não sabe mais onde deveria colocar uma nova funcionalidade.&lt;/p&gt;

&lt;p&gt;É nesse momento que os &lt;strong&gt;Design Patterns&lt;/strong&gt;, ou padrões de projeto, começam a fazer sentido.&lt;/p&gt;

&lt;p&gt;Neste artigo, vamos entender o que são Design Patterns, por que eles existem e como alguns padrões bastante conhecidos podem ser utilizados na prática.&lt;/p&gt;




&lt;h2&gt;
  
  
  Afinal, o que é um Design Pattern?
&lt;/h2&gt;

&lt;p&gt;De forma simples, um &lt;strong&gt;Design Pattern é uma solução conhecida para um problema recorrente no desenvolvimento de software&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Não é uma biblioteca.&lt;/p&gt;

&lt;p&gt;Não é um código que você precisa copiar.&lt;/p&gt;

&lt;p&gt;E também não é uma regra que deve ser seguida sempre.&lt;/p&gt;

&lt;p&gt;Pense em Design Patterns como uma espécie de "receita de arquitetura".&lt;/p&gt;

&lt;p&gt;Você encontra um problema que já é conhecido e utiliza uma estrutura de solução que já foi testada por outros desenvolvedores.&lt;/p&gt;

&lt;p&gt;Podemos pensar assim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Problema recorrente
        ↓
Solução conhecida
        ↓
Design Pattern
        ↓
Código mais organizado
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O objetivo não é necessariamente escrever menos código.&lt;/p&gt;

&lt;p&gt;O objetivo é &lt;strong&gt;organizar melhor as responsabilidades do sistema e facilitar sua evolução&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  Por que isso é importante?
&lt;/h1&gt;

&lt;p&gt;Imagine que você está desenvolvendo um sistema de vendas.&lt;/p&gt;

&lt;p&gt;No início, talvez tenha uma classe assim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Sistema&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;cadastrar_usuario&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;pass&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;realizar_pagamento&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;pass&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;enviar_email&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;pass&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;gerar_relatorio&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;pass&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;salvar_banco&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;pass&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Funciona?&lt;/p&gt;

&lt;p&gt;Sim.&lt;/p&gt;

&lt;p&gt;É uma boa arquitetura?&lt;/p&gt;

&lt;p&gt;Provavelmente não.&lt;/p&gt;

&lt;p&gt;Essa classe está começando a fazer coisas demais.&lt;/p&gt;

&lt;p&gt;Agora imagine que o projeto cresça e passe a ter milhares de linhas.&lt;/p&gt;

&lt;p&gt;Uma alteração no sistema de pagamento pode acabar afetando o cadastro de usuários.&lt;/p&gt;

&lt;p&gt;Uma alteração no envio de e-mail pode acabar afetando outra funcionalidade.&lt;/p&gt;

&lt;p&gt;É aí que começamos a pensar em &lt;strong&gt;separação de responsabilidades, baixo acoplamento e organização do código&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;E os Design Patterns podem ajudar justamente nesses cenários.&lt;/p&gt;




&lt;h1&gt;
  
  
  Os 3 grandes grupos
&lt;/h1&gt;

&lt;p&gt;Os Design Patterns tradicionais são normalmente divididos em três grupos.&lt;/p&gt;

&lt;h3&gt;
  
  
  Creational Patterns
&lt;/h3&gt;

&lt;p&gt;Relacionados à &lt;strong&gt;criação de objetos&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Alguns exemplos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Singleton&lt;/li&gt;
&lt;li&gt;Factory Method&lt;/li&gt;
&lt;li&gt;Abstract Factory&lt;/li&gt;
&lt;li&gt;Builder&lt;/li&gt;
&lt;li&gt;Prototype&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Structural Patterns
&lt;/h3&gt;

&lt;p&gt;Relacionados à &lt;strong&gt;estrutura e composição dos objetos&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Alguns exemplos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adapter&lt;/li&gt;
&lt;li&gt;Decorator&lt;/li&gt;
&lt;li&gt;Facade&lt;/li&gt;
&lt;li&gt;Composite&lt;/li&gt;
&lt;li&gt;Proxy&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Behavioral Patterns
&lt;/h3&gt;

&lt;p&gt;Relacionados à &lt;strong&gt;comunicação e ao comportamento dos objetos&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Alguns exemplos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Observer&lt;/li&gt;
&lt;li&gt;Strategy&lt;/li&gt;
&lt;li&gt;Command&lt;/li&gt;
&lt;li&gt;State&lt;/li&gt;
&lt;li&gt;Iterator&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Agora vamos para alguns exemplos práticos.&lt;/p&gt;




&lt;h1&gt;
  
  
  1. Singleton
&lt;/h1&gt;

&lt;p&gt;O &lt;strong&gt;Singleton&lt;/strong&gt; é utilizado quando queremos garantir que determinada classe tenha apenas uma instância.&lt;/p&gt;

&lt;p&gt;Imagine que sua aplicação tenha uma configuração central que deve ser compartilhada por diferentes partes do sistema.&lt;/p&gt;

&lt;p&gt;Uma implementação simples em Python seria:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Configuracao&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;_instancia&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__new__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cls&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;cls&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_instancia&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;cls&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_instancia&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;super&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;__new__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cls&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;cls&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_instancia&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Podemos testar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;config1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Configuracao&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;config2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Configuracao&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;config1&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="n"&gt;config2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Resultado:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;True
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Isso significa que &lt;code&gt;config1&lt;/code&gt; e &lt;code&gt;config2&lt;/code&gt; estão utilizando a mesma instância.&lt;/p&gt;

&lt;h3&gt;
  
  
  Mas cuidado
&lt;/h3&gt;

&lt;p&gt;Singleton parece simples e pode ser útil em alguns casos, mas &lt;strong&gt;não deve ser utilizado simplesmente porque existe&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Ele pode criar um estado global difícil de controlar e tornar testes mais complicados.&lt;/p&gt;

&lt;p&gt;Por isso, antes de utilizar Singleton, vale perguntar:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Eu realmente preciso garantir uma única instância?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Se a resposta for não, provavelmente existe uma solução mais simples.&lt;/p&gt;




&lt;h1&gt;
  
  
  2. Factory Method
&lt;/h1&gt;

&lt;p&gt;Agora imagine um sistema que envia notificações.&lt;/p&gt;

&lt;p&gt;Podemos ter:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Notificação
├── E-mail
├── SMS
└── Push
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sem uma estrutura adequada, podemos acabar espalhando vários &lt;code&gt;if&lt;/code&gt; pelo sistema:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;tipo&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;email&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;notificacao&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Email&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="n"&gt;tipo&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;sms&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;notificacao&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;SMS&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="n"&gt;tipo&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;push&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;notificacao&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Push&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Conforme o sistema cresce, esse código pode aparecer em vários lugares.&lt;/p&gt;

&lt;p&gt;Uma alternativa é centralizar a criação utilizando uma Factory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;NotificacaoFactory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;

    &lt;span class="nd"&gt;@staticmethod&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;criar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tipo&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;tipo&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;email&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nc"&gt;Email&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;tipo&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;sms&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nc"&gt;SMS&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;tipo&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;push&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nc"&gt;Push&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

        &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;ValueError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Tipo inválido&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora podemos simplesmente fazer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;notificacao&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NotificacaoFactory&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;criar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;email&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A parte do sistema que utiliza a notificação não precisa saber exatamente como o objeto foi criado.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A responsabilidade de criação fica centralizada.&lt;/strong&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  3. Strategy
&lt;/h1&gt;

&lt;p&gt;O Strategy é um dos padrões que considero mais fáceis de visualizar.&lt;/p&gt;

&lt;p&gt;Imagine um sistema de descontos.&lt;/p&gt;

&lt;p&gt;Temos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Desconto
├── Cliente comum
├── Cliente Premium
└── Cliente VIP
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cada cliente possui uma regra diferente.&lt;/p&gt;

&lt;p&gt;Podemos criar estratégias separadas:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;DescontoComum&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;calcular&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;valor&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;valor&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;0.05&lt;/span&gt;


&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;DescontoPremium&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;calcular&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;valor&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;valor&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;0.10&lt;/span&gt;


&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;DescontoVIP&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;calcular&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;valor&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;valor&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;0.20&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora podemos escolher qual estratégia utilizar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;estrategia&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;DescontoVIP&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;valor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;

&lt;span class="n"&gt;desconto&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;estrategia&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;calcular&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;valor&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;desconto&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Resultado:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;200.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A grande vantagem é que podemos trocar a estratégia sem precisar modificar toda a lógica da aplicação.&lt;/p&gt;

&lt;p&gt;Isso é especialmente útil quando temos &lt;strong&gt;vários algoritmos diferentes para resolver o mesmo tipo de problema&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  4. Observer
&lt;/h1&gt;

&lt;p&gt;Agora vamos imaginar uma situação um pouco diferente.&lt;/p&gt;

&lt;p&gt;Temos um sistema de monitoramento.&lt;/p&gt;

&lt;p&gt;Quando alguma coisa acontece, vários componentes precisam ser avisados.&lt;/p&gt;

&lt;p&gt;Por exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;             Sistema
                │
                ▼
          Risco detectado
                │
       ┌────────┼────────┐
       ▼        ▼        ▼
    Dashboard  Alerta   Registro
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Quando um risco é detectado:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;o Dashboard precisa atualizar;&lt;/li&gt;
&lt;li&gt;o sistema de alertas precisa avisar alguém;&lt;/li&gt;
&lt;li&gt;o sistema de registro precisa salvar o acontecimento.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;É justamente nesse tipo de situação que o &lt;strong&gt;Observer&lt;/strong&gt; pode ser interessante.&lt;/p&gt;

&lt;p&gt;Uma implementação simples:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Sistema&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;observadores&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;adicionar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;observador&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;observadores&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;observador&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;notificar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;mensagem&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;observador&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;observadores&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;observador&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;atualizar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mensagem&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora podemos criar diferentes observadores:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Dashboard&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;atualizar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;mensagem&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Dashboard:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;mensagem&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Alerta&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;atualizar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;mensagem&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ALERTA:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;mensagem&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Quando acontece alguma coisa:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;sistema&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;notificar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Risco elevado detectado&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Os componentes interessados recebem a informação.&lt;/p&gt;

&lt;p&gt;Esse padrão aparece bastante em sistemas orientados a eventos.&lt;/p&gt;




&lt;h1&gt;
  
  
  E se juntarmos isso com Inteligência Artificial?
&lt;/h1&gt;

&lt;p&gt;Aqui começa uma parte interessante.&lt;/p&gt;

&lt;p&gt;Design Patterns não servem apenas para sistemas tradicionais.&lt;/p&gt;

&lt;p&gt;Eles também podem ajudar na organização de aplicações que utilizam &lt;strong&gt;Inteligência Artificial, APIs, sensores e processamento de dados&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Imagine um sistema que monitora um carro:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Sensores
   ↓
Coleta de dados
   ↓
Processamento
   ↓
Modelo de IA
   ↓
Análise de risco
   ↓
Alerta
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Podemos utilizar diferentes padrões em diferentes partes dessa arquitetura.&lt;/p&gt;

&lt;p&gt;Por exemplo:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Strategy&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Podemos utilizar diferentes estratégias para analisar tipos diferentes de dados:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Modelo de análise
├── Análise de pneus
├── Análise do motor
└── Análise de segurança
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Factory&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Podemos utilizar uma Factory para criar o analisador correto.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Observer&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Podemos notificar diferentes componentes quando a IA identificar uma situação de risco.&lt;/p&gt;

&lt;p&gt;Isso poderia resultar em algo como:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                  Sensores
                     │
                     ▼
              Coleta de dados
                     │
                     ▼
                  Factory
                     │
          ┌──────────┼──────────┐
          ▼          ▼          ▼
       Análise     Análise    Análise
       de pneus    do motor   segurança
          │          │          │
          └──────────┼──────────┘
                     ▼
                  Strategy
                     │
                     ▼
              Análise de risco
                     │
                     ▼
                  Observer
               ┌─────┼─────┐
               ▼     ▼     ▼
          Dashboard Alerta Registro
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Essa é apenas uma arquitetura conceitual, mas mostra como diferentes padrões podem trabalhar juntos.&lt;/p&gt;




&lt;h1&gt;
  
  
  Mas existe um problema: Design Patterns demais
&lt;/h1&gt;

&lt;p&gt;Aqui está uma das coisas mais importantes para quem está começando.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Você não precisa usar Design Patterns em tudo.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Às vezes, vejo projetos em que uma funcionalidade extremamente simples possui:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;5 interfaces;&lt;/li&gt;
&lt;li&gt;8 classes;&lt;/li&gt;
&lt;li&gt;3 Factories;&lt;/li&gt;
&lt;li&gt;2 Managers;&lt;/li&gt;
&lt;li&gt;1 Singleton;&lt;/li&gt;
&lt;li&gt;e várias abstrações.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tudo isso para fazer uma operação que poderia ser resolvida com uma função simples.&lt;/p&gt;

&lt;p&gt;Nesse caso, o padrão está criando mais problemas do que resolvendo.&lt;/p&gt;

&lt;p&gt;Design Patterns devem ser utilizados &lt;strong&gt;quando realmente ajudam a resolver um problema&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Não devemos utilizar um padrão apenas para dizer que nosso projeto utiliza Design Patterns.&lt;/p&gt;




&lt;h1&gt;
  
  
  Como escolher o padrão certo?
&lt;/h1&gt;

&lt;p&gt;Em vez de começar perguntando:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Qual Design Pattern eu posso usar?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Comece perguntando:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Qual problema eu estou tentando resolver?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Por exemplo:&lt;/p&gt;

&lt;h3&gt;
  
  
  Preciso criar diferentes tipos de objetos?
&lt;/h3&gt;

&lt;p&gt;Talvez &lt;strong&gt;Factory Method&lt;/strong&gt; seja uma boa opção.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tenho diferentes algoritmos para realizar uma tarefa?
&lt;/h3&gt;

&lt;p&gt;Talvez &lt;strong&gt;Strategy&lt;/strong&gt; seja adequado.&lt;/p&gt;

&lt;h3&gt;
  
  
  Vários componentes precisam receber uma notificação?
&lt;/h3&gt;

&lt;p&gt;Talvez &lt;strong&gt;Observer&lt;/strong&gt; seja interessante.&lt;/p&gt;

&lt;h3&gt;
  
  
  Preciso adaptar uma classe existente para outra interface?
&lt;/h3&gt;

&lt;p&gt;Talvez &lt;strong&gt;Adapter&lt;/strong&gt; resolva o problema.&lt;/p&gt;

&lt;h3&gt;
  
  
  Preciso controlar uma única instância?
&lt;/h3&gt;

&lt;p&gt;Talvez &lt;strong&gt;Singleton&lt;/strong&gt; seja uma possibilidade.&lt;/p&gt;

&lt;p&gt;O importante é entender que &lt;strong&gt;o padrão deve surgir da necessidade do sistema&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  Design Pattern não é receita de bolo
&lt;/h1&gt;

&lt;p&gt;É fácil cair na ideia de que existe um padrão perfeito para cada situação.&lt;/p&gt;

&lt;p&gt;Na prática, não é tão simples.&lt;/p&gt;

&lt;p&gt;Um mesmo problema pode ser resolvido de várias maneiras.&lt;/p&gt;

&lt;p&gt;A escolha depende de fatores como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;tamanho do projeto;&lt;/li&gt;
&lt;li&gt;linguagem utilizada;&lt;/li&gt;
&lt;li&gt;equipe;&lt;/li&gt;
&lt;li&gt;requisitos;&lt;/li&gt;
&lt;li&gt;facilidade de manutenção;&lt;/li&gt;
&lt;li&gt;necessidade de testes;&lt;/li&gt;
&lt;li&gt;complexidade da aplicação.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Por isso, estudar Design Patterns não significa decorar uma lista de nomes.&lt;/p&gt;

&lt;p&gt;Significa aprender a &lt;strong&gt;identificar problemas de projeto e conhecer diferentes formas de solucioná-los&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  O que eu levaria desse estudo?
&lt;/h1&gt;

&lt;p&gt;Se você está começando a estudar Design Patterns, não tente decorar todos os padrões de uma vez.&lt;/p&gt;

&lt;p&gt;Comece por alguns:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Singleton
    ↓
Factory
    ↓
Strategy
    ↓
Observer
    ↓
Adapter
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Entenda:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;qual problema cada um resolve,&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;quando ele faz sentido,&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;quando não utilizá-lo,&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;e principalmente:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;como ele muda a organização do código.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Depois disso, fica muito mais fácil estudar os outros padrões.&lt;/p&gt;




&lt;h1&gt;
  
  
  Conclusão
&lt;/h1&gt;

&lt;p&gt;Design Patterns são uma forma de compartilhar soluções para problemas recorrentes no desenvolvimento de software.&lt;/p&gt;

&lt;p&gt;Eles podem ajudar a criar sistemas mais organizados, flexíveis e fáceis de manter.&lt;/p&gt;

&lt;p&gt;Mas existe uma coisa mais importante do que conhecer dezenas de padrões:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;saber identificar quando você realmente precisa de um.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Não devemos usar Design Patterns para deixar o código mais complicado ou para demonstrar conhecimento.&lt;/p&gt;

&lt;p&gt;Devemos utilizá-los quando eles tornam o projeto &lt;strong&gt;mais fácil de entender, modificar, testar e evoluir&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;No final, o objetivo não é ter o código mais sofisticado.&lt;/p&gt;

&lt;p&gt;É ter &lt;strong&gt;um código que resolva o problema da melhor maneira possível&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Para continuar estudando
&lt;/h2&gt;

&lt;p&gt;Se você está começando agora, uma boa sequência seria:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Programação Orientada a Objetos
            ↓
Princípios SOLID
            ↓
Design Patterns
            ↓
Arquitetura de Software
            ↓
Clean Code
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Quanto melhor entendermos os problemas de projeto, mais fácil fica escolher a ferramenta certa para cada situação.&lt;/p&gt;

&lt;p&gt;E talvez essa seja a principal lição dos Design Patterns:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Não procure um padrão para encaixar no seu código. Procure entender o problema e então escolha a solução mais adequada.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>architecture</category>
      <category>programming</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>E se uma IA pudesse prever riscos em um carro de Fórmula 1 antes do acidente?</title>
      <dc:creator>Marcelo Vinícius Assunção Santos</dc:creator>
      <pubDate>Sun, 13 Sep 2026 23:27:04 +0000</pubDate>
      <link>https://dev.to/marcelo_vinciusassuno/e-se-uma-ia-pudesse-prever-riscos-em-um-carro-de-formula-1-antes-do-acidente-2d93</link>
      <guid>https://dev.to/marcelo_vinciusassuno/e-se-uma-ia-pudesse-prever-riscos-em-um-carro-de-formula-1-antes-do-acidente-2d93</guid>
      <description>&lt;p&gt;A Fórmula 1 é um dos ambientes mais extremos para a aplicação de tecnologia. Os carros atingem velocidades muito altas, sofrem forças intensas durante curvas e frenagens e precisam operar com componentes trabalhando próximos de seus limites.&lt;/p&gt;

&lt;p&gt;Nesse cenário, cada informação pode ser importante.&lt;/p&gt;

&lt;p&gt;Temperatura dos pneus, pressão, velocidade, aceleração, vibrações e diversos outros dados podem ser coletados por sensores presentes no veículo. Mas existe um desafio: como transformar essa enorme quantidade de dados em informações úteis para identificar situações de risco?&lt;/p&gt;

&lt;p&gt;É nesse ponto que a Inteligência Artificial pode ajudar.&lt;/p&gt;

&lt;p&gt;Neste artigo, vamos explorar uma proposta de sistema capaz de analisar dados de sensores de um carro de Fórmula 1 e identificar possíveis situações de risco antes que elas se tornem problemas mais graves.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;O problema&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Durante uma corrida, um carro de Fórmula 1 está constantemente sujeito a mudanças.&lt;/p&gt;

&lt;p&gt;Uma curva pode exigir uma grande força lateral. Uma frenagem pode elevar rapidamente a temperatura dos freios. Os pneus podem sofrer alterações de temperatura e pressão. Uma peça pode começar a apresentar um comportamento diferente do esperado.&lt;/p&gt;

&lt;p&gt;Isoladamente, uma alteração pequena pode não significar muita coisa.&lt;/p&gt;

&lt;p&gt;Porém, quando várias alterações acontecem ao mesmo tempo, elas podem indicar uma situação de risco.&lt;/p&gt;

&lt;p&gt;Por exemplo:&lt;/p&gt;

&lt;p&gt;Temperatura do pneu aumentando&lt;br&gt;
            +&lt;br&gt;
Pressão do pneu alterando&lt;br&gt;
            +&lt;br&gt;
Alta velocidade&lt;br&gt;
            +&lt;br&gt;
Aceleração lateral elevada&lt;br&gt;
            ↓&lt;br&gt;
       Possível perda&lt;br&gt;
        de aderência&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Onde entram os sensores?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Os sensores são responsáveis por transformar características físicas do carro em dados que podem ser analisados por sistemas computacionais.&lt;/p&gt;

&lt;p&gt;Podemos imaginar alguns exemplos:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fenomphdgdi15o0z4h0wx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fenomphdgdi15o0z4h0wx.png" alt=" " width="800" height="871"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzayriuhnr4j46i4zvtem.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzayriuhnr4j46i4zvtem.png" alt=" " width="587" height="354"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;E onde entra a Inteligência Artificial?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Uma abordagem tradicional poderia estabelecer regras como:&lt;/p&gt;

&lt;p&gt;SE temperatura &amp;gt; determinado valor&lt;br&gt;
ENTÃO gerar alerta&lt;/p&gt;

&lt;p&gt;Isso funciona em situações simples, mas pode não ser suficiente.&lt;/p&gt;

&lt;p&gt;Imagine que a temperatura esteja dentro de uma faixa aceitável, mas ao mesmo tempo o carro esteja em alta velocidade, apresentando uma alteração de pressão dos pneus e um comportamento diferente na aceleração lateral.&lt;/p&gt;

&lt;p&gt;Analisar cada informação separadamente pode não revelar o problema.&lt;/p&gt;

&lt;p&gt;Um modelo de Inteligência Artificial pode analisar várias variáveis ao mesmo tempo e procurar combinações que estejam associadas a situações de risco.&lt;/p&gt;

&lt;p&gt;A ideia pode ser representada assim:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;          SENSORES
             │
             ▼
     Coleta dos dados
             │
             ▼
    Processamento dos dados
             │
             ▼
      Modelo de IA
             │
    ┌────────┼────────┐
    ▼        ▼        ▼
  Baixo    Médio     Alto
  risco    risco     risco
             │
             ▼
         ALERTA
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Como o modelo poderia aprender?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Uma possibilidade seria utilizar Machine Learning, ou aprendizado de máquina.&lt;/p&gt;

&lt;p&gt;Primeiro, seriam coletados dados de diferentes situações do veículo.&lt;/p&gt;

&lt;p&gt;Por exemplo:&lt;/p&gt;

&lt;h2&gt;
  
  
  Velocidade | Temperatura | Pressão | Aceleração | Situação
&lt;/h2&gt;

&lt;p&gt;250 km/h   | 90 °C       | 22.0    | 2.5 G      | Normal&lt;br&gt;
280 km/h   | 98 °C       | 21.8    | 3.2 G      | Normal&lt;br&gt;
290 km/h   | 108 °C      | 21.2    | 4.8 G      | Risco&lt;br&gt;
300 km/h   | 115 °C      | 20.9    | 5.1 G      | Risco&lt;/p&gt;

&lt;p&gt;Com uma quantidade maior de exemplos, o modelo poderia aprender relações entre os dados e diferentes níveis de risco.&lt;/p&gt;

&lt;p&gt;Depois do treinamento, novos dados poderiam ser enviados para o modelo:&lt;/p&gt;

&lt;p&gt;Novos dados&lt;br&gt;
     ↓&lt;br&gt;
Modelo treinado&lt;br&gt;
     ↓&lt;br&gt;
Análise&lt;br&gt;
     ↓&lt;br&gt;
Classificação do risco&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;O que a IA poderia detectar?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flypexw8dkaexr6p1kh69.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flypexw8dkaexr6p1kh69.png" alt=" " width="800" height="563"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Existem diversas possibilidades de aplicação.&lt;/p&gt;

&lt;p&gt;Perda de aderência&lt;/p&gt;

&lt;p&gt;A IA poderia analisar informações como velocidade, rotação das rodas, aceleração e comportamento dos pneus para identificar padrões associados à perda de aderência.&lt;/p&gt;

&lt;p&gt;Superaquecimento&lt;/p&gt;

&lt;p&gt;Temperaturas anormais poderiam indicar que determinados componentes estão trabalhando em condições próximas de um limite.&lt;/p&gt;

&lt;p&gt;Problemas nos pneus&lt;/p&gt;

&lt;p&gt;Alterações combinadas de temperatura e pressão poderiam ser utilizadas para identificar situações que merecem atenção.&lt;/p&gt;

&lt;p&gt;Falhas mecânicas&lt;/p&gt;

&lt;p&gt;Vibrações e alterações no comportamento de componentes poderiam ser analisadas para encontrar sinais de possíveis problemas.&lt;/p&gt;

&lt;p&gt;Comportamentos anormais&lt;/p&gt;

&lt;p&gt;Mesmo quando nenhum sensor apresenta um valor extremamente alto, uma combinação incomum de dados poderia ser identificada pelo modelo&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A importância do histórico de dados&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Um dos pontos mais interessantes dessa abordagem é que a IA pode utilizar o histórico.&lt;/p&gt;

&lt;p&gt;Imagine que, durante várias sessões de treinamento, sejam registrados milhões de informações:&lt;/p&gt;

&lt;p&gt;Corrida 1&lt;br&gt;
├── velocidade&lt;br&gt;
├── temperatura&lt;br&gt;
├── pressão&lt;br&gt;
├── aceleração&lt;br&gt;
└── vibração&lt;/p&gt;

&lt;p&gt;Corrida 2&lt;br&gt;
├── velocidade&lt;br&gt;
├── temperatura&lt;br&gt;
├── pressão&lt;br&gt;
├── aceleração&lt;br&gt;
└── vibração&lt;/p&gt;

&lt;p&gt;Corrida 3&lt;br&gt;
├── velocidade&lt;br&gt;
├── temperatura&lt;br&gt;
├── pressão&lt;br&gt;
├── aceleração&lt;br&gt;
└── vibração&lt;/p&gt;

&lt;p&gt;Com o tempo, esses dados podem ajudar a construir modelos capazes de reconhecer padrões.&lt;/p&gt;

&lt;p&gt;Quanto melhor for a qualidade e representatividade dos dados utilizados no treinamento, maior será o potencial do modelo.&lt;/p&gt;

&lt;p&gt;É importante destacar, porém, que um modelo de IA não garante que um acidente será evitado. Ele trabalha com probabilidades e padrões e pode cometer erros.&lt;/p&gt;

&lt;p&gt;Por isso, em uma aplicação real, a IA deveria funcionar como uma ferramenta de apoio à tomada de decisão, e não como única responsável pela segurança.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Uma possível arquitetura&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Podemos representar o sistema de maneira simples:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu5s44gvjs9az9t73mz3n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu5s44gvjs9az9t73mz3n.png" alt=" " width="744" height="1290"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mas isso seria realmente útil na Fórmula 1?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A Fórmula 1 já utiliza sistemas avançados de aquisição e análise de dados. Portanto, a proposta não é simplesmente "colocar IA em um carro de F1".&lt;/p&gt;

&lt;p&gt;O ponto interessante está em investigar como técnicas modernas de Inteligência Artificial podem complementar a análise dos dados já disponíveis.&lt;/p&gt;

&lt;p&gt;Em um ambiente onde pequenas diferenças podem representar grandes consequências, encontrar padrões rapidamente pode ser extremamente relevante.&lt;/p&gt;

&lt;p&gt;Além disso, tecnologias desenvolvidas para competições automobilísticas podem influenciar outras áreas da indústria automotiva.&lt;/p&gt;

&lt;p&gt;Conceitos de monitoramento, previsão de falhas e análise de sensores podem ser aplicados, com as devidas adaptações, em veículos de rua, veículos autônomos, máquinas industriais e sistemas de transporte.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusão&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A combinação entre sensores e Inteligência Artificial apresenta uma possibilidade interessante para o monitoramento de segurança em carros de Fórmula 1.&lt;/p&gt;

&lt;p&gt;Os sensores são responsáveis pela coleta das informações, enquanto a Inteligência Artificial pode auxiliar na interpretação desses dados, identificando padrões e indicando possíveis situações de risco.&lt;/p&gt;

&lt;p&gt;A grande vantagem não está apenas em saber que determinada temperatura ou pressão está alta, mas em conseguir relacionar diferentes informações e encontrar comportamentos anormais.&lt;/p&gt;

&lt;p&gt;Embora uma solução desse tipo não possa garantir a prevenção de acidentes, ela pode funcionar como uma ferramenta adicional de análise e apoio à tomada de decisões.&lt;/p&gt;

&lt;p&gt;Além disso, a proposta pode ser reproduzida em um ambiente acadêmico por meio da simulação de sensores e do desenvolvimento de modelos de Machine Learning, permitindo transformar uma ideia inicialmente teórica em um projeto prático.&lt;/p&gt;

&lt;p&gt;No fim, a pergunta deixa de ser apenas:&lt;/p&gt;

&lt;p&gt;"A IA pode dirigir um carro de Fórmula 1?"&lt;/p&gt;

&lt;p&gt;E passa a ser uma questão muito mais interessante:&lt;/p&gt;

&lt;p&gt;"Como podemos usar a IA para entender melhor o que está acontecendo com o carro antes que um problema aconteça?"&lt;/p&gt;

&lt;p&gt;Esse é um dos grandes potenciais da Inteligência Artificial aplicada à análise de dados em veículos de alto desempenho.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>analytics</category>
      <category>data</category>
      <category>machinelearning</category>
    </item>
  </channel>
</rss>
