Книга: Программирование на языке Ruby
11.2.3. Вложенные классы и модули
11.2.3. Вложенные классы и модули
Классы и модули можно вкладывать друг в друга произвольным образом. Программисты, приступающие к изучению Ruby, могут этого и не знать.
Основная цель данного механизма — упростить управление пространствами имен. Скажем, в класс File
вложен класс Stat
. Это помогает «инкапсулировать» класс Stat
внутри тесно связанного с ним класса, а заодно оставляет возможность в будущем определить класс Stat
, не конфликтуя с существующим (скажем, для сбора статистики).
Другой пример дает класс Struct::Tms
. Любая новая структура Struct
помещается в это пространство имен, не «загрязняя» расположенные выше, a Tms
— в действительности тоже Struct
.
Кроме того, вложенный класс можно создавать просто потому, что внешний мир не должен знать о нем или обращаться к нему. Иными словами, можно создавать целые классы, подчиняющиеся тому же принципу «сокрытия данных», которому переменные и методы экземпляра следуют на более низком уровне.
class BugTrackingSystem
class Bug
#...
end
#...
end
# Никто снаружи не знает о классе Bug.
Можно вкладывать класс в модуль, модуль в класс и т.д. Если вы придумаете интересные и изобретательные способы применения этой техники, дайте нам знать.
- 11.2.1. Отправка объекту явного сообщения
- 11.2.2. Специализация отдельного объекта
- 11.2.3. Вложенные классы и модули
- 11.2.4. Создание параметрических классов
- 11.2.5. Использование продолжений для реализации генератора
- 11.2.6. Хранение кода в виде объекта
- 11.2.7. Как работает включение модулей?
- 11.2.8. Опознание параметров, заданных по умолчанию
- 11.2.9. Делегирование или перенаправление
- 11.2.10. Автоматическое определение методов чтения и установки на уровне класса
- 11.2.11. Поддержка различных стилей программирования
- 9 Классы и модули
- Модули констукторов заданий
- 9.1. Классы и прототипы
- Речевые модули для «холодного» звонка с целью назначить встречу
- Классы сертификатов
- Статические классы
- ВЛОЖЕННЫЕ СТРУКТУРЫ
- Речевые модули для завершения продажи
- 9.8. Классы в ECMAScript 5
- 3.3.3. Модули аутентификации
- 7.2. Модули
- 9.7.4. Иерархии классов и абстрактные классы