<?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: Bruno Freschi</title>
    <description>The latest articles on DEV Community by Bruno Freschi (@bruno_freschi).</description>
    <link>https://dev.to/bruno_freschi</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2315769%2F1acefa7d-5941-4c56-a855-49d19327322c.jpg</url>
      <title>DEV Community: Bruno Freschi</title>
      <link>https://dev.to/bruno_freschi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/bruno_freschi"/>
    <language>en</language>
    <item>
      <title>DataAccess: ADO.net</title>
      <dc:creator>Bruno Freschi</dc:creator>
      <pubDate>Fri, 10 Apr 2026 11:31:20 +0000</pubDate>
      <link>https://dev.to/he4rt/dataaccess-adonet-3a79</link>
      <guid>https://dev.to/he4rt/dataaccess-adonet-3a79</guid>
      <description>&lt;h3&gt;
  
  
  Controle total e performance máxima
&lt;/h3&gt;

&lt;p&gt;Se você usa .NET, precisa entender o ADO.NET. Ele é a base de tudo — inclusive do Dapper e do Entity Framework.&lt;/p&gt;

&lt;h3&gt;
  
  
  O que é?
&lt;/h3&gt;

&lt;p&gt;ADO.NET é o conjunto de APIs nativas do .NET para acessar banco de dados diretamente. Sem abstrações pesadas. Sem mágica.&lt;/p&gt;

&lt;p&gt;👉 Resultado: &lt;strong&gt;máxima performance e controle absoluto&lt;/strong&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  Quando faz sentido usar?
&lt;/h3&gt;

&lt;p&gt;Use ADO.NET quando:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Performance é crítica (ETL, alto volume, baixa latência)&lt;/li&gt;
&lt;li&gt;Você precisa de controle fino sobre SQL e transações&lt;/li&gt;
&lt;li&gt;Quer evitar dependências externas&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Evite quando:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Precisa de produtividade rápida (CRUDs simples)&lt;/li&gt;
&lt;li&gt;Não quer escrever mapeamento manual&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Como funciona (essencial)
&lt;/h3&gt;

&lt;p&gt;Os 3 principais componentes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;SqlConnection&lt;/code&gt; → abre conexão&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;SqlCommand&lt;/code&gt; → executa SQL&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;SqlDataReader&lt;/code&gt; → lê dados (streaming, rápido)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Exemplo direto:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;var&lt;/span&gt; &lt;span class="n"&gt;connection&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;SqlConnection&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;connectionString&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;command&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;SqlCommand&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"SELECT Id, Nome FROM Clientes"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;connection&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="n"&gt;connection&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Open&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;var&lt;/span&gt; &lt;span class="n"&gt;reader&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;command&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ExecuteReader&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;reader&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Read&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;reader&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetInt32&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;nome&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;reader&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Sem ORM. Sem mapeamento automático. Só você e o banco.&lt;/p&gt;


&lt;h3&gt;
  
  
  Segurança básica (obrigatório)
&lt;/h3&gt;

&lt;p&gt;Nunca faça isso:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="s"&gt;$"SELECT * FROM Clientes WHERE Email = '&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s"&gt;'"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Use parâmetros:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="n"&gt;command&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Parameters&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AddWithValue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"@Email"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;👉 Evita SQL Injection e melhora cache de execução.&lt;/p&gt;


&lt;h3&gt;
  
  
  Performance: por que é tão rápido?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Sem reflexão&lt;/li&gt;
