23 марта 2011 г.

Action Script 3. Урок 9. Атрибуты свойств классов.

Привет всем. Мы продолжаем изучать AS3 и сегодня поближе рассмотрим модификаторы доступа: public, private, protected и т.п.

Многое из предназначения тех или иных атрибутов можно узнать из их имен: public — открытый для всего. private — частный, закрытый, protected — защищенный. Давайте рассмотрим, для чего они нужны и как используются.

Когда мы используем, к примеру, класс Timer, и вызываем метод stop(), мы, по сути, вызываем его из своего класса. То есть, мы обращаемся к методу класса из стороннего класса. В этом случае речь идет об атрибуте public, который позволяет создавать методы и свойства, доступные (видимые) для всех других классов.
Если же нам надо использовать метод или свойство внутри одного класса, то мы должны использовать атрибут private.
Атрибут protected означает, что свойство может использоваться внутри самого класса, и внутри его производных. Этот атрибут мы рассмотрим тогда, когда изучим наследование.
По умолчанию ко всем свойствам присвоен атрибут internal, который открывает свойство для классов всего пакета.

Хорошо, рассмотрим на примере.
1. Создадим .fla и .as файлы в одной папке с одним названием — MainClass. В поле DocumentClass fla-файла сразу пропишем основной as-файл для компиляции — MainClass. В той же папке создадим еще один as-файл с именем Box.as, который будет отвечать за построение прямоугольника.
2. Пишем код Box.as:
package {
import flash.display.*;
import flash.events.*;

public class Box extends Sprite {
private var box:Sprite;

public function Box():void {
createBox();
}
private function createBox():void {
box = new Sprite();
box.graphics.beginFill(0xFF0000);
box.graphics.lineStyle(2);
box.graphics.drawRect(0, 0, 50, 50);
box.graphics.endFill();
addChild(box);
}
}
}

Открываем пакет, импортируем библиотеки, определяем класс.
Далее мы обозначаем глобальные переменные, которые могут использоваться в данном классе в каждом свойстве, т.к. мы определили ввод переменных с атрибутом private.
Далее обозначаем метод-конструктор, который будет отвечать за основные действия этого класса. Он, в нашем случае запускает функцию createBox(), которая создает Sprite-объект прямоугольник. Заметьте, что метод-конструктор имеет атрибут public, а функция createBox() — private.
3. Сохраним этот файл. Мы написали некоторый класс, который строит квадрат. Но программа не скомпилируется, пока не будет написан основной класс. Открываем MainClass.as и пишем код:
package {
import flash.display.*;
import flash.events.*;

public class MainClass extends Sprite {
private var box:Box;

public function MainClass():void {
box = new Box;
box.x = 200;
box.y = 200;
addChild(box);
}
}
}

Возможно, строка private var box:Box; покажется вам странной. Ничего подобного — ведь мы перед этим создали собственный класс Box, который на самом деле является подклассом Sprite.
Далее, в методе-конструкторе мы создаем экземпляр класса Box, устанавливаем координаты и добавляем на сцену.

Сохраним файл (к слову, после каждого изменения as-файла, не забывайте сохранить его, ибо компилятор берет файл из папки), и скомпилируем его.
[swfobj src="http://cyber-page.ru/wp-content/uploads/2011/03/MainClass.swf"]
На сцене появился объект.

4. Теперь нам нужно продемонстрировать смысл атрибута public. Для этого дополним код Box.as.
В тело класса добавим:
public function increase(amount:int):void {
box.width+=amount;
box.height+=amount;
}

Этот метод имеет атрибут public, поэтому может использоваться в других классах. Он увеличивает объект box на указанную величину. Мы будем использовать его из класса MainClass.

5. Обновленный код MainClass.as:
package {
import flash.display.*;
import flash.events.*;

public class MainClass extends Sprite {
private var box:Box;

public function MainClass():void {
box = new Box;
box.x = 200;
box.y = 200;
addChild(box);

stage.addEventListener(MouseEvent.CLICK, boostListener);
}

private function boostListener(e:MouseEvent):void {
box.increase(5);
}
}
}

В метод-конструктор мы добавили прослушиватель событий для клика мышью по сцене.
В тело класса добавили соответствующую функцию, которая вызывает метод increase класса Box, который будет увеличивать квадрат на 5 пикселей.
Сохраним и скомпилируем fla-файл.
[swfobj src="http://cyber-page.ru/wp-content/uploads/2011/03/MainClass1.swf"]
Кликая по сцене, объект увеличивается.

* Если бы метод increase класса Box имел атрибут private, то компилятор бы выдал ошибку 1195, т.е. попросту не обнаружил вызываемого свойства.

6 коммент.:

avtobazar комментирует...

Хороший пост кстати где взять Ваш шаблон?

Cyber комментирует...

avtobazar, шаблон уникален.

Anonymous комментирует...

Мне нравиться стиль написания статей в Вашем блоге. Вы сами пишите статьи или же заказываете у кого-то контент? Если заказываете можете дать контактные данные этого копирайтера?

Cyber комментирует...

Анонимно, контент авторский.

site комментирует...

Интересный топик- Где-то я уже такое читал, .

site комментирует...

Привет. Обменяемся ссылками ? Пишите на oleggo@mail.ru.

Отправить комментарий