ActionScript 3: Что такое сеттеры и геттеры?

Вы, скорее всего, слышали о сеттерах и геттерах в ActionScript 3.0, хотя не многие знают, зачем они нужны. Если переводить дословно с английского, то setter — это установщик чего-либо, а getter — получатель чего-либо. В ActionScript 3.0 это и есть «получатели» и «установщики», специальные методы класса с директивами set и get, которые обрабатывают свойства объекта (переменные класса) при назначении этому свойству данных и при получении данных.

Согласно правилам инкапсуляции в ООП все свойства (переменные) класса должны описываться с директивой private или protected для того, чтобы класс не позволял нарушать свою внутреннюю структуру, так как открытые свойства делают его экземпляры (объекты на основе класса) уязвимыми. Использование сеттеров и геттеров обеспечивает необходимое условие для одного из принципов ООП — инкапсуляции.

Использование явного сеттера в ActionScript 3.0

Давайте рассмотрим небольшой пример. Допустим, есть класс Test, у которого переменная percent с директивой private, и значение этой переменной не может быть меньше нуля и больше сотни. Чтобы не проверять каждый раз во внешнем коде эти условия при назначении и получении данных, можно описать специальные методы, которые будут выполнять необходимый код и проверять данные.

package {

public class Test {

  private var _percent: uint;

  public function Test() {
    _percent = 0;
  }

  public function getPercent():uint {
    return _percent;
  }

  public function setPercent(value:uint) {
    if (value > 100) {
      throw Error("value is more than 100");
    }
    else  {
      _percent = value;
    }
  }
}
}

После того, как вы создадите экземпляр класса Test и вызовите, например, метод test.setPercent(80), то произойдет проверка передаваемого значения. Если значение будет больше 100, то программа выдаст сообщение об ошибке. Можно заменить эту строчку throw Error(""); простым присваиванием значения _percent = 100; , чтобы пользователь не смог превысить допустимый предел значений.

Использование неявного сеттера в ActionScript 3.0

В примере выше нам нужно было вызывать метод setPercent(value:uint) для назначения данных свойству класса, но можно сделать проще, просто описать специальные методы с директивами set и get. Такие методы не нужно вызывать, они вызываются сами при назначении данных свойству, когда используется оператор присваивания или при получении данных. Рассмотрим следующий код:

package  {

public class Test {

  private var _percent: uint;

  public function Test() {
    _percent = 0;
  }

  public function get percent():uint{
    return _percent;
  }

  public function set percent(value:uint){
    if (value > 100) {
      _percent = 100;
    }
    else  {
      _percent = value;
    }
  }
}
}

Для методов класса мы указали директивы get и set, и обозначили, что эти методы будут вызываться при назначении и получении данных свойства percent. Если в основном коде написать test.percent = 80; или test.percent = 120; то неявно произойдет вызов метода public function set percent(value:uint). А если записать, например, trace(test.percent); , то произойдет вызов метода public function get percent():uint.

Можно сказать, что сеттеры и геттеры это свойства класса, которые описаны как методы, и которые производят какие-либо действия при назначении или обращении к данным экземпляра класса.

Скачать исходники примера использования сеттера и геттера в ActionScript 3 вы можете здесь.

Также вы можете почитать о работе сеттеров и геттеров в официальном руководстве AdobeFlash:

ActionScript 3.0: Ключевое слово set
ActionScript 3.0: Ключевое слово get

Чтобы сохранить урок и поделиться в социальных сетях — добавьте статью в закладки социальных сетей, нажмите на значки внизу.

Смотрите также:

Пять причин использовать сеттеры и геттеры в ActionScript 3.0Пять причин использовать сеттеры и геттеры в ActionScript 3.0


ActionScript 3.0: Введение в основы ООПActionScript 3.0: Введение в основы ООП


Комментировать

Почта не публикуется.Обязательные поля отмечены *