Переменные экземпляра ActionScript 

 

 

Ранее было сказано, что класс используется для описания характеристик и  

поведения объекта определенного типа. В объектно-ориентированном  

программировании под характеристикой понимают определенную часть информации (то есть 

значение), которая описывает определенный аспект объекта, например ширину, 

скорость или цвет. Для отслеживания характеристик объекта применяются  

переменные экземпляра. 

Переменная экземпляра — это переменная, принадлежащая определенному объекту. 

Обычно каждая переменная экземпляра описывает некую характеристику объекта, 

к которому принадлежит. Например, переменной экземпляра может являться  

идентификатор wi dth, связанный со значением 150, которое определяет ширину  

кнопки интерфейса, или идентификатор shippingAddress, связанный со значением 

ул. Некая, 34, которое определяет адрес доставки объекта заказанного товара. 

Как видно из следующего обобщенного кода, переменные экземпляра создаются 

с помощью размещаемых непосредственно в описании класса описаний  

переменных: 

class НекийКласс { 

var идентификатор = значение: 

Добавление описания переменной экземпляра в описание класса приводит к  

автоматическому присоединению этой переменной к каждому экземпляру данно- 

го класса. Как и в случае с локальными переменными, инициализатор описания 
переменной экземпляра задает исходное значение для создаваемой переменной. 
Однако, поскольку в переменных отдельно взятого экземпляра класса хранятся 
его собственные значения, исходное значение переменной экземпляра зачастую не 
указывается и присваивается позднее уже при выполнении программы. 
В качестве примера добавим переменную экземпляра в класс VirtualPet. Она 
позволит отслеживать имя каждого объекта VirtualPet. Переменную экземпляра 
назовем именем pet Name: 
package zoo { 
internal class VirtualPet { 
var petName - "Unnamed Pet"; 
В результате использования приведенного кода переменная экземпляра petName  
будет автоматически присоединена к каждому новому экземпляру класса Vi r tual Pet. 
Исходным значением переменной petName для всех экземпляров класса VirtualPet 
будет являться фраза Unnamed Pet. Тем не менее после создания экземпляра класса 
VirtualPet переменной petName может быть присвоено новое, индивидуальное 
значение. 
Для присвоения переменной экземпляра нового значения используется следующий 
обобщенный код: 
объект.переменнаяЭкземпляра = значение 
Здесь объект — это объект, переменной экземпляра которого присваивается  
значение; переменнаяЭкземпляра — это одна из переменных экземпляра объект (описанных 
в классе объекта); значение — это присваиваемое значение. 
Воспользуемся описанной методикой, чтобы присвоить какое-либо имя объекту 
VirtualPet, созданному ранее в конструкторе класса VirtualZoo. Привожу 
код описания класса VirtualZoo, который содержит все предыдущие  
изменения: 
package zoo { 
public class VirtualZoo { 
public function VirtualZoo ( ) { 
var pet = new VirtualPet; 
В соответствии с обобщенным кодом, используемым для присваивания нового  
значения переменной экземпляра, сначала необходимо обратиться к объекту. В данном 
случае для обращения к желаемому экземпляру класса VirtualPet применим 
локальную переменную pet: 
pet 
Затем ставится точка: 
pet. 
После этого записывается имя переменной экземпляра, значение которой нужно 
изменить — в данном случае petName: 
pet.petName 
В конце ставится знак = и указывается значение, которое необходимо присвоить 
переменной экземпляра. В нашем примере применим значение Stan: 
pet.petName = "Stan" 
Разве это не мило? Теперь у нашего животного появилась кличка. Мы делаем 
успехи. 
Ниже приведен измененный код описания класса VirtualZoo: 
package zoo { 
public class VirtualZoo { 
public function VirtualZoo ( ) { 
var pet = new VirtualPet: 
pet.petName = "Stan"; 
Обратите внимание, что в предыдущем коде значение переменной экземпляра 
petName, описанной в классе VirtualPet, присваивается через экземпляр класса 
VirtualPet, принадлежащего классу VirtualZoo. Следовательно, коду в классе 
VirtualZoo доступна переменная экземпляра petName. Когда класс разрешает 
доступ из других классов к своим переменным экземпляра, он позволяет этим 
классам вносить изменения в характеристики своих экземпляров. 
Имя животного — это характеристика, которая естественным образом пригодна 
для внешнего изменения. Тем не менее некоторые переменные экземпляра  
могут представлять характеристики, которые не должны изменяться за  
пределами класса, содержащего описание данных переменных. Например, далее будет 
создана переменная экземпляра caloriesPerSecond, определяющая скорость, 
с которой у того или иного животного переваривается пища. Если переменной 
caloriesPerSecond присвоить слишком маленькое или слишком большое  
значение, то животное может постоянно хотеть есть или, наоборот, никогда не  
проголодаться. Поэтому, чтобы внешний код не смог присвоить неприемлемое значение 
переменной caloriesPerSecond, необходимо ограничить доступ к этой  
переменной. Для этого применяются модификаторы управления доступом. 
Модификаторы управления доступом для переменных экземпляра.  
Модификатор управления доступом переменной экземпляра определяет уровень доступа 
к этой переменной в программе. Для описаний переменных экземпляра  
существуют следующие модификаторы управления доступом: public, internal, 
protected и private. 
Модификаторы pub lie и internal для переменных экземпляра обладают таким 
же эффектом, что и для классов. Переменная экземпляра, объявленная с  
использованием модификатора public, может быть доступна как внутри, так и снаружи 
пакета, в котором была описана; переменная экземпляра, объявленная с исполь- 
зованием модификатора internal, может быть доступна только внутри пакета, 
в котором была описана. 
Модификаторы protected и private накладывают еще большие  
ограничения, чем модификатор internal. Переменная экземпляра, объявленная с  
использованием модификатора protected, может быть доступна только для кода 
класса, содержащего описание этой переменной, или для кода потомков этого 
класса (мы еще не рассматривали наследование, поэтому, если вы незнакомы 
с объектно-ориентированным программированием, пока не обращайте внимания 
на этот модификатор). Переменная экземпляра, объявленная с использованием 
модификатора private, может быть доступна только для кода класса,  
содержащего описание этой переменной. Если при объявлении переменной никакой 
модификатор не указан, то используется модификатор internal (доступ  
внутри пакета). 
Модификаторы управления доступом для переменных экземпляра перечислены 
в табл. 1.2. 
Модификаторы управления доступом переменной экземпляра
Если для описания переменных экземпляра класса использовать модификатор 
private, то информация каждого экземпляра будет полностью закрыта для  
случайного изменения, что позволит исключить зависимость внешнего кода от  
внутренней структуры класса и избежать случайного присваивания некорректных  
значений переменным экземпляра. Как правило, для каждой переменной экземпляра 
явно указывают модификатор управления доступом. 
Использование модификатора public для описания переменных экземпляра  
является нежелательным, если это не заложено в архитектуру класса, однако если вы 
не уверены в том, какой модификатор управления доступом использовать, то его 
применение становится наиболее предпочтительным. Впоследствии, если  
понадобится, уровень доступа к переменной экземпляра может быть легко изменен, тем 
самым она станет более доступной. Если же переменная экземпляра будет  
описана с использованием модификатора public и внешний код уже использует эту 
переменную, то изменить модификатор управления доступом на private будет 
достаточно сложно. 
В текущей версии нашего приложения, создающего виртуальный зоопарк, к  
переменной экземпляра petName происходит обращение как из класса VirtualPet, 
так и из класса Virtual Zoo, поэтому мы должны описать переменную petName 
с использованием модификатора управления доступом internal, как показано 
в следующем коде: 
package zoo { 
internal class VirtualPet { 
internal var petName = "Unnamed Pet"; 
Обратите внимание, что описание переменной экземпляра с использованием  
атрибута internal аналогично описанию переменной без использования какого- 
либо модификатора управления доступом (поскольку модификатор internal 
применяется по умолчанию). 
В оставшейся части книги вы найдете множество примеров использования  
переменных экземпляра, ознакомиться с которыми можно будет позднее. Пока же 
вернемся к разработке программы создания виртуального зоопарка. 
В настоящий момент структура класса VirtualPet допускает возможность  
присваивания значения переменной petName каждого объекта VirtualPet по  
желанию. Однако если необходимо гарантировать, что имя будет присвоено каждому 
животному, то можно использовать параметры конструктора, которые  
описываются в следующем разделе. 




BACK NEXT

Сайт является частным собранием материалов и представляет собой любительский информационно-образовательный ресурс. Вся информация получена из открытых источников. Администрация не претендует на авторство использованных материалов. Все права принадлежат их правообладателям