freeCodeCamp/guide/portuguese/ruby/classes-and-objects/index.md

4.0 KiB
Raw Blame History

title localeTitle
Classes and Objects Classes e Objetos

Classes e Objetos

Objetos em Ruby

Vamos rapidamente examinar os objetos Ruby. No mundo real, objetos podem ser qualquer coisa, incluindo um carro, computador ou até mesmo um humano. Cada um desses objetos tem um estado e comportamentos.

Considerando um carro, seu estado poderia ser descrito como seu modelo, marca e cor. O comportamento do carro pode estar girando, buzinando ou freando.

Um objeto em Ruby tem características muito semelhantes. Objetos Ruby também possuem um estado e comportamento. Em Ruby Objects, o estado é armazenado em variáveis de instância e o comportamento é armazenado em funções.

Classes em Ruby

Uma classe é basicamente um modelo de programa. Este modelo define as properties iniciais usando instance variables . Novamente, também existem novamente behaviors definidos na forma de funções.

Uma nova instância de uma classe é criada usando o método initialize de uma classe.

Tomemos por exemplo o seguinte código de amostra de uma classe:

class Car 
    def initialize(make, model, color) 
        @make = make 
        @model = model 
        @color = color 
    end 
 
    def turn(direction) 
    end 
 
    def honk 
        puts "beep beep" 
    end 
 
    def brake 
    end 
 end 

Como você viu, as classes são definidas usando a palavra-chave class e o bloco do código da classe termina com um keywork end . A função .initialize é o construtor. Quando criamos este objeto, definimos os atributos @make , @model e @color com os valores que passamos para o construtor.

Criando uma instância de uma classe

Agora, para criar uma instância dessa classe, você só precisa chamar a função .new .

mazda3 = Car.new('Mazda', 'Mazda3', 'White') 

Isso é ótimo, mas às vezes você pode precisar alterar alguns desses atributos! A maioria desses atributos neste exemplo seria estática. Ainda assim, imagine que você decidiu fazer uma nova pintura. Como você faria para atualizar o estado dessa instância do objeto Car ?

Modificando o Estado da Instância

Felizmente, é bastante simples atualizar o estado de um objeto. Primeiro, precisaríamos de um método setter ! Ruby define as configurações getter e setter como attr_reader e attr_accessor respectivamente. Para as configurações de getter e setter em um determinado atributo, você também pode usar apenas attr_accessor .

Para demonstrar isso, modifiquei o objeto Car anterior com essas configurações recém-definidas.

class Car 
    attr_accessor :color 
    attr_reader :make, :model 
 
    def initialize(make, model, color) 
        @make = make 
        @model = model 
        @color = color 
    end 
 
    def turn(direction) 
    end 
 
    def honk 
        puts "beep beep" 
    end 
 
    def brake 
    end 
 end 

Então agora podemos mudar o estado e ler o estado do objeto.

irb(main):023:0> c = Car.new('Mazda', 'Mazda3', 'White') 
 => #<Car:0x00007fd3ca13fdd0 @make="Mazda", @model="Mazda3", @color="White", @speed=nil> 
 irb(main):024:0> c.color 
 => "White" 
 irb(main):025:0> c.make 
 => "Mazda" 
 irb(main):026:0> c.model 
 => "Mazda3" 
 irb(main):027:0> c.color = 'Brutal Blue' 
 => "Brutal Blue" 
 irb(main):028:0> c.make = 'Prius' 
 Traceback (most recent call last): 
        2: from /usr/local/bin/irb:11:in `<main>' 
        1: from (irb):28 
 NoMethodError (undefined method `make=' for #<Car:0x00007fd3ca13fdd0>) 
 Did you mean?  make 

Visualizando a saída anterior do irb , você pode ver que cada uma das variáveis da instância é legível. Podemos escrever para @color , mas acabamos causando uma exceção NoMethodError quando tentamos gravar no @make . Isto é porque @make foi definido apenas usando um attr_reader , então make= não está definido.

Recursos