Определяющая особенность языка программирования ruby ​​— объектная ориентация — устраняет разрыв между динамическим кодом и сценариями реального мира, которые мы хотим имитировать в наших приложениях, чтобы предоставить нашим конечным пользователям простой и почти интуитивно понятный опыт. Веб-сайты уже давно заменили большинство личных турагентов, предоставляя мгновенный доступ к огромному количеству предложений, которые раньше видели только специалисты отрасли. По мере того, как все больше стилей жизни и профессий оцифровываются, объектная ориентация становится все более важной для привлечения большего числа пользователей к приложениям из различных слоев общества и нашим уникальным приложениям.

Эта запись в блоге будет посвящена вводным основам объектной ориентации в ruby, поскольку те читатели, которые наткнулись на эту страницу, уже должны быть знакомы с синтаксисом и функциями типов данных ruby ​​от простых строк до сложных хэшей, а также с переменными, методами. и возвращаемые значения. Объектная ориентация интенсивно использует эти объекты, а также реализует их собственную версию, как вы (надеюсь) увидите ниже.

Ориентация объекта в основном вращается вокруг ключевого слова class, которое вы можете считать своего рода расширенным method. Если не указано иное, переменные и методы в объектной ориентации будут находиться в пределах области видимости класса, в котором они созданы. Каким бы ни было имя класса, первая буква должна быть заглавной и использовать CamelCase вместо типичного змеиного регистра, который мы видели раньше.

class Tesla
#your code here
end

После этого мы можем перейти к instance объектам. Мы называем экземпляр, который мы создали из class, используя новую концепцию под названием instantiation. Это намного проще, чем кажется. Инстанцировать что-то означает привести это в существование, создать это. Мы создадим объект с именем model3 из класса Tesla. .new, который вы видите, — это просто код, сообщающий классу о создании нового экземпляра. Ruby также отображает возвращаемое значение экземпляра после его создания, синтаксис содержит имя класса, из которого он был создан, и уникальный идентификатор объекта object_id. Прикрепленный синтаксис означает, что два или более экземпляра никогда не будут ошибочно приняты друг за друга, даже если они относятся к одному и тому же классу.

class Tesla
#your code here
end
model3 = Tesla.new#<Tesla:0x000055b1e0d41df8>

Методы экземпляра

Мы знаем, что методы могут быть вызваны для объектов, если этот объект выбора отвечает на этот метод выбора. Вы не можете вызвать .chomp для объекта массива, точно так же, как вы не можете вызвать .pop для строкового объекта. С объектной ориентацией вы можете создавать свои собственные методы для вызова ваших моментов.

class Tesla
#your code here
end 
model3 = Tesla.newmodel3.methods 
=>
[:to_json, :instance_variable_set, :instance_variable_defined?, :remove_instance_variable, :instance_of?, :kind_of?, :is_a?, :tap, :instance_variable_get, :public_methods, :instance_variables, :method, :public_method, :singleton_method, :define_singleton_method, :public_send, :extend, :to_enum, :enum_for, :pp, :<=>, :===, :=~, :!~, :eql?, :respond_to?, :freeze, :inspect, :object_id, :send, :to_s, :display, :nil?, :hash, :class, :singleton_class, :clone, :dup, :itself, :yield_self, :taint, :untaint, :tainted?, :untrusted?, :untrust, :frozen?, :trust, :singleton_methods, :methods, :private_methods, :protected_methods, :!, :equal?, :instance_eval, :==, :instance_exec, :!=, :__id__, :__send__]

Простой метод, который мы можем вызвать для model3, будет .class, чтобы узнать, к какому классу принадлежит model3 (Tesla). На самом деле в Tesla нет встроенных методов, поэтому давайте создадим первый;

class Tesla  
  def ignition     
   puts "The Tesla is now turned on"  
  end
end
model3 = Tesla.new
model3.ignition
The Tesla is now turned on
=>nil

Переменные экземпляра

Как методы экземпляра придают объектам экземпляра их функции или поведение, переменные экземпляра придают им атрибуты или свойства и «учат» их тому, что эти данные определяют их. В то время как обычные переменные действительно могут вызываться в методе только в том случае, если они передаются в качестве аргумента, переменные экземпляра имеют дополнительную возможность доступа к методам экземпляра определенного класса с использованием объектной ориентации, игнорируя обычные ограничения локальной области видимости.

class Tesla  
 def name=(car_name)
  @this_cars_name = car_name
 end  
 
 def name
  @this_cars_name
 end
end
model3 = Tesla.new
model3.name = "Optimus"
puts model3.name
Optimus
=> nil

Как видите, для этого требуется создать два разных, но связанных метода экземпляра, первый из которых name=, а затем name. Первый метод принимает car_name в качестве аргумента, а затем устанавливает этот аргумент равным переменной с именем this_cars_name. Второй метод несет исключительную ответственность за чтение имени. Это двухэтапное сопряжение методов создает шлюз изнутри класса Tesla к остальной части программного кода вне класса. Однако все это невозможно без символа @; визуальный индикатор и правильный синтаксис для переменной экземпляра. Это позволяет переменной экземпляра быть доступной где угодно.

В объектно-ориентированном программировании на ruby ​​гораздо больше возможностей, и шаги, непосредственно следующие за ними, вводят более глубокие уровни абстракции для создания более надежного и многократно используемого кода, но если я добавлю к этому больше, меня, вероятно, обвинят в утечке секретной информации. Надеюсь, это помогло.