<?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>Forem: Daniel Moreto</title>
    <description>The latest articles on Forem by Daniel Moreto (@zokaibr).</description>
    <link>https://forem.com/zokaibr</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%2F646026%2Fa949c045-7c75-4bfd-bf77-57d385bed18f.jpg</url>
      <title>Forem: Daniel Moreto</title>
      <link>https://forem.com/zokaibr</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/zokaibr"/>
    <language>en</language>
    <item>
      <title>Orientação a Objetos com Ruby (parte 3) - Mais sobre métodos</title>
      <dc:creator>Daniel Moreto</dc:creator>
      <pubDate>Tue, 19 Sep 2023 11:08:41 +0000</pubDate>
      <link>https://forem.com/zokaibr/orientacao-a-objetos-com-ruby-parte-3-mais-sobre-metodos-jgh</link>
      <guid>https://forem.com/zokaibr/orientacao-a-objetos-com-ruby-parte-3-mais-sobre-metodos-jgh</guid>
      <description>&lt;p&gt;Fala comiigo!!&lt;/p&gt;

&lt;p&gt;Dando continuidade à nossa série de POO (Programação Orientada a Objetos) com Ruby, nessa parte vamos nos aprofundar mais nos métodos, passando por alguns métodos especiais e métodos estáticos na Orientação a Objetos e como o Ruby lida com cada um deles.&lt;/p&gt;

&lt;p&gt;Pra você que está chegando neste post, o código que escreveremos aqui parte da branch &lt;code&gt;parte_02&lt;/code&gt; que foi construído no post anterior e está nesse link:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/dfmoreto/dev_to-poo_ruby/tree/parte_02" rel="noopener noreferrer"&gt;https://github.com/dfmoreto/dev_to-poo_ruby/tree/parte_02&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Construção de Objetos
&lt;/h2&gt;

&lt;p&gt;No post anterior, nós vimos como construir um objeto. Por exemplo a comanda:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;minha_comanda&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Comanda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Lembrando que o objeto tem um nome mais chique que é &lt;strong&gt;instância&lt;/strong&gt; e que o ato de criar um objeto também pode ser chamado de &lt;strong&gt;instanciar&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Toda vez que este método &lt;code&gt;new&lt;/code&gt; é chamado, ele cria o objeto e chama o método &lt;code&gt;initialize&lt;/code&gt; da Classe para que o objeto possa ser configurado. Este método é um tipo de método especial que chamamos de &lt;em&gt;construtor&lt;/em&gt; e mesmo que não tenhamos declarado esse método na nossa classe &lt;strong&gt;Comanda&lt;/strong&gt;, o &lt;code&gt;Comanda.new&lt;/code&gt; funcionou porque todas as classes possuem esse método de maneira implícita.&lt;/p&gt;

&lt;p&gt;Vamos lá na classe &lt;strong&gt;Comanda&lt;/strong&gt; e adicione o seguinte:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Comanda&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;initialize&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;numero&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;numero&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Repare que o método está vazio, ele não está fazendo nada realmente útil. É exatamente desta forma que &lt;em&gt;initialize&lt;/em&gt; existe de maneira implícita: vazio. Nos posts futuros nós vamos entender como ele recebe esse método de &lt;em&gt;maneira implícita&lt;/em&gt; mas por hora podemos assumir que ele sempre esteve ai.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pra que serve um método construtor?
&lt;/h3&gt;

&lt;p&gt;Acima nós declaramos ele vazio, mas o &lt;em&gt;método construtor&lt;/em&gt; tem uma função importante. É nele que nós podemos informar os valores com os quais queremos que nossos objetos sejam criados.&lt;/p&gt;

&lt;p&gt;Vamos ao exemplo da Comanda: ela tem os atributos &lt;strong&gt;numero&lt;/strong&gt;, &lt;strong&gt;atendente&lt;/strong&gt;, &lt;strong&gt;mesa&lt;/strong&gt; e &lt;strong&gt;itens&lt;/strong&gt;. Enquanto não atribuímos valor nenhum para estes atributos, eles estão &lt;strong&gt;vazios&lt;/strong&gt;, sem nenhum valor. Para ser mais exato estão com valores nulos (que no Ruby é representado pelo &lt;strong&gt;nil&lt;/strong&gt;).&lt;/p&gt;

&lt;p&gt;Aqui podemos fazer umas perguntas interessantes. Uma Comanda pode ser aberta, ou passar a existir, sem um número? E sem a mesa? E sem uma pessoa que atenda? E sem item nenhum?&lt;/p&gt;

&lt;p&gt;Sem item nenhum até que vai, porque no começo realmente não haverá itens, mas ainda assim não é legal que deixemos o atributo &lt;strong&gt;item&lt;/strong&gt; nulo. Porém sem um número, sem uma mesa e sem atendente, acredito que não faça muito sentido. No nosso caso, o propósito de existir de uma &lt;strong&gt;Comanda&lt;/strong&gt; é ter um número, uma mesa que ela representa e quem é a pessoa atendente. Ela tem uma DEPENDÊNCIA desses dados existirem.&lt;/p&gt;

&lt;h3&gt;
  
  
  Alterando o Construtor da Comanda
&lt;/h3&gt;

&lt;p&gt;Se uma &lt;strong&gt;Comanda&lt;/strong&gt; não deveria existir sem um número, sem uma mesa e sem uma pessoa que atenda, podemos &lt;strong&gt;exigir&lt;/strong&gt; que ela só seja instanciada com o &lt;strong&gt;número&lt;/strong&gt;, com a &lt;strong&gt;mesa&lt;/strong&gt; e com &lt;strong&gt;atendente&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Pra fazer isso, vamos alterar o método &lt;em&gt;initialize&lt;/em&gt; que declaramos antes pra esse:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Comanda&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;initialize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;numero&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;mesa&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;atendente&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="vi"&gt;@numero&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;numero&lt;/span&gt;
    &lt;span class="vi"&gt;@mesa&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;mesa&lt;/span&gt;
    &lt;span class="vi"&gt;@atendente&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;atendente&lt;/span&gt;
    &lt;span class="vi"&gt;@itens&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;numero&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;numero&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Repare que agora o método está esperando um argumento para o &lt;strong&gt;numero&lt;/strong&gt;, outro para a &lt;strong&gt;mesa&lt;/strong&gt; e um terceito para &lt;strong&gt;atendente&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Se a gente for tentar executar o código (no README do repositório tem como fazer isso), uma exceção como essa será levantada:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;main.rb:2:in `initialize': wrong number of arguments (given 0, expected 3) (ArgumentError)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Talvez no seu código não esteja apontando pra linha 2 do arquivo &lt;em&gt;main.rb&lt;/em&gt; (&lt;code&gt;main.rb:2&lt;/code&gt;), mas o erro será o mesmo.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Este erro está nos informando que o método &lt;em&gt;initialize&lt;/em&gt; está recebendo um número errado de argumentos, que 0 argumentos foram passados e ele espera que sejam enviados 3.&lt;/p&gt;

&lt;p&gt;Lembra que eu falei que quando chamamos &lt;strong&gt;Comanda.new&lt;/strong&gt; para construir o objeto, ele chama o método &lt;em&gt;initialize&lt;/em&gt;? Como nosso &lt;em&gt;initialize&lt;/em&gt; agora está definido com 3 parâmetros, o &lt;strong&gt;new&lt;/strong&gt; também precisa ser chamado com 3.&lt;/p&gt;

&lt;p&gt;Bora alterar a instanciação da &lt;strong&gt;Comanda&lt;/strong&gt; para enviar agora o número, a mesa e a atendente. Onde estava:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;minha_comanda&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Comanda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;
&lt;span class="n"&gt;minha_comanda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;numero&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5421&lt;/span&gt;
&lt;span class="n"&gt;minha_comanda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;atendente&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"Maria"&lt;/span&gt;
&lt;span class="n"&gt;minha_comanda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;mesa&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;17&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora podemos colocar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;minha_comanda&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Comanda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5421&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;17&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'Maria'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Se voltarmos a executar o código Ruby, teremos o resultado novamente sem erros:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Número: 5421 | Atendente: Maria | Mesa: 17 | Itens: Café pingado,Pão de queijo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Não vamos mexer nos itens por ora, só nos interessa por enquanto que na instanciação ele receba um &lt;em&gt;array&lt;/em&gt; vazio.&lt;/p&gt;

&lt;h2&gt;
  
  
  Métodos de Escrita e Leitura
&lt;/h2&gt;

&lt;p&gt;É importante que uma classe proteja o livre acesso aos seus atributos. Especificamente no Ruby isso já vem por padrão, tanto que criamos métodos que os manipulam.&lt;/p&gt;

&lt;p&gt;Olhando por um ponto de vista de manter os seus atributos &lt;em&gt;encapsulados&lt;/em&gt; (é um conceito que logo vamos ver) dentro dela, os métodos são uma estratégias interessante, já que com os métodos a classe é capaz de decidir como essa alteração vai ocorrer.&lt;/p&gt;

&lt;p&gt;No caso da &lt;strong&gt;Comanda&lt;/strong&gt;, nós já criamos métodos deste tipo mesmo sem perceber.&lt;/p&gt;

&lt;p&gt;Os métodos de escrita são chamados de &lt;em&gt;Setters&lt;/em&gt;, que utilizamos para atribuir algum valor num atributo. Repare que nosso código contém métodos que fazem isso, e eles tem um &lt;em&gt;=&lt;/em&gt; no final e são eles: &lt;code&gt;numero=&lt;/code&gt;, &lt;code&gt;atendente=&lt;/code&gt;, &lt;code&gt;mesa=&lt;/code&gt; e &lt;code&gt;itens=&lt;/code&gt;. Este são métodos &lt;em&gt;Setters&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Os relacionados a leitura são os &lt;em&gt;Getters&lt;/em&gt;. Ou seja, são criados quando queremos disponibilizar a leitura de algum atributo. Ele simplesmente retorna o valor do atributo. No caso dos &lt;em&gt;Getters&lt;/em&gt; eles não tem nenhum caractere especial no nome, mas olhando o corpo do método você é capaz de inferir. Temos: &lt;code&gt;numero&lt;/code&gt;, &lt;code&gt;mesa&lt;/code&gt;, &lt;code&gt;atendente&lt;/code&gt; e &lt;code&gt;itens&lt;/code&gt;. O método &lt;code&gt;fechar&lt;/code&gt; não é um &lt;em&gt;Getter&lt;/em&gt; porque ele não tem como objetivo único retornar o valor de um atributo.&lt;/p&gt;

&lt;h3&gt;
  
  
  Enxugando o código
&lt;/h3&gt;

&lt;p&gt;Como no Ruby o único jeito de acessar os atributos de um objeto é por meio dos métodos, isso faz com que obrigatoriamente precisemos dos &lt;em&gt;Getters&lt;/em&gt; e dos &lt;em&gt;Setters&lt;/em&gt;. Mas pra não precisarmos ficar criando sempre esses métodos, o Ruby fornece pra gente meios de criá-los automaticamente.&lt;/p&gt;

&lt;p&gt;Para &lt;em&gt;Getters&lt;/em&gt;, os métodos criados especificamente para &lt;strong&gt;ler&lt;/strong&gt; o valor de um atributo, podemos utilizar o &lt;code&gt;attr_reader&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Atualmente, na nossa classe &lt;strong&gt;Comanda&lt;/strong&gt;, temos quatro métodos cuja única finalidade é retornar o valor de um atributo e são eles:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Comanda&lt;/span&gt;
  &lt;span class="o"&gt;...&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;numero&lt;/span&gt;
    &lt;span class="vi"&gt;@numero&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="o"&gt;...&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;atendente&lt;/span&gt;
    &lt;span class="vi"&gt;@atendente&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="o"&gt;...&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;mesa&lt;/span&gt;
    &lt;span class="vi"&gt;@mesa&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="o"&gt;...&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;itens&lt;/span&gt;
    &lt;span class="vi"&gt;@itens&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="o"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nós vamos REMOVER estes métodos e adicionar no topo da classe &lt;strong&gt;Comanda&lt;/strong&gt; o &lt;code&gt;attr_reader&lt;/code&gt; dessa forma:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Comanda&lt;/span&gt;
  &lt;span class="nb"&gt;attr_reader&lt;/span&gt; &lt;span class="ss"&gt;:numero&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:atendente&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:mesa&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:itens&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;initialize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;numero&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;mesa&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;atendente&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="o"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Os quatro métodos &lt;code&gt;numero&lt;/code&gt;, &lt;code&gt;atendente&lt;/code&gt;, &lt;code&gt;mesa&lt;/code&gt; e &lt;code&gt;itens&lt;/code&gt; foram removidos e este &lt;code&gt;attr_reader&lt;/code&gt; foi adicionado. O &lt;code&gt;attr_reader&lt;/code&gt; é um método interno do Ruby que está pegando este Array de valores &lt;code&gt;:numero, :atendente, :mesa e :itens&lt;/code&gt; e fazendo, por baixo dos panos, a criação daqueles quatro métodos que acabamos de remover.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Para os &lt;em&gt;Setters&lt;/em&gt;, os métodos que fazem a escrita de valores dos atributos, nós temos o &lt;code&gt;attr_writer&lt;/code&gt;. Na nossa classe &lt;strong&gt;Comanda&lt;/strong&gt;, os métodos &lt;em&gt;Setters&lt;/em&gt; são:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Comanda&lt;/span&gt;
  &lt;span class="o"&gt;...&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;numero&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;numero&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="vi"&gt;@numero&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;numero&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;atendente&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;atendente&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="vi"&gt;@atendente&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;atendente&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;mesa&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mesa&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="vi"&gt;@mesa&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;mesa&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;itens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;itens&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="vi"&gt;@itens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;itens&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="o"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Da mesma forma que fizemos anteriormente, vamos REMOVER estes quatro métodos e adicionar o seguinte no topo da classe:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Comanda&lt;/span&gt;
  &lt;span class="nb"&gt;attr_reader&lt;/span&gt; &lt;span class="ss"&gt;:numero&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:atendente&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:mesa&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:itens&lt;/span&gt;
  &lt;span class="nb"&gt;attr_writer&lt;/span&gt; &lt;span class="ss"&gt;:numero&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:atendente&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:mesa&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:itens&lt;/span&gt;

  &lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Logo abaixo do &lt;code&gt;attr_reader&lt;/code&gt;, colocamos o &lt;code&gt;attr_writer&lt;/code&gt; que faz a mesma coisa: é um método interno do Ruby que está pegando este Array de valores &lt;code&gt;:numero, :mesa e :itens&lt;/code&gt; e fazendo, por baixo dos panos, a criação daqueles três métodos que acabamos de remover.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Uma informação importante é que não precisamos deixar os dois necessariamente nesta ordem. O &lt;code&gt;attr_reader&lt;/code&gt; não precisa vir antes do &lt;code&gt;attr_writer&lt;/code&gt; e eles também não precisam estar no topo da classe. Eles só precisam existir em algum momento. Como eles são um recurso que, como disse anteriormente, cria aqueles métodos por baixo dos panos, a ordem em que eles aparecem não faz muita diferença porque os métodos estarão lá para serem utilizados.&lt;/p&gt;

&lt;p&gt;Com estes dois recursos adicionados, quando executamos o nosso arquivo no terminal temos exatamente o mesmo resultado que tínhamos antes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Número: 5421 | Atendente: Maria | Mesa: 17 | Itens: Café pingado,Pão de queijo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Isso mostra que a substituição dos métodos pelos &lt;code&gt;attr_reader&lt;/code&gt; e pelo &lt;code&gt;attr_writer&lt;/code&gt; foi um sucesso&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Mas ainda não acabou :)&lt;/p&gt;

&lt;p&gt;O Ruby nos disponibiliza mais uma facilidade para os casos que queremos criar tanto um &lt;em&gt;Getter&lt;/em&gt; quanto um &lt;em&gt;Setter&lt;/em&gt; para um atributo nosso, e ele é o &lt;em&gt;attr_accessor&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Com o &lt;em&gt;attr_accessor&lt;/em&gt;, nós criados um "acesso completo" a um atributo do objeto e como temos isso sendo feito atualmente para &lt;em&gt;numero&lt;/em&gt;, &lt;em&gt;atendente&lt;/em&gt;, &lt;em&gt;mesa&lt;/em&gt; e &lt;em&gt;itens&lt;/em&gt;, nós podemos fazer uma substituição interessante. Onde temos o &lt;code&gt;attr_reader&lt;/code&gt; e o &lt;code&gt;attr_writer&lt;/code&gt; na classe &lt;strong&gt;Comanda&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Comanda&lt;/span&gt;
  &lt;span class="nb"&gt;attr_reader&lt;/span&gt; &lt;span class="ss"&gt;:numero&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:atendente&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:mesa&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:itens&lt;/span&gt;
  &lt;span class="nb"&gt;attr_writer&lt;/span&gt; &lt;span class="ss"&gt;:numero&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:atendente&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:mesa&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:itens&lt;/span&gt;

  &lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Podemos SUBSTITUIR pelo &lt;em&gt;attr_accessor&lt;/em&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Comanda&lt;/span&gt;
  &lt;span class="nb"&gt;attr_accessor&lt;/span&gt; &lt;span class="ss"&gt;:numero&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:atendente&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:mesa&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:itens&lt;/span&gt;

  &lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Desta forma estamos criando ambos &lt;em&gt;Getters&lt;/em&gt; e &lt;em&gt;Setters&lt;/em&gt; para &lt;em&gt;numero&lt;/em&gt;, &lt;em&gt;atendente&lt;/em&gt;, &lt;em&gt;mesa&lt;/em&gt; e &lt;em&gt;itens&lt;/em&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;E se executamos nosso arquivo novamente, temos o mesmo resultado:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Número: 5421 | Atendente: Maria | Mesa: 17 | Itens: Café pingado,Pão de queijo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Ou seja, tudo certo.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Métodos Estáticos
&lt;/h2&gt;

&lt;p&gt;Até o momento vimos que vários recursos que dizem respeito ao objeto, que é criado a partir de uma classe. Porém existem recursos que não podemos atrelar à instância de uma classe (um objeto), mas à classe em si.&lt;/p&gt;

&lt;p&gt;Vamos a um exemplo: atualmente nós instanciamos a classe &lt;strong&gt;Comanda&lt;/strong&gt; passando &lt;em&gt;número&lt;/em&gt;,  &lt;em&gt;atendente&lt;/em&gt; e &lt;em&gt;mesa&lt;/em&gt;. Porém nós vamos seguir por um outro caminho agora; vamos fazer com que a &lt;strong&gt;Comanda&lt;/strong&gt; gere seu próprio número em ordem de criação. Seguindo o raciocínio, a primeira comanda receberá o número #1, a segunda o número #2 e assim por diante.&lt;/p&gt;

&lt;p&gt;Se olharmos para o conceito do objeto, seria impossível conseguirmos fazer isso porque cada objeto é responsável apenas por si mesmo: por seu próprio número, sua própria mesa e seus próprios itens. Para que isso aconteça nós precisamos manter uma contagem da quantidade de objetos da comanda que foram criados. &lt;/p&gt;

&lt;p&gt;Existem vários meios de fazer isso, mas neste momento nós vamos colocar um método que será responsável por gerenciar a quantidade de instâncias de uma Comanda na própria classe &lt;strong&gt;Comanda&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Primeiro, vamos criar uma variável na classe para conseguirmos manter a quantidade de &lt;strong&gt;Comandas&lt;/strong&gt; instanciadas.&lt;/p&gt;

&lt;p&gt;Adicione o seguinte na classe &lt;strong&gt;Comanda&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Comanda&lt;/span&gt;
  &lt;span class="vi"&gt;@contador_de_comandas&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;

  &lt;span class="nb"&gt;attr_accessor&lt;/span&gt; &lt;span class="ss"&gt;:numero&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:atendente&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:mesa&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:itens&lt;/span&gt;
  &lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Uai, adicionamos uma variável para o objeto do topo da Classe? Podemos dizer que não. Quando colocamos uma variável de instância fora dos métodos do objeto, ela pertence à própria Classe. Ou seja, este valor está atrelado à própria classe &lt;strong&gt;Comanda&lt;/strong&gt;, ou seja, independente do objeto o valor será sempre o mesmo.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Com essa variável criada, que podemos chamar de &lt;strong&gt;atributo estático&lt;/strong&gt; porque vai possuir o mesmo valor em todos os objetos, vamos criar também um método para gerar o número da comanda a partir dessa variável. Para isso, vamos adicionar no nossa classe comanda o seguinte:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Comanda&lt;/span&gt;
  &lt;span class="o"&gt;...&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;fechar&lt;/span&gt;
  &lt;span class="o"&gt;...&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nc"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;gerar_numero&lt;/span&gt;
    &lt;span class="vi"&gt;@contador_de_comandas&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="o"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Quando colocamos este &lt;code&gt;self&lt;/code&gt; na frente de um método, ele é criado na própria classe, ou seja, é um &lt;strong&gt;método estático&lt;/strong&gt;. E neste método estamos pegando o valor do &lt;code&gt;@contador_de_comandas&lt;/code&gt;, somando o valor 1, reatribuindo o novo valor na própria própria variável e retornado. E pelo fato dele ser um &lt;strong&gt;método estático&lt;/strong&gt;, nos conseguimos acessar o valor de um &lt;strong&gt;atributo estático&lt;/strong&gt; do mesmo jeito que acessamos o valor de um atributo do objeto num método do objeto.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Vamos fazer um teste pra ver como funciona um método de classe. Primeiro, vamos tentar executar esse método a partir de um objeto da classe &lt;strong&gt;Comanda&lt;/strong&gt;. Adicione o seguinte no seu código:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Comanda&lt;/span&gt;
  &lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="o"&gt;...&lt;/span&gt;

&lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="n"&gt;minha_comanda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;gerar_numero&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Quando tentamos executar o código, é retornado essa mensagem&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Número: 5421 | Atendente: Maria | Mesa: 17 | Itens: Café pingado,Pão de queijo
main.rb:26:in &lt;span class="sb"&gt;`&lt;/span&gt;&amp;lt;main&amp;gt;&lt;span class="s1"&gt;': undefined method `gerar_numero'&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="c"&gt;#&amp;lt;Comanda:0x00007fb0a50a81d0 @numero=5421, @mesa=17, @atendente="Maria", @itens=["Café pingado", "Pão de queijo"]&amp;gt; (NoMethodError)&lt;/span&gt;

puts minha_comanda.gerar_numero
                  ^^^^^^^^^^^^^
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Na primeira linha ele imprimiu o texto de antes, mas da segunda em diante ele está trazendo um erro que informa que o método &lt;code&gt;gerar_numero&lt;/code&gt; não existe pro objeto que está na variável &lt;code&gt;minha_comada&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Este é um erro esperado, já que o método &lt;em&gt;gerar_numero&lt;/em&gt; não existe para os objetos da classe &lt;strong&gt;Comanda&lt;/strong&gt;, mas para a classe em si. Para conseguimos chamar este método direto na classe, vamos substituir este código que acabamos de colocar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="n"&gt;minha_comanda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;gerar_numero&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Por este&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="no"&gt;Comanda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;gerar_numero&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Estamos chamando o método &lt;code&gt;gerar_numero&lt;/code&gt; a partir da própria classe &lt;strong&gt;Comanda&lt;/strong&gt;. Repare que é o mesmo formato de quando chamamos o &lt;code&gt;Comanda.new&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;E ao executar o arquivo não temos mais nenhum erro&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Número: 5421 | Atendente: Maria | Mesa: 17 | Itens: Café pingado,Pão de queijo
1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Imprimimos o conteúdo das linhas anteriores e executamos o método &lt;code&gt;gerar_numero&lt;/code&gt; a partir da classe &lt;strong&gt;Comanda&lt;/strong&gt;, cujo valor impresso foi &lt;code&gt;1&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Agora que vimos como funciona, podemos APAGAR essa linha que adicionamos para teste:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="no"&gt;Comanda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;gerar_numero&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Enriquecendo nossos exemplos
&lt;/h3&gt;

&lt;p&gt;Com o entendimento de como podemos fazer a geração do número da Comanda, vamos colocar isso no nosso código e vamos aproveitar para enriquecer mais nosso exemplo para vermos que está tudo funcionado bem.&lt;/p&gt;

&lt;p&gt;No nosso arquivo de código, onde temos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;minha_comanda&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Comanda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5421&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;17&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Vamos &lt;strong&gt;substituir&lt;/strong&gt; por:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;minha_comanda&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Comanda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;Comanda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;gerar_numero&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;17&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'Maria'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Repare que antes nós passamos um número aleatório, agora estamos passando o retorno do método estático &lt;code&gt;gerar_numero&lt;/code&gt; da classe &lt;strong&gt;Comanda&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Além disso, vamos aproveitar para criar mais 2 comandas. Adicione no seu código:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="s2"&gt;"Número: &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;minha_comanda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;numero&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; | Atendente: &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;minha_comanda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;atendente&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; | Mesa: &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;minha_comanda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;mesa&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; | Itens: &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;minha_comanda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;itens&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;','&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

&lt;span class="n"&gt;segunda_comanda&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Comanda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;Comanda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;gerar_numero&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;13&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'João'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;segunda_comanda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;itens&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'Capuccino com Chatilly'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'Coxinha Assada'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="s2"&gt;"Número: &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;segunda_comanda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;numero&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; | Atendente: &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;segunda_comanda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;atendente&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; | Mesa: &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;segunda_comanda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;mesa&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; | Itens: &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;segunda_comanda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;itens&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;','&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

&lt;span class="n"&gt;terceira_comanda&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Comanda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;Comanda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;gerar_numero&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'Maria'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;terceira_comanda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;itens&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'Café coado'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'Pastel de Frango'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="s2"&gt;"Número: &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;terceira_comanda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;numero&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; | Atendente: &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;terceira_comanda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;atendente&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; | Mesa: &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;terceira_comanda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;mesa&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; | Itens: &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;terceira_comanda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;itens&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;','&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E pra finalizar, se executarmos este código, teremos o resultado:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Número: 1 | Atendente: Maria | Mesa: 17 | Itens: Café pingado,Pão de queijo
Número: 2 | Atendente: Maria | Mesa: 13 | Itens: Capuccino com Chatilly,Coxinha Assada
Número: 3 | Atendente: Maria | Mesa: 9 | Itens: Café coado,Pastel de Frango
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Repare que o número da Comanda está em ordem crescente de criação. Isso significa que nosso método estático está funcionado perfeitamente &lt;strong&gt;independente&lt;/strong&gt; os objetos da classe &lt;strong&gt;Comanda&lt;/strong&gt; que são criados.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Com a geração automática dos números &lt;del&gt;e vendo trabalhadora mulher atender sozinha três mesas graças à precarização do trabalho no capitalismo&lt;/del&gt;, finalizamos este post.&lt;/p&gt;




&lt;p&gt;O código que produzimos aqui está no mesmo repositório na branch &lt;code&gt;parte_03&lt;/code&gt;.&lt;br&gt;
&lt;a href="https://github.com/dfmoreto/dev_to-poo_ruby" rel="noopener noreferrer"&gt;https://github.com/dfmoreto/dev_to-poo_ruby&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Já já nos vemos nos próximos posts. Ainda tem conteúdo pra chegar =)&lt;/p&gt;

</description>
      <category>ruby</category>
      <category>programming</category>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>Orientação a Objetos com Ruby (Parte 2) - Objetos e Classes</title>
      <dc:creator>Daniel Moreto</dc:creator>
      <pubDate>Tue, 22 Aug 2023 22:27:03 +0000</pubDate>
      <link>https://forem.com/zokaibr/orientacao-a-objetos-com-ruby-parte-2-objetos-e-classes-2a89</link>
      <guid>https://forem.com/zokaibr/orientacao-a-objetos-com-ruby-parte-2-objetos-e-classes-2a89</guid>
      <description>&lt;p&gt;Fala comiigo!&lt;/p&gt;

&lt;p&gt;Dando continuidade à série de Orientação a Objetos com Ruby, nesse post começaremos a falar da parte mais técnica e tentar entender o que é de fato um objeto e como ele se comporta na Programação Orientada a Objetos.&lt;/p&gt;

&lt;p&gt;Vamos lá, Objetos...&lt;/p&gt;

&lt;h2&gt;
  
  
  O que é Objeto?
&lt;/h2&gt;

&lt;p&gt;Nós podemos podemos pensar em Objetos como a representação de algo do mundo real. Eu sei que pode parecer um pouco aleatório isso, mas a ideia da orientação a objetos é que nós possamos literalmente representar qualquer coisa que esteja presente no nosso mundo, seja tangível ou intangível.&lt;/p&gt;

&lt;p&gt;Exemplos disso seriam: um computador, um celular, seu animal de estimação, a casa onde você mora, a cadeira que você senta, tudo.&lt;/p&gt;

&lt;p&gt;Poderia inclusive ser você, que enquanto trabalhador exerce a sua profissão todos os dias, ou aquela cafeteria que você vai tomar um cafezinho às vezes. Ou seja, você, seu registro de ponto, a cafeteria, o seu café, a comanda que você recebe, tudo isso pode ser um objeto na Programação Orientada a Objetos (POO).&lt;/p&gt;

&lt;p&gt;Pois bem, fica com isso na cuca que a gente precisa adicionar uns detalhes...&lt;/p&gt;

&lt;h3&gt;
  
  
  Interação dos Objetos com o Mundo
&lt;/h3&gt;

&lt;p&gt;Vamos fazer uma observação do mundo real. Pensa naquela cafeteria, numa pessoa atendente que está lá todo santo dia trabalhando. Imagine que ela, que aqui vamos chamar de Maria, trabalha 10h por dia contando sábados e domingos, entra às 4:00h e sai apenas às 14:00h.&lt;/p&gt;

&lt;p&gt;Que tipo de informações conseguimos extrair fazendo essa observação?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;del&gt;Provavelmente é uma pessoa trabalhadora super explorada&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;O nome dessa pessoa é Maria&lt;/li&gt;
&lt;li&gt;A carga horária de trabalho é de 60h semanais&lt;/li&gt;
&lt;li&gt;Horário que ela entra é 4:00h&lt;/li&gt;
&lt;li&gt;Horário que ela sai é às 14:00h&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;E como essa trabalhadora interage com o mundo real enquanto atendente desta cafeteria?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Abre comanda&lt;/li&gt;
&lt;li&gt;Anota pedido&lt;/li&gt;
&lt;li&gt;Registra o ponto&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Vamos pensar se você foi até esta cafeteria e a Maria, ao te atender, abriu uma comanda de número 5142 para a sua mesa de número 17. Você pediu à Maria um cafezinho pingado e um pão de queijo. Que características conseguimos extrair dessa situação?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;O número da comanda é 5142&lt;/li&gt;
&lt;li&gt;A mesa que ela atende é 17&lt;/li&gt;
&lt;li&gt;Os itens são um café pingado e um pão de queijo&lt;/li&gt;
&lt;li&gt;A pessoa atendente é Maria&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;E como essa comanda pode "interagir" com o mundo?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ela pode receber um novo item&lt;/li&gt;
&lt;li&gt;Um item pode ser removido dela&lt;/li&gt;
&lt;li&gt;Pode ser fechada&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Então, pega a visão: &lt;strong&gt;todo objeto tem &lt;em&gt;características&lt;/em&gt; e &lt;em&gt;comportamentos&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Se tiver animado, faça esse exercício: olhe à sua volta e anote as &lt;em&gt;carecterísticas&lt;/em&gt; e &lt;em&gt;comportamentos&lt;/em&gt; você consegue extrair dos objetos que identifica.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tá, Objeto foi.. E Classe?
&lt;/h2&gt;

&lt;p&gt;Vamos voltar à comanda, onde seu pedido é anotado.&lt;/p&gt;

&lt;p&gt;Quando paramos pra pensar, aquele pedaço de papel dividido como uma tabela que tem um número, os itens que você consumiu e o número da sua mesa é apenas uma das possíveis que a Maria vai abrir. Milhares de outras vão existir antes e depois da sua.&lt;/p&gt;

&lt;p&gt;Porém, todos estes pedaços de papel tem uma &lt;strong&gt;classificação&lt;/strong&gt;, ou uma &lt;strong&gt;Classe&lt;/strong&gt;, algo que a define, algo que diz todas as &lt;em&gt;caraterísticas&lt;/em&gt; e os &lt;em&gt;comportamentos&lt;/em&gt; que esse papel conhecido como &lt;strong&gt;Comanda&lt;/strong&gt; precisa ter. Ou seja, a &lt;strong&gt;Classe&lt;/strong&gt; é o esqueleto do &lt;strong&gt;Objeto&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Para que a sua comanda exista com o número 5142, com o seu café pingado e seu pão de queijo, com o número da sua mesa 17 e associada à pessoa atendente Maria, ela precisa de um &lt;strong&gt;molde&lt;/strong&gt;, esse molde é a &lt;strong&gt;Classe&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A partir da &lt;strong&gt;Classe&lt;/strong&gt; nós definimos quais &lt;em&gt;características&lt;/em&gt; e &lt;em&gt;comportamentos&lt;/em&gt; os &lt;strong&gt;Objetos&lt;/strong&gt; existirão.&lt;/p&gt;

&lt;h2&gt;
  
  
  E o código, heim?! E o Ruby?!
&lt;/h2&gt;

&lt;p&gt;Nos exemplos de código, nós utilizaremos a &lt;strong&gt;Comanda&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Bem, todo &lt;strong&gt;Objeto surge a partir de uma Classe definida&lt;/strong&gt;, então se quisermos representar a &lt;strong&gt;Comanda&lt;/strong&gt;, nós precisamos criar uma &lt;strong&gt;Classe&lt;/strong&gt; pra ela, e no Ruby seria desta forma:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Comanda&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;A palavra-chave &lt;code&gt;class&lt;/code&gt; é utilizada para definir uma classe.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Com esta classe criada, se quisermos criar um &lt;strong&gt;Objeto&lt;/strong&gt; a partir dela, faremos&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Comanda&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="n"&gt;minha_comanda&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Comanda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Com o &lt;code&gt;Comanda.new&lt;/code&gt; criamos um objeto Comanda e armazenamos na variável &lt;code&gt;minha_comanda&lt;/code&gt;. Nós estamos criando somente um objeto, mas não existe um limite que nos impeça de criar mais 2 ou mais 1000 com a mesma classe.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Adicionando Comportamento na Classe
&lt;/h3&gt;

&lt;p&gt;Como vimos, a &lt;strong&gt;Comanda&lt;/strong&gt; possui &lt;em&gt;comportamentos&lt;/em&gt; que define as ações que um objeto pode exercer. No Ruby, toda e qualquer comunicação do Objeto com o mundo real ocorre por meio da definição de &lt;strong&gt;Métodos&lt;/strong&gt;. E se você veio de outro paradigma de programação, o método é uma &lt;em&gt;função&lt;/em&gt; dentro de uma &lt;strong&gt;Classe&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Vamos pegar como o exemplo o comportamento "ser fechada". Para que a &lt;strong&gt;Comanda&lt;/strong&gt; tenha o comportamento de ser fechada, nós vamos criar um método chamado &lt;em&gt;fechar&lt;/em&gt; dentro dela desta forma:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Comanda&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;fechar&lt;/span&gt;
    &lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="s2"&gt;"Comanda fechada!"&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="o"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Uma vez que definimos o método &lt;em&gt;fechar&lt;/em&gt; na classe, nós podemos chamá-lo no objeto desta forma:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Comanda&lt;/span&gt;
  &lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="n"&gt;minha_comanda&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Comanda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;
&lt;span class="n"&gt;minha_comanda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fechar&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Lembrando que quando definimos o &lt;code&gt;fechar&lt;/code&gt; ali em cima, nós estamos declarando como o objeto vai se comportar quando este método for chamado. Com isso, você verá que o seguinte texto será impresso na sua tela:&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Comanda fechada!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este foi apenas um exemplo de um método, a ideia é que futuramente ele faça coisas significativas em vez de só imprimir coisas na tela =)&lt;/p&gt;

&lt;p&gt;Adicionamos um primeiro comportamento, agora precisamos também adicionar as características.&lt;/p&gt;

&lt;h3&gt;
  
  
  Definindo as Características
&lt;/h3&gt;

&lt;p&gt;Na POO, as características de um objeto são conhecidas como &lt;strong&gt;Atributos&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Uma particularidade do Ruby é que TODO e qualquer atributo de um objeto é privado ao próprio objeto. Um atributo NUNCA será manipulado ou acessado diretamente do mundo exterior ao objeto.&lt;/p&gt;

&lt;p&gt;Você deve estar se perguntando, então pra que raios eu vou precisar de um atributo?!?!...&lt;/p&gt;

&lt;p&gt;Pois bem, repetindo, ele realmente NUNCA será manipulado ou acessado diretamente do mundo exterior ao objeto, MAS o objeto pode fornecer meios desses atributos serem manipulados se forma indireta. Lembra que eu te falei que "toda e qualquer comunicação do Objeto com o mundo real ocorre por meio da definição de Métodos"? Nós também utilizaremos os métodos para manipular os atributos de um objeto.&lt;/p&gt;

&lt;p&gt;Retomando a nossa &lt;strong&gt;Comanda&lt;/strong&gt;, nós vimos que ela tem as características como número da comanda, número da mesa, lista de itens e quem é a atendente. E assumiremos que a partir destas características nós vamos definir os atributos &lt;em&gt;numero&lt;/em&gt; para o numero da comanda, &lt;em&gt;mesa&lt;/em&gt; para o número da mesa, &lt;em&gt;itens&lt;/em&gt; para a lista de itens e &lt;em&gt;atendente&lt;/em&gt; para o nome da pessoa que te atendeu.&lt;/p&gt;

&lt;p&gt;Para que uma &lt;strong&gt;Comanda&lt;/strong&gt; possa receber um número, criaremos um método que vai atribuir este valor num atributo &lt;em&gt;numero&lt;/em&gt;. Para isso, vamos definir este método na classe &lt;strong&gt;Comanda&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Comanda&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;numero&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;numero&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="vi"&gt;@numero&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;numero&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;fechar&lt;/span&gt;
  &lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;No corpo deste método, a variável &lt;code&gt;@numero&lt;/code&gt; é conhecida como &lt;strong&gt;Variável de Instância&lt;/strong&gt; e ela faz parte APENAS do escopo do objeto. É exatamente por este motivo que anteriormente eu disse que um atributo de um objeto nunca será manipulado diretamente fora dele, porque não existe outro recurso seguro para que isso seja feito além de um &lt;strong&gt;Método&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Estamos criando um método &lt;code&gt;numero=&lt;/code&gt; (você não leu errado, ele tem um "=" no final do nome) e neste método estamos definindo que ele precisa receber um atributo &lt;code&gt;numero&lt;/code&gt;. Dentro deste método, estamos pegando o valor que será enviado como parâmetro para &lt;code&gt;numero&lt;/code&gt; e atribuindo em &lt;code&gt;@numero&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Da mesma forma, podemos criar um método para acessar o valor do atributo &lt;code&gt;@numero&lt;/code&gt;. Com isso, criamos mais um método na &lt;strong&gt;Comanda&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Comanda&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;numero&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;numero&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="o"&gt;...&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;numero&lt;/span&gt;
    &lt;span class="vi"&gt;@numero&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="o"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;No Ruby, apesar da palavra-chave &lt;code&gt;return&lt;/code&gt; existir, nós a omitimos em diversos casos porque o Ruby sempre retorna a última expressão de um método&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Neste método &lt;code&gt;numero&lt;/code&gt; (que é diferente do método &lt;code&gt;numero=&lt;/code&gt;), nós estamos retornando o valor do atributo &lt;code&gt;@numero&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Para utilizarmos estes dois métodos, não será muito diferente do método &lt;code&gt;fechar&lt;/code&gt; que usamos na sessão anterior. Podemos chamá-los desta forma:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Comanda&lt;/span&gt;
  &lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="n"&gt;minha_comanda&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Comanda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;
&lt;span class="n"&gt;minha_comanda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;numero&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5421&lt;/span&gt;
&lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="n"&gt;minha_comanda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;numero&lt;/span&gt;
&lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="n"&gt;minha_comanda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fechar&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Neste caso, estamos chamando o método &lt;code&gt;numero=&lt;/code&gt; passando como valor &lt;code&gt;5142&lt;/code&gt; e em seguida chamamos o método &lt;code&gt;numero&lt;/code&gt; imprimindo o que ele retornou. Por incrível que pareça, o Ruby nos deixa criar um método com um "=" no final do seu nome e chamar desta forma. Esta chamada é a mesma coisa que fazer &lt;code&gt;minha_comanda.numero=(5421)&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Olhando o resultado deste &lt;code&gt;puts&lt;/code&gt; da ultima linha, teremos impresso:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;5142
Comanda fechada!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Isso nos certifica que realmente o valor está sendo atribuído em &lt;code&gt;@numero&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Para finalizar o papo desse post, vamos criar os mesmos métodos para o atributo &lt;em&gt;atendente&lt;/em&gt;, &lt;em&gt;mesa&lt;/em&gt;, &lt;em&gt;itens&lt;/em&gt;. Os métodos para manipular e ler o número da mesa e os itens ficarão assim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Comanda&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;numero&lt;/span&gt;
  &lt;span class="o"&gt;...&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;atendente&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;atendente&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="vi"&gt;@atendente&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;atendente&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;atendente&lt;/span&gt;
    &lt;span class="vi"&gt;@atendente&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;mesa&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mesa&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="vi"&gt;@mesa&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;mesa&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;mesa&lt;/span&gt;
    &lt;span class="vi"&gt;@mesa&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;itens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;itens&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="vi"&gt;@itens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;itens&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;itens&lt;/span&gt;
    &lt;span class="vi"&gt;@itens&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

  &lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="o"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Temos um novo método &lt;code&gt;atendente=&lt;/code&gt; (com "=") para atribuir o nome da pessoa atendente e &lt;code&gt;atendente&lt;/code&gt; (sem "=") para retornar o valor, que no caso está atribuído na variável de instância &lt;code&gt;@atendente&lt;/code&gt;. O mesmo está ocorrendo com a mesa e os itens.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Vamos utilizar estes métodos para atribuir valores e imprimi-los. Ficaremos com o código do desta forma:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Comanda&lt;/span&gt;
  &lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="n"&gt;minha_comanda&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Comanda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;
&lt;span class="n"&gt;minha_comanda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;numero&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5421&lt;/span&gt;
&lt;span class="n"&gt;minha_comanda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;atendente&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'Maria'&lt;/span&gt;
&lt;span class="n"&gt;minha_comanda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;mesa&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;17&lt;/span&gt;
&lt;span class="n"&gt;minha_comanda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;itens&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'Café pingado'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'Pão de queijo'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="s2"&gt;"Número: &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;minha_comanda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;numero&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; | Atendente: &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;minha_comanda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;atendente&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; | Mesa: &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;minha_comanda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;mesa&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; | Itens: &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;minha_comanda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;itens&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;','&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Com isso, estamos atribuindo &lt;code&gt;5142&lt;/code&gt; no atributo &lt;code&gt;@numero&lt;/code&gt;, &lt;code&gt;"Maria"&lt;/code&gt; no atributo &lt;code&gt;@atendente&lt;/code&gt;, &lt;code&gt;17&lt;/code&gt; para &lt;code&gt;@mesa&lt;/code&gt; e &lt;code&gt;['Café pingado', 'Pão de queijo']&lt;/code&gt; para &lt;code&gt;@itens&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Executando este script, será impresso na tela:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Número: 5142 | Atendente: Maria | Mesa: 17 | Itens: Café pingado,Pão de queijo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com isso a gente termina essa segunda parte dessa série. Ainda tem mais, estamos no começo.&lt;/p&gt;

&lt;p&gt;O código que foi feito aqui está neste repositório na branch &lt;code&gt;parte_02&lt;/code&gt;:&lt;br&gt;
&lt;a href="https://github.com/dfmoreto/dev_to-poo_ruby/tree/parte_02" rel="noopener noreferrer"&gt;https://github.com/dfmoreto/dev_to-poo_ruby/tree/parte_02&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Curtiu? Sinta-se à vontade para fazer correções, comentários ou acréscimos ali em baixo nos comentários =)&lt;/p&gt;

</description>
      <category>ruby</category>
      <category>programming</category>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>Orientação a Objetos com Ruby (Parte 1) - Introdução e História</title>
      <dc:creator>Daniel Moreto</dc:creator>
      <pubDate>Sun, 30 Jul 2023 21:26:41 +0000</pubDate>
      <link>https://forem.com/zokaibr/orientacao-a-objetos-com-ruby-parte-1-introducao-e-historia-43l5</link>
      <guid>https://forem.com/zokaibr/orientacao-a-objetos-com-ruby-parte-1-introducao-e-historia-43l5</guid>
      <description>&lt;p&gt;Fala comigo!&lt;/p&gt;

&lt;p&gt;Recentemente eu me peguei explicando Orientação a Objetos com Ruby e embora eu tenha conseguido expressar o que queria, me frustrou não conseguir de uma forma melhor.&lt;/p&gt;

&lt;p&gt;Estou revisitando algumas bibliografias e aproveitando pra escrever essa série e solidificar o conteúdo novamente.&lt;/p&gt;

&lt;p&gt;Antes de começar qualquer coisa, embora eu vá deixar todas as referências que estou utilizando no final dessa série, eu PRECISO dar um destaque nesse primeiro post a uma &lt;strong&gt;playlist do Guanabara do Curso em Vídeo sobre Programação Orientada à Objetos&lt;/strong&gt; que é uma coisa linda de assistir:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/playlist?list=PLHz_AreHm4dmGuLII3tsvryMMD7VgcT7x" rel="noopener noreferrer"&gt;https://www.youtube.com/playlist?list=PLHz_AreHm4dmGuLII3tsvryMMD7VgcT7x&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Espero conseguir abordar alguns conceitos importantes da base da Orientação a Objetos. Então vamos começar pelo começo: de onde que surgiu isso? Pra que serve?&lt;/p&gt;




&lt;h1&gt;
  
  
  Uma Breve História da Orientação a Objetos
&lt;/h1&gt;

&lt;p&gt;Os primeiros conceitos da orientação a objetos surgiram na Noruega na década de 70, quando Ole Johan Dahl e Kristen Nygaard criaram o Simula I em 1962, uma extensão da linguagem de programação Algol, e posteriormente o Simula 67 (em 1967), para simular comportamento de partículas de gases.&lt;/p&gt;

&lt;p&gt;Posteriormente, aproveitando desses conceitos, o matemático estaduniense &lt;strong&gt;Alan Kay&lt;/strong&gt;, uma figura importantíssima na área de Tecnologia da Informação, criou a linguagem Smalltalk dentro de uma área de pesquisa da Xerox PARC, onde os conceitos de Orientação a Objetos foram solidificados. Alan Kay também escreveu sua tese de PHD abordando a Orientação a Objetos.&lt;/p&gt;

&lt;p&gt;Quando estava na Xerox, Alan Kay criou a linguagem Smalltalk devido a um projeto chamado &lt;em&gt;Dynabook&lt;/em&gt;, que tinha o intuito de montar um ambiente de computação para pessoas de qualquer idade.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Aqui eu deixo uma recomendação: &lt;strong&gt;Alan Kay&lt;/strong&gt; foi uma figura ímpar na área de TI e criar a &lt;strong&gt;Smalltalk&lt;/strong&gt; e cunhar o termo &lt;strong&gt;Orientação a Objetos&lt;/strong&gt; foi uma de suas várias realizações. Fica a dica pra pesquisar mais sobre ele.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  O Paradigma Orientado a Objetos
&lt;/h1&gt;

&lt;p&gt;Se você der uma googlada pela definição de &lt;em&gt;"Paradigma"&lt;/em&gt;, provavelmente você encontrará algo parecido que eu encontrei no Dicio (dicio.com.br): "Exemplo ou padrão a ser seguido".&lt;/p&gt;

&lt;p&gt;Pensando na Orientação a Objetos como um modelo de programação, é importante dizer que ele não é o único e nem foi o primeiro a existir. Outros existem, como a programação estruturada, a imperativa e a funcional.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Acho importante fazer um adendo que eu já vi alguns lugares colocando a programação orientada a objetos como uma "evolução da programação estruturada", onde existe um bloco único de código que executa sequencialmente. Eu particularmente não gosto dessas definições, já que o paradigma estruturado existe até hoje e ainda é utilizado na resolução de problemas. Então, é bom ficar atento com lugares que colocam a Orientação a Objetos como uma &lt;em&gt;bala de prata&lt;/em&gt;, porque ela não é.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;O modelo (ou paradigma) da Orientação a Objetos, evoluído pelo querido Alan Kay, tinha como base o que foi chamado de Análise Biológica: "Como seria se um software funcionasse como um ser vivo?". Através disso, a ideia era que cada parte do código fossem como &lt;strong&gt;células&lt;/strong&gt; que interagem entre si &lt;strong&gt;enviando mensagens&lt;/strong&gt; para &lt;strong&gt;alcançar um objetivo&lt;/strong&gt; comum.&lt;/p&gt;

&lt;p&gt;Com isso, podemos ver que a Orientação a Objetos nada mais é que um paradigma que tem por objetivo trazer pra dentro do software uma representação do mundo real, e a essa representação nós chamamos de "Objetos".&lt;/p&gt;

&lt;h2&gt;
  
  
  E o que faz um Objeto?
&lt;/h2&gt;

&lt;p&gt;Por ser uma representação de algo do mundo real, um Objeto sempre terá &lt;strong&gt;propriedades&lt;/strong&gt; e &lt;strong&gt;comportamentos&lt;/strong&gt; e com isso a gente pode literalmente pegar qualquer coisa tangível e intangível que está no nosso mundo, como: Pessoa, Animal, Livro, Temperatura, etc.&lt;/p&gt;

&lt;p&gt;E esses objetos podem interagir uns com os outros para termos uma determinada ação dentro do sistema. Por exemplo, se um Veterinário atende um Animal, nós literalmente podemos ter dentro de um sistema &lt;br&gt;
um objeto do tipo Veterinário que interagiria com um outro objeto do tipo Animal. Mas isso são cenas dos próximos capítulos =)&lt;/p&gt;

&lt;h1&gt;
  
  
  Tá, mas e o Ruby com isso tudo?
&lt;/h1&gt;

&lt;p&gt;O Ruby é uma linguagem japonesa criada por Yukihiro Matsumoto (mais conhecido como "Matz") em 1995. Ela tem como seu paradigma principal a Orientação a Objetos. Inclusive, umas das inspirações do Ruby foi o próprio Smalltalk.&lt;/p&gt;

&lt;p&gt;Nesta série eu não vou abordar mais da história do Ruby, o intuito daqui pra frente é falar dos conceitos da Orientação a Objetos em si e como o Ruby lida com isso.&lt;/p&gt;

</description>
      <category>ruby</category>
      <category>programming</category>
      <category>braziliandevs</category>
    </item>
  </channel>
</rss>
