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: Введение в основы ООП


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

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