Руководство по actionscript. часть 2, стр. 001

ГЛАВА 9

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

I Не путайте термин «интерфейс», обсуждаемый в данной главе, с другими применени-мй а * ями этого слова. В этой главе «интерфейс» обозначает конструкцию языка ActionScript, а не графический интерфейс пользователя (GUI) или открытый API класса, которые в общей теории объектно-ориентированного программирования иногда именуются интерфейсами.

Если это ваше первое знакомство с интерфейсами, то их теоретические описания могут оказаться сложными для восприятия, поэтому сразу же рассмотрим пример.

Аргумент в пользу интерфейсов

Предположим, мы создаем протоколирующий класс Logger, который рапортует о статусных сообщениях («записях журнала») программы в процессе ее выполнения. Многие классы получают статусные сообщения от класса Logger и по-разному реагируют на них. Например, один класс — LogUI — отображает журнальные сообщения на экране, другой класс — LiveLog — отправляет предупреждение специалисту службы поддержки с помощью сетевого инструмента администрирования, а еще один класс — LogTracker — добавляет журнальные сообщения в базу для ведения статистики. Для получения журнальных сообщений каждый класс определяет метод update ( ). Чтобы отправить сообщение объектам всех заинтересованных классов, класс Logger вызывает метод update ( ).

Пока все это кажется логичным, но что произойдет, если мы забудем определить метод update ( ) в классе LogUI? Статусное сообщение будет отправлено, однако объекты класса LogUI не получат его. Нам необходим такой подход, который

гарантирует, что каждый получатель журнальных сообщений определяет метод update ( ).

Чтобы предоставить такую гарантию, предположим, что мы ввели новое требование в нашу программу: любой объект, желающий получать журнальные сообщения от класса Logger, должен быть экземпляром базового класса LogRecipient (мы предоставим его описание) или экземпляром одного из подклассов класса LogRecipient. Реализация метода update ( ) в классе LogRecipient будет включать базовую функциональность, попросту отображая журнальное сообщение с помощью функции trace ( ):

public class LogRecipient { public function update (msg:String)-.void { trace(msg);

}

}

Теперь любой класс, который желает получать журнальные сообщения от класса Logger, просто расширяет класс LogRecipient и, если требуется специфическое поведение, перекрывает метод update ( ) класса LogRecipient, реализуя желаемое поведение. Например, следующий класс LogTracker расширяет класс LogRecipient и перекрывает метод update ( ), реализуя функциональность сохранения информации в базе данных:

public class LogTracker extends LogRecipient { // Перекрытый метод update( ) класса LogRecipient override public function update (msg:String):void { // Сохранение сообщения об ошибке в базе данных. Код не показан…

Продолжение:

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,32,33,34,35,36,37,38,39,40,

41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,

77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,

109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,

135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158

google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru

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

Вы должны авторизоваться для отправки комментария.

Полезные ссылки
Случайные записи
  • 16.06.2010">Самоучитель по креативному веб-дизайну. Книга 4, стр.15
  • 03.06.2010">Самоучитель по креативному веб-дизайну. Книга 3, стр.43
  • 01.03.2011">Руководство по actionscript. часть 5, стр. 114
  • 04.06.2010">Самоучитель по креативному веб-дизайну. Книга 3, стр.7
  • 02.06.2010">Самоучитель по креативному веб-дизайну. Книга 3, стр.99
  • 17.06.2010">Самоучитель по креативному веб-дизайну. Книга 4, стр.10
  • 09.03.2011">Руководство по actionscript. часть 4, стр. 048
  • 23.01.2011">Руководство по actionscript. часть 1, стр. 078
  • 19.02.2012">Кто же такой верстальщик?
  • 04.03.2011">Руководство по actionscript. часть 5, стр. 044
  • 09.03.2011">Руководство по actionscript. часть 4, стр. 051
  • 18.03.2011">Руководство по actionscript. часть 2, стр. 129
  • 07.03.2011">Руководство по actionscript. часть 4, стр. 102
  • 11.03.2011">Руководство по actionscript. часть 3, стр. 146
  • 11.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.32
Опрос

Какие цвета вы предпочитаете?

View Results

Loading ... Loading ...