Информация по теме

Цель: познакомиться с механизмами наследования в

Материалы для подготовки

  • Глава №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 не находит расхождений с требованиями к стилю приложения.