Evgenii Legotckoi
27 июня 2016 г. 12:38

User Guide #13 - Ruby - наследование

Наша классификация объектов в каждом дне жизни является на самом деле иерархической. Мы знаем, что все кошки млекопитающие, а все млекопитающие являются животными. Наименьшие классы наследуют характеристики из больших классов, к которым они принадлежат. Если все млекопитающие дышат, то все кошки также дышат.

Мы можем выразить эту концепцию в Ruby:

  1. ruby> class Mammal
  2. | def breathe
  3. | print "inhale and exhale\n"
  4. | end
  5. | end
  6. nil
  7. ruby> class Cat<Mammal
  8. | def speak
  9. | print "Meow\n"
  10. | end
  11. | end
  12. nil

Хотя мы не указываем, как Cat должен дышать, каждая кошка будет наследовать это поведение от класса Mammal, с тех самых пор, как Cat был определён подклассом Mammal. (В объектно-оринтированной терминологии меньший класс является подклассом большего класса, являющегося суперклассом) С точки зрения программиста, кошки получают способность дышать бесплатно, а после того, как мы добавим метод speak, то наши кошки смогут дышать и говорить одновременно.


  1. ruby> tama = Cat.new
  2. #<Cat:0xbd80e8>
  3. ruby> tama.breathe
  4. inhale and exhale
  5. nil
  6. ruby> tama.speak
  7. Meow
  8. nil

Могут быть ситуации, где некоторые свойства суперклассов не должны наследоваться определённым подклассом. Хотя птицы, как правило, знают как летать, но пингвины являются нелетающим подклассом птиц

  1. ruby> class Bird
  2. | def preen
  3. | print "I am cleaning my feathers."
  4. | end
  5. | def fly
  6. | print "I am flying."
  7. | end
  8. | end
  9. nil
  10. ruby> class Penguin<Bird
  11. | def fly
  12. | fail "Sorry. I'd rather swim."
  13. | end
  14. | end
  15. nil

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

Вам это нравится? Поделитесь в социальных сетях!

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь