Доступ к архиву

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Модули

Статус
В этой теме нельзя размещать новые ответы.

KinG_95

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

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

На самом деле... класс Module модуля является суперклассом класса Class класса. Понятно? Нет? Едем дальше.

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


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

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


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

...Другим способом использования модулей является миксин (mixin). Некоторые ОО языки программирования, включая С++ , допускают множественное наследование , то есть наследование от более чем одного суперкласса. Примером множественного наследования из реальной жизни может служить будильник; можно считать, что будильник принадлежит к классу часы и также к классу жужжалка.

...Ruby умышленно не разрешает множественное наследование, но техника mixin-ов является хорошей альтернативой. Помните, что модули не могут быть инстанциированы и от них нельзя образовать подклассы; но если мы включаем (include) модуль в определение класса, его методы добавляются, или подмешиваются ("mixed in") в класс.

...Миксины можно рассматривать с позиций того, какие частные свойства мы хотим получить. Например, если у класса есть работающий метод each, включая в него модуль Enumerable из стандартной библиотеки бесплатно дает нам методы sort и find.

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