User Guide #17 - Ruby - модули

modules, Ruby, ruby lesson, ruby уроки, user guide, модули, руководство пользователя

Модули в Ruby похожи на классы, за исключением того, что:

  • Модуль не может иметь экземпляров
  • Модуль не может иметь подклассов
  • Модуль определяется между операторами module ... end

Действительно... класс модуля некоего модуля является суперклассом класса класса некоего класс. Понятно? Нет? Давайте разберёмся.

Существует два типичных способа использования модулей. Один является коллекцией сходных методов и констант в одном месте. Модуль Math в стандартной библиотеке Ruby играет такую роль:

ruby> Math.sqrt(2)
   1.41421
ruby> Math::PI
   3.14159

Оператор :: сообщает интерпретатору Ruby, какой модуль должен сообщить о значении константы (предположительно, некоторые другие модули кроме Math также могут иметь константу PI ). Если мы хотим ссылаться на методы и константы без использования оператора :: , то мы можем включить этот модуль:

ruby> include Math
   Object
ruby> sqrt(2)
   1.41421
ruby> PI
   3.14159

Другое использование модулей называется mixin . Некоторые объектно-ориентированные языки, включая C++, позволяют множественное наследование, то есть наследование от более, чем одного суперкласса. В реальном мире примером множественного наследования можно считать будильник. Может представить, что будильник принадлежит класса "часы" и также классу "зуммер".

Ruby намеренно не реализует истинное множественное наследование, но mixin техника является хорошей альтернативой. Запомните, что модули не могут быть инстанцированны или иметь суперклассы, но если мы включаем модуль в определение класса, то его методы примешиваются в этот класс.

Mixin может рассматриваться как способ запроса некоторых определённых свойств, которые нам нужна. Например, если класс имеет рабочий метод each , то примешивание модуля Enumerable из стандартной библиотеки даст нам методы sort и find без каких-либо дополнительных усилий.

Такое использование модулей даёт нам базовую функциональность множественного наследования, но позволяет представить отношения класса в виде простой древовидной структуры, и упрощает реализацию языка (подобный шаг был сделан разработчиками Java )

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.
Поддержать автора Donate

Комментарии

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

Здравствуйте, уважаемые пользователи EVILEG !!!

Если сайт вам помог, то поддержите разработку сайта финансово, пожалуйста.

Вы можете сделать это следующими способами:

Спасибо, Евгений Легоцкой

S
16 февраля 2020 г. 13:05
Satrey

C++ - Тест 001. Первая программа и типы данных

  • Результат:20баллов,
  • Очки рейтинга-10
S
16 февраля 2020 г. 12:52
Satrey

C++ - Тест 003. Условия и циклы

  • Результат:50баллов,
  • Очки рейтинга-4
S
16 февраля 2020 г. 12:39
Satrey

Qt - Тест 001. Сигналы и слоты

  • Результат:84баллов,
  • Очки рейтинга4
Последние комментарии
B
16 февраля 2020 г. 13:36
BahaMeirman

Добрый вечер! Монжно по подробней о теге get_companion? ссылка не работает.
16 февраля 2020 г. 9:35
Евгений Легоцкой

Добрый день. На GitHub исходники, можете посмотреть в официальном репозитории
B
16 февраля 2020 г. 9:29
BahaMeirman

Здравстсвуйте Евгений, непонятно мне где эти исходники найти?
ПБ
12 февраля 2020 г. 3:30
Павел Богдевич

Это не то, мне нужно именно делегат отредактировать (без изображения)
Сейчас обсуждают на форуме
16 февраля 2020 г. 14:13
BlinCT

Всем привет. есть те кто сталкивался с данной прогой? Нужна наводка просто как правильно из кучи инфы что содержит файл trace.dat и скармливается kernelshark вытащить причину долгого с…
ИП
16 февраля 2020 г. 11:35
Игорь Порошин

#include <QSqlError>#include <QSqlQuery>...if (!model->select()) { qDebug() << model->lastError().text(); qDebug() << model->query().lastQue…
16 февраля 2020 г. 11:25
BlinCT

Вот моя модель так выглядит SupportedPowerStatesModels::SupportedPowerStatesModels(QVector<SupportedPowerStates * > vector) : m_vector(std::move(vector)){}int SupportedPowerState…
t
16 февраля 2020 г. 10:34
tantrido

Yes, I can but I do not like to spend much time on this. And not sure I can subclass from QAbstractSeries as it does not have custom delegates examples and put any item inside it. PathView insid…
14 февраля 2020 г. 8:49
Ruslan Polupan

Нашел функцию с тарых исходниках php function IntToColor ($v){ return sprintf("%02X%02X%02X",$v&0xFF,($v>>0x8)&0xFF,($v>>0x10)&0xFF);} Может кто помочь адапти…
EVILEG
О нас
Услуги
© EVILEG 2015-2019
Рекомендует хостинг TIMEWEB