Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 28.10.2012, 13:35
Esigns вне форума Посмотреть профиль Отправить личное сообщение для Esigns Найти все сообщения от Esigns
  № 1  
Ответить с цитированием
Esigns

Регистрация: Dec 2011
Сообщений: 59
По умолчанию 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 {}
	}
Спасибо за оказанную помощь.

Старый 28.10.2012, 13:47
terbooter вне форума Посмотреть профиль Отправить личное сообщение для terbooter Найти все сообщения от terbooter
  № 2  
Ответить с цитированием
terbooter

Регистрация: Oct 2006
Адрес: Novosibirsk-Kaliningrad
Сообщений: 1,278
Отправить сообщение для terbooter с помощью ICQ Отправить сообщение для terbooter с помощью Skype™
Если все инстансы кнопок будут отличаться только параметром buttonOptions,
то передавайте этот параметр конструктору.

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

Старый 28.10.2012, 13:59
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 3  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
А лучше вообще избавиться от этого объекта buttonOptions, и создать у всех кнопок геттеры / сеттеры для нужных свойств. И в дальнейшем вообще использовать Object (и вообще динамические классы) только в случае крайней необходимости. Это часто приводит к таким недопониманиям, при чтении кода кем-то другим, или самим разработчиков в будущем, что лучше заранее создать явные поля и не задумываться какие параметры должны передаваться кнопке

Старый 28.10.2012, 14:11
Esigns вне форума Посмотреть профиль Отправить личное сообщение для Esigns Найти все сообщения от Esigns
  № 4  
Ответить с цитированием
Esigns

Регистрация: Dec 2011
Сообщений: 59
Цитата:
А лучше вообще избавиться от этого объекта 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 мину потерянного времени.

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

Старый 28.10.2012, 14:20
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 5  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Начерта здесь наследование?

Старый 28.10.2012, 14:27
Esigns вне форума Посмотреть профиль Отправить личное сообщение для Esigns Найти все сообщения от Esigns
  № 6  
Ответить с цитированием
Esigns

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

Старый 28.10.2012, 14:30
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 7  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Ну вот у вас есть класс File (странноватое название для кнопки). Чем он вас не устраивает? Зачем плодить еще дополнительные классы?

Старый 28.10.2012, 14:31
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 8  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Я вообще перестал Вас понимать.
При чем тут наследование (разные классы, расширяющие 1 базовый)?
Разные классы должны иметь разный набор свойств и методов.
Разный набор ЗНАЧЕНИЙ свойств могут иметь ЭКЗЕМПЛЯРЫ одного класса.
__________________
Reality.getBounds(this);

Старый 28.10.2012, 14:39
Esigns вне форума Посмотреть профиль Отправить личное сообщение для Esigns Найти все сообщения от Esigns
  № 9  
Ответить с цитированием
Esigns

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

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

Старый 28.10.2012, 19:54
AlexLucas вне форума Посмотреть профиль Отправить личное сообщение для AlexLucas Найти все сообщения от AlexLucas
  № 10  
Ответить с цитированием
AlexLucas
[+1 05.11.12]
 
Аватар для AlexLucas

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


Последний раз редактировалось AlexLucas; 28.10.2012 в 20:53.
Создать новую тему Ответ Часовой пояс GMT +4, время: 10:37.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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