Ruby Классы и объекты

Ruby — идеальный объектно-ориентированный язык программирования. Возможности объектно-ориентированных языков программирования включают:

  • Инкапсуляция данных
  • Абстракция данных
  • Полиморфизм
  • Наследование

Эти возможности будут рассмотрены вобъектно-ориентированном Ruby.

Объектно-ориентированная программа включает классы и объекты. Класс — это чертёж, по которому создаются отдельные объекты. В объектно-ориентированной терминологии ваш велосипед является экземпляром класса велосипедов.

Возьмём транспортные средства в качестве примера; они включают колёса, мощность и вместимость топливного или газового бака. Эти атрибуты образуют элементы данных класса Vehicle. С помощью этих атрибутов можно отличить одно транспортное средство от других.

Транспортные средства также могут содержать определённые функции, такие как остановка, движение и ускорение. Эти функции образуют элементы данных класса Vehicle. Следовательно, класс можно определить как комбинацию атрибутов и функций.

Определение класса Vehicle выглядит следующим образом:

Пример

Class Vehicle { Number no_of_wheels Number horsepower Characters type_of_tank Number Capacity Функция speeding { } Функция driving { } Функция halting { } }

Присваивая разные значения этим элементам данных, вы можете создавать разные экземпляры класса Vehicle. Например, у самолёта три колеса, 1,000 лошадиных сил и вместимость топливного бака 100 литров. Точно так же у автомобиля четыре колеса, 200 лошадиных сил и вместимость бензобака 25 литров.

Определение классов в Ruby

Чтобы реализовать объектно-ориентированное программирование в Ruby, сначала нужно научиться создавать объекты и классы в Ruby.

В Ruby классы всегда начинаются с ключевого словаclass, за которым следует имя класса. Первая буква имени класса должна быть заглавной. КлассCustomerвыглядит следующим образом:

class Customer end

Вы можете использовать ключевое словоendдля завершения класса.КлассВсе элементы данных размещаются между определением класса иendключевое слово.

Переменные в классах Ruby

Ruby предоставляет четыре типа переменных:

  • Локальные переменные:Локальные переменные — это переменные, определённые внутри метода. Локальные переменные недоступны вне метода. В последующих главах вы увидите больше подробностей о методах. Локальные переменные начинаются со строчной буквы или _.
  • Переменные экземпляра:Переменные экземпляра можно использовать в разных методах внутри любого конкретного экземпляра или объекта. Это означает, что переменные экземпляра могут изменяться от объекта к объекту. Переменные экземпляра имеют символ (@), помещённый перед именем переменной.
  • Переменные класса:Переменные класса могут использоваться в разных объектах. Переменные класса принадлежат классу и являются атрибутом класса. Перед именем переменной класса ставится символ (@@).
  • Глобальные переменные:Переменные класса нельзя использовать в разных классах. Если вы хотите иметь переменную, которую можно использовать в разных классах, нужно определить глобальную переменную. Глобальные переменные всегда начинаются со знака доллара ($).

Пример

Используя переменную класса @@no_of_customers, можно определить количество созданных объектов, а значит, и количество клиентов.

Пример

class Customer @@no_of_customers=0 end

В Ruby для создания объектов используется методnew.

Объекты — это экземпляры классов. Теперь вы узнаете, как создавать объекты класса в Ruby. В Ruby можно использовать метод классаnewдля создания объектов.

Методnew— это специальный метод, предопределённый в библиотеке Ruby. Метод new принадлежит методуClass.

В следующем примере создаются два объекта класса Customer, cust1 и cust2:

cust1 = Customer. new cust2 = Customer. новый

Здесь cust1 и cust2 — имена двух объектов. После имени объекта идёт знак равенства (=), после знака равенства идёт имя класса, затем оператор точка и ключевое словоnew。

Пользовательские методы для создания объектов Ruby

В методnewможно передавать параметры, которые можно использовать для инициализации переменных класса.

Когда вы хотите объявить метод с параметрамиnewметода, вам нужно объявить метод при создании класса.initialize。

initializeМетод — это особый тип метода, который будет выполнен, когда вызываетсяnew-метод класса с параметрами.

В следующем примере создается метод initialize:

Пример

class Customer @@no_of_customers=0 def initialize(id, name, addr) @cust_id=id @cust_name=name @cust_addr=addr end end

В этом примере вы можете объявить метод сid、name、addrв качестве локальных переменныхinitializeметода. Здесьdefиendиспользуется для определения методов Ruby.initializeВ последующих главах вы узнаете больше подробностей о методах.

ВinitializeВ методе значения этих локальных переменных передаются в переменные экземпляра @cust_id, @cust_name и @cust_addr. Здесь значения локальных переменных передаются вместе с методом new.

Теперь вы можете создавать объекты следующим образом:

cust1=Customer.new("1", "John", "Апартаменты Уиздом, Лудхия") cust2=Customer.new("2", "Поул", "Нью Эмпайр роуд, Кхандала")

Функции-члены в классах Ruby

В Ruby функции называются методами.КлассКаждый метод в нем начинается с ключевого словаdef, за которым следует имя метода.

Имена методов всегда начинаются сострочных букв. В Ruby можно использовать ключевое словоend, чтобы завершить метод.

Следующий пример определяет метод Ruby:

class Sample def function statement 1 statement 2 end end

Здесь,statement 1иstatement 2— это метод внутри класса Sample,functionа следующие являются компонентами его тела. Эти инструкции могут быть любыми допустимыми инструкциями Ruby. Например, мы можем использовать методputsдля выводаHello Ruby, следующим образом:

class Sample def hello puts "Hello Ruby!" end end

Следующий пример создаёт объект класса Sample и вызывает методhello:

#!/usr/bin/ruby class Sample def hello puts "Hello Ruby!" end end #Использование вышеуказанного класса для создания объектов object = Sample. new object.hello

Это даст следующий результат:

Hello Ruby!

Простой практический пример

Если вы хотите выполнить больше упражнений по классам и объектам, вот практический пример:

Примеры классов Ruby

Другие расширения