&lt;li&gt;Sem geração de SQL&lt;/li&gt;
&lt;li&gt;Leitura em streaming (&lt;code&gt;DataReader&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Controle total de conexões&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;
  
  
  ETL? Aqui ele brilha
&lt;/h3&gt;

&lt;p&gt;Para cargas massivas no SQL Server:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;var&lt;/span&gt; &lt;span class="n"&gt;bulkCopy&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;SqlBulkCopy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;connection&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;bulkCopy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DestinationTableName&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Clientes"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;bulkCopy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteToServer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;reader&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;👉 &lt;strong&gt;Ordens de magnitude mais rápido que INSERT em loop&lt;/strong&gt;&lt;/p&gt;


&lt;h3&gt;
  
  
  Comparação rápida
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;ADO.NET&lt;/th&gt;
&lt;th&gt;Dapper&lt;/th&gt;
&lt;th&gt;EF&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Performance&lt;/td&gt;
&lt;td&gt;🔥 Máxima&lt;/td&gt;
&lt;td&gt;Alta&lt;/td&gt;
&lt;td&gt;Média&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Controle SQL&lt;/td&gt;
&lt;td&gt;Total&lt;/td&gt;
&lt;td&gt;Total&lt;/td&gt;
&lt;td&gt;Parcial&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Facilidade&lt;/td&gt;
&lt;td&gt;Baixa&lt;/td&gt;
&lt;td&gt;Média&lt;/td&gt;
&lt;td&gt;Alta&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h3&gt;
  
  
  Regra prática
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Quer &lt;strong&gt;controle e performance&lt;/strong&gt; → ADO.NET&lt;/li&gt;
&lt;li&gt;Quer &lt;strong&gt;equilíbrio&lt;/strong&gt; → Dapper&lt;/li&gt;
&lt;li&gt;Quer &lt;strong&gt;produtividade&lt;/strong&gt; → EF&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;
  
  
  Insight final
&lt;/h3&gt;

&lt;p&gt;Dominar ADO.NET muda seu nível como backend .NET.&lt;/p&gt;

&lt;p&gt;Você passa a entender &lt;strong&gt;o que realmente acontece entre sua aplicação e o banco&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;E isso impacta diretamente em performance, custo e escalabilidade.&lt;/p&gt;
&lt;h3&gt;
  
  
  Link para o repo.
&lt;/h3&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/BrunoSFreschi" rel="noopener noreferrer"&gt;
        BrunoSFreschi
      &lt;/a&gt; / &lt;a href="https://github.com/BrunoSFreschi/DataAccess.Benchmark" rel="noopener noreferrer"&gt;
        DataAccess.Benchmark
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      DataAccess Benchmark é um laboratório de engenharia de software criado para analisar,  o custo das diferentes abordagens de acesso a dados no ecossistema .NET. 
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;a rel="noopener noreferrer" href="https://private-user-images.githubusercontent.com/89789210/574823833-e1d506d3-9daf-43e0-88a6-4ec48eb38abb.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzYzNjMyMjEsIm5iZiI6MTc3NjM2MjkyMSwicGF0aCI6Ii84OTc4OTIxMC81NzQ4MjM4MzMtZTFkNTA2ZDMtOWRhZi00M2UwLTg4YTYtNGVjNDhlYjM4YWJiLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNjA0MTYlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjYwNDE2VDE4MDg0MVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWY5NTViODBmMTFlOTkzMjIyNTMyMzYyM2YyYWUwNWJiMTBiZGI5YjRmNTk5YTkwOTg0Zjc0ZjA3NjQ2MmJiOTEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JnJlc3BvbnNlLWNvbnRlbnQtdHlwZT1pbWFnZSUyRnBuZyJ9.dLj7lEuaYYV9xOX4DQpvLo3wDNRCtmQpGR2CpjF3YD0"&gt;&lt;img width="1337" height="699" alt="Gemini_Generated_Image_g46htng46htng46h" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fprivate-user-images.githubusercontent.com%2F89789210%2F574823833-e1d506d3-9daf-43e0-88a6-4ec48eb38abb.png%3Fjwt%3DeyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzYzNjMyMjEsIm5iZiI6MTc3NjM2MjkyMSwicGF0aCI6Ii84OTc4OTIxMC81NzQ4MjM4MzMtZTFkNTA2ZDMtOWRhZi00M2UwLTg4YTYtNGVjNDhlYjM4YWJiLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNjA0MTYlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjYwNDE2VDE4MDg0MVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWY5NTViODBmMTFlOTkzMjIyNTMyMzYyM2YyYWUwNWJiMTBiZGI5YjRmNTk5YTkwOTg0Zjc0ZjA3NjQ2MmJiOTEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JnJlc3BvbnNlLWNvbnRlbnQtdHlwZT1pbWFnZSUyRnBuZyJ9.dLj7lEuaYYV9xOX4DQpvLo3wDNRCtmQpGR2CpjF3YD0"&gt;&lt;/a&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;DataAccess Benchmark&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;Ao estudar performance, não estamos apenas medindo tempo de execução
Estamos observando a &lt;strong&gt;história da engenharia de software se manifestando em código&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Este repositório foi criado para demonstrar, de forma prática, a evolução das abordagens de acesso a dados no ecossistema .NET, comparando:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ADO.NET (baixo nível, controle total)&lt;/li&gt;
&lt;li&gt;Dapper (micro-ORM, performance com praticidade)&lt;/li&gt;
&lt;li&gt;Entity Framework Core (ORM completo, foco em produtividade)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tudo medido com precisão usando &lt;strong&gt;BenchmarkDotNet&lt;/strong&gt;, a ferramenta padrão para benchmarks profissionais em .NET.&lt;/p&gt;
&lt;p&gt;Este projeto não é apenas um teste
Ele é um laboratório para entender &lt;strong&gt;como a engenharia de software evoluiu ao longo dos anos&lt;/strong&gt;.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;A História do Acesso a Dados no .NET&lt;/h1&gt;

&lt;/div&gt;
&lt;p&gt;Assim como a POO surgiu da Crise do Software, as diferentes formas de acessar banco de dados surgiram de um problema recorrente:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Como acessar dados com segurança, performance e manutenibilidade ao mesmo tempo?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Durante a evolução do .NET, três…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/BrunoSFreschi/DataAccess.Benchmark" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


</description>
      <category>braziliandevs</category>
      <category>devjournal</category>
      <category>beginners</category>
      <category>learning</category>
    </item>
    <item>
      <title>POO Além do Código #4: Polimorfismo (A Versatilidade)</title>
      <dc:creator>Bruno Freschi</dc:creator>
      <pubDate>Tue, 31 Mar 2026 20:39:36 +0000</pubDate>
      <link>https://dev.to/bruno_freschi/poo-alem-do-codigo-4-polimorfismo-a-versatilidade-2moe</link>
      <guid>https://dev.to/bruno_freschi/poo-alem-do-codigo-4-polimorfismo-a-versatilidade-2moe</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;"A capacidade de tratar diferentes objetos através de uma interface comum."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  📜 A Perspectiva Histórica
&lt;/h3&gt;

&lt;p&gt;Nos primeiros sistemas orientados a objetos, era comum usar grandes blocos de &lt;code&gt;if&lt;/code&gt; e &lt;code&gt;switch&lt;/code&gt; para decidir o comportamento do programa.&lt;br&gt;
Cada novo tipo exigia alterar o código existente, aumentando o risco de bugs e tornando o sistema difícil de manter.&lt;/p&gt;

&lt;p&gt;O &lt;strong&gt;Polimorfismo&lt;/strong&gt; surgiu como solução para esse problema.&lt;br&gt;
Em vez de perguntar &lt;em&gt;"que tipo é esse?"&lt;/em&gt;, o código passa a dizer &lt;em&gt;"faça isso"&lt;/em&gt;, e cada objeto sabe como responder.&lt;/p&gt;

&lt;p&gt;Esse conceito permitiu criar sistemas &lt;strong&gt;extensíveis&lt;/strong&gt;, onde novos comportamentos podem ser adicionados sem modificar o código antigo.&lt;br&gt;
Essa ideia é a base do princípio &lt;strong&gt;Open/Closed Principle (Aberto para extensão, fechado para modificação)&lt;/strong&gt;.&lt;/p&gt;


&lt;h3&gt;
  
  
  💡 O Conceito
&lt;/h3&gt;

&lt;p&gt;Polimorfismo significa &lt;strong&gt;múltiplas formas&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Objetos diferentes podem ser tratados da mesma maneira, desde que compartilhem um &lt;strong&gt;contrato comum&lt;/strong&gt; (interface ou classe base).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;O código trabalha com o tipo abstrato&lt;/li&gt;
&lt;li&gt;Cada objeto executa sua própria implementação&lt;/li&gt;
&lt;li&gt;O comportamento muda sem mudar o código que chama&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;O foco do Polimorfismo é a EXTENSIBILIDADE e a FLEXIBILIDADE.&lt;/strong&gt;&lt;/p&gt;


&lt;h3&gt;
  
  
  🛠️ No Mundo Real (Agnóstico)
&lt;/h3&gt;

&lt;p&gt;Imagine um &lt;strong&gt;Controle Remoto Universal&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;O controle tem um botão "Ligar"&lt;/li&gt;
&lt;li&gt;A TV liga de um jeito&lt;/li&gt;
&lt;li&gt;O Ar-condicionado liga de outro&lt;/li&gt;
&lt;li&gt;O Videogame liga de outro&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;O controle não precisa saber como cada aparelho funciona.&lt;br&gt;
Ele só chama o mesmo comando.&lt;/p&gt;

&lt;p&gt;Cada aparelho responde do seu próprio jeito.&lt;/p&gt;

&lt;p&gt;Isso é &lt;strong&gt;Polimorfismo&lt;/strong&gt;.&lt;/p&gt;


&lt;h3&gt;
  
  
  💻 Implementação em C# (Nossa Ferramenta)
&lt;/h3&gt;

&lt;p&gt;Sem polimorfismo, o código fica rígido e cheio de condições.&lt;/p&gt;

&lt;p&gt;Com polimorfismo, usamos &lt;strong&gt;interfaces&lt;/strong&gt; ou &lt;strong&gt;classes base&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Contrato comum&lt;/span&gt;
&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;interface&lt;/span&gt; &lt;span class="nc"&gt;IMetodoPagamento&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Pagar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;decimal&lt;/span&gt; &lt;span class="n"&gt;valor&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Implementação 1&lt;/span&gt;
&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;PagamentoCartao&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;IMetodoPagamento&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Pagar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;decimal&lt;/span&gt; &lt;span class="n"&gt;valor&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;$"Pagando &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="s"&gt; no cartão"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Implementação 2&lt;/span&gt;
&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;PagamentoPix&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;IMetodoPagamento&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Pagar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;decimal&lt;/span&gt; &lt;span class="n"&gt;valor&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;$"Pagando &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="s"&gt; via PIX"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Implementação 3&lt;/span&gt;
&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;PagamentoBoleto&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;IMetodoPagamento&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Pagar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;decimal&lt;/span&gt; &lt;span class="n"&gt;valor&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;$"Pagando &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="s"&gt; com boleto"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Classe que usa polimorfismo&lt;/span&gt;
&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ProcessadorPagamento&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Processar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IMetodoPagamento&lt;/span&gt; &lt;span class="n"&gt;metodo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;decimal&lt;/span&gt; &lt;span class="n"&gt;valor&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;metodo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Pagar&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="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;processador&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;ProcessadorPagamento&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="n"&gt;IMetodoPagamento&lt;/span&gt; &lt;span class="n"&gt;p1&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;PagamentoCartao&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="n"&gt;IMetodoPagamento&lt;/span&gt; &lt;span class="n"&gt;p2&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;PagamentoPix&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="n"&gt;IMetodoPagamento&lt;/span&gt; &lt;span class="n"&gt;p3&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;PagamentoBoleto&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="n"&gt;processador&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Processar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;processador&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Processar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;200&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;processador&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Processar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;300&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Se amanhã surgir um novo tipo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;PagamentoCripto&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;IMetodoPagamento&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nada precisa ser alterado no código existente.&lt;/p&gt;

&lt;p&gt;Isso é Polimorfismo.&lt;/p&gt;




&lt;h3&gt;
  
  
  🎯 Desafio de Mentalidade
&lt;/h3&gt;

&lt;p&gt;Ao olhar para o código nesta pasta, pergunte-se:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Estou usando muitos &lt;code&gt;if&lt;/code&gt; ou &lt;code&gt;switch&lt;/code&gt; para decidir comportamento?&lt;/li&gt;
&lt;li&gt;Posso substituir isso por interface ou classe base?&lt;/li&gt;
&lt;li&gt;Meu código aceita novos tipos sem precisar ser modificado?&lt;/li&gt;
&lt;li&gt;Estou programando para a implementação ou para a abstração?&lt;/li&gt;
&lt;li&gt;Se eu adicionar um novo comportamento, preciso mexer no código antigo?&lt;/li&gt;
&lt;/ol&gt;




</description>
      <category>braziliandevs</category>
      <category>developer</category>
      <category>beginners</category>
      <category>discuss</category>
    </item>
    <item>
      <title>POO Além do Código #3: Herança e Composição (A Estrutura)</title>
      <dc:creator>Bruno Freschi</dc:creator>
      <pubDate>Wed, 25 Mar 2026 23:35:56 +0000</pubDate>
      <link>https://dev.to/bruno_freschi/poo-alem-do-codigo-3-heranca-e-composicao-a-estrutura-216f</link>
      <guid>https://dev.to/bruno_freschi/poo-alem-do-codigo-3-heranca-e-composicao-a-estrutura-216f</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;"A herança diz o que um objeto &lt;strong&gt;É&lt;/strong&gt;, a composição diz o que um objeto &lt;strong&gt;TEM&lt;/strong&gt;."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  📜 A Perspectiva Histórica
&lt;/h3&gt;

&lt;p&gt;No início da POO, a &lt;strong&gt;Herança&lt;/strong&gt; era vista como a "bala de prata" para o reuso de código. Se você precisasse de um "Carro" e já tivesse um "Veículo", bastava herdar. Com o tempo, os sistemas ficaram rígidos e frágeis (o "problema da banana e do gorila": você queria a banana, mas vinha o gorila e a floresta inteira junto). A &lt;strong&gt;Composição&lt;/strong&gt; surgiu como uma alternativa mais flexível para montar sistemas como peças de LEGO.&lt;/p&gt;

&lt;h3&gt;
  
  
  💡 O Conceito
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Herança (É um):&lt;/strong&gt; Cria uma hierarquia rígida. É útil quando existe uma relação natural e imutável de especialização.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Composição (Tem um):&lt;/strong&gt; Cria uma relação de dependência. Você monta o objeto injetando outros objetos dentro dele. É a base para o código modular e testável.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;O segredo do bom arquiteto é: "Prefira composição em vez de herança" (Design Patterns GoF).&lt;/strong&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  🛠️ No Mundo Real (Agnóstico)
&lt;/h3&gt;

&lt;p&gt;Imagine um &lt;strong&gt;Smartphone&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Herança:&lt;/strong&gt; O Smartphone &lt;strong&gt;É UM&lt;/strong&gt; Dispositivo Eletrônico. Ele herda características básicas como "voltagem" e "botão power".&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Composição:&lt;/strong&gt; O Smartphone &lt;strong&gt;TEM UMA&lt;/strong&gt; Câmera, &lt;strong&gt;TEM UM&lt;/strong&gt; GPS e &lt;strong&gt;TEM UMA&lt;/strong&gt; Bateria.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Por que compor?&lt;/strong&gt; Se a tecnologia da câmera mudar de "Digital" para "Lidar", você só troca a peça. Se você usasse herança para tudo, teria que mudar a árvore genealógica inteira do telefone.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  💻 Implementação em C# (Nossa Ferramenta)
&lt;/h3&gt;

&lt;p&gt;Veja como a Composição evita que as classes fiquem "inchadas" e presas a uma hierarquia.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="c1"&gt;// --- HERANÇA ---&lt;/span&gt;
&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Veiculo&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;Marca&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Ligar&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Ligado!"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Carro&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Veiculo&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;// Carro É UM Veículo&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;Portas&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// --- COMPOSIÇÃO ---&lt;/span&gt;
&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;interface&lt;/span&gt; &lt;span class="nc"&gt;IMotor&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Iniciar&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MotorGasolina&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;IMotor&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Iniciar&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Vrum vrum (Gasolina)"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CarroModerno&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Veiculo&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// O carro TEM UM motor (Injetado via composição)&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;readonly&lt;/span&gt; &lt;span class="n"&gt;IMotor&lt;/span&gt; &lt;span class="n"&gt;_motor&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;CarroModerno&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IMotor&lt;/span&gt; &lt;span class="n"&gt;motor&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;_motor&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;motor&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Acelerar&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;_motor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Iniciar&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Desafio de Mentalidade
&lt;/h3&gt;

&lt;p&gt;Ao olhar para o código nesta pasta, pergunte-se:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Eu usei Herança apenas para economizar de digitar código? (Se sim, cuidado: isso é um erro comum).&lt;/li&gt;
&lt;li&gt;Se eu precisar trocar um comportamento desta classe no futuro, eu consigo fazer isso sem alterar a classe pai?&lt;/li&gt;
&lt;li&gt;"Um Quadrado é um Retângulo?" (O famoso Círculo de Liskov). Se a resposta for "mais ou menos", use &lt;strong&gt;Composição&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;




</description>
      <category>braziliandevs</category>
      <category>learning</category>
      <category>devjournal</category>
      <category>networking</category>
    </item>
    <item>
      <title>POO Além do Código #2: Encapsulamento (A Caixa Preta)</title>
      <dc:creator>Bruno Freschi</dc:creator>
      <pubDate>Wed, 18 Mar 2026 12:12:30 +0000</pubDate>
      <link>https://dev.to/bruno_freschi/poo-alem-do-codigo-2-encapsulamento-a-caixa-preta-p05</link>
      <guid>https://dev.to/bruno_freschi/poo-alem-do-codigo-2-encapsulamento-a-caixa-preta-p05</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;"Um objeto deve ser responsável por manter seu próprio estado e proteger sua integridade."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  📜 A Perspectiva Histórica
&lt;/h3&gt;

&lt;p&gt;Nos primórdios da programação, as variáveis eram globais. Qualquer parte do código podia alterar o valor de qualquer outra parte. O resultado? O &lt;strong&gt;"Efeito Colateral"&lt;/strong&gt;: você consertava um erro no login e, inexplicavelmente, quebrava o cálculo do frete. O &lt;strong&gt;Encapsulamento&lt;/strong&gt; surgiu para criar fronteiras, garantindo que o que acontece dentro de um objeto, fica dentro do objeto.&lt;/p&gt;

&lt;h3&gt;
  
  
  💡 O Conceito
&lt;/h3&gt;

&lt;p&gt;Encapsular é a arte de &lt;strong&gt;esconder a complexidade interna&lt;/strong&gt; e expor apenas o necessário.&lt;br&gt;
Pense no objeto como uma &lt;strong&gt;célula&lt;/strong&gt;: ela tem uma membrana que protege o núcleo. Você não altera o DNA da célula cutucando-a com o dedo; você interage com os receptores da membrana.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;O foco do Encapsulamento é a PROTEÇÃO e a VALIDAÇÃO dos dados.&lt;/strong&gt;&lt;/p&gt;


&lt;h3&gt;
  
  
  🛠️ O Encapsulamento no Mundo Real (Agnóstico)
&lt;/h3&gt;

&lt;p&gt;Imagine um &lt;strong&gt;Relógio de Pulso&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Interface Pública:&lt;/strong&gt; O visor e o botão de ajuste de hora.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Encapsulamento (Privado):&lt;/strong&gt; As engrenagens, a bateria e o cristal de quartzo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Por que isso é bom?&lt;/strong&gt; Se você pudesse tocar diretamente nas engrenagens para mudar a hora, acabaria entortando uma peça. O relógio te obriga a usar o botão, que garante que as engrenagens girem da forma correta.&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;
  
  
  💻 Implementação em C# (Nossa Ferramenta)
&lt;/h3&gt;

&lt;p&gt;Aqui, usamos &lt;strong&gt;Modificadores de Acesso&lt;/strong&gt; (&lt;code&gt;private&lt;/code&gt;, &lt;code&gt;public&lt;/code&gt;, &lt;code&gt;protected&lt;/code&gt;) e &lt;strong&gt;Properties&lt;/strong&gt; (&lt;code&gt;get&lt;/code&gt; e &lt;code&gt;set&lt;/code&gt;) para controlar o acesso aos dados.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ContaBancaria&lt;/span&gt; 
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// O saldo é privado: ninguém de fora pode simplesmente digitar um novo valor.&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="kt"&gt;decimal&lt;/span&gt; &lt;span class="n"&gt;_saldo&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;decimal&lt;/span&gt; &lt;span class="n"&gt;Saldo&lt;/span&gt; 
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;get&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;_saldo&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;// Apenas leitura externa&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// O método é a única "porta" de entrada segura.&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Depositar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;decimal&lt;/span&gt; &lt;span class="n"&gt;valor&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&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;&amp;gt;&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;_saldo&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="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;$"Depósito de &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="s"&gt; realizado com sucesso."&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Sacar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;decimal&lt;/span&gt; &lt;span class="n"&gt;valor&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&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;&amp;lt;=&lt;/span&gt; &lt;span class="n"&gt;_saldo&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;_saldo&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="p"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;else&lt;/span&gt; 
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Saldo insuficiente."&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎯 Desafio de Mentalidade
&lt;/h3&gt;

&lt;p&gt;Ao olhar para o código nesta pasta, pergunte-se:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Meus campos (&lt;code&gt;fields&lt;/code&gt;) são privados?&lt;/li&gt;
&lt;li&gt;Existe alguma forma de deixar o objeto em um "estado inválido" (ex: saldo negativo, idade -5)? Se sim, falta encapsulamento.&lt;/li&gt;
&lt;li&gt;O mundo externo realmente precisa saber como esse cálculo é feito, ou apenas o resultado final dele?&lt;/li&gt;
&lt;/ol&gt;




</description>
      <category>braziliandevs</category>
      <category>learning</category>
      <category>devjournal</category>
      <category>networking</category>
    </item>
    <item>
      <title>POO Além do Código #1: Abstração (O Arquiteto de Soluções)</title>
      <dc:creator>Bruno Freschi</dc:creator>
      <pubDate>Thu, 12 Mar 2026 19:35:57 +0000</pubDate>
      <link>https://dev.to/bruno_freschi/poo-alem-do-codigo-1-abstracao-o-arquiteto-de-solucoes-500m</link>
      <guid>https://dev.to/bruno_freschi/poo-alem-do-codigo-1-abstracao-o-arquiteto-de-solucoes-500m</guid>
      <description>&lt;p&gt;Você já sentiu que seu código está virando um "emaranhado" de funções, mesmo usando classes? Muitas vezes, o problema não é a linguagem ou o framework, mas a falta de um conceito fundamental que separa os digitadores de código dos arquitetos de software: a &lt;strong&gt;Abstração&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Neste primeiro artigo da série sobre os pilares da POO, vamos descer um nível e entender por que a abstração é a alma de sistemas escaláveis.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧐 O que é Abstração, afinal?
&lt;/h2&gt;

&lt;p&gt;Abstrair não é "esconder código". &lt;strong&gt;Abstrair é a arte de ignorar o que não importa em um determinado contexto.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Imagine um objeto &lt;code&gt;Carro&lt;/code&gt;. Dependendo do sistema que você está construindo, a abstração dele muda completamente:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Contexto&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;O que importa (Abstração)&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;O que é irrelevante&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;GPS / Logística&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Latitude, Longitude, Velocidade&lt;/td&gt;
&lt;td&gt;Cor do estofado, Tipo de óleo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Oficina Mecânica&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Histórico de revisões, Peças, KM&lt;/td&gt;
&lt;td&gt;Destino da viagem atual&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;E-commerce&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Preço, Modelo, Ano, Estoque&lt;/td&gt;
&lt;td&gt;Pressão dos pneus&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Regra de Ouro:&lt;/strong&gt; Foque no &lt;strong&gt;O QUE&lt;/strong&gt; o objeto faz, e não no &lt;strong&gt;COMO&lt;/strong&gt; ele faz.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🎮 O Exemplo do Controle Remoto
&lt;/h2&gt;

&lt;p&gt;Pense na interface de um controle remoto. Você tem botões para &lt;code&gt;Ligar()&lt;/code&gt;, &lt;code&gt;MudarCanal()&lt;/code&gt; e &lt;code&gt;AjustarVolume()&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Para você, não importa se a TV recebe o sinal via &lt;strong&gt;Infravermelho, Bluetooth ou Wi-Fi&lt;/strong&gt;. A abstração (os botões) permanece a mesma, enquanto a implementação (a eletrônica interna) pode mudar completamente sem que você precise aprender a usar o controle de novo.&lt;/p&gt;




&lt;h2&gt;
  
  
  💻 Abstração na Prática (C#)
&lt;/h2&gt;

&lt;p&gt;Quando trazemos isso para o código, estamos definindo contratos de comportamento. Veja este exemplo focado no domínio de pagamentos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Definimos o "Contrato": Todo meio de pagamento DEVE ser processado.&lt;/span&gt;
&lt;span class="c1"&gt;// O COMO (Pix, Cartão, Boleto) não nos interessa neste nível.&lt;/span&gt;

&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;abstract&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MeioDePagamento&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;decimal&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;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// O arquiteto define o comportamento, mas deixa a execução para o futuro.&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;abstract&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Processar&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Estou aplicando neste repo. alguns conceitos
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/BrunoSFreschi/Blueprint-OOP/tree/master" rel="noopener noreferrer"&gt;BrunoSFreschi/Blueprint-OOP&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Por que isso é poderoso?
&lt;/h3&gt;

&lt;p&gt;Se amanhã surgir o "CryptoPay", você não precisa alterar a lógica principal do seu sistema. Você apenas cria uma nova classe que herda de &lt;code&gt;MeioDePagamento&lt;/code&gt; e implementa o método &lt;code&gt;Processar()&lt;/code&gt;. O restante do software continua conversando com a abstração.&lt;/p&gt;




&lt;h2&gt;
  
  
  🚨 O Erro Comum: O "Procedural Disfarçado"
&lt;/h2&gt;

&lt;p&gt;No ecossistema .NET, é muito comum cairmos na armadilha das classes "Anêmicas" acompanhadas de gerenciadores:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;UserService&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;UserHelper&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;UserManager&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Se o seu objeto &lt;code&gt;User&lt;/code&gt; só tem propriedades (get/set) e toda a lógica está em um "Helper", você não está fazendo Orientação a Objetos. Você está fazendo &lt;strong&gt;Programação Procedural dentro de classes&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A abstração real acontece quando o objeto possui comportamento e responsabilidades claras dentro do seu contexto.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 Checkpoint Mental
&lt;/h2&gt;

&lt;p&gt;Antes de criar sua próxima classe, faça estas quatro perguntas:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🏦 &lt;strong&gt;Domínio:&lt;/strong&gt; Esta classe representa um objeto real do meu negócio?&lt;/li&gt;
&lt;li&gt;🔍 &lt;strong&gt;Contexto:&lt;/strong&gt; Estou colocando detalhes que não pertencem a este cenário?&lt;/li&gt;
&lt;li&gt;⚙️ &lt;strong&gt;Tecnologia:&lt;/strong&gt; Se eu trocar o banco de dados ou a UI, essa ideia ainda faz sentido?&lt;/li&gt;
&lt;li&gt;🎭 &lt;strong&gt;Comportamento:&lt;/strong&gt; Estou modelando ações ou apenas guardando dados (balde de variáveis)?&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  🛤️ Próximos Passos
&lt;/h2&gt;

&lt;p&gt;A abstração é o alicerce. Sem ela, os outros pilares perdem o sentido. No próximo post, vamos falar sobre &lt;strong&gt;Encapsulamento&lt;/strong&gt;: como proteger essa abstração e garantir que ninguém "mexa nos fios" por trás do controle remoto.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;E você? Já pegou algum sistema onde a falta de abstração tornou uma mudança simples em um pesadelo de refatoração? Deixe nos comentários!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;#dotnet #csharp #poo #architecture #programming&lt;/p&gt;




</description>
      <category>braziliandevs</category>
      <category>oop</category>
      <category>learning</category>
      <category>techtalks</category>
    </item>
    <item>
      <title>Seu código é Orientado a Objetos</title>
      <dc:creator>Bruno Freschi</dc:creator>
      <pubDate>Thu, 05 Mar 2026 17:19:48 +0000</pubDate>
      <link>https://dev.to/he4rt/seu-codigo-e-orientado-a-objetos-e5e</link>
      <guid>https://dev.to/he4rt/seu-codigo-e-orientado-a-objetos-e5e</guid>
      <description>&lt;h2&gt;
  
  
  🚀 O seu código é Orientado a Objetos ou apenas um "Procedural Disfarçado"?
&lt;/h2&gt;

&lt;p&gt;Vamos tocar na ferida: o que mais existe por aí é o famoso &lt;strong&gt;"Código de Estimação"&lt;/strong&gt;. Aquele código empacotado em classes, cheio de &lt;em&gt;getters&lt;/em&gt; e &lt;em&gt;setters&lt;/em&gt; para todo lado, mas sem um pingo de inteligência ou comportamento real.&lt;/p&gt;

&lt;p&gt;Se o código procedural resolve o problema e entrega o software, por que se dar ao trabalho de modelar objetos? A resposta não está na execução, mas na &lt;strong&gt;sustentabilidade&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Por que a OO (bem feita) salva o seu projeto?
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Controle da Complexidade (O fim do Espaguete):&lt;/strong&gt; No procedural, os dados são passivos e as funções globais. Conforme o sistema cresce, mexer em um ponto quebra cinco outros lugares imprevisíveis. A OO propõe o &lt;strong&gt;Encapsulamento&lt;/strong&gt;: cada objeto é uma "caixa preta" que cuida da própria vida.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Flexibilidade sem Cirurgia (Polimorfismo):&lt;/strong&gt; Precisa adicionar um novo meio de pagamento (ex: Cripto)? Em vez de espalhar &lt;code&gt;if/else&lt;/code&gt; por todo o sistema, você apenas cria um novo objeto que sabe "Processar". Você adiciona funções sem tocar no que já está funcionando.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  🏛️ Os 4 Pilares na Prática
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Pilar&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;O que resolve na vida real?&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Abstração&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Esconde a complexidade. Você dirige o carro sem precisar entender a explosão interna do motor.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Encapsulamento&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Protege os dados. Ninguém altera o "Saldo" sem passar pelas regras de negócio.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Herança&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Compartilha características comuns, evitando redundância (mas cuidado para não virar um pesadelo!).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Polimorfismo&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Permite que diferentes objetos respondam à mesma mensagem de formas específicas.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h3&gt;
  
  
  💡 O Veredito
&lt;/h3&gt;

&lt;p&gt;Usamos Orientação a Objetos para que o código seja legível para &lt;strong&gt;humanos&lt;/strong&gt;, e não apenas compreensível para máquinas. O custo de manutenção de um software é, em média, &lt;strong&gt;80% do seu ciclo de vida&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A OO bem aplicada é um investimento para que o desenvolvedor do futuro (que pode ser você daqui a seis meses) não queira deletar tudo e começar do zero.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;E aí, o seu código atual passaria em um teste de pureza de OO?&lt;/strong&gt; 🧐&lt;/p&gt;

&lt;p&gt;#programação #softwareDevelopment #cleanCode #OOP #devLife #brazilianDevs&lt;/p&gt;

</description>
      <category>braziliandevs</category>
      <category>developer</category>
      <category>beginners</category>
      <category>discuss</category>
    </item>
    <item>
      <title>First post</title>
      <dc:creator>Bruno Freschi</dc:creator>
      <pubDate>Thu, 31 Oct 2024 16:12:19 +0000</pubDate>
      <link>https://dev.to/bruno_freschi/first-post-1hpn</link>
      <guid>https://dev.to/bruno_freschi/first-post-1hpn</guid>
      <description>&lt;p&gt;Este é um post de teste. A intenção aqui é simplesmente validar a funcionalidade da plataforma, testar configurações de exibição e verificar se tudo está funcionando corretamente. Este post de teste, teste, teste, servirá para garantir que o conteúdo seja exibido de maneira esperada para quem acessa, além de nos ajudar a identificar possíveis ajustes de formatação e estrutura.&lt;/p&gt;

&lt;p&gt;Ao utilizar este post de teste, conseguimos visualizar se o layout responde conforme o planejado. Esse tipo de teste é fundamental para garantir que não haja problemas quando um conteúdo real for publicado. Vale lembrar que posts como este são temporários e servem exclusivamente para fins de verificação e avaliação de desempenho, aparência e usabilidade. Assim, qualquer pessoa que esteja visualizando isso pode ter certeza de que se trata de um conteúdo provisório.&lt;/p&gt;

&lt;p&gt;Esses testes são importantes também para observar a fluidez da leitura, identificar erros de configuração e, eventualmente, ajustar o conteúdo. Este post de teste é também uma oportunidade para analisar como o sistema lida com conteúdos um pouco mais longos, especialmente quando precisamos simular algo próximo de um post finalizado.&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>help</category>
      <category>developer</category>
    </item>
  </channel>
</rss>
