Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Наследовать два класса? (http://www.flasher.ru/forum/showthread.php?t=127027)

Adskij 03.07.2009 00:51

Наследовать два класса?
 
Вот, к примеру, я хочу реализовать возможность перемещать/изменять размеры динамически добавляемых объектов (например, TextArea и Button) на экране.
Я пишу классы MyTextArea и MyButton которые наследуют соответственно TextArea и Button, и в них реализую одинаковые методы Move и Resize. Это мне вроде понятно.

А вот как сделать что б вынести функции Move и Resize в отдельный класс, например, класс BaseObject, который наследует Sprite (?). И далее использовать его и для MyTextArea (вместе с классом TextArea) и для MyButton (вместе с Button).

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

willis83 03.07.2009 01:11

Перечитайте всё заново... TextArea и Button имеют общие классы лишь в начале иерархии наследования(Object -> EventDispatcher -> ... ), но в итоге это абсолютно разные направления наследования. У них есть несколько общих свойств и методов, наследуемый от общих классов, но с того момента как ихняя линия наследования расходится, расходятся и ихние свойства с методами, и там уже надо рассматривать каждый класс по отдельности...

Adskij 03.07.2009 01:17

Так я и хочу им добавить еще два одинаковых метода которые будут работать с ихними общими width, height, x, y.
Или так нельзя и можно добавить эти методы только в каждый класс по отдельности?

willis83 03.07.2009 01:27

в принципе можно, если изначально класс определялся как dynamic. Но тут главное правильно сформулировать задачу и определить рациональное решение, а то что вы сейчас предлагаете, мягко говоря не подходит. Такие вопросы обычно решаются созданием супер класса, но так как TextField и Button не имеют общего супер класса, то этот вариант тут отпадает... вам надо пересмотреть задачи.... ну и разобраться побольше в ООП и классах AS3

Adskij 03.07.2009 01:52

Дано:
n динамически отображаемых объектов произвольного типа.
Задача:
Реализовать метод Move, который будет перемещать любой объект по экрану.

Так что б разобратся в ООП и классах надо больше писать, а что б писать больше и к тому же правильно - надо больше разбиратся)
То есть на данный момент я могу реализовать эту задачу так как я написал в первом посте. Но у меня таких перемещаемых объектов может быть десяток разного типа (TextArea, Button, TextInput и т.д.). Но меня интересует как это реализовать правильно и оптимально.
На мой взгляд, нецелесообразно расширять каждый из этих классов ради одного метода Move, к тому же одинакового для всех.

udaaff 03.07.2009 02:09

Напишите отдельно класс контейнера с методом move() и используйте его совместно с TextArea, Button и т.д. Т.е. если вам, допустим, нужно сделать перетаскиваемое текстовое поле, создаете контейнер, добавляете в качестве контента туда TextArea. Не логично, на мой взгляд, к этим классом этот метод добавлять.

willis83 03.07.2009 02:39

нет... всё не так... вам просто надо понять смысл наследования, смысл контейнера объектов, смысл работы с предками.... и у вас всё получится. Не хватайтесь за небеса, начните с малого, создайте пару объектов в одном контейнере, разберитесь в руководстве от адобе(оно же на русском). Контейнером может быть и спрайт, и мувиклип. Контейнер определяет наследование от DisplayObject. Пару месяцев назад был сам такой же... не так уж всё и сложно.

Adskij 03.07.2009 11:46

Спасибо большое, насчет контейнера понял!

Psycho Tiger 03.07.2009 12:31

Если просто перемещать - можно сделать как в разных твинерах - статикой с передачей параметра.

Adskij 03.07.2009 16:13

2 Psycho Tiger:
Ну перемещать - это я упростил задачу, там еще куча методов должна быть.


Часовой пояс GMT +4, время: 14:46.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.