(Продолжение. Начало в №8)
...в доме, который построил Джек |
Мы продолжаем изучать основы ActionScript2. Напомню, что сейчас рассматриваются основные типы данных, и мы остановились на object. На самом деле я специально разбил описание типа object на две части. В первой я просто показал пару завлекательных примеров, а во второй, которую вам предстоит прочитать, мы несколько внедримся в основы объектно-ориентированного программирования. На всякий случай напомню, что данный небольшой цикл материалов рассчитан на начинающих.
Тип object. Продолжение
В прошлом выпуске мы весьма поверхностно прошлись по типу object и привели несколько стандартных примеров. Ну а теперь давайте посмотрим на все более глобально. Как сейчас называется программирование в современных средах разработки? Правильно, объектно-ориентированным (ООП). И при этом мы уже начали рассматривать объекты и постепенно стали понимать, что это такое. На самом деле, объект - это совокупность переменных и подпрограмм, представленная в виде единой структуры, объединенной некой общей концепцией. Переменные, как мы уже упоминали, являются не чем иным, как свойствами объекта, с помощью которых можно менять его состояние, а подпрограммы - методами, за счет которых мы можем управлять его (объекта) поведением.
При этом стоит отметить один важный момент, заключающийся в том, что объекты создаются на базе шаблонов, называемых классами, и некоторые свойства наследуют от них.
Чтобы вам было более иллюстративно представить, возьмем пример из обычной жизни. Допустим, какой-нибудь музыкальный инструмент - гитару. Она имеет свои индивидуальные свойства и методы, которые можно к ней применить, при этом относится к классу струнных щипковых, который содержит в себе информацию о способе звукоизвлечения и т.п., эти свойства гитарой наследуются. К этому же классу струнных щипковых относится и множество других различных музыкальных инструментов типа банджо, мандолины и т.п. Но вместе с тем сам класс струнных щипковых является подклассом струнных, т.е. в данном случае "струнные" являются суперклассом. В общем, такие цепочки могут быть абсолютно любыми по структуре и длительности, иметь множество ответвлений. Не совсем понятно?
Кот серый с зелеными глазами, вредный (индивидуальные свойства и методы), относится к одной из пород домашних кошек (свойства породы - свойства класса), которые относятся к семейству кошачьих (свойства и особенности строения животных - свойства надкласса), которые, в свою очередь, относятся к млекопитающим и так далее.
В общем, если вы знаете произведение под названием "Дом, который построил Джек", то это и есть классический пример наследования в объектно-ориентированном программировании.
Причем не только в нем, поскольку по примерно такому же принципу разветвленных цепочек разработано очень многое, например, те же структурированные базы данных, или же, когда вы начнете рассматривать структуру XML-файлов, то столкнетесь примерно с такой же картиной. Дело в том, что само объектно-ориентированное программирование не является чем-то искусственным или неестественным для нашего мышления, наоборот, оно его во многом повторяет.
Что такое классы?
Как вы поняли, классы - это шаблоны, на базе которых создаются объекты. Например, чтобы вывести новую породу собаки или новый сорт картофеля, вам не нужно повторять все этапы эволюции, а стартовать от какого-нибудь близкого класса. Точно так же и в программировании: для создания нового объекта вы используете конструктор соответствующего ему класса. Это не только минимизирует код, но и оптимизирует саму программу. Заложенное автоматизированное наследование в данном случае повышает эффективность работы алгоритмов, значительно защищает от путаницы и ошибок. Сама структура получается стройной, понятной и организованной. В принципе, в ActionScript классы задаются по-другому, если сравнивать его с теми же С++ и Java. Здесь как всегда - все в более свободном стиле.
На данном этапе это пока все, что вам необходимо знать о классах.
Тип object. Продолжение
Многим может показаться, что тип object относится к одноименному классу Object (обратите внимание на то, что названия классов пишутся с заглавной буквы, а типов - со строчной), являющемуся прародителем всех объектов и классов в ActionScript. Но это не совсем верно. Правильнее будет сказать, что все экземпляры класса Object принадлежат к типу object, но вместе с тем не все объекты напрямую относятся к одноименному классу.
Еще один важный момент: Object следует причислять к динамическим классам, что подразумевает возможность изменения их свойств в процессе воспроизведения фильма либо добавление новых свойств. К динамическим классам также относятся: Array, MovieClip, TextField и Button. Если же вы сталкиваетесь со статичным (простым) классом, то свойства добавлять там уже нельзя.
Тип movieclip
Вот тут то и начинается, что называется, свистопляска. На вопрос о том, какое основное специфическое отличие Adobe/Macromedia Flash от других продуктов, многие часто отвечают: специальная оболочка вывода графического интерфейса Flash Player. Это правильный ответ, но не совсем открывает саму суть.
Правильный ответ должен быть таким: основной структурный элемент флэша - это клип. Конечно, вы можете нарисовать или создать с помощью стандартных компонент любую примитивную программную графическую оболочку, и функционально она ничем не будет отличаться от того, что вы можете написать на С++, Delphi или Java. Но все равно вы это все делаете в рамках некоего клипа (фильма), мало того, этот клип может включать в себя множество других клипов, которые можно располагать в различных кадрах на разных слоях.
В различных кадрах и на разных слоях вводится и программный код. Это вносит очень много путаницы, и тут стоит напомнить, что ActionScript изначально был создан всего лишь как специализированный обслуживающий язык, и хотя мы можем наблюдать нечто на базе ECMA-262, никто не исключал специфику самой программной оболочки флэша.
В этом проявляется основное расхождение с другими языками и, вообще, с ECMA-платформой.
И, кстати, даже с первых версий флэша можно сказать, что ActionScript там был изначально предназначен для работы с клипами, а стандартное программирование стояло на втором плане. В других языках вы не встретитесь с понятиями, схожими с "клипами" во флэше. Ведь клипы - это не просто объекты, а визуальные динамически изменяющиеся элементы, в которых может быть множество слоев, существует привязка к временной шкале, кадрам, системе координат, имеется множество уникальных методов и свойств. То есть, создатели ActionScript изначально решали очень специфическую задачу.
Многие могут подумать, что movieclip - это то же самое, что и object, но на самом деле это не так, поскольку есть разница. Например, при вызове клипа вы имеете в виду конкретный элемент (например, swf-фильм) с конкретным же именем, а не некую область памяти, как это есть в объектах. Объекты существуют, пока на них есть ссылки, клипы - до тех пор, пока их не удалят из временной диаграммы. Естественно, к клипам не применимо использование таких операторов, как new и delete, вместо них используются createEmptyMovieClip и removeEmptyMovieClip, также возможна загрузка клипов из библиотеки либо каких-либо других источников.
Клипы больше связаны с визуальной частью флэша, в то время как объекты могут быть созданы и для внутреннего использования в рамках кода. В общем, отличий достаточно много, хотя, если посмотреть на все в общем, то можно отметить некую схожесть при работе с клипами и работе с объектами. Причем клипы могут располагаться как свойства объектов, а объекты - как свойства клипов. Это вносит еще больше путаницы.
В следующем выпуске мы более подробно рассмотрим movieclip'ы и подробно поговорим о классах, а сейчас сделаем некоторые промежуточные выводы...
Промежуточные выводы
В последних версиях флэша можно наблюдать лавирование между двумя радикально отличающимися направлениями: профессиональным программированием и реализацией простого языка, понятного дизайнерам, а не программистам. В первом случае дальнейшее развитие было очевидно - приближение к Java, что, в принципе, мы и имеем в ActionScript3 и Adobe Flex 2. А для второго варианта ActionScript2 уже является чрезмерно достаточным. Хотя тут, опять же, следует отметить турбулентность в стане разработчиков. Ведь версии ActionScript'ов (1-я, 2-я и 3-я) практически не совместимы между собой. Именно такой ценой во флэш было внедрено профессиональное программирование.
Поэтому если вы читаете сейчас в интернете одно из частых объявлений типа "на долгосрочные серьезные проекты требуются разработчики Flex (не Flash), желательно твердое знание Java", то это говорит о том, что ActionScript3 - это уже чистое программирование, а Flash с его ActionScript2 - это другая, отдельная, "тусовка".
Кристофер,
christopher@tut.by
Горячие темы