ООП во FLASH 5


Настоящий Подкласс (Subclass) - часть 4


shape1 = new Polygon (); shape1.Location = new Point (168, 168); shape1.points = { new Point(0, 0), new Point(50, 30), new Point(30, 60) };

shape2 = new Circle (); shape2.Location = new Point(168, 168); shape2.Size = new Size (176, 56);

Итак, мы позволили пользователям нашего класса отвечать на поставленный вопрос. И даже если класс круга не делает ничего отличного от того, что делает класс квадрата (кроме отображения круглого мувиклипа), пользователь уже думает о них, как о разных вещах, так что отдельный класс всё-таки нужен. Конечно, наш горе-пользователь "представляет в уме" эллипс, называя его кругом (Глумливо так: "хе-хе"). Фактически, сразу после использования круга, он растянет его, чтобы превратить круг в эллипс! Да, перед нами дилемма. Использовать ли нам неправильные названия, пособничая тому, что пользователи классов называют эллипсы кругами, прямоугольники квадратами, а магнитофоны флейтами? Или (высокой цели ради), пойти трудной дорогой и использовать правильные термины, примирившись с тем, что пользователи проклинают нас каждый раз, когда используют "круг" в смысле "эллипс", да и просто когда не могут написать "эллипс" без ошибок? Разумеется, мы выберем "высокую цель". Ведь если мы назовем эллипс кругом, это введёт в заблуждение всех, кто до этого думал правильно, и они подумают, что более не смогут использовать "круг" как "эллипс". Кроме того, за правильное использование слова никого ещё не расстреляли. Да!.. и постарайтесь не давать название "Растрата" классу своих финансовых приложений.

А пока создадим-ка два подкласса Фигур: Эллипс и Прямоугольник. Потому, что это делается легко. Нам кажется, по крайней мере сейчас, что они не будут делать ничего, кроме создания формы и запоминания своих собственных имён (мы намеренно не касаемся пока работы с мувиклипами, как вы, наверное, заметили).

Ellipse = function(){} Object.extends(Shape, Ellipse); Rectangle = function(){} Object.extends(Shape, Rectangle);

Пока мы не начали заниматься многоугольниками, посмотрите, есть ли проблемы в вышеприведённом коде? Сам код выглядит хорошо (кроме ужасного синтаксиса flash 5, который использован для создания наследования!), но не звучит ли "Прямоугольник" слишком знакомо? Не задавали ли мы также для объекта все его xywh, используя прежде прямоугольник? Да, именно так мы и делали, или, по крайней мере, говорили об этом. Класс Rectangle уже есть, он совершенно не связан с новым классом. Это проблема, потому что один из них перезапишется поверх другого (_root.Rectangle и _root.Rectangle!). И слава Богу, что мы обнаружили эту проблему сейчас, а не после написания километров кода. Следующий раздел - о Пространствах имён и он касается (ну надо же!) именно этой проблемы. Какое совпадение!

<<

   ООП во Flash 5 ( II )    >>




Начало  Назад  Вперед



Книжный магазин