Модификаторы управления доступом 

для методов экземпляра ActionScript 

 

 

Для описаний методов экземпляра применяются те же модификаторы  

управления доступом, что и для переменных экземпляра: public, internal, protected 

и private. Доступ к методу экземпляра, объявленному с использованием  

модификатора public, может быть осуществлен как внешними командами по отношению 

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

объявленный с использованием модификатора internal, доступен только для внутренних 

команд пакета, в котором он описан. Метод экземпляра, объявленный с  

использованием модификатора protected, может быть доступен только для кода класса, 

содержащего описание этого метода, или для кода потомков этого класса (мы еще не 

рассматривали наследование, поэтому, если вы незнакомы с  

объектно-ориентированным программированием, не обращайте внимания на этот модификатор). Метод 

экземпляра, объявленный с использованием модификатора private, может быть 

доступен только для кода класса, содержащего описание этого метода. В ситуации, 

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

модификатор internal (доступ внутри пакета). 

Использование модификаторов управления доступом при описании методов  

класса позволяет реализовать на практике принцип «черного ящика». В  

объектно-ориентированном программировании каждый объект рассматривается как черный 

ящик, управляемый с помощью набора внешних смоделированных кнопок.  

Человек, испбльзующий эти кнопки, ничего не знает (и, впрочем, для него это неважно) 

о действиях, происходящих внутри объекта, — его интересует только то, чтобы 

объект выполнил желаемое действие. Открытые методы экземпляра класса  

являются теми самыми кнопками, с помощью которых программист может заставить 

объект выполнить определенную операцию. Закрытые методы экземпляра  

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

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

в описании класса должны быть открыты только те методы, которые требуются 

внешнему коду. Методы, предназначенные для выполнения внутренних операций, 

должны быть описаны с использованием модификаторов private, protected 

или internal. 

В качестве аналогии представьте себе, что объект — это автомобиль, водителем 
которого является программист, использующий объект, а производитель — это 
программист, создавший класс объекта. Чтобы управлять автомобилем, водителю 
совершенно не обязательно знать, как устроен двигатель. Он просто использует 
педаль газа, чтобы набирать скорость, и рулевое колесо, чтобы поворачивать. Задача 
ускорения автомобиля в ответ на нажатие педали газа решается производителем 
автомобиля, но никак не водителем. 
При разработке собственных классов вопросам удобства их использования должно 
уделяться не меньше внимания, чем вопросам их внутренней реализации. Не  
забывайте регулярно ставить себя на место «водителя». В идеальном случае всякий раз, 
когда вносятся изменения во внутреннюю реализацию класса, открытые методы 
класса, используемые внешним кодом, должны изменяться незначительно или 
не изменяться совсем. Если на автомобиль устанавливается новый двигатель, то 
у водителя по-прежнему должна сохраняться возможность пользоваться педалью 
газа. По мере возможности изменяемые части классов необходимо держать «за 
кулисами», в закрытых методах. 
Теперь, возвращаясь к программе по созданию виртуального зоопарка, добавим  
модификатор управления доступом в описание метода eat ( ) класса VirtualPet. 
Поскольку метод eat ( ) является одним из служебных средств, с помощью  
которых внешний код может управлять объектами VirtualPet, он будет реализован 
как открытый. Привожу измененный код: 
package zoo { 
internal class VirtualPet { 
internal var petName; 
private var currentCalories = 1000; 
public function VirtualPet (name) { 
this.petName = name; 
public function eat ( ) { 
this.currentCalories += 100; 
В таком виде метод eat ( ) класса VirtualPet является жестким, поскольку 
всякий раз при вызове этого метода к значению переменной currentCalories 
прибавляется одно и то же количество калорий. В конечном счете необходимо 
добиться, чтобы количество добавляемых калорий изменялось динамически в  
зависимости от типа пищи, которую предлагает пользователь. Чтобы предоставить 
внешнему коду возможность указывать количество добавляемых в процессе  
кормления калорий при вызове метода е a t ( ), придется воспользоваться параметрами 
метода. 




BACK NEXT

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