![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Dec 2011
Сообщений: 59
|
Всем привет! Написал класс кнопки файл и раньше бы я, не особо заморачиваясь, копипастом сделал бы еще 10 кнопок
(что я и начал делать), пока не вспомнил о том что было бы не плохо написать базовый класс кнопка и туда написать весь повторяющийся код. Тут то и начались проблеммы... Как собственно говоря разбить этот класс на 2(базовый и File) ? У меня что-то не получается, если написать "культурно", лезут ошибки, если с "костылями", тогда уж лучше без наследования - меньше быдлокода. Помогите пожалуйста, как правильно написать код? Никогда раньше не писал свои классы через наследование.Вот мой класс кнопки "файл", весь код что будет здесь, повторяющийся в других кнопках, кроме Цитата:
public class File extends Sprite { private var button:TextField; private var buttonOptions:Object = { textColor:0xFFFFFF, selectable:false, text:' Файл ', autoSize:TextFieldAutoSize.LEFT }; public function File() { button = ObjConstructor.getTextField(buttonOptions); button.addEventListener(MouseEvent.MOUSE_OVER, mouseOver); button.addEventListener(MouseEvent.MOUSE_OUT, mouseOut); button.addEventListener(MouseEvent.CLICK, mouseClick); addChild(button); } private function mouseOver(e:MouseEvent):void { button.background = true; button.backgroundColor = 0x000000; } private function mouseOut(e:MouseEvent):void { button.background = false; button.backgroundColor = 0xFFFFFF; } private function mouseClick(e:MouseEvent):void {} } |
|
|||||
|
Если все инстансы кнопок будут отличаться только параметром buttonOptions,
то передавайте этот параметр конструктору.
__________________
Сам себе репортер |
|
|||||
|
А лучше вообще избавиться от этого объекта buttonOptions, и создать у всех кнопок геттеры / сеттеры для нужных свойств. И в дальнейшем вообще использовать Object (и вообще динамические классы) только в случае крайней необходимости. Это часто приводит к таким недопониманиям, при чтении кода кем-то другим, или самим разработчиков в будущем, что лучше заранее создать явные поля и не задумываться какие параметры должны передаваться кнопке
|
|
|||||
|
Регистрация: Dec 2011
Сообщений: 59
|
Цитата:
Это я создаю текст филд 1 строкой, чтобы не городить 15 строк кода(которые тоже повторяются) для каждой кнопки. По моему так гораздо удобнее, да и код достаточно прозрачный, как мне кажется... public function ObjConstructor() { } public static function getTextField(options:Object) :TextField { var textField:TextField = new TextField(); if (options) for (var key:String in options) textField[key] = options[key]; return textField; } Спасибо что отписались. |
|
|||||
|
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
Начерта здесь наследование?
|
|
|||||
|
Регистрация: Dec 2011
Сообщений: 59
|
Можно конечно же и просто написать 1 кнопку и накопиросать ее нужное количество раз, да переименовать название класса. Но будет просто 10 кнопок с одинаковым кодом примерно 10 функций.
Т.е 1500 строк тупого повторения кода... что конечно же с точки зрения программирования не правильно, если есть возможность не писать повторяющийся код, его лучше не писать. |
|
|||||
|
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
Ну вот у вас есть класс File (странноватое название для кнопки). Чем он вас не устраивает? Зачем плодить еще дополнительные классы?
|
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Я вообще перестал Вас понимать.
При чем тут наследование (разные классы, расширяющие 1 базовый)? Разные классы должны иметь разный набор свойств и методов. Разный набор ЗНАЧЕНИЙ свойств могут иметь ЭКЗЕМПЛЯРЫ одного класса.
__________________
Reality.getBounds(this); |
|
|||||
|
Регистрация: Dec 2011
Сообщений: 59
|
Ну это кнопка файл вроде как норм название для кнопки менюшки верхней как у ворде, с выпадающими меню. Будет еще несколько "похожих": редактирование(Edit), просмотр(View), слой(Layer), язык(Language) и т.д.
Все классы кнопок я поместил в отдельный пакет, куда ничего кроме реализации этих кнопок я не буду кидать. Можно переименовать ее с файл File на FileButton, или как то так... Может я чего-то и не так делаю, просто я больше привік к функциональному программированию, а не обьектному. Все мои обьекты, что я писал, были без наследования - такие как есть и ничего больше... Добавлено через 6 минут Цитата:
Мне нужно создать выпадающие меню(вроде как комбобоксы, как главное меню ворда). Будут кнопки-обьекты с несколькими строками одинакового кода и разного. Я решил что будет более правильно создать базовый класс, скажем Button с одинаковыми функциями и его уже extend-ить, создавая такие кнопки как File, Edit со своими пунктами меню, функциями печати, или масштабирования(в зависимости от кнопки). Вот и решил спросить у более опытных коллег, насколько правильный подход и как вообще правильно писать код в такх случаях... |
|
|||||
|
[+1 05.11.12]
Регистрация: Feb 2011
Сообщений: 431
|
Для кнопки создайте 1 класс. Кнопка только для того чтобы на неё нажимать. Для более сложных операций создавайте другие классы-менеджеры которые будут этим заниматься, не кидайте всю логику в кнопку.
Последний раз редактировалось AlexLucas; 28.10.2012 в 20:53. |
![]() |
![]() |
Часовой пояс GMT +4, время: 10:37. |
|
|
« Предыдущая тема | Следующая тема » |
|
|