« Поставить закладку » « Сделать стартовой »

« Форумы » « Блоги » « Статьи » « Новости » « Файлы » « Realcoding IRC » « Site map » « Поиск »


Главная Главная
Анонсы Анонсы
Форумы Форумы
Каталог Каталог
Поиск Поиск
Опросы Опросы
Книжный магазин Книжный магазин
Реклама на сайте
Публикации Публикации
Партнеры Партнеры
Карта Карта сайта
Рассылки Рассылки
RSS экспорт
Настройки Настройки
О нас пишут О нас пишут
Контакты Контакты
Гостевая книга Гостевая книга


ПнВтСрЧтПтСбВс
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
    Популярное
Отсоединенный режим

Функция AccessResource

Способы подсчета количества записей в каждой из таблиц базы данных

Знакомство с анимацией Microsoft SilverLights

Подготовка таблицы к работе

Smarty – не просто шаблоны

Поле редактирования

Встроенные операторы SQL.

Валидация XML

Функция date() - вывод даты и времени в PHP




    Архив файлов



    Сообщества

    Документация

    Кто на сайте
Вы не зарегистрированы.
Имя:

Пароль:

Запомнить

Регистрация позволит Вам пользоваться дополнительными сервисами.
Сейчас на сайте:
Гостей: 204
Пользователей: 0

Статьи:: Интернет технологии :: Flash :: Конструктор



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

Конструктор



Термин конструктор означает "нечто, что создаёт (конструирует) объекты". Мы знаем, что все объекты создаются из классов. Так что конструктор должен быть ЕОВСД (Ещё-Одним-Выдуманным-Словом-Для) класса. Ну, как бы это сказать... Точно так же, как и класс является частным случаем функции (только в ActionScript!), конструктор - это некая часть класса. Эта часть помогает "конструировать" объекты, как вы, наверное, уже догадались. Мы знаем, что объекты создаются при помощи объекта активации и аргументов. Но, стало быть и конструктор - это такой же объект активации. Да, так и есть. Трудности начнутся, когда мы вспомним, что объекта активации не существует, пока мы его не вызовем, а по окончании своей миссии он уничтожается - таких друзей в адресную книгу не вносят. Получается, что единственный способ "активировать" этот объект активации - вызвать свойство, которому он назначен, то есть объект, который даёт имя классу. Это прекрасно работает, потому что аргументы как бы "зажаты" между этими двумя объектами и так прочно друг к другу привязаны, что их часто рассматривают, как единое целое.

