Наследование в Ruby, модули, примеси
Информация по теме
Цель: познакомиться с механизмами наследования в
Материалы для подготовки
- Глава №5 книги Programming Ruby 2.0
- Главы №3, №9 книги Изучаем Ruby
- Главы №1, №11 книги Путь Ruby
Презентация
Презентацию можно посмотреть по данной ссылке, исходный код примеров можно увидеть по данной ссылке.
Код, написанный на занятии можно скачать по данной ссылке
Практическое занятие
Цель занятия: научиться строить деревья наследования, применять существующие примеси.
Задача: разработать приложение, которое сможет рисовать геометрические фигуры на холсте.
Создадим следующее дерево наследования:
- Базовый класс фигура, имеющий следующие методы:
draw
рисует фигуру на изображении, принимает ссылку на объект-изображение и координаты начала отрисовки.square
возвращает площадь фигуры.- Также свойства
background
иforeground
, содержащие цвета отрисовки фигуры.
- Дочерний класс круг, описываемым значением радиуса.
- Дочерний класс треугольник, описываемый длинами сторон.
- Дочерний класс прямоугольник, описываемый значениями ширины и высоты.
- Дочерний класс квадрат классу прямоугольник, описываемый значением ширины.
- Добавьте в класс фигура модуль
Comparable
, который позволит сравнивать фигуры по площади. Если площади фигур равны, то побеждает фигура с большим количеством точке. Круг всегда побеждает другие фигуры по количеству точек.
Дополнительно вы можете реализовать дочерний класс многоугольник, имеющий статические методы для создания различных форм, а также имеющий метод rotate
, позволяющий развернуть фигуру. Данный класс должен быть дочерним по отношению к классу фигура.
Требования к реализации
- Создайте джем
figures
с помощью инструмента Bundler. - Удалите из
Gemfile
строчкуgemspec
. - Установите с помощью Bundler инструмент Rubocop.
- Исправьте требования Rubocop к исходному коду.
- Запустите
rubocop -a
для автоматического исправления недочётов. - Запустите
rubocop
, проанализируйте требования, исправьте их.
- Запустите
- Установите с помощью Bundler библиотеку
chunky_png
. - В каталое
lib/figures/
создайте файлfigure.rb
и опишите в нём класс Фигура. - В данном каталоге создайте также и файлы для каждого класса-наследника. Для проверки логики работы можно использовать интерактивную консоль:
bundle exec bin/console
- В каталое
bin
создайте исполняемый файлdraw-figures
, который будет рисовать на изображении все фигуры с произвольными цветами фона и границы. Для запуска файла используйтеbundle exec bin/draw-figures
. - Удостоверьтесь, что приложение Rubocop не находит расхождений с требованиями к стилю приложения.