Пользователь

Добро пожаловать,

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

Меню сайта




Ваше мнение
Какой браузер Вы предпочитаете?

Internet Explorer
Mozilla Firefox
Opera
Netscape
Chrome
Другой


Результаты
Другие опросы

Всего голосов: 1673
Комментарии: 10


Наши партнеры



Статистика




Programming books  Download software  Documentation  Scripts  Content Managment Systems(CMS)  Templates  Icon Sets  Articles  Contacts  Voting  Site Search




Книги-online



ООП во Flash 5: Методы и свойства

<<    ООП во Flash 5    >>

  Методы и свойства

До сих пор во всех наших примерах свойства классов принимали простейшие значения, такие как "rover" или 5. Имя класса (Dog, например) назначалось им свойству и прототип становился свойством этого класса (Dog.prototype в нашем случае). В ActionScript мы фактически можем назначить что-нибудь свойству. Это отличает ActionScript от многих других языков (Java, например), так что мы оказываемся перед необходимостью разъяснить, что подразумеваем под "свойством". В Java и С++ существует большая разница между методами и свойствами, чего нет а ActionScript-е. Так что же такое методы?

Метод очень похож на то, что мы обычно понимаем под функцией в программе, с одним отличием, методы всегда привязаны к классу и, как правило, вызываются из объекта-реализации этого класса. Методы призваны модифицировать состояние этого объекта и/или возвращать вычисленные значения. Они не используются для создания нового экземпляра класса. Методы никогда не используют свои прототипы, они не помещают свойства в собственное пространство имен (namespace). Методы не похожи на классы. Это просто программы, принадлежащие классу.

Можно сказать, они "выглядят" как классы. Они тоже созданы при помощи функции, однако они не вызываются при помощи оператора new. Их ключевое слово this ссылается на объект, который вызвал этот метод, никак не на созданный новый. Поскольку они, подобно классам, автоматически не возвращают новый объект, они могут возвращать какое-то значение, даже если оно пустое (void) (хотя это не требование, это просто хороший стиль программирования в более строгих языках). И последнее, методам, как и остальным свойствам классов, для их отличия от этих самых классов, лучше всего давать имена, начинающиеся с прописной буквы. Теперь давайте посмотрим маленький примерчик того, как создаются и вызываются методы, и потом разберемся во всех этих терминах, смысл которых, возможно, потихоньку начал от вас ускользать.

// Класс Dog
Dog = function( age )
{
    this.age = age;
    this.dogYears = this.calcDogYears( this.age );
}
// метод Dog - вычисление возраста в собачьих годах
Dog.prototype.calcDogYears = function( age )
{
    return ( this.age * 6 );
}
// метод Dog - у собаки день рождения
Dog.prototype.haveBirthday = function( )
{
    this.age++;
    this.dogYears = this.calcDogYears( this.age );
    trace("С Днем Рождения!")
}

// создание экземпляра собаки (Dog)
yeller = new Dog( 12 );
trace( yeller.dogYears ); // 72
yeller.haveBirthday( );   // метод выдает "С Днем Рождения!"
trace( yeller.dogYears ); // 78

А заметили ли вы, что мы всегда определяем прототипы до того, как создадим экземпляр класса? Flash не может вызывать методы, которые еще не определены, поскольку он считывает и выполняет код в том порядке, как он написан (это все потому, что при загрузке swf файла вы никогда не можете быть уверены в том, загрузился ли определенный кусок кода). Посмотрев на конструктор класса в примере, вы можете углядеть противоречие вышесказанному. Метод calcDogYears вызывается из конструктора до того, как он будет описан в прототипе. Однако конструктор запустится лишь в тот момент, когда будет создан объект "yeller". Когда вы пишете код, вы должны рассматривать класс и его прототип как единый блок и определять их вместе. Методы прототипа обычно определяются после его свойств.

Хотя методы и можно поместить в экземпляр класса, такое происходит редко. Методы по природе своей более статические, чем строки или числа, так что они вероятнее всего останутся отдельным большим классом. Будет, возможно, ситуация, когда вы захотите установить методы во время выполнения, передавая их как аргумент конструктору. Это тот случай, когда вы раз и навсегда откажетесь от этого, окончательно запутавшись в многочисленных операторах if-else. Вскоре мы это разъясним.

Функция, или Класс, или Конструктор, или Метод, или Свойство... Уффф!

Ну ладно, получится что из этого, нет ли, попробуем разъяснить все эти термины. В ActionScript-е почти все они немножко свойства и немножко объекты. Это - великая вещь, это важно понимать, когда нужно что-то не просто описать, чем это что-то будет являться физически, но и определить поведение этого чего-то, что оно должно будет делать. Намотав все это себе на ус, начнем потихоньку с классов, методов и функций.

  Определения

  • Класс (Class) - это определение или шаблон, необходимый для создания нового объекта. Ключевое слово: new. Сюда входит и определение прототипа класса. При этом не возвращается никакого значения, потому что возвращается новый созданный объект. Каждый раз, используя оператор new, вы создаете новый экземпляр класса. Ключевое слово this ссылается на новый созданный экземпляр. Аргументы используются для того, чтобы наделить каждый объект определенными свойствами.
     
  • Метод (Method) - это программа, почти всегда определяется в прототипе класса и всегда запускается посредством объекта (чаще всего экземпляром класса, имеющего прямой доступ к методу). Метод может использовать аргументы и возвращать определенные значения. Ключевое слово this ссылается на объект, вызывающий метод. Хотя у методов есть прототипы и пространство имен, они игнорируются.
     
  • Функция (Function) - вы можете задаться вопросом, как сюда "вписываются" обычные функции, не создающие новых объектов и не принадлежащие классам? Что ж, никак. Если вы собираетесь плотно заняться ООП, вы должны хорошо это усвоить. Функции, существующие сами по себе, - жители другого мира, называемого процедурным программированием (ах да, они тоже весьма полезны и круты, но только не в мире ООП).
     
  • Конструктор (Constructor) - относится к классу, который создает/создавал объект. Имя его совпадает с именем класса, представляет из себя блок кода, необходимый для инициализации объектов класса.
     
  • Свойства (Properties) - технически это нечто, присвоенное объекту, что стало свойством этого объекта. Это нечто может быть строкой, числом и т.д., а также методом и другим объектом... Под свойствами часто подразумевают все "неметоды", так что будьте готовы к этому. ActionScript не делает различий между методами и свойствами, но вам порой это будет необходимо. Свойства иногда называют атрибутами (только данные), переменными (только данные), членами класса (данные и методы), четными полями (данные и методы), хотя они всегда будут нести в себе проблему двойного значения с того момента, когда вы начнете пользоваться этими терминами. К счастью, в 99 случаев из 100 об истинном смысле вы можете догадаться из контекста. Оставшийся 1% - всего лишь свойство ActionScript-а. Резюмируя, они могут означать все неметоды, или методы и неметоды, все зависит от контекста.
     
  • Члены класса (Members) - тоже заслуживают внимания, поскольку это общее название для свойств и методов объекта. В данном случае класс или объект можно рассматривать как набор определенных вещей и вещи эти суть члены этого набора.
     
  • Объекты или экземпляры класса (Object vs Instance) - это в общем-то синонимы, хотя экземпляром обычно называют объект, созданный с помощью оператора new, в то время как объект - общее название для всех объектов. Строки и числа несомненно являются объектами, фактически же это экземпляры, созданные внутренними конструкторами ActionScript-а. Обычно экземпляр явно не указывает на тип объекта, но вы всегда сможете догадаться из контекста.
     

<<    ООП во Flash 5    >>

 



Внимание! Если у вас не получилось найти нужную информацию, используйте рубрикатор или воспользуйтесь поиском


.


книги по программированию исходники компоненты шаблоны сайтов C++ PHP Delphi скачать