Присвоение/изменение и получение значений свойств класса с помощью методов getter и setter

На этом занятии мы рассмотрим 2 вопроса:

  1. Присвоение/изменение и получение значений свойств класса с помощью методов getter и setter
  2. Дополнительная информация

Программисты, работающие с языком Java знают и практикуют очень полезный способ работы со свойствами классов.

Создаются две специальные функции, так называемые getter и setter (геттер и сеттер), пользоваться которыми очень удобно в ситуациях, когда нужно ПРИСВОИТЬ (если ещё не присвоено!) или ИЗМЕНИТЬ значение свойства (Вы делаете это один раз и не нужно беспокоиться обо всех упоминаниях этого свойства в коде!) или ПОЛУЧИТЬ значение (value) свойства. В итоге работа с кодом становится легче и удобнее.

Ещё раз: getter и setter могут управлять свойствами классов из ЛЮБОГО места кода Вашего проекта, т.е. из другого класса того же пакета, из любого класса другого пакета и т.д. Это очень практично и эффективно.

Для того чтобы это реализовать нужно сделать следующее:

  • изменить модификатор доступа свойства с public на private;
  • написать метод (setter) для этого свойства с именем setProperty, где Property – имя свойства.  Этот метод будет принимать в качестве аргумента новое значение, которое присваивает свойству 
  • для ПОЛУЧЕНИЯ значения свойства нужно создать метод getProperty, который будет возвращать значение свойства.

Например, для изменения имени файла в нашей галерее (см. урок «Использование класса ActionScript 3») нужно написать следующий код:

Заметьте, что не смотря на то, что свойства записаны как private, методы должны быть public! Это обеспечивает доступ к ним из любого места Вашего кода.

Чтобы создать геттер (метод, возвращающий значение свойства) делаем следующее:

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

Создание геттеров и сеттеров в AS 3 осуществляется с помощью ключевых слов set и get. Это дополнительные модификаторы, которые записываются при декларации методов и делают их неявными геттерами и сеттерами.

Давайте разберем это более подробно.

Присвоение/изменение и получение значений свойств класса с помощью неявных сеттеров и геттеров в AS3

Откройте класс, уже содержащий свойства (см. уроки «Создание нового файла ActionScript» и «Класс ActionScript. Создание основной структуры»).

Измените модификатор доступа к свойству с public на private.

Ниже блока со свойствами запишите setter для первого свойства. Например:

Заметьте, что эта запись очень близка к той, что мы разбирали в первой части этого урока, с той лишь разницей, что ключевое слово set записывается отдельно между словом function и именем функции PhotoName. Это небольшое отличие, однако, создает большую разницу. Это ключевое слово превращает метод в неявный сеттер, способный присваивать/изменять значение свойства.

Повторите те же шаги для присвоения значений другим свойствам класса.

Теперь запишите getter, который будет возвращать значение первого свойства класса

Как видите это очень похоже на создание сеттера выше, только вместо ключевого слова set мы записали get и никаких параметров функции PhotoName не передавали.

Проделайте то же самое для остальных свойств класса.

Сохраните файл File –> Save.

Теперь можно использовать созданные getter’ы и setter’ы для присвоения/изменения и получения значений свойств.

Дополнительная информация

Использовать getter и setter нужно следующим образом. Покажем это на примере класса Picture.

ДО создания setter’а обращение к свойству photoName было бы таким:

ПОСЛЕ создания setter’а изменяем значение свойства уже так:

Для тех кто не заметил разницу: в имени свойства класса photoName первая буква — маленькая «p», в имени функции PhotoName (сеттера) — большая «P».

Для получения значения свойства действуем аналогично.

ДО, т.е традиционный способ получения значения свойства:

ПОСЛЕ создания метода PhotoName с модификатором get:

Еще один пример создания и использования сеттера и геттера (спасибо Colt):

Присвоение/изменение и получение значений свойств класса с помощью методов getter и setter: 16 комментариев

      1. Валерий, вероятно Олег имел ввиду данную часть урока <<< Ниже блока со свойствами запишите setter для первого свойства. Например: public function set PhotoName(newName:String):String { photoName = newName; } >>> Скорее всего функция должна возвращать void, а не String

      1. Вы правы в том, что this – это конструкция языка. Это указатель на скажем так самого себя. У каждого класса может быть много экземпляров – объектов. this – это объект. Например вы создали мувиклип и повесили на него реакцию на клик мыши. С помощью this на мышь будет реагировать тот экземпляр по которому вы кликаете.

  1. Нубский но важный для меня вопрос. Дмитрий, прошу ответить. До этого урока все предыдущие делал в Adobe Flash CS 5. В этот раз при тестировании выдало ошибку “классы не должны быть вложенными”. Предполагаю, что это потому, что в Флэш мы уже сразу работаем в классе TimeLine. Так? Тогда как тестировать?

  2. set не возвращает, стоит же void, он просто объекту p1_car, в значение топлива(fuel) записывает значение

  3. Объясните пожалуйста, почему класс Car и функция Car могут иметь одинаковые идентификаторы. Про this непонятно:это работает только внутри класса?

    1. Впредь не буду торопиться задавать дурацкие вопросы. Кажется теперь понял: функция Car это вовсе не функция,а конструктор класса Car и он обязан иметь такой же идентификатор.

  4. public function set PhotoName(newName:String):String { photoName = newName; } – метод должен быть типа void (у меня была ошибка с примером выше) public function get PhotoName():String { returm photoName; } – исправьте слово “returm”

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *