<?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: Klleriston Andrade</title>
    <description>The latest articles on DEV Community by Klleriston Andrade (@klleriston).</description>
    <link>https://dev.to/klleriston</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%2F1246955%2F755451eb-9b7f-4f00-9c42-b7b1004ebddc.jpg</url>
      <title>DEV Community: Klleriston Andrade</title>
      <link>https://dev.to/klleriston</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/klleriston"/>
    <language>en</language>
    <item>
      <title>Como passar no exame AWS CLF-C02</title>
      <dc:creator>Klleriston Andrade</dc:creator>
      <pubDate>Mon, 26 Jan 2026 02:25:33 +0000</pubDate>
      <link>https://dev.to/klleriston/como-passar-no-exame-aws-clf-c02-4356</link>
      <guid>https://dev.to/klleriston/como-passar-no-exame-aws-clf-c02-4356</guid>
      <description>&lt;p&gt;Como colecionador de badges e considerando que meu ambiente de trabalho atual faz uso extensivo da AWS, optei por realizar a certificação &lt;strong&gt;&lt;em&gt;AWS Certified Cloud Practitioner (CLF-C02)&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Observação inicial
&lt;/h2&gt;

&lt;p&gt;Aqui vai uma dica: caso você já compreenda os conceitos fundamentais de &lt;strong&gt;&lt;em&gt;cloud computing&lt;/em&gt;&lt;/strong&gt; e os problemas que esse paradigma se propõe a resolver, ou possua experiência prévia com outras plataformas de nuvem, você já parte de uma vantagem significativa.&lt;/p&gt;

&lt;h2&gt;
  
  
  Metodologia de Estudo
&lt;/h2&gt;

&lt;p&gt;Após ter sido aprovado nas certificações &lt;strong&gt;AZ-900&lt;/strong&gt; e &lt;strong&gt;AI-900&lt;/strong&gt; da Microsoft, ficou claro que certificações de nível introdutório seguem padrões bastante semelhantes de avaliação.&lt;/p&gt;

&lt;p&gt;De forma geral, todas cobram:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Conceitos fundamentais de computação em nuvem
&lt;/li&gt;
&lt;li&gt;Modelos de serviço (IaaS, PaaS, SaaS)
&lt;/li&gt;
&lt;li&gt;Serviços mais populares do provedor, como:

&lt;ul&gt;
&lt;li&gt;Computação
&lt;/li&gt;
&lt;li&gt;Bancos de dados relacionais e não relacionais
&lt;/li&gt;
&lt;li&gt;Filas e mensageria* &lt;/li&gt;
&lt;li&gt;Redes
&lt;/li&gt;
&lt;li&gt;Identidade e controle de acesso (IAM)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;A principal diferença entre os exames está na ênfase dada a determinados domínios, conforme a estratégia do provedor.&lt;/p&gt;

&lt;h2&gt;
  
  
  Estrutura do Exame
&lt;/h2&gt;

&lt;p&gt;Aqui temos diferenças entre provas de diferentes provedores. Na &lt;strong&gt;&lt;em&gt;AWS&lt;/em&gt;&lt;/strong&gt;, por exemplo, até o dia &lt;strong&gt;25/01/2025&lt;/strong&gt; estão sendo cobrados os seguintes domínios:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Domain 1 – Cloud Concepts (24%)&lt;/strong&gt; &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Domain 2 – Security and Compliance (30%)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Domain 3 – Cloud Technology and Services (34%)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Domain 4 – Billing, Pricing, and Support (12%)&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Conhecer essa distribuição permite priorizar os domínios com maior peso na pontuação final. Ou seja, dedique-se mais aos conceitos que se enquadram nesses domínios.&lt;/p&gt;

&lt;h2&gt;
  
  
  Como me preparar para a prova?
&lt;/h2&gt;

&lt;p&gt;A documentação oficial da &lt;strong&gt;&lt;em&gt;AWS&lt;/em&gt;&lt;/strong&gt; é uma boa forma de se preparar para o exame, mas caso você seja como eu e prefira vídeos (alguém basicamente lendo a documentação para você), recomendo os seguintes cursos: &lt;strong&gt;André Iacono&lt;/strong&gt; (conteúdo em português) ou &lt;strong&gt;Stephane Maarek&lt;/strong&gt; (conteúdo em inglês), ambos na Udemy, que apresentam cobertura adequada dos tópicos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Processo de Preparação
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Fase de Absorção:&lt;/strong&gt; leitura da documentação oficial ou curso estruturado
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fase de Consolidação:&lt;/strong&gt; anotações técnicas dos serviços principais (&lt;strong&gt;não pule esta etapa&lt;/strong&gt;)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fase de Validação:&lt;/strong&gt; simulados (simulado oficial da AWS, YouTube ou Exam Topics)&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Critério de Aprovação
&lt;/h2&gt;

&lt;p&gt;Uma taxa de acerto consistente ≥ 80% nos simulados indica prontidão para o exame real.&lt;br&gt;&lt;br&gt;
O tempo de preparação é variável, indo de dias a semanas, dependendo do nível de dedicação e do conhecimento prévio.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>aws</category>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>Idempotência, Potência e Métodos HTTP em REST</title>
      <dc:creator>Klleriston Andrade</dc:creator>
      <pubDate>Sun, 29 Dec 2024 20:05:42 +0000</pubDate>
      <link>https://dev.to/klleriston/idempotencia-potencia-e-metodos-http-em-rest-khn</link>
      <guid>https://dev.to/klleriston/idempotencia-potencia-e-metodos-http-em-rest-khn</guid>
      <description>&lt;p&gt;Em sistemas de grande porte, onde podem haver milhares ou até milhões de acessos simultâneos, garantir consistência e confiabilidade nas operações é imprescindível. Imagine um cenário em que cada cliente realiza um pagamento e, devido a uma falha de conexão, ou qualquer outro problema externo que dificulte a comunicação entre cliente x servidor, o mesmo pedido é enviado varias vezes, resultando assim em múltiplas cobranças causando insatisfação por parte do usuário.&lt;/p&gt;

&lt;p&gt;É exatamente nesses casos que entram os conceitos de &lt;strong&gt;idempotência&lt;/strong&gt; e &lt;strong&gt;potência&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Idempotência
&lt;/h2&gt;

&lt;p&gt;O conceito de idempotência diz respeito a uma operação que, quando executada várias vezes, sempre produz o mesmo estado final. Ou seja, independentemente do número de vezes que o usuário realize uma operação, o estado do sistema permanece consistente após a primeira execução bem-sucedida.&lt;/p&gt;

&lt;p&gt;Um exemplo clássico é a confirmação de um pedido:&lt;/p&gt;

&lt;p&gt;Se o cliente enviar a requisição para confirmar o pedido várias vezes, apenas a primeira tentativa será processada. As outras tentativas não terão efeito adicional.&lt;/p&gt;

&lt;p&gt;Exemplos: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pagamentos online: Garantir que uma transação não seja processada mais de uma vez.&lt;/li&gt;
&lt;li&gt;Confirmação de ações: Certificar-se de que uma ação, como envio de e-mail, não seja duplicada.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Potência
&lt;/h2&gt;

&lt;p&gt;Enquanto a idempotência está relacionada à repetição de uma operação, potência refere-se ao impacto que uma operação tem sobre o estado do recurso no servidor&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Operações potentes:&lt;/strong&gt; Modificam o estado do recurso (ex.: &lt;strong&gt;POST&lt;/strong&gt;, &lt;strong&gt;PUT&lt;/strong&gt;).&lt;br&gt;
&lt;strong&gt;Operações não potentes:&lt;/strong&gt; Não alteram o estado do recurso (ex.: &lt;strong&gt;GET&lt;/strong&gt;, &lt;strong&gt;HEAD&lt;/strong&gt;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Motivo:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Um método &lt;strong&gt;GET&lt;/strong&gt; apenas recupera informações de um recurso, sem alterar o estado.&lt;br&gt;
Um método &lt;strong&gt;POST&lt;/strong&gt; cria ou modifica um recurso, impactando o estado no servidor.&lt;/p&gt;

&lt;h2&gt;
  
  
  Chaves de Idempotência
&lt;/h2&gt;

&lt;p&gt;As chaves de idempotência são uma ferramenta essencial para garantir a segurança e a confiabilidade das operações. &lt;/p&gt;

&lt;p&gt;Uma chave de idempotência é um identificador único gerado pelo cliente e vai junto com uma requisição ao servidor. Pense em um rotulo exclusivo para cada operação que quer realizar&lt;/p&gt;

&lt;h3&gt;
  
  
  Como funciona ?
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Geração da Chave: Antes de enviar uma requisição, o cliente gera uma chave única&lt;/li&gt;
&lt;li&gt;Envio da Requisição: A chave é incluída no cabeçalho da requisição&lt;/li&gt;
&lt;li&gt;Processamento no Servidor: Se é a primeira vez que o servidor recebe essa chave, ele processa a requisição normalmente.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Se a mesma chave é recebida novamente, o servidor retorna o resultado da operação original, sem reprocessá-la&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Exemplo:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Imagine que você está fazendo um pagamento online:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Você clica em "Pagar" e seu aplicativo gera uma chave de idempotência (ex: "idempotencia-pagamento-123"). &lt;/li&gt;
&lt;li&gt;O aplicativo envia a requisição de pagamento com esta chave. &lt;/li&gt;
&lt;li&gt;Se, por algum problema de conexão, a requisição for enviada duas vezes, o servidor: &lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Processará apenas a primeira requisição.&lt;/li&gt;
&lt;li&gt;Para a segunda, retornará o resultado da primeira, evitando um pagamento duplicado.&lt;/li&gt;
&lt;/ul&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.amazonaws.com%2Fuploads%2Farticles%2Fcs8oagynu4h3ll85u58u.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.amazonaws.com%2Fuploads%2Farticles%2Fcs8oagynu4h3ll85u58u.png" alt="Esquema de processamento" width="749" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>braziliandevs</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Algoritmos e Big O notation</title>
      <dc:creator>Klleriston Andrade</dc:creator>
      <pubDate>Fri, 23 Feb 2024 19:01:14 +0000</pubDate>
      <link>https://dev.to/klleriston/algoritmos-e-big-o-notation-50id</link>
      <guid>https://dev.to/klleriston/algoritmos-e-big-o-notation-50id</guid>
      <description>&lt;p&gt;Olá a todos, eu sou o Klleriston, estudante de análise e desenvolvimento de sistemas pela FIAP, e estou animado em apresentar a vocês os conceitos de Big O e algoritmos.&lt;/p&gt;

&lt;p&gt;Ao longo deste texto, vou explorar conceitos sobre o assunto que são indispensáveis, seja para um desenvolvedor iniciante ou mais experiente.&lt;/p&gt;

&lt;h2&gt;
  
  
  Algoritmos
&lt;/h2&gt;

&lt;p&gt;Resumidamente, um algoritmo não passa de uma sequência finita de instruções para resolver determinado problema, seja matemático ou computacional.&lt;/p&gt;

&lt;p&gt;Podemos encontrar exemplos de algoritmos em muitas atividades do nosso cotidiano. Por exemplo, quando seguimos uma receita, estamos na verdade executando um algoritmo, um processo com passos determinados que nos leva a um resultado delicioso: um bolo, por exemplo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Big O
&lt;/h2&gt;

&lt;p&gt;Big O é uma notação para saber o quão eficaz é um algoritmo em relação ao espaço e tempo. Em poucas palavras, pode-se dizer que é uma forma de classificar o quanto aquele determinado algoritmo é escalável. Podemos categorizar o Big O em 6 níveis de complexidade:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;O(n) Complexidade linear&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;O(log n) Complexidade logarítmica&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;O(1) Complexidade constante&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;O(n log n) Complexidade log-linear&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;O(n^2): Complexidade quadrática&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;O(2^n): Complexidade exponencial&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Não irei entrar a fundo neste artigo sobre exemplos e definições sobre cada tipo de complexidade. Caso tenham interesse, eu recomendo o livro &lt;strong&gt;'Entendendo algoritmos - Aditya Y. Bhargava'&lt;/strong&gt; ou o vídeo do &lt;strong&gt;'Lucas Montano "Big O Notation: O Pesadelo do Programador Iniciante"'&lt;/strong&gt;. Ambos foram essenciais para o meu entendimento sobre o tema.&lt;/p&gt;

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

&lt;p&gt;Bom, neste artigo eu optei por trazer um conteúdo breve e resumido sobre um assunto que estou estudando agora. Gostaria que este artigo tenha despertado o interesse em algoritmos e na notação Big O.&lt;/p&gt;

&lt;p&gt;Como já disse antes, eu fortemente recomendo o livro &lt;strong&gt;'Entendendo algoritmos - Aditya Y. Bhargava'&lt;/strong&gt; e o vídeo do &lt;strong&gt;Lucas Montano 'Big O Notation: O Pesadelo do Programador Iniciante'&lt;/strong&gt; para aprofundar seu conhecimento.&lt;/p&gt;

&lt;p&gt;Se sentirem dificuldade em algo relacionado ao tema, ou se quiserem deixar um feedback e discutir mais sobre o assunto, sintam-se à vontade para deixar um comentário ou me chamar no Linkedin. Estou ansioso para continuar essa discussão.&lt;/p&gt;

&lt;p&gt;Obrigado pela atenção. Espero que você tenha achado este artigo útil.&lt;/p&gt;

&lt;h2&gt;
  
  
  Recomendações
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=GLKDo13920k" rel="noopener noreferrer"&gt;Lucas montano&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.amazon.com.br/Entendendo-Algoritmos-Ilustrado-Programadores-Curiosos/dp/8575225634/ref=sr_1_1?adgrpid=151025974313&amp;amp;dib=eyJ2IjoiMSJ9.2bcGWnm39oy1cLyMccaaYvGetXLzklT3uhHg1TDOEA9v1l9UDhGx_6vZZuNYsulC4Eaqs4sq7xVTFn0X-wDOt_4O2eZLLgORlOL3TRECGYmvM2VDG4xlbFHeQ4WKRSoXNP-hBMK5OQE1poNhDqRW9VNRB1fExTwQtgUXVHyfMCdlUS5am-bGgIQWS8xcSSkV7rfFG4cADDHU0B_neemuMIfFPULr5ZWxU3OvLX2HdwA.rAx6dD6TkEfAqWAfAI2OMT7WdaJsJENXiWoTcmfslqA&amp;amp;dib_tag=se&amp;amp;gclid=Cj0KCQiAoeGuBhCBARIsAGfKY7w1M3ZN3Tu9m8nNCM5XgRU3QNuN0sh-WMq1BHjP7lp3o7FmfEtDIOQaAj8GEALw_wcB&amp;amp;hvadid=660221240840&amp;amp;hvdev=c&amp;amp;hvlocphy=1001773&amp;amp;hvnetw=g&amp;amp;hvqmt=e&amp;amp;hvrand=498558224024267135&amp;amp;hvtargid=kwd-309166023971&amp;amp;hydadcr=1389_13490970&amp;amp;keywords=entendendo+algoritmos&amp;amp;qid=1708714794&amp;amp;s=books&amp;amp;sr=1-1" rel="noopener noreferrer"&gt;Entendendo Algoritmos&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>braziliandevs</category>
      <category>beginners</category>
      <category>programming</category>
      <category>algorithms</category>
    </item>
    <item>
      <title>SOLID para desenvolvedores iniciantes.</title>
      <dc:creator>Klleriston Andrade</dc:creator>
      <pubDate>Tue, 23 Jan 2024 17:46:40 +0000</pubDate>
      <link>https://dev.to/klleriston/solid-para-desenvolvedores-iniciantes-3m04</link>
      <guid>https://dev.to/klleriston/solid-para-desenvolvedores-iniciantes-3m04</guid>
      <description>&lt;p&gt;Antes de mais nada, precisamos definir o que, afinal, é &lt;strong&gt;SOLID&lt;/strong&gt; e por que ele é tão importante na &lt;strong&gt;Programação Orientada a Objetos (POO)&lt;/strong&gt;?&lt;/p&gt;

&lt;p&gt;Bem, &lt;strong&gt;SOLID&lt;/strong&gt; é um acrônimo, ou seja, uma sigla na qual cada letra corresponde a um dos cinco princípios de design de código. Esses princípios são utilizados para facilitar a compreensão, o desenvolvimento e a manutenção de software, ou seja, o famoso &lt;em&gt;Clean Code&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Acredito que a maioria de vocês já deve ter ouvido falar de &lt;strong&gt;Robert C. Martin&lt;/strong&gt;, mais conhecido no mundo do desenvolvimento como &lt;em&gt;Uncle Bob&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;A história da origem do &lt;strong&gt;SOLID&lt;/strong&gt; começou no final da década de 1980, enquanto &lt;em&gt;Uncle Bob&lt;/em&gt; discutia os princípios de design de software com outros usuários de uma rede social chamada USENET, com o objetivo de catalogar os mais importantes. Essa catalogação durou bastante tempo, mas, como foi dito em sua obra “&lt;em&gt;Clean Architecture&lt;/em&gt;” ou “Arquitetura Limpa”, Bob explica que, em 2004, seu amigo &lt;strong&gt;Michael Fathers&lt;/strong&gt; enviou um e-mail dizendo que, se reorganizasse esses princípios tão importantes para o desenvolvimento, as primeiras letras formariam o que conhecemos como &lt;strong&gt;SOLID&lt;/strong&gt; (sólido em português), e foi aí que nasceu o acrônimo.&lt;/p&gt;

&lt;p&gt;Sem mais delongas, vou explicar o que cada letra significa e demonstrar um exemplo que faça sentido.&lt;/p&gt;

&lt;h2&gt;
  
  
  Começamos com a letra S de &lt;strong&gt;Single Responsiblity Principle&lt;/strong&gt; (Principio da responsabilidade única)
&lt;/h2&gt;

&lt;p&gt;O primeiro princípio diz que uma classe deve ser especialista em apenas um assunto. Isto é, a classe precisa ter apenas uma função. Se mais de uma função for atribuída a ela, ou se estiver lidando com mais de uma responsabilidade, provavelmente o código precisa ser revisado, pois isso dificultará a realização de testes. Se o código estiver difícil de ser testado, então ele pode ser melhorado.&lt;/p&gt;

&lt;p&gt;Vou usar de exemplo aqui o anime "One Punch Man", sabemos que o Saitama tem uma única responsabilidade, derrotar monstros com um unico soco. Ele não se envolve em outras tarefas como por exemplo, liderar uma equipe ou planejar estratégias &lt;/p&gt;

&lt;p&gt;codigo em c# para exemplificar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;using System&lt;span class="p"&gt;;&lt;/span&gt;
public class Heroi
&lt;span class="o"&gt;{&lt;/span&gt;
    public string Nome &lt;span class="o"&gt;{&lt;/span&gt; get&lt;span class="p"&gt;;&lt;/span&gt; private &lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;
    public HeroiAnimeCombate&lt;span class="o"&gt;(&lt;/span&gt;string nome&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;{&lt;/span&gt;
        Nome &lt;span class="o"&gt;=&lt;/span&gt; nome&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
    public void DerrotarMonstroComUmSoco&lt;span class="o"&gt;()&lt;/span&gt;
    &lt;span class="o"&gt;{&lt;/span&gt;
        Console.WriteLine&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;$"{Nome} derrota o monstro com um único soco!"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

class Program
&lt;span class="o"&gt;{&lt;/span&gt;
    static void Main&lt;span class="o"&gt;()&lt;/span&gt;
    &lt;span class="o"&gt;{&lt;/span&gt;
        HeroiAnimeCombate saitama &lt;span class="o"&gt;=&lt;/span&gt; new Heroi&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Saitama"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        saitama.DerrotarMonstroComUmSoco&lt;span class="o"&gt;()&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  O de &lt;strong&gt;Open-Closed Principle&lt;/strong&gt; (Principio Aberto-fechado)
&lt;/h2&gt;

&lt;p&gt;Esse principio diz que um objeto ou entidade deve estar aberto a extensões porém fechado a modificações, O que quer dizer isso ? aberto e fechado ? bom, isso significa que um objeto deve estar apto a receber novos comportamentos e recursos porem ele não deve sofrer alteração em seu codigo fonte.&lt;/p&gt;

&lt;p&gt;por exemplo, dessa vez irei utilizar o mundo de "Naruto". O personagem Naruto é um otimo exemplo desse principio ja que ele é aberto para extensão, ou seja, consegue aprender muitos jutsus novos como rasengan e jutsu clone das sombras porem fechado para modificação pois em nenhum momento ele deixou de querer ser o hokage da vila. Seu objetivo continuou o mesmo.&lt;/p&gt;

&lt;p&gt;codigo em c# para exemplificar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;using System&lt;span class="p"&gt;;&lt;/span&gt;
using System.Collections.Generic&lt;span class="p"&gt;;&lt;/span&gt;

public interface IJutsu
&lt;span class="o"&gt;{&lt;/span&gt;
    void Executar&lt;span class="o"&gt;()&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

public class Rasengan : IJutsu
&lt;span class="o"&gt;{&lt;/span&gt;
    public void Executar&lt;span class="o"&gt;()&lt;/span&gt;
    &lt;span class="o"&gt;{&lt;/span&gt;
        Console.WriteLine&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Executando Rasengan!"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

public class JutsuCloneSombras : IJutsu
&lt;span class="o"&gt;{&lt;/span&gt;
    public void Executar&lt;span class="o"&gt;()&lt;/span&gt;
    &lt;span class="o"&gt;{&lt;/span&gt;
        Console.WriteLine&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Executando Jutsu Clone das Sombras!"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

public class Ninja
&lt;span class="o"&gt;{&lt;/span&gt;
    public string Nome &lt;span class="o"&gt;{&lt;/span&gt; get&lt;span class="p"&gt;;&lt;/span&gt; private &lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;
    private List&amp;lt;IJutsu&amp;gt; jutsus&lt;span class="p"&gt;;&lt;/span&gt;

    public Ninja&lt;span class="o"&gt;(&lt;/span&gt;string nome&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;{&lt;/span&gt;
        Nome &lt;span class="o"&gt;=&lt;/span&gt; nome&lt;span class="p"&gt;;&lt;/span&gt;
        jutsus &lt;span class="o"&gt;=&lt;/span&gt; new List&amp;lt;IJutsu&amp;gt;&lt;span class="o"&gt;()&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    public void AprenderNovoJutsu&lt;span class="o"&gt;(&lt;/span&gt;IJutsu novoJutsu&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;{&lt;/span&gt;
        jutsus.Add&lt;span class="o"&gt;(&lt;/span&gt;novoJutsu&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    public void ExecutarJutsus&lt;span class="o"&gt;()&lt;/span&gt;
    &lt;span class="o"&gt;{&lt;/span&gt;
        Console.WriteLine&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;$"{Nome} está executando seus jutsus:"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        foreach &lt;span class="o"&gt;(&lt;/span&gt;var jutsu &lt;span class="k"&gt;in &lt;/span&gt;jutsus&lt;span class="o"&gt;)&lt;/span&gt;
        &lt;span class="o"&gt;{&lt;/span&gt;
            jutsu.Executar&lt;span class="o"&gt;()&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

class Program
&lt;span class="o"&gt;{&lt;/span&gt;
    static void Main&lt;span class="o"&gt;()&lt;/span&gt;
    &lt;span class="o"&gt;{&lt;/span&gt;
        Ninja naruto &lt;span class="o"&gt;=&lt;/span&gt; new Ninja&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Naruto"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        naruto.AprenderNovoJutsu&lt;span class="o"&gt;(&lt;/span&gt;new Rasengan&lt;span class="o"&gt;())&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        naruto.AprenderNovoJutsu&lt;span class="o"&gt;(&lt;/span&gt;new JutsuCloneSombras&lt;span class="o"&gt;())&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        naruto.ExecutarJutsus&lt;span class="o"&gt;()&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;L - Liskov Substitution Principle&lt;/strong&gt; (Princípio de substituição de Liskov)
&lt;/h2&gt;

&lt;p&gt;O princípio de Liskov diz que uma classe derivada deve ser substituível por sua classe base, ou seja, basicamente, levando para a questão de herança em OO (Orientação a Objetos), a classe filha deve desempenhar as mesmas funções da classe pai.&lt;/p&gt;

&lt;p&gt;Vamos usar como exemplo o anime "My Hero Academy", onde todos os estudantes da U.A. School podem ser substituídos numa luta contra vilões (obviamente, uns vão desempenhar melhor que outros, mas isso não vem ao caso), porque todos eles foram treinados para se tornarem heróis, ou seja, herdam da classe pai "Herói".&lt;/p&gt;

&lt;p&gt;codigo em c# para exemplificar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;using System&lt;span class="p"&gt;;&lt;/span&gt;

public class Heroi
&lt;span class="o"&gt;{&lt;/span&gt;
    public string Nome &lt;span class="o"&gt;{&lt;/span&gt; get&lt;span class="p"&gt;;&lt;/span&gt; private &lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;

    public Heroi&lt;span class="o"&gt;(&lt;/span&gt;string nome&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;{&lt;/span&gt;
        Nome &lt;span class="o"&gt;=&lt;/span&gt; nome&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    public virtual void RealizarAcaoHeroica&lt;span class="o"&gt;()&lt;/span&gt;
    &lt;span class="o"&gt;{&lt;/span&gt;
        Console.WriteLine&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;$"{Nome} está realizando uma ação heroica!"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

public class EstudanteUA : Heroi
&lt;span class="o"&gt;{&lt;/span&gt;
    public EstudanteUA&lt;span class="o"&gt;(&lt;/span&gt;string nome&lt;span class="o"&gt;)&lt;/span&gt; : base&lt;span class="o"&gt;(&lt;/span&gt;nome&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    public override void RealizarAcaoHeroica&lt;span class="o"&gt;()&lt;/span&gt;
    &lt;span class="o"&gt;{&lt;/span&gt;
        base.RealizarAcaoHeroica&lt;span class="o"&gt;()&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        Console.WriteLine&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;$"{Nome} está usando seus poderes de estudante para complementar a ação heroica!"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

class Program
&lt;span class="o"&gt;{&lt;/span&gt;
    static void Main&lt;span class="o"&gt;()&lt;/span&gt;
    &lt;span class="o"&gt;{&lt;/span&gt;
        Heroi heroi &lt;span class="o"&gt;=&lt;/span&gt; new EstudanteUA&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Midoriya"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        heroi.RealizarAcaoHeroica&lt;span class="o"&gt;()&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  I - &lt;strong&gt;Interface Segregation Principle&lt;/strong&gt; (Principio da segregação de interface)
&lt;/h2&gt;

&lt;p&gt;O princípio de segregação de interface diz que uma classe não deve ser forçada a implementar interfaces e métodos que não irá utilizar.&lt;/p&gt;

&lt;p&gt;Basicamente, esse princípio diz que criar interfaces mais específicas é melhor do que genéricas, pois nem todas as funções podem ser realizadas e isso causaria um trabalho a mais.&lt;/p&gt;

&lt;p&gt;Como exemplo, posso citar ‘One Piece’, onde o bando do Chapéu de Palha é um exemplo do princípio de segregação de interface. Cada membro da tripulação tem habilidades e funções específicas e interage apenas com as partes de seu sistema (navio) que são relevantes para sua função.&lt;/p&gt;

&lt;p&gt;Por exemplo, Sanji é o cozinheiro e sua principal interface é a cozinha. Ele não precisa saber navegar e nem lutar com espadas, pois isso é dever de Nami e Zoro, que seguem as devidas interfaces&lt;/p&gt;

&lt;p&gt;codigo em c# para exemplificar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;using System&lt;span class="p"&gt;;&lt;/span&gt;

public interface IHabilidadesEspecificas
&lt;span class="o"&gt;{&lt;/span&gt;
    void RealizarHabilidadeEspecifica&lt;span class="o"&gt;()&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

public class Sanji : IHabilidadesEspecificas
&lt;span class="o"&gt;{&lt;/span&gt;
    public void RealizarHabilidadeEspecifica&lt;span class="o"&gt;()&lt;/span&gt;
    &lt;span class="o"&gt;{&lt;/span&gt;
        Console.WriteLine&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Sanji está cozinhando!"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

public class Nami : IHabilidadesEspecificas
&lt;span class="o"&gt;{&lt;/span&gt;
    public void RealizarHabilidadeEspecifica&lt;span class="o"&gt;()&lt;/span&gt;
    &lt;span class="o"&gt;{&lt;/span&gt;
        Console.WriteLine&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Nami está navegando!"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

public class Zoro : IHabilidadesEspecificas
&lt;span class="o"&gt;{&lt;/span&gt;
    public void RealizarHabilidadeEspecifica&lt;span class="o"&gt;()&lt;/span&gt;
    &lt;span class="o"&gt;{&lt;/span&gt;
        Console.WriteLine&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Zoro está duelando!"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

public class TripulacaoChapeuDePalha
&lt;span class="o"&gt;{&lt;/span&gt;
    private IHabilidadesEspecificas membroTripulacao&lt;span class="p"&gt;;&lt;/span&gt;

    public void DefinirMembroDaTripulacao&lt;span class="o"&gt;(&lt;/span&gt;IHabilidadesEspecificas membro&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;{&lt;/span&gt;
        membroTripulacao &lt;span class="o"&gt;=&lt;/span&gt; membro&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;


    public void RealizarAcaoTripulacao&lt;span class="o"&gt;()&lt;/span&gt;
    &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;membroTripulacao &lt;span class="o"&gt;!=&lt;/span&gt; null&lt;span class="o"&gt;)&lt;/span&gt;
            membroTripulacao.RealizarHabilidadeEspecifica&lt;span class="o"&gt;()&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;else
            &lt;/span&gt;Console.WriteLine&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Sem membro definido na tripulação."&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

class Program
&lt;span class="o"&gt;{&lt;/span&gt;
    static void Main&lt;span class="o"&gt;()&lt;/span&gt;
    &lt;span class="o"&gt;{&lt;/span&gt;
        TripulacaoChapeuDePalha tripulacao &lt;span class="o"&gt;=&lt;/span&gt; new TripulacaoChapeuDePalha&lt;span class="o"&gt;()&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        tripulacao.DefinirMembroDaTripulacao&lt;span class="o"&gt;(&lt;/span&gt;new Sanji&lt;span class="o"&gt;())&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        tripulacao.RealizarAcaoTripulacao&lt;span class="o"&gt;()&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        tripulacao.DefinirMembroDaTripulacao&lt;span class="o"&gt;(&lt;/span&gt;new Nami&lt;span class="o"&gt;())&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        tripulacao.RealizarAcaoTripulacao&lt;span class="o"&gt;()&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        tripulacao.DefinirMembroDaTripulacao&lt;span class="o"&gt;(&lt;/span&gt;new Zoro&lt;span class="o"&gt;())&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        tripulacao.RealizarAcaoTripulacao&lt;span class="o"&gt;()&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  D - &lt;strong&gt;Dependency Inversion Principle&lt;/strong&gt; (Principio da inversão da dependência)
&lt;/h2&gt;

&lt;p&gt;O princípio de inversão de dependência afirma que módulos de alto nível devem depender de módulos de baixo nível por meio de abstrações, e não de implementações concretas.&lt;/p&gt;

&lt;p&gt;Em outras palavras, o conceito diz que a classes de alto nível deve depender de interfaces ou classes abstratas, e não de classes concretas.&lt;/p&gt;

&lt;p&gt;Um anime que faz bastante sentido ser usado como exemplo é FullMetal Alchemist. No anime, os irmãos Elric estão em busca da pedra filosofal, pra isso, eles precisam aprender alquimia avançada. Eles dependem da alquimia para atingir seus objetivos, mas não se importam com a implementação específica dela. Eles só precisam saber que a alquimia pode ajudá-los.&lt;/p&gt;

&lt;p&gt;A alquimia é uma abstração que representa a capacidade de transmutar a matéria. A implementação pode variar, porém a abstração permanece a mesma.&lt;/p&gt;

&lt;p&gt;codigo em c# para exemplificar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;using System&lt;span class="p"&gt;;&lt;/span&gt;

// Abstração
public interface IAlquimia
&lt;span class="o"&gt;{&lt;/span&gt;
    void Transmutar&lt;span class="o"&gt;()&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

// Implementação
public class AlquimiaAvancada : IAlquimia
&lt;span class="o"&gt;{&lt;/span&gt;
    public void Transmutar&lt;span class="o"&gt;()&lt;/span&gt;
    &lt;span class="o"&gt;{&lt;/span&gt;
        Console.WriteLine&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Realizando transmutação avançada..."&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

// Classe de alto nível dependendo da abstração
public class BuscaPedraFilosofal
&lt;span class="o"&gt;{&lt;/span&gt;
    private &lt;span class="nb"&gt;readonly &lt;/span&gt;IAlquimia alquimia&lt;span class="p"&gt;;&lt;/span&gt;

    public BuscaPedraFilosofal&lt;span class="o"&gt;(&lt;/span&gt;IAlquimia alquimia&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;{&lt;/span&gt;
        this.alquimia &lt;span class="o"&gt;=&lt;/span&gt; alquimia&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    public void RealizarMissao&lt;span class="o"&gt;()&lt;/span&gt;
    &lt;span class="o"&gt;{&lt;/span&gt;
        Console.WriteLine&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Iniciando missão para encontrar a pedra filosofal."&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        alquimia.Transmutar&lt;span class="o"&gt;()&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        Console.WriteLine&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Missão concluída."&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

class Program
&lt;span class="o"&gt;{&lt;/span&gt;
    static void Main&lt;span class="o"&gt;()&lt;/span&gt;
    &lt;span class="o"&gt;{&lt;/span&gt;
        //a classe de alto nível depende da abstração &lt;span class="o"&gt;(&lt;/span&gt;IAlquimia&lt;span class="o"&gt;)&lt;/span&gt;, não da implementação concreta
        IAlquimia alquimiaAvancada &lt;span class="o"&gt;=&lt;/span&gt; new AlquimiaAvancada&lt;span class="o"&gt;()&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        BuscaPedraFilosofal missao &lt;span class="o"&gt;=&lt;/span&gt; new BuscaPedraFilosofal&lt;span class="o"&gt;(&lt;/span&gt;alquimiaAvancada&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        missao.RealizarMissao&lt;span class="o"&gt;()&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

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

&lt;/div&gt;



</description>
    </item>
    <item>
      <title>Por que um desenvolvedor precisa aprender sobre o modelo TCP/IP ?</title>
      <dc:creator>Klleriston Andrade</dc:creator>
      <pubDate>Mon, 08 Jan 2024 19:17:06 +0000</pubDate>
      <link>https://dev.to/klleriston/por-que-um-desenvolvedor-precisa-aprender-sobre-o-modelo-tcpip--4nkj</link>
      <guid>https://dev.to/klleriston/por-que-um-desenvolvedor-precisa-aprender-sobre-o-modelo-tcpip--4nkj</guid>
      <description>&lt;p&gt;Há muitas razões para aprender, mesmo que o básico sobre protocolos de redes. Já que 90% do mercado hoje é focado em web, esse conhecimento se torna não apenas relevante, mas indispensável para qualquer desenvolvedor. Nesse artigo, trarei o básico sobre modelo TCP/IP, desde suas camadas até a aplicação prática no desenvolvimento web.&lt;/p&gt;

&lt;p&gt;Para começo de conversa, a estrutura da internet é construída sobre o modelo TCP/IP. Entender esse modelo ajuda na compreensão de como os dados são transmitidos (cliente x servidor).&lt;/p&gt;

&lt;h2&gt;
  
  
  Mas qual a diferença entre HTTP(s) para o tcp/ip e qual a relação entre eles?
&lt;/h2&gt;

&lt;p&gt;O HTTP/HTTPs utilizam do modelo TCP/IP na camada de transporte (vou explicar logo mais) para estabelecer conexão entre clientes e servidores.&lt;/p&gt;

&lt;p&gt;Basicamente, o TCP/IP fornece a infraestrutura para o transporte, enquanto o HTTP(s) especificam como os dados devem ser formatados e transferidos.&lt;/p&gt;

&lt;p&gt;Pense que a relação deles seja uma conversa entre dois amigos que estão enviando cartas um para o outro.&lt;/p&gt;

&lt;p&gt;Imagine que o TCP/IP é como o correio, que cuida do roteamento, da entrega e da confirmação recebida. Agora o HTTP(s) como o conteúdo da carta com informações específicas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Camadas do modelo TCP/IP
&lt;/h2&gt;

&lt;p&gt;O modelo TCP/IP é composto por quatro camadas, sendo elas: acesso de rede, internet, transporte e aplicação. Para melhor entendimento, imagine cada camada como um andar de um prédio, cada uma desempenha uma função crucial no processo de comunicação.&lt;/p&gt;

&lt;p&gt;Camada de acesso:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Responsável pela transmissão de dados entre dispositivos em uma mesma rede local.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Camada de internet:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lida com o roteamento de pacotes de dados entre diferentes redes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Camada de transporte:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Aqui é onde reside o TCP (Transmission Control Protocol) e o UDP (User Datagram Protocol), sendo o TCP responsável pela confiabilidade na transmissão.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Camada de aplicação:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Engloba protocolos de nível de aplicação, como já ditos anteriormente, HTTP, HTTP(s). Existem outros também, como por exemplo o FTP e o SMTP, mas não abordaremos eles nesse artigo.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Como o desenvolvimento é impactado usando o modelo TCP/IP?
&lt;/h2&gt;

&lt;p&gt;Compreender como as camadas interagem é crucial para o desenvolvimento web. Ao criar aplicações, os desenvolvedores interagem principalmente com a camada de aplicação, utilizando o HTTP e o HTTPS.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que são sockets? (Sockets Programming)
&lt;/h2&gt;

&lt;p&gt;Sockets são uma interface de programação (API) que fornece um mecanismo para a comunicação entre processos em diferentes dispositivos, seja na mesma máquina ou em máquinas remotas.&lt;br&gt;
Os sockets permitem que programas troquem dados e informações de maneira bidirecional, estabelecendo conexão entre cliente x servidor.&lt;/p&gt;

&lt;p&gt;Há dois tipos de sockets, os sockets de fluxo (TCP) e sockets de datagrama (UDP).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sockets de fluxo garantem uma transmissão confiável de dados, assegurando que os dados sejam entregues na ordem correta e sem perda.&lt;/li&gt;
&lt;li&gt;Sockets de datagrama (UDP) oferecem uma comunicação mais leve, sem garantias de entrega ou ordem. (São úteis para aplicações onde a perda de pacotes é aceitável, como por exemplo streams ou jogos online).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Segurança com o modelo TCP/IP
&lt;/h2&gt;

&lt;p&gt;O modelo TCP/IP é essencial para entender as práticas de segurança na web. Aspectos como criptografia em camadas de transporte (HTTPS), firewalls na camada de internet e boas práticas na camada de aplicação são fundamentais para proteger aplicações contra ameaças.&lt;/p&gt;

&lt;h2&gt;
  
  
  Criptografia em camadas de transporte:
&lt;/h2&gt;

&lt;p&gt;A criptografia em camadas de transporte, como TLS/SSL, é uma prática de segurança que envolve a aplicação de técnicas criptográficas para proteger a confidencialidade dos dados durante a transmissão. Utilizando um protocolo seguro na camada de transporte (geralmente sobre o TCP), a criptografia assegura que as informações transmitidas entre cliente e servidor permaneçam privadas e seguras contra interceptação.&lt;/p&gt;

&lt;h2&gt;
  
  
  Firewalls:
&lt;/h2&gt;

&lt;p&gt;Os firewalls são dispositivos ou softwares que monitoram e controlam o tráfego de rede com base em regras predefinidas. Essa medida de segurança é implementada em diferentes camadas do modelo TCP/IP, incluindo a camada de Internet e a camada de Aplicação. Os firewalls ajudam a prevenir acessos não autorizados, filtrar tráfego malicioso e proteger contra ameaças externas, contribuindo para a segurança global de uma rede ou sistema.&lt;/p&gt;

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

&lt;p&gt;Dominar o modelo TCP/IP ou pelo menos saber o básico é essencial para qualquer desenvolvedor que almeje trabalhar com web. Essa compreensão facilita o desenvolvimento de aplicações eficientes e seguras.&lt;/p&gt;

&lt;h2&gt;
  
  
  Referencias
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.cisco.com/c/pt_br/support/docs/ip/routing-information-protocol-rip/13769-5.html" rel="noopener noreferrer"&gt;CISCO - Visão geral sobre TCP/IP&lt;/a&gt;&lt;br&gt;
&lt;a href="https://devschannel.com/tcp-ip/introducao-tcp-ip" rel="noopener noreferrer"&gt;DevChannel - Introdução TCP/IP&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.proeminente.com.br/blog/post/mundo/modelo-de-rede-tcp-ip" rel="noopener noreferrer"&gt;Proeminente - Modelo de redes TCP/IP&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.ibm.com/docs/pt-br/i/7.5?topic=communications-socket-programming" rel="noopener noreferrer"&gt;IBM - Sockets&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.cisco.com/c/pt_br/products/security/firewalls/what-is-a-firewall.html#~tipos-de-firewall" rel="noopener noreferrer"&gt;CISCO - Firewalls&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
