Вы, скорее всего, слышали о сеттерах и геттерах в 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: Введение в основы ООП