Em Ruby, assim como no mundo real, tudo é um objeto. Inteiros, Textos, Arrays. Enfim, tudo que é manipulado é um objeto e o retorno dessa manipulação também é um objeto. Para que as coisas aconteçam em Ruby é preciso que os objetos conversem entre si dizendo o que é preciso ser feito. Essa comunicação é feita através de métodos, basicamente um objeto chama ou invoca o método de outro objeto fazendo assim a comunicação entre si.
A forma de criar um objeto é através de um construtor, um método especial associado a uma classe. o new é o construtor padrão da linguagem. Para criar uma classe usamos a palavra reservada class seguida do nome(que ao iniciar com letra maiúscula se torna uma constante) e para delimitar o final da classe usamos a palavra reservada end. Assim como todos os tipo em Ruby, o nome da classe também é uma constante, se for um nome composto deverá seguir o padrão Camel Case.
Estrutura básica de uma classe
class PensadorProfundo
end
o que a classe PensadorProfundo faz?
Diz a lenda que a classe PensadorProfundo foi criada por seres extra terrestres que tinham o intuito de descobrir a resposta para a vida, o universo e tudo mais. Claro que uma classe com esse objetivo é extremamente complexa mesmo escrita em Ruby. Então não iremos implementar a nossa versão da classe PensadorProfundo. Até mesmo porque a resposta para a vida, o universo e tudo mais já foi obtida, sendo uma resposta muito satisfatória.
Ruby é uma linguagem orientada a objetos genuína e foi bastante inspirada na linguagem Smalltalk. Tudo que manipulamos é um objeto e o retorno dessa manipulação também é um objeto. A interação dos objetos é feita através de métodos. Um objeto chama ou invoca um método em outro objeto, podemos exemplificar da seguinte maneira, no terminal abra o IRB e digite o seguinte código:
irb(main):001:0> "Uma String também é um objeto".object_id()=> 47257605684400
Aqui passamos a string para o método object_id() que nos retorna o numero de referencia ou seja, o identificador único do objeto passado. Ainda não ficou claro? então vamos verificar a classe de um objeto:
irb(main):002:0> "Qual a classe da minha string?".class=> String
Chamamos o método class passando nosso objeto, ele retorna a classe a qual o objeto pertence. O método class faz parte da classe Object. Toda classe em Ruby herda da classe Object, sendo assim, o método class está disponível em qualquer objeto criado.
Conferindo os docs
Para aprofundar confira a descrição da classe Object na documentação oficial em seguida confira a documentação do método class.
Através de um objeto é possível chamar métodos encadeados:
irb(main):003:0> 1.next.to_s=> "2"
Pegamos o numero 1 que é um objeto da classe Fixnum, passamos para o método next que nos retorna o próximo número e em seguida transformamos esse número em string.
Para saber quais métodos estão disponíveis em um objeto basta usar o método methods:
irb(main):001:0> 1.methods.sort
Usando methods obtemos uma lista de todos os métodos de um objeto e o método sort faz a ordenação do resultado.
Veja o resultado:
Métodos com argumentos
Ao invocar métodos podemos passar informações adicionais que são chamadas de argumentos:
irb(main):002:0> ['zaphod'undefined'ford'undefined'arthur' ].index('ford')
No exemplo passamos um array de nomes para o método index que recebe o parâmetro ‘ford’ e retorna a posição desse parâmetro no array.
Por hoje é só pessoal! essa foi uma abordagem leve de Orientação a Objetos na linguagem Ruby. Claro que o conteúdo é extremamente extenso e devemos ir estudando para conseguir um domínio maior da linguagem com o tempo. Como disse o criador da linguagem Yukihiro Matsumoto:
“Ruby is simple in appearance, but is very complex inside, just like our human body”