Почему нам так важно дать наиболее полное и точное определение конструктора и его работы? Потому что это ещё одно из недокументированных ключевых слов ActionScript, которые иногда бывают просто необходимы. Всякий экземпляр имеет свойство constructor и оно указывает на класс, который его создал, точнее на объект, давший имя классу. Когда вы рассуждаете о конструкторе с точки зрения экземпляра (как в случае с конструктором rover'а), то конструктор это класс, который создал экземпляр. Когда речь идёт о частях класса, то конструктор это скорее объект активации, наряду с аргументами и объектом имени. На самом же деле, подразумевается прототип или свойства, назначенные объекту имени класса (например, Dog.count), потому что они напрямую не участвуют в "конструировании" объекта. Кое-кто может сказать, что мы просто играем словами. Да, возможно, это так. В большинстве других объектно-ориентированных языках программирования конструктор и имя класса, это абсолютно разные понятия. В ActionScript они, конечно, тоже не взаимозаменяемы, но довольно тесно связаны друг с другом и разница между ними подчас очень невелика. Вот почему так важно оперировать точными определениями этих понятий. Фигурально выражаясь, можно сказать, что:

 

  • Class - это нечто вроде хижины.
  • Constructor - это её часть, отвечающая за создание новых вещей.

Ранее мы задавались вопросом, каким именно образом экземпляры ссылаются на класс, который их создал. Ответ на этот вопрос - ключевое слово constructor. Он всегда используется изнутри объекта. Наилучшим образом он действует в границах экземпляра, который вы создали из вашего класса (хотя этим его действие, конечно же, не ограничивается, всегда полезно "пощупать" ActionScript в поисках чего-то новенького и неописанного!). Вот два способа, нахождения конструктора из экземпляра.

Dog = function( )
{
  this.instNum = ++this.constructor.count;
}

// следующие два свойства на самом деле не являются частью 'конструктора' 
Dog.count = 0;         // используется для подсчета созданных собак
Dog.className = "Dog"; // используется для запоминания имени класса

rover  = new Dog( );
fido   = new Dog( );

trace( rover.instNum ); // 1 (первая собака создана)
trace( fido.instNum );  // 2 (вторая собака создана)
trace( rover.constructor.className ); // Dog

Хотя использование конструктора не всегда нормативно, иногда без него просто не обойтись. Очевидным преимуществом доступа к свойствам Dog через instance.constructor.xxx вместо Dog.xxx является то, что если вы когда-нибудь измените имя класса Dog на Canine, вам не придётся перелопачивать весь ваш код в поисках кусков, где есть ссылка на Dog. Такой способ также делает ваш код намного более портативным на тот случай, если, например, вам захочется использовать его в другом классе или даже в другой программе.

Что интересно, у прототипа класса всё-таки есть конструктор, потому что это, в конце концов, такой же объект, как и любой другой - объект, который был кем-то создан. Когда вы определяете класс, он немедленно создаёт объект имени, но не создаёт объекта активации (который создаётся только когда его вызывают). Но вот объект прототипа всё-таки создаётся и это происходит, как только мы определяем класс. Куда указывает конструктор прототипа? Точно так же, как и экземпляр, он указывает на объект класса имени. Но как бы нам это проверить? Можно просто добавить в верхнюю функцию следующее выражение:

trace( Dog.prototype.constructor.className ); // Dog

Довольно громоздко, не так ли? Но если присмотреться, мы увидим, что эта строка всего лишь говорит: "Отследить имя класса объекта, создавшего ("сконструировавшего") прототип Dog". Ладно, если это до сих пор не вполне понятно, то попробуем по-другому. Если перемещать эту строку вверх и вниз по коду, то мы увидим, что объект прототипа создается, как только мы определяем класс Dog, до того, как в прототипе устанавливаются какие-либо свойства.

И напоследок ещё немного странностей. Объект имени класса (Dog) не имеет свойства конструктора, даже не смотря на то, что это объект, который был создан. Имена функций также не имеют конструктора в ActionScript, даже не смотря на то что в других подобных языках программирования (например, в JavaScript) это не так. Причины объяснить не так просто. Попробуйте для начала перелопатить весь ActionScript так, чтобы ему было "удобно" в "крошечном" 200-килобайтном Flash Playr'е. Вот-вот, и я про то же! Давайте-ка лучше перейдём к следующему разделу про методы. Он интересный!




Рубрика: Flash




VivaMP - инструмент для OpenMP.

OpenMP

Инструмент для программистов VivaMP предназначен для помощи разработчикам параллельных программ на базе OpenMP. В статье приведен краткий обзор программного продукта.


Подробнее... | Рубрика: OpenMP | Добавлено: 05.12.2008

Создаем контекстно-зависимое WPF-приложени....

Windows 7

Начинаем цикл публикаций, призванных помочь начинающим программистам в создании контекстно-зависимых приложений для Windows 7. Об этом много говорили на PDC да и мы неоднократно писали о этом новом классе приложений. Пользователи Windows 7 build 6801 могли заметить появление в гаджете погоды опции автоматического определения местоположения компьютера. И сегодня у вас появилась уникальная возможность попробовать себя в создании подобных приложений.


Подробнее... | Рубрика: Windows 7 | Добавлено: 05.12.2008

Windows Vista SP2: что внутри и что важно?.

Windows Vista

В связи с началом программы Customer Preview Program (CPP) для Windows Vista® Service Pack 2 (SP2) хотелось бы вкратце рассказать об основных особенностях этого пакета, а также призвать вас к его загрузке и тестированию. Windows Vista SP2 представляет собой традиционный пакет сервисных обновлений, включающий все накопительные обновления безопасности, выпущенные с момента релиза SP1 в марте 2008 года. Кроме того, Windows Vista SP2 добавляет поддержку новых типов устройств и развивающихся стандартов, которые обретут популярность уже в ближайшее время, и включает все хотфиксы, обнаруженные через программу улучшения качества ПО (CEIP).


Подробнее... | Рубрика: Windows Vista | Добавлено: 05.12.2008

Остальные статьи:

Вышел MySQL 5.1.30, первый стабильный рели...
Тестирование параллельных программ
Архитектура AMD64 (EM64T)
Платформа 2009. Определяя будущее
Windows Vista Bridge Sample Library - упра...
Оптимизация 64-битных программ
Подгрузка через AJAX HTML-кода, содержащег...
Обзор нового релиза самой мощной Ajax библ...
Firebug 1.3 и 1.4 alpha — что нового и инт...
Релиз Microsoft Silverlight 2.0. Что новог...
XML документация в C#
Курсоры в MySQL 5
Microsoft опубликовала подробности о сесси...
Microsoft делится подробностями о том, что...
Тестируем новый javascript от нового брауз...
MySQL Query Cache
Использование провайдеров компиляции в As...
Чего мы ждем от C# 4.0
Delphi 2009 и C++Builder 2009
Джоэл Спольски и Джеф Этвуд запустили новы...


Цитата дня (все,добавить):

Портал фрилансеров

работа на дому


    Рубрикатор

Программирование

C/С++
Обучение
Windows API
XAML
Моделирование
Паттерны
Visual Basic 7 .NET
WxWidgets
Функции WinApi
Функции С++
Разработка под Mac OS
Eiffel
Visual Studio 2008
UI дизайн
Алгоритмы
Конкурсные статьи
Turbo Pascal
Visual Studio
CASE-средства
Visual Studio 2005
Без VCL
Delphi
Тех. документация
Тестирование
Software Testing
ООП
TCP/IP
Google Android
Windows Installer
.NET Framework
Драйвера
C# C Sharp
Справка
Проектирование
Информ. системы
Visual Basic
Assembler
Оптимизация кода
Gtk+
Компоненты
Реинжиниринг
Управление проектами
Extreeme programming
Lotus Notes
Алгебраическое проектирование


Интернет технологии

PHP
Perl
ASP
WAP
Cookies
SSI
CGI
Web Servers
VB Script
DNS
CSS
XML
Html
Java Script
Java2ME
Firewall
Flash
.htaccess
Apache
VRML
Протоколы
Поисковые системы
Технология JAVA
Учебник по PHP
Учебник по JavaScript
Учебник по XML
Java Q&A
AJAX
DHTML
XHTML
Dreamweaver
Web 2.0
Python
Вебмастеру
Cisco
Ruby on Rails
Silverlight

Базы данных

Access
InterBase
MySQL
Oracle
ADO .NET
Основы SQL
Учебник по Access 2002
MS
Microsoft FoxPro
Доступ к данным
XML в MS SQL Server 2000
ODBC и MyODBC
Обучение
Caché
DB2
PostgresSQL
Sybase
Теория
Хранилища данных
Безопасность
Реляционные данные
MySQL и mSQL

Остальное:

Разное
Обзоры книг
Безопасность
Графика и дизайн
Юмор
Linux
Фракталы
Microsoft Axapta
Многоядерность
Сети
Microsoft Office
Работа
MS-DOS
Криптография
Графика и игроделание
Новости SDK
Системы защиты
Учебник по AutoCad
CVS
Windows XP
Windows Server 2003
Windows Vista
Windows 7
Мероприятия