Поліморфізм в Ruby - це концепція об’єктно-орієнтованого програмування, яка означає здатність об’єктів реагувати на однакові повідомлення (методи) в різний спосіб, в залежності від їх типу або класу. Це дозволяє використовувати методи з однаковим ім’ям на різних класах з різними імплементаціями.
У Ruby він може бути реалізований за допомогою наслідування (унаслідування методів від батьківського класу), а також за допомогою використання модулів і міксінів для додавання специфічного функціоналу до різних класів. Це дозволяє використовувати однаковий інтерфейс для об’єктів різних типів, що спрощує роботу з кодом і робить його більш гнучким.
Поліморфізм в об’єктно-орієнтованому програмуванні означає, що різні об’єкти можуть відповідати на однакові повідомлення (методи) унікальними способами. У Ruby це означає, що ви можете мати об’єкти різних класів, які реалізовують один і той самий метод, але роблять це по-різному в залежності від свого контексту.
Наприклад, розглянемо класи Кіт
та Собака
, які наслідують від загального класу Тварина
. У класі Тварина
може бути метод звук
, який повертає звук, який видає тварина. Коли ви викликаєте метод звук
на об’єкті Кіт
, він може повертати “М’яу”, а коли ви викликаєте його на об’єкті Собака
, він може повертати “Гав”.
class Тварина
def звук
raise NotImplementedError, 'Потрібно реалізувати цей метод у підкласі'
end
end
class Кіт < Тварина
def звук
'М\'яу'
end
end
class Собака < Тварина
def звук
'Гав'
end
end
кіт = Кіт.new
puts кіт.звук # Виводить "М'яу"
собака = Собака.new
puts собака.звук # Виводить "Гав"
У цьому прикладі метод звук
є поліморфним, оскільки він повертає різні значення в залежності від типу об’єкта, на якому він викликається.
Поліморфізм в Ruby також можна досягти за допомогою модулів та міксінів, де різні класи можуть включати спільний функціонал, щоб додати функціональність до своїх об’єктів без спадкування від одного класу.
Отже, поліморфізм в Ruby дозволяє збільшувати гнучкість програми, дозволяючи обробляти об’єкти різних класів однаковим способом, що спрощує роботу з кодом і робить його більш зрозумілим та легшим для розширення.