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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 09.01.2011, 02:28
passertm вне форума Посмотреть профиль Отправить личное сообщение для passertm Найти все сообщения от passertm
  № 1  
Ответить с цитированием
passertm
[+1 28.12.10]
[+1 29.12.10]
 
Аватар для passertm

Регистрация: Aug 2006
Сообщений: 107
По умолчанию использовать или не использовать интерфейсы

Заметил за собою, что во Флеше, уже который раз предпочитаю использовать возможность передачи функции, нежели создание интерфейса (хотя в других языках, где невозможно передавать функции как параметр, достаточно юзаю интерфейсы).
Например класс Х работает с другими классами у которых есть функция DoSomeThing. Можно
Код AS3:
public interface iprocessor {
	function DoSomeThing(par:int):void;
}
public class X {
	function setProcessor(o:iprocessor){
		....
	}
}
т.е. как в других языках.
А можно
Код AS3:
public class X {
	function setProcessor(f:Function){
		....
	}
}
Так вот, второй метод проще. Как минимум не приходится создавать лишний файл (интерфейса) и не приходится навязывать классу имя метода (соответственно он не может конфликтовать с другим интерфейсом). Поэтому, если функций до трех (включительно), то я (точнее душа моя) предпочитаю обходится без интерфейса. А как вы делаете? И в чем преимущества такого решения (допускаются даже субъективные варианты типа "при дебаге удобнее").


Последний раз редактировалось iNils; 09.01.2011 в 02:45.
Старый 09.01.2011, 10:49
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 2  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Передаю то, что нужно для задачи. К функциям пишу комментарий типа: addChild->DisplayObject->DisplayObject.
__________________
Hell is the possibility of sanity

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Зависит от задачи. Если предполагается, что нужна функция (например, какая-нибудь filterFunction), то передается функция. Если предполагается работа именно с классом, то интерфейс. У того же процессора, помимо DoSomeThing могут быть и параметры, которые необходимо настроить.

Старый 09.01.2011, 13:07
passertm вне форума Посмотреть профиль Отправить личное сообщение для passertm Найти все сообщения от passertm
  № 4  
Ответить с цитированием
passertm
[+1 28.12.10]
[+1 29.12.10]
 
Аватар для passertm

Регистрация: Aug 2006
Сообщений: 107
Ответы расплывчаты. Я так понимаю вы тоже как я использууете.
Вот к примеру для Undo что я делаю. Все классы в которых можно сделать Undo должны иметь функции undo и redo.
Какое решение бы вы использовали.
интерфейс или две функции??

Старый 09.01.2011, 13:12
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 5  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
Можно и наследование использовать. Если нет возможности, то интерфейс.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Вопросы не менее расплывчаты. Какое отношение некие классы имеют к undo/redo? Я бы реализовал undo/redo командами, и они бы имели интерфейс.

Старый 10.01.2011, 00:04
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 7  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Цитата:
Сообщение от passertm Посмотреть сообщение
Заметил за собою, что во Флеше, уже который раз предпочитаю использовать возможность передачи функции, нежели создание интерфейса
А потом я читаю твой код. И он делает меня печальным. Я становлюсь раздражительным, потому что документацию ты тоже не подготовил и даже следа твоего не осталось. А что касается последнего, так и слава богу.

Немного умственных потуг принесут гораздо большее удовлетворение. С одной стороны - обеспеченные тылы, с другой - светлое будущее. Не передавай ссылки на функции там, где не нужно этого делать.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 10.01.2011, 00:54
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 8  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Цитата:
Так вот, второй метод проще
Второй метод не только проще, но и гибше (если передаваемые в какой-то метод функции не должны быть связаны между собой). Да и инкапсуляция лучше - нет непобходимости делать передаваемые функции публичными.

Только беда в том, что на дворе 2011 год, а в actionScript3 до сих пор параметры функций не типизируются во время компиляции (в haXe это было и есть даже для flashplayer8), как, врочем и генериков до сих пор нет

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

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


Последний раз редактировалось expl; 10.01.2011 в 01:00.
Старый 10.01.2011, 00:58
surlac вне форума Посмотреть профиль Отправить личное сообщение для surlac Найти все сообщения от surlac
  № 9  
Ответить с цитированием
surlac
 
Аватар для surlac

блогер
Регистрация: Nov 2010
Сообщений: 143
Записей в блоге: 1
Цитата:
Сообщение от iNils Посмотреть сообщение
Можно и наследование использовать. Если нет возможности, то интерфейс.
Извините, не согласен. Насколько я знаю, должно быть как раз наоборот. Не буду долго объяснять, просто процитирую труд Гаммы, Хелма и других товарищей из Gang Of Four "Design Patterns:Elements of Reusable Object-Oriented Software":
Цитата:
предпочитайте композицию наследованию класса
Думаю, если учесть принципиальную разницу наследования и композиции (интерфейс) - статическое и динамическое связывание (соответственно) - все становится ясно. Наследование легче воспринимается программером, т.к. структура постоянна во время выполнения программы, композиция же сложнее воспринимается, но эффективнее.

Цитата:
Сообщение от passertm
если функций до трех (включительно), то я (точнее душа моя) предпочитаю обходится без интерфейса. А как вы делаете?
Тут тоже процитирую GoF:
Цитата:
принцип объектно-ориентированного проектирования для повторного использования: программи-
руйте в соответствии с интерфейсом, а не с реализацией.

Старый 10.01.2011, 01:10
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 10  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Цитата:
Тут тоже процитирую GoF:
принцип объектно-ориентированного проектирования для повторного использования: программи-
руйте в соответствии с интерфейсом, а не с реализацией.
ИМХО это высказывание не в тему.

Передавая классу функцию Вы завязываете этот класс на СИГНАТУРУ функции, а НЕ на ее реализацию
т.е. просто вместо передачи 1-го интерфейса с 3-мя методами вы передаете 3 мелких ИНТЕРФЕЙСА-функции
А как известно из принципов SOLID "лучше несколько мелких интерфейсов, чем один большой"
Так что все с точностью наоборот

Цитата:
Сообщение от iNils
Можно и наследование использовать. Если нет возможности, то интерфейс.
Извините, не согласен. Насколько я знаю, должно быть как раз наоборот. Не буду долго объяснять, просто процитирую труд Гаммы, Хелма и других товарищей из Gang Of Four "Design Patterns:Elements of Reusable Object-Oriented Software":

Цитата:
предпочитайте композицию наследованию класса
Вы совершенно правы, но иногда не хочется открывать наружу функции, а тупо объявить protected и перегрузить,
да и громоздить композицию (т.е. наращивать объемы кода, который придется поддерживать) раньше времени не стоит
Тут все диктует конкретная ситуация, причем эта ситуация меняется вместе с проектом.
Сначала можно сделать наследованием. Если эта часть системы не расширяется - зашибись, расширяется - переходим на композицию. А раньше времени переходить - себе дороже.


Последний раз редактировалось dimarik; 10.01.2011 в 03:27. Причина: трудный пост.
Создать новую тему Ответ Часовой пояс GMT +4, время: 01:50.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

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

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


 


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


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