Классы - неотъемлемая часть ActionScript 3.0. Это справедливо для ActionScript 3.0 как ни для одной другой, более ранней версии этого языка. ActionScript 1.0 был преимущественно процедурным языком со скромными объектно-ориентированными возможностями. Action-Script 2.0 формализовал объектно-ориентированные черты и сделал большой шаг по направлению к истинно объектно-ориентированному языку. Однако именно ActionScript 3.0 меняет основной курс Action-Script и делает классы основными строительными блоками языка. Ес¬ли ActionScript 3.0 используется с Flex, то весь код ActionScript дол¬жен находиться в классе, исключение составляет код, размещаемый в тегах
Как уже говорилось, класс - это основной строительный блок всех приложений на ActionScript 3.0. Поэтому, чтобы создавать приложения, необходимо освоить азы написания классов. Для начинающих заметим, что все классы должны размещаться в обычных текстовых файлах, имеющих расширение .as. В одном файле может, располагается только одно описание открытого класса. Имена файла и класса должны быть одинаковыми. Например, если имя класса Example, тогда его описание должно храниться в файле под названием Example.as. В ActionScript 3.0 все классы должны размещаться в пакетах.
Пакет - это средство организации классов в группы. В ActionScript 3.0 пакет тождествен каталогу файловой системы. Пакеты соответствуют пути к классу, но в этом вводн. обсуждении будем считать, что путь к классу - это и путь к проекту (файлу .fla в случае Flash, основному классу или документу MXML в случае Flex). Следовательно, пакет верхнего уровня аналогичен корню проекта. Описание пакета всегда стоит самым первым в файле класса. Вот пример синтаксиса:
package имя {
}
Когда класс определяется как часть пакета верхнего уровня, имя пакета задавать не надо. В этих случаях описание пакета имеет следующий вид:
package {
}
Когда файл класса сохраняется в подкаталоге, имя пакета соответствует относительному пути подкаталога (имена каталогов разделяют точками (.)). Например, если файл сохраняется в подкаталог (относительно корня проекта) example, описание пакета имеет вид:
package example {
}
Если файл класса сохраняется в подкаталоге example под именем subpackage (подпакет), описание пакета будет таким:
package example.subpackage {
}
Пакеты являются важной частью работы с классами, потому, что позволяет предотвратить конфликты имен классов. Например два разработчика вполне могут написать два разных класса и назвать MessageManager (Диспетчер Сообщений). Эти два класса могут иметь одинаковые имена, но отвечать за очень разные задачи. Один может управлять сообщениями электронной почты, а другой заниматься передачей двоичных сообщений через сетевые соединения. В одной области видимости не может быть двух классов с одинаковыми именами. Если это происходит, компилятор не знает, какой из классов использовать. Единственный выход — всегда давать классам уникальные имена
В этом примере можно было бы назвать классы EmailManager и BinarySocketMessageManager. Однако есть веские причины, по которым такой подход не всегда возможен или приемлем. Проект потенциально может использовать сотни классов, поэтому очень сложно обеспечит: уникальность имен всех классов. Более того, многие проекты могут задействовать уже существующие библиотеки кода, созданные другими разработчиками. А так как многие классы библиотеки могут быть взаимосвязаны с другими классами, изменение их имен вызвало бы большие сложности. Вот здесь на помощь приходят пакеты. Даже не смотря на то, что в одном каталоге не может быть двух одинаково на званых классов, таких классов может быть сколько угодно, их просто нужно сохранять в разных каталогах. Один класс MessageManager можно поместить в пакет net.messaging.email, а другой MessageManager в пакет net.messaging.binarysocket.
Приведенные имена пакетов на первый взгляд кажутся приемлемыми, однако можно обеспечить более высокую степень их уникальности. Как правило, лучше всего выбирать имя пакета, ориентируясь на его владельца и/или проект. Имена пакетов принято начинать с доменных имен, написанных в обратном порядке. Например, если корпорация Example Corp (examplecorp.com) создает классы ActionScript 3.0 она помещает их все в пакет com.examplecorp. Тогда если другая Example Corp из Великобритании (example corp.co.uk) тоже пишет классы ActionScript 3.0, она может обеспечить уникальность, назвав пакет uk.co.examplecorp.
Данная рекомендация не относится к классам, составляющим продукт или библиотеку, область действия которых шире, чем компания/организация. К примеру, все собственные классы Flash Player располагаются в пакете Flash (например, flash.net. URLRequest) и все классы библиотеки «Сборника рецептов Ac¬tionScript 3.0* находятся в пакете ascb (смотрите http://www. rishtactionscript.com/ascb).
Если классы представляют собой часть стандартной библиотеки, за¬действованной в нескольких проектах в пределах компании/организа¬ции, то их можно поместить в подпакеты основного пакета. Так, если вышеупомянутые классы MessageManager - это часть стандартной библиотеки, используемой многими приложениями Example Corp, то они могут размещаться в пакетах com.examplecorp.net.messaging.email и com.examplecorp.net.messaging, binarysocket. Если класс представля¬ет собой часть конкретного приложения, то он должен находиться в специальном подпакете этого приложения. Например, у Example Corp может быть приложение WldgetStore. Если приложение WldgetStore использует класс ApplicationManager, то он должен быть помещен в пакет com.examplecorp.widgetstore или его подпакет.
Имена пакетов начинаются со строчной буквы.
Следующий шаг - объявить сам класс:
public class Имя {
}
В соответствии с соглашением об именовании имя класса начинается с прописной буквы. Имя класса должно подчиняться тем же правилу именования, что и переменные, и функции (состоят из букв, цифр и символов подчеркивания, не могут начинаться с цифры). Описание класса располагается в описании пакета. Следующий код, описывает класс Example в рамках пакета верхнего уровня:
package {
public class Example {
}
}
Тело класса в описании класса заключено в фигурные скобки. Оно стоит из свойств и методов. Свойства - это переменные, ассоциированные с классом. Они объявляются во многом так же, как переменные с помощью ключевого слова var. Однако для свойств должны быть определены еще и атрибуты, определяющие их область видимости. Вот список атрибутов, которые могут использоваться со свойствами: Закрытые (private) свойства доступны только внутри класса.
Открытые (public) свойства доступны как в классе, так и в экземплярах класса (или по прямой ссылке на класс, когда объявлены статические (static)).
Защищенные (protected) свойства доступны только в классе и под классах.
Внутренние (internal) свойства доступны в рамках пакета.
По умолчанию, если не задан другой атрибут, все свойства объявляются как (internal). В большинстве случаев свойства должны объявляться с идентификаторами private или protected. Имена закрытых и защищенных свойств полезно начинать с символа подчеркивания (_). В следующем примере объявляется новое закрытое свойство _id класса Example:
package {
public class Example {
private var _id:String;
}
}
Методы - это функции, ассоциированные с классом. Они объявляются практически так же, как функции, с ключевым словом function. Одна¬ко, как и свойства, все методы должны принадлежать пространству имен, определенному одним из атрибутов из приведенного выше спи¬ска. Атрибуты public, private, protected и internal для методов и свойств имеют одинаковое действие. Методы должны объявляться с модифи¬катором public, если предполагается вызывать их из экземпляров класса (или из самого класса, если он объявлен static). Если метод бу-дет вызываться только из класса, он должен быть объявлен с модифи¬катором private или protected. Метод должен быть защищенным, если необходима возможность ссылаться на него из подкласса. В следую¬щем фрагменте кода объявляется метод getld():
package {
public class Example {
private var _id:String;
public function getld():String {
return _id;
}
}
}
Имена методов подчиняются тем же правилам, что и имена переменных и свойств. Это означает, что имена методов должны содержать только цифры, буквы, символы подчеркивания и знак доллара. Кроме того, не¬смотря на возможность включать цифры, начинаться с цифры имя ме¬тода не может. Имена методов принято начинать со строчных букв. Од¬нако есть одно исключение. В каждом классе может быть особый метод, имя которого аналогично имени класса. Этот особый метод называется конструктором и, как следует из названия, он служит для создания новых экземпляров класса. В ActionScript 3.0 все конструкторы долж¬ны быть открытыми (public, и в этом отличие от ActionScript 2.0).
В от¬личие от стандартных методов, конструкторы не могут возвращать значения и не должны объявлять возвращаемый тип. В следующем Фрагменте кода объявляется метод-конструктор класса Example:
package {
public class Example {
private var _id:String;
public function Example() {
_id = "Example Class";
}
}
}
public function getld():String {
}
Ниже показано создание экземпляра класса Example:
var example:Example = new Example();
trace(example.getld()); //На экран выводится: Example Class
Комментариев нет:
Отправить комментарий