<?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: Izabelle Derrihú</title>
    <description>The latest articles on DEV Community by Izabelle Derrihú (@cakebelz).</description>
    <link>https://dev.to/cakebelz</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%2F787934%2F35421c01-b65b-49a0-be35-6c291de40852.jpg</url>
      <title>DEV Community: Izabelle Derrihú</title>
      <link>https://dev.to/cakebelz</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/cakebelz"/>
    <language>en</language>
    <item>
      <title>Uma prosa sobre Orientação a Objetos: Classes</title>
      <dc:creator>Izabelle Derrihú</dc:creator>
      <pubDate>Tue, 21 Jun 2022 22:42:02 +0000</pubDate>
      <link>https://dev.to/cakebelz/uma-prosa-sobre-orientacao-a-objetos-classes-8m8</link>
      <guid>https://dev.to/cakebelz/uma-prosa-sobre-orientacao-a-objetos-classes-8m8</guid>
      <description>&lt;p&gt;No &lt;a href="https://dev.to/cakebelz/uma-prosa-sobre-orientacao-a-objetos-45d1"&gt;último post&lt;/a&gt; entendemos o que é a Orientação a Objetos, o que é um objeto e que para que tenhamos sistemas úteis devemos aprender a manipulá-los. As classes são componentes fundamentais nesse momento.&lt;/p&gt;

&lt;p&gt;A primeira coisa que preciso te explicar é o conceito de &lt;strong&gt;instância&lt;/strong&gt;, ele me confundiu muito &lt;del&gt;e inclusive hoje em dia ainda me pego pesquisando sobre&lt;/del&gt;.&lt;br&gt;
Na orientação a objetos, chamamos o objeto de instância de uma classe. O problema aqui é o significado dessa palavra em português:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Yo-pjjpg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/acsbdvmlnpecfe719mzr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Yo-pjjpg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/acsbdvmlnpecfe719mzr.png" alt='Significado de Instância: "característica do que é iminente, do que está prestes a acontecer; iminência."' width="704" height="271"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Não sei pra você, mas pra mim NUNCA fez &lt;del&gt;e nunca fará&lt;/del&gt; sentido dizer que o objeto é uma "iminência" de uma classe.&lt;br&gt;
Acontece que "instância" nesse sentido veio (presume-se) de &lt;em&gt;instance&lt;/em&gt; no inglês, que significa basicamente "exemplo" ou "caso". &lt;/p&gt;

&lt;p&gt;Aí sim, faz sentido! Um objeto é um caso ou exemplo que é feito a partir de uma classe.&lt;/p&gt;

&lt;p&gt;A variável que recebe uma nova instanciação recebe todos os atributos e métodos da classe. Podemos dizer também que um objeto é a concretização de uma classe, que é, para todos os termos, um molde.&lt;/p&gt;

&lt;p&gt;Agora você já sabe que quando falamos em "instânciar uma classe" estamos falando em criar um objeto moldado por ela, que recebe todas as mesmas características iniciais.&lt;/p&gt;

&lt;p&gt;Show de bola, a classe é o molde do objeto. E o que tem na classe?&lt;br&gt;
A estrutura básica é de atributos e métodos.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Atributos são as características daquilo que estamos querendo exemplificar;&lt;/li&gt;
&lt;li&gt;Métodos são os meios pelos quais esses atributos serão computados; &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Muitos falam que os métodos são comportamentos, pois os exemplos usados denotam isso, mas não é uma explicação que case com o mundo real &lt;del&gt;na minha singela opinião&lt;/del&gt;. Por exemplo, uma classe cachorro teria o método &lt;em&gt;latir()&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TuG4QvpN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xfb2wepo50121a31tgkr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TuG4QvpN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xfb2wepo50121a31tgkr.png" alt="classe Cachorro com método latir" width="880" height="348"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Aqui, &lt;em&gt;pelo&lt;/em&gt; e &lt;em&gt;nome&lt;/em&gt; são atributos dessa classe, e realmente, latir é um comportamento de cachorro mas isso não existe no nosso cotidiano. O que queremos é cadastrar um cachorro e &lt;u&gt;não fazer ele latir&lt;/u&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jf40JzQR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://c.tenor.com/NUAA3XSSu-IAAAAC/spock.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jf40JzQR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://c.tenor.com/NUAA3XSSu-IAAAAC/spock.gif" alt="Spock star trek dizendo 'logical'" width="498" height="372"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Vamos então continuar com um exemplo mais aplicável na vida real, mesmo que muito simples. Eu vou usar &lt;a href="https://www.typescriptlang.org/"&gt;Typescript&lt;/a&gt; em todos os exemplos. Agora, não vou me ater muito às tipagens e retornos para não complicarmos, mas em breve começaremos a utilizá-lo de forma integral.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hBZ8781j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/znrxrlo2r418mv35ox8t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hBZ8781j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/znrxrlo2r418mv35ox8t.png" alt="Classe Aluno, com seus atributos e um método" width="880" height="530"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A classe Aluno possui os atributos &lt;em&gt;nome&lt;/em&gt;, &lt;em&gt;idade&lt;/em&gt; e &lt;em&gt;matricula&lt;/em&gt;, e o método &lt;em&gt;getAluno()&lt;/em&gt; que retorna um objeto com as informações. É uma estrutura simples, não?&lt;/p&gt;

&lt;p&gt;Quero chamar atenção para o &lt;em&gt;this&lt;/em&gt; &lt;del&gt;pois pode ser uma pedra no sapato se você exagera no overthinking como eu&lt;/del&gt;. Nesse caso, o &lt;em&gt;this&lt;/em&gt; é uma palavra-chave, ele é uma referência ao objeto ou classe que está em execução. Por exemplo, o atributo nome do aluno é referenciado como &lt;em&gt;this.nome&lt;/em&gt;. &lt;del&gt;é SÓ ISSO que você precisa saber agora, eu juro.&lt;/del&gt;&lt;/p&gt;

&lt;p&gt;Para instanciar a nossa classe e usar seu método &lt;em&gt;getAluno()&lt;/em&gt;, faríamos como no código abaixo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--x8j02_z_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yljet5hnrfpw56yw7d4w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--x8j02_z_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yljet5hnrfpw56yw7d4w.png" alt="Classe Aluno sendo instanciada e seu método getAluno sendo utilizado, retornando nome, idade e matrícula" width="880" height="840"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Perceba que os valores retornados por &lt;em&gt;getAluno()&lt;/em&gt; não foram enviados para nenhum método da nossa classe. Eu fiz isso para ensinar um outro integrante de uma classe, chamado constructor.&lt;/p&gt;

&lt;p&gt;O &lt;strong&gt;constructor&lt;/strong&gt; é um método especial chamado quando uma nova instância da classe é criada. Ou seja, quando fazemos &lt;em&gt;"const xpto = new Aluno();"&lt;/em&gt; o constructor será chamado.&lt;/p&gt;

&lt;p&gt;Existem outros motivos para o uso desse método, mas o mais comum é inicializar a classe já com valores para seus atributos, poupando tempo e código.&lt;/p&gt;

&lt;p&gt;Também podemos usá-lo como validação, pois se os valores não estiverem de acordo com o que nossos atributos esperam, a classe não é instanciada, você receberia um erro.&lt;/p&gt;

&lt;p&gt;Veja no código abaixo como a classe ficaria com um constructor, e como instanciaríamos ela. Agora sim, os valores retornados por &lt;em&gt;getAluno()&lt;/em&gt; fazem sentido, pois são os &lt;strong&gt;estados&lt;/strong&gt; mais atuais do objeto.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rUMoct7O--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zzso7qs258cjiyxsk83x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rUMoct7O--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zzso7qs258cjiyxsk83x.png" alt="Classe aluno com um constructor que recebe os valores que serão inicializados nos atributos" width="880" height="834"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sempre que instanciamos ou mudamos esses atributos com outros métodos mais específicos (que veremos à frente), estamos alterando o estado do objeto. Estado nada mais é do que os valores dados aos atributos da classe de acordo com os objetos criados a partir dela.&lt;/p&gt;

&lt;p&gt;Quando você envia "José" na instanciação da classe &lt;em&gt;Aluno&lt;/em&gt; para o objeto &lt;em&gt;alunoEnsinoMedio&lt;/em&gt;, o estado do atributo &lt;em&gt;nome&lt;/em&gt; desse objeto é "José". &lt;/p&gt;

&lt;p&gt;Cada instanciação é diferente, então cada objeto tem um estado diferente. &lt;del&gt;(a menos que, por algum motivo diabólico, você queira fazer dois objetos iguais vindo de duas instanciações diferentes, mas acho que você não é doido assim)&lt;/del&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ED-egcY1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pmdsixb5dh8cbu3w7pxd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ED-egcY1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pmdsixb5dh8cbu3w7pxd.png" alt="Instanciando um objeto novo com outros valores para os atributos da classe, e chamando o método getAluno" width="880" height="429"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Acho que esse post já ficou até grande para o propósito do blog, mas com a nossa classe Aluno nós já temos uma classe funcional, e espero que você tenha entendido o que é uma, pra que serve, e o que tem &lt;del&gt;e o que come&lt;/del&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4X0zFcVO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/http://4.bp.blogspot.com/-3PDYd5Jju0w/VPDWICcnWRI/AAAAAAAAMaw/tyx3mZb4Mys/s1600/Spok%252B1.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4X0zFcVO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/http://4.bp.blogspot.com/-3PDYd5Jju0w/VPDWICcnWRI/AAAAAAAAMaw/tyx3mZb4Mys/s1600/Spok%252B1.gif" alt="Spock levantando as sobrancelhas com cara de assustado" width="300" height="225"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>programming</category>
      <category>typescript</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Uma prosa sobre Orientação a Objetos!</title>
      <dc:creator>Izabelle Derrihú</dc:creator>
      <pubDate>Sun, 19 Jun 2022 14:11:23 +0000</pubDate>
      <link>https://dev.to/cakebelz/uma-prosa-sobre-orientacao-a-objetos-45d1</link>
      <guid>https://dev.to/cakebelz/uma-prosa-sobre-orientacao-a-objetos-45d1</guid>
      <description>&lt;p&gt;Orientação a Objetos é um tópico básico sobre programação, utilizado pela maioria das empresas e projetos (e que ironicamente continua sendo debatido).&lt;/p&gt;

&lt;p&gt;Apesar da fama, ela não é nenhuma rocket (ou enterprise) science.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--941Xy2eD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1vbjk7fmbizi5tkej1i1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--941Xy2eD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1vbjk7fmbizi5tkej1i1.png" alt="Painel de controle Star Trek enterprise" width="700" height="530"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Meu começo com a Orientação a Objetos&lt;/strong&gt; foi muito tranquilo, já que tive uma introdução em sala de aula no ensino médio. A didática era diferente da que era usada na faculdade, e a linguagem era PHP, o que ajudou bastante e eu só tenho a agradecer aos meus antigos professores.&lt;br&gt;
O único problema que eu tinha (e vejo novos programadores também terem) eram os termos usados. Muitas vezes uma explicação curta e simples é engrandecida por termos inutilmente complexos. Por isso resolvi começar a compartilhar meu conhecimento da forma que mais amo: Simples e descontraída.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mas afinal de contas, que é a Orientação a Objetos?
&lt;/h2&gt;

&lt;p&gt;A Programação Orientada a Objetos é um paradigma de programação.&lt;br&gt;
&lt;del&gt;Pronto. Acabou o post.&lt;/del&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Paradigma&lt;/em&gt; é basicamente um exemplo, modelo ou padrão. Alguns programadores ao longo dos anos 60 e 70 discutiam e tentavam implementar regras que facilitassem a escrita de código, o que culminou nesse paradigma (e em vários outros).&lt;/p&gt;

&lt;p&gt;Uma das explicações mais conhecidas é de que &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“A orientação a Objetos visa modelar o mundo real como objetos”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;del&gt;Explicação vaga, confusa e preguiçosa&lt;/del&gt; &lt;/p&gt;

&lt;p&gt;Descobri que podemos explicar da seguinte forma:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A Orientação a Objetos é um paradigma da programação que, a partir da abstração, modela entidades do mundo real como objetos, utilizando-se de três conceitos pilares: Encapsulamento, Herança e Polimorfismo.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Melhorou um pouco, vejamos... Uma &lt;strong&gt;entidade&lt;/strong&gt; é basicamente uma coisa. Uma pessoa, uma cadeira, um carro... Tudo isso pode ser modelado em forma de objeto.&lt;/p&gt;

&lt;p&gt;E a parte da &lt;strong&gt;abstração&lt;/strong&gt;? Bem, abstrair é basicamente enxugar alguma coisa ao máximo, para que se obtenha apenas aquilo que é extremamente necessário.&lt;br&gt;
Vamos pensar em um gato. Existem milhares de tipos de gato, ninguém nem conhece direito as raças felinas, porque gato é gato!&lt;br&gt;
Eu tenho uma frajolinha, mas convenhamos que para um sistema que cadastra gatinhos, nem todos serão preto e branco. Dessa forma precisamos abstrair as características da minha gata. &lt;br&gt;
O objeto gato vai ser composto de: Nome, Cor, Pelagem. &lt;br&gt;
&lt;del&gt;Pronto, abstraimos uma gata. A minha gata.&lt;/del&gt;&lt;/p&gt;

&lt;p&gt;No fim, esse objeto com javascript ficaria mais ou menos assim:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dUy2XPBQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/96teh4jfqn7b435l3mhp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dUy2XPBQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/96teh4jfqn7b435l3mhp.png" alt="Objeto gato, que possui nome, cor e pelagem, e é atribuído à constante catObject" width="880" height="361"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pô, aí ficou tranquilo. Só criar um objeto desse jeito aí abstraindo características e temos a famosa Orientação a Objetos, certo? Não, claro que não.&lt;/p&gt;

&lt;p&gt;Essa é a &lt;strong&gt;modelagem&lt;/strong&gt; do objeto gato, mas para um sistema funcional &lt;del&gt;e útil&lt;/del&gt; precisamos realizar operações com ele, como por exemplo computar quantos gatos tem um mesmo nome. Ou a porcentagem de gatos frajolas. E é aqui que entram &lt;strong&gt;a herança, o encapsulamento, o polimorfismo&lt;/strong&gt;, e a programação em si &lt;del&gt;porque vamos combinar, ainda não programamos nada!&lt;/del&gt;. &lt;/p&gt;

&lt;p&gt;Nos próximos posts trarei esses pilares, e entenderemos juntos como eles funcionam.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>programming</category>
      <category>typescript</category>
      <category>architecture</category>
    </item>
  </channel>
</rss>
