Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   flash наследование помогите врубиться (http://www.flasher.ru/forum/showthread.php?t=186110)

Esigns 28.10.2012 13:35

flash наследование помогите врубиться
 
Всем привет! Написал класс кнопки файл и раньше бы я, не особо заморачиваясь, копипастом сделал бы еще 10 кнопок:)(что я и начал делать), пока не вспомнил о том что было бы не плохо написать базовый класс кнопка и туда написать весь повторяющийся код. Тут то и начались проблеммы... Как собственно говоря разбить этот класс на 2(базовый и File) ? У меня что-то не получается, если написать "культурно", лезут ошибки, если с "костылями", тогда уж лучше без наследования - меньше быдлокода. Помогите пожалуйста, как правильно написать код? Никогда раньше не писал свои классы через наследование.

Вот мой класс кнопки "файл", весь код что будет здесь, повторяющийся в других кнопках, кроме
Цитата:

private var buttonOptions:Object = { textColor:0xFFFFFF, selectable:false, text:' Файл ', autoSize:TextFieldAutoSize.LEFT };
- он будет разным.


Код AS3:

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 {}
        }

Спасибо за оказанную помощь.

terbooter 28.10.2012 13:47

Если все инстансы кнопок будут отличаться только параметром buttonOptions,
то передавайте этот параметр конструктору.

Код:

        public class ConcreteFile extends File{
                public function ConcreteFile(buttonOptions:Object) {
                        this.buttonOptions=buttonOptions;
                }
        }


caseyryan 28.10.2012 13:59

А лучше вообще избавиться от этого объекта buttonOptions, и создать у всех кнопок геттеры / сеттеры для нужных свойств. И в дальнейшем вообще использовать Object (и вообще динамические классы) только в случае крайней необходимости. Это часто приводит к таким недопониманиям, при чтении кода кем-то другим, или самим разработчиков в будущем, что лучше заранее создать явные поля и не задумываться какие параметры должны передаваться кнопке

Esigns 28.10.2012 14:11

Цитата:

А лучше вообще избавиться от этого объекта buttonOptions, и создать у всех кнопок геттеры / сеттеры для нужных свойств.
to caseyryan
Это я создаю текст филд 1 строкой, чтобы не городить 15 строк кода(которые тоже повторяются) для каждой кнопки. По моему так гораздо удобнее, да и код достаточно прозрачный, как мне кажется...

Код AS3:

                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;
                }

terbooter Сейчас пробну так как ты говоришь. Хочу научиться писать красивый код и короткие классы, а не такие как была кем-то написана админка на 6К строк... Пока разберешься и найдешь то что тебе нужно уходит по 5-30 мину потерянного времени.

Спасибо что отписались.

udaaff 28.10.2012 14:20

Начерта здесь наследование?

Esigns 28.10.2012 14:27

Можно конечно же и просто написать 1 кнопку и накопиросать ее нужное количество раз, да переименовать название класса. Но будет просто 10 кнопок с одинаковым кодом примерно 10 функций.
Т.е 1500 строк тупого повторения кода... что конечно же с точки зрения программирования не правильно, если есть возможность не писать повторяющийся код, его лучше не писать.

udaaff 28.10.2012 14:30

Ну вот у вас есть класс File (странноватое название для кнопки). Чем он вас не устраивает? Зачем плодить еще дополнительные классы?

Wolsh 28.10.2012 14:31

Я вообще перестал Вас понимать.
При чем тут наследование (разные классы, расширяющие 1 базовый)?
Разные классы должны иметь разный набор свойств и методов.
Разный набор ЗНАЧЕНИЙ свойств могут иметь ЭКЗЕМПЛЯРЫ одного класса.

Esigns 28.10.2012 14:39

Ну это кнопка файл вроде как норм название для кнопки менюшки верхней как у ворде, с выпадающими меню. Будет еще несколько "похожих": редактирование(Edit), просмотр(View), слой(Layer), язык(Language) и т.д.
Все классы кнопок я поместил в отдельный пакет, куда ничего кроме реализации этих кнопок я не буду кидать. Можно переименовать ее с файл File на FileButton, или как то так...
Может я чего-то и не так делаю, просто я больше привік к функциональному программированию, а не обьектному. Все мои обьекты, что я писал, были без наследования - такие как есть и ничего больше...

Добавлено через 6 минут
Цитата:

Я вообще перестал Вас понимать.
Наверное я не правильно выразился...
Мне нужно создать выпадающие меню(вроде как комбобоксы, как главное меню ворда).
Будут кнопки-обьекты с несколькими строками одинакового кода и разного.
Я решил что будет более правильно создать базовый класс, скажем Button с одинаковыми функциями и его уже extend-ить, создавая такие кнопки как File, Edit со своими пунктами меню, функциями печати, или масштабирования(в зависимости от кнопки).
Вот и решил спросить у более опытных коллег, насколько правильный подход и как вообще правильно писать код в такх случаях...

AlexLucas 28.10.2012 19:54

Для кнопки создайте 1 класс. Кнопка только для того чтобы на неё нажимать. Для более сложных операций создавайте другие классы-менеджеры которые будут этим заниматься, не кидайте всю логику в кнопку.


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

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