Программирование на языке Ruby
Шрифт:
Отметим
11.2.2. Специализация отдельного объекта
Я солипсист и, признаться, удивлен, что большинство из нас таковыми не являются.
В большинстве объектно-ориентированных языков все объекты одного класса ведут себя одинаково. Класс — это шаблон, порождающий объекты с одним и тем же интерфейсом при каждом вызове конструктора.
Ruby ведет себя так же, но это не конец истории. Получив объект, вы можете изменить его поведение на лету. По сути дела, вы ассоциируете с объектом частный, анонимный подкласс, все методы исходного подкласса остаются доступными, но добавляется еще и поведение, уникальное для данного объекта. Поскольку это поведение присуще лишь данному объекту, оно встречается только один раз. Нечто, встречающееся только один раз, называется синглетом (singleton). Так, мы имеем синглетные методы и синглетные классы.
Слово «синглет» может стать источником путаницы, потому что оно употребляется и в другом смысле - как название хорошо известного паттерна проектирования, описывающего класс, для которого может существовать лишь один объект. Если вас интересует такое использование, обратитесь к библиотеке
В следующем примере мы видим два объекта, оба строки. Для второго мы добавляем метод
Добавление
Отметим попутно, что у более «примитивных» объектов (например,
Если вам приходилось разбираться в коде библиотек, то наверняка вы сталкивались с идиоматическим использованием синглетных классов. В определении класса иногда встречается такой код:
В теле определения класса слово
Еще одно распространенное применение такой техники — определение на уровне класса вспомогательных функций, к которым можно обращаться из других мест внутри определения класса. Например, мы хотим определить несколько функций доступа, которые преобразуют результат своей работы в строку. Можно, конечно, написать отдельно код каждой такой функции. Но есть и более элегантное решение — определить функцию уровня класса
Газлайтер. Том 31
31. История Телепата
Фантастика:
боевая фантастика
попаданцы
альтернативная история
фэнтези
рейтинг книги
Том 12. Курт Воннегут
Фантастика:
научная фантастика
рейтинг книги
Эзотерическое целительство
4. Трактат о семи лучах
Религия и эзотерика:
эзотерика
рейтинг книги
Перри Родан
Фантастика:
космическая фантастика
рейтинг книги
О маленьких рыбаках и больших рыбах. Наш аквариум
Детские:
детская проза
рейтинг книги
Князь Медведев. Дилогия
Медведев
Фантастика:
аниме
фэнтези
попаданцы
рейтинг книги
Основы общей психологии
Мастера психологии
Научно-образовательная:
психология
рейтинг книги
Россия распятая (Книга 1)
Проза:
русская классическая проза
рейтинг книги