В этом посте вы узнаете о языковом расширении под названием Traits , функции новой бета-версии RASE , умной и современной IDE для Adobe Flash на базе Jetbrains MPS. Черты позволят вам использовать множественное наследование в ваших проектах, поэтому класс может эффективно расширять два других класса.
Пример проекта был создан с использованием ActionScript 3.0 с расширением языка Traits с использованием Realaxy ActionScript Editor (RASE). Если вы хотите сделать то же самое, RASE можно скачать здесь (если вы новичок в RASE, пожалуйста, следуйте руководству для начинающих здесь )
Зачем использовать множественное наследование?
ActionScript — это современный объектно-ориентированный язык. В настоящее время фактическое определение и интерпретация ООП предполагают, что множественное наследование является порочной практикой. Таким образом, сама AS не разрешает множественное наследование, и только использование интерфейсов обеспечивает альтернативу. Это все хорошо, не нужно спорить.
Однако иногда это кажется невыносимым. Бывает, что из-за этой недостающей функции мы делаем наш код слишком сложным или даже, возможно, грязным.
Например, у нас есть класс Creature
, который уже расширяет Sprite
. Мы хотим научить его говорить. «Правильный ООП» навязывает нам составить композицию. Итак, нам нужно:
- Создайте интерфейс
ISpeaker
. - Добавьте метод
speak()
вISpeaker
. - Реализуйте этот интерфейс с помощью класса
Speaker
. - Класс
Creature
должен быть унаследован отISpeaker
. - Затем добавьте делегата в класс
Creature
.peak
методs
будет перенаправлять вызов функцииspeak()
делегату. - Ну, это сделано.
Давайте представим, что у нас есть множественное наследование. Затем мы создаем класс Speaker
, наследуя наш класс Creature
от Speaker
. Вот и все, ребята.
Тогда представьте, что наше Существо должно уметь многое: ходить, двигать руками и ногами, есть, улыбаться, плакать. Может быть, также летать. Вы никогда не знаете, какие требования могут стать частью спецификации. В результате мы получаем сотни и тысячи строк « правильного » ООП-кода, который настолько избыточен и многословен, что понимание его истинного предназначения будет трудным даже для его автора.
Мы, опытные Flashers, понимаем, что описанная ситуация является чисто искусственной. Кто бы создал пакет интерфейсов для каждого аспекта поведения? Даже если они будут применимы не только для Creature
. Действительно, реальный код выглядел бы по-другому, не так красиво и познавательно, но ближе к реальному миру, то есть проще.
Таким образом, оказывается, что лучшие намерения дизайнеров ECMAScript (а затем и ActionScript) по созданию современного и правильного языка ООП плохо вписываются в нашу повседневную работу.
Хватит жаловаться! У нас есть инструмент, чтобы исправить это. RASE. Realaxy ActionScript Editor . Это решение Traits , расширение языка AS3.
Давайте приступим к действию.
Шаг 1
Сначала создайте новый проект с модулем testTraits
содержащим testTraits
основного класса.
Шаг 2
Введите детали проекта, как показано здесь, и нажмите Next:
Шаг 3
Создайте новый класс с именем Creature
в пакете com.example
:
Шаг 4
Этот код должен быть создан:
Шаг 5
Импортируйте язык черт , нажав Ctrl + L (или Command + L ).
Шаг 6
Создайте интерфейс Speak с помощью одного метода « Speak ».
Шаг 7
В нижней части окна есть две вкладки « Интерфейс » и « Черта ».
Выберите вкладку « Черта » (окрашена в серый цвет) и щелкните пустое поле редакторов. Появится диалоговое окно, предлагающее нам создать новую черту.
Шаг 8
После «OK» редактор по умолчанию создает реализацию по умолчанию. Обратите внимание, что теперь это trait Speak
а не interface Speak
:
Шаг 9
Добавьте тело в метод « speak
»: просто проследите «Привет!» на консоль.
Шаг 10
В классе Creature добавьте интерфейс « Speak » для « Implements ».
Шаг 11
Редактор добавил «i» справа от имени интерфейса. Это означает, что интерфейс имеет реализацию по умолчанию — у него есть черта поведения.
Шаг 12
RASE распознает такое поведение и не выделяет никаких ошибок при добавлении методов в класс.
Это оно! Наше Creature
может говорить сейчас! Добавьте вызов метода speak()
в конструктор класса, чтобы доказать это.
Шаг 13
Отредактируйте конфигурацию запуска.
Шаг 14
Вы увидите этот диалог:
Шаг 15
Нажмите кнопку «+», чтобы добавить новую конфигурацию, и выберите ActionScript.
Шаг 16
Введите детали, как показано здесь:
(Таким образом, мы можем быть уверены, что увидим след.)
Шаг 17
Запустите скомпилированный SWF. Привет! сообщение появляется в консоли.
Вот что мы получаем:
- Код интерфейса и реализации связаны с инструментами навигации и закладками в редакторе.
- Код теперь хорошо организован. У каждой реализации есть имя: имя интерфейса + «
Impl
». - Повышение удобства использования. В классе, который использует это поведение, мы только добавляем наш интерфейс в
implemented
список. - Хранение яблок и апельсинов отдельно. Класс Code of
Creature
не «завален» чрезмерными сущностями. Мы только что приказали Существу говорить.
В результате мы имеем поведение, которое действительно похоже на множественное наследование, но опирается на «правильные и правильные» рекомендации ООП.
Шаг 18
Давайте посмотрим, как это работает, посмотрев на код, который мы на самом деле генерируем.
Нажмите « Построить -> Создать ( устаревший ) -> Создать текст из текущей модели ». Вновь созданный код класса Creature
появится в окне «Вывод».
Приведенный выше код реализует классическую композицию. Расширение языка черт скрывает избыточные объекты и организует отношения между артефактами кода. Фактически мы работаем с «чистым» ООП-кодом.
Теперь мы видим новый быстрый и простой способ научить наше Creature
как делать все. Главное — это поведение: мы применяем те же основные правила к другим классам.
Давай сделаем это за 5 минут.
Шаг 19
Добавьте несколько новых черт — по одной для каждой конечности — так же, как мы делали раньше:
Шаг 20
Класс Creature теперь получает много новых навыков, но его код остается легко читаемым и чистым. Без расширения языка черт он был бы совершенно другим:
Пришло время, чтобы попрощаться. Я жду ваших вопросов, предложений и комментариев.
Помните, если RASE является новым для вас, пожалуйста, прочитайте « Руководство для начинающих ».