Skip to content
Dima Kruk edited this page Feb 7, 2013 · 4 revisions

Traits - языковое расширение, добавляющее возможность "множественного" наследования в ActionScript3.

В отличие от похожих хаков, это решение предоставляет только поведение, похожее на множественное наследование, пряча все лишние сущности от пользователя (при этом сгенерированный код остается "в лучших традициях ООП"). Все что Вам нужно - это добавить "trait" в список implements Вашего класса. Редактор сделает все остальное. Кроме того, будет работать проверка типов, которая поможет избежать ошибок при наследовании через композицию. Кстати, аналогичный подход используется в языке Groovy++.

##Преимущества использования

  1. Тесная интеграция с IDE, его средства навигации и закладок.
  2. Хорошая организация кода. Каждая реализация имеет имя: имя интерфейса + "Impl".
  3. Повышение юзабилити. В классе, который использует такое поведение, нужно только добавить имя интерфейса в список реализаций.
  4. Код класса не "замусорен" лишними сущностями.

##Реализация

trait traitName extends ClassConcept

Для использования Traits Вам необходимо импортировать язык traits. После этого в окне "интерфейса" появится новая вкладка “Traits”. Реализацию “Traits” можно создать перейдя в эту вкладку.

Пример: Сперва создадим главный класс

public class Elephant extends Sprite implements <none> {
  public function Elephant() {
  } 
}

Затем, создадим interface с одним методом.

public interface Talk extends <none> {
  function talk() : void; 
}

После импорта языка добавим “Traits”. Обратите внимание, это не интерфейс Talk, а типаж Talk:

 trait Talk extends <none> { 
  public function talk() : void {
    trace "Weeeep!"; // let's talk
  }
} 

Теперь вернёмся к главному классу и добавим новый признак в его декларацию. Редактор добавляет "i" справа от имени интерфейса. Это означает, что интерфейс имеет реализацию по умолчанию - имеет поведение "trait".

public class Elephant extends Sprite implements Talk(i){
  public function Elephant() { 
    talk(); // теперь наш Слон может говорить
  } 
}

Clone this wiki locally