..
Иногда вы хотите создать класс объектов, которые "это" особенность, но и "это" и "это другое", которые, возможно, уже было написано в другом месте в нашем исходном коде.
Другими словами, мы хотим создать класс, который заимствует методы и свойства, определенные в других частях исходного кода или в некоторых библиотек.
Наоборот, мы собирались вокруг те же самые особенности нашего исходного кода в одном месте, доступном для всех. Как?
Пуристов с ужасом объектно-ориентированное программирование и поддержка - на мой взгляд, не совсем без оснований, - что все потребности такого рода могут быть решены с правильного использования полиморфизма.
Другие, особенно если они приходят из опыта применения языков, как C + +, утверждают, что именно из-за этих требований с использованием множественного наследования.
Прагматические языков, таких как Ruby, однако, решения проблемы, предоставляя технику, называемую "примесь", имя - это звучит! - Человек мороженое дал ей Massuchussets состоит из различных вкусов мороженого (сливки, шоколад ...)
Рубин Mixins
Технически, Ruby Mixins реализованы с использованием внутри классов, код, определенный в различных модулей (модуль).
Для того, чтобы тривиальный пример, предположим, что я хотел реализовать текстовый процессор, который автоматически распечатать мои дружелюбие делового письма. Так как вы хотите ввести только необходимые данные, то есть получателя и сообщение. Программа будет думать, как различные дружественные ", сэр" и "С уважением".
Давайте начнем с определения в дружественной форме:
Модуль CordialitaLettera
четкости начала (адрес)
возвращение "Уважаемый г-н". + + получателя "\ п"
конец
Окончательный подписи (письмо)
возвращение письма + "\ п" + "С уважением, \ nCarlo Смит"
конец
конец
Ничто в частности, тогда, только два метода, которые могут изменить текст получил в качестве входных данных.
Давайте напишем класс «смешанных» к этим методам, просто подмешать:
Класс Письма
включает в себя CordialitaLettera
Окончательный stampaLettera (получателя, сообщение)
= Начальная точка (приемник)
= + Разместить письмо
ставит подпись (письмо)
конец
конец
Письма выше класс имеет метод, который принимает в качестве входных данных только переменной части письма, с дружественными формате, определенном в модуле.
Как вы можете видеть синтаксис очень похож на наследование в Ruby, однако, в отличие от последнего, в класс может реализовать любую форму - и, как известно, класс может быть получена из и только один родительский класс (Ruby не поддерживает множественное наследование!)
Например, мы можем написать:
четкости основных ()
Lengin = Lettere.new
lEngine.stampaLettera ("Алессио Saltarini»,
"Я только что приступил к передаче
Вы просили. ')
ставит
lEngine.stampaLettera (Мэтью Pisconi »,
"Я посылаю факс nr.038283873. ')
конец
, которая возвращает:
Уважаемые sig.Alessio Saltarini, Я только что сделал передачу вы просили. С уважением, К. И. Росси
Уважаемые sig.Matteo Pisconi, Я посылаю факс nr.038283873. С уважением, К. И. РоссиЭта технология, помимо прочего, позволяет усваивать использование Mixins что интерфейсов в Java: в самом деле, если класс "смешивания" с формой, на самом деле это будет реализовывать методы (и, следовательно, соответствует определенный интерфейс) .
| |
Руби и Ruby On Rails (курс)
Создание программного обеспечения и веб-приложений с Рубином и RoR. С 39 €. |