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

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

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

Регистрация: Sep 2010
Адрес: Ростов-на-Дону
Сообщений: 369
По умолчанию static или не static - что лучше?

Заголовок, быть может, странный, но суть в следующем: есть класс, нужный для хранения каких-то данных. При этом данные не дублируются, то-есть экземпляр такого класса должен быть один. Вовсе не обязательно следить за тем, чтобы экземпляр создавался лишь раз, просто примем на веру, что он был создан, все его поля были инициализированны, и всюду, где надо, в коде мы таскаем ссылку на объект, и где надо, дергаем нужные свойства. Другой вариант, описать точно так же класс, но все поля сделать static, и не создавать экземпляров, просто обращаясь к статическим полям. Собственно, отсюда и вопрос: где и когда какой из вариантов более приемлем?

Старый 17.10.2011, 21:51
botbot вне форума Посмотреть профиль Отправить личное сообщение для botbot Найти все сообщения от botbot
  № 2  
Ответить с цитированием
botbot

Регистрация: Feb 2011
Сообщений: 100
Преимущества статического:
Не надо хранить ссылки на объект, растёт быстродействие и код немного проще.
Преимущества отдельного объекта:
1 В будущем может оказаться (внезапно), что нужен не один такой объект и тогда отдельный объект круто.
2 Бывает так, что ты меняешь данные одним объектом, а второму (внезапно) нужны старые данные. Флеш асинхронен и такая ситуация у меня реально была. Опять же, делаем два объекта и проблема пропадает.
3 Отладчик флешдевелопера почему-то не хочет видеть статические поля объектов. Приходится извращаться при отладке, чтобы их увидеть, например вот так: var tmp: Object = Class.field;. Хотя это и небольшая, но всё же проблема.

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

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Silicium
Вроде во флейме был спор "Статик vs Синглтон"

Цитата:
растёт быстродействие
Можно подробнее?
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 17.10.2011, 23:48
Silicium вне форума Посмотреть профиль Отправить личное сообщение для Silicium Найти все сообщения от Silicium
  № 4  
Ответить с цитированием
Silicium
 
Аватар для Silicium

Регистрация: Sep 2010
Адрес: Ростов-на-Дону
Сообщений: 369
Ну спор мобыть и был - не знаю. Если в нем родилась "истина" - то ее я в ответ и хотел бы услышать, но за ответ спасибо, топик поищу. И, кстати, я не говорил о синглтоне:
Цитата:
Вовсе не обязательно следить за тем, чтобы экземпляр создавался лишь раз, просто примем на веру, что он был создан
Про быстродействие - тоже очень любопытно. Девелоп не юзаю, юзаю билдер. И... без внезапностей получается только один плюс (да и тот пока сомнительный)?

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

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Если посмотреть в исходники того же FlashDevelop, то плакать хочется от обилия статичных классов. Если бы был один плюс, вряд ли разработчики так рьяно эти классы использовали.
Мотивация в основном какая:

- Вряд ли объект будет расширяться, нафига усложнять себе жизнь

- Объект имеет такой здоровый интерфейс, что завязка на него ничуть не лучше завязки на статичный класс (у нас в коде это всякие статичные фабрики обычно - кто там будет реализовывать альтернативную фабрику с интерфесом из 20 создающих методов или тем более дробить эту радость на 20 отдельных интерфейсов? Все, мы сознательно решили, что завяжем половину приложения на этот класс и сделаем ее повторно _не_испльзуемой - так выгоднее просто)

- Класс перечисления (например флешовый StageAlign) - ну что тут городить то еще?

Но общя ситуация такая:
Если синглтон - это гвоздь, вбитый в будущее развитие архитектуры, то статический класс - это заколоченная железобетонная свая.

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

Что, сложно получается?

Ну тогда синглтон/мультитон/другой статичный класс владеющий этим объектом и дающий к нему глобальную точку доступа.

Что, тяжко instance везде писать? Ну тогда статичный класс - в архитектуре и другого мусора навалом, авось от завязки кучки объектов на статичный класс на много хуже не станет, зато код упростится.


Последний раз редактировалось expl; 18.10.2011 в 00:10.
Старый 18.10.2011, 00:01
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 6  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Лучше то, что подходит в конкретном случае.

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

Регистрация: Sep 2010
Адрес: Ростов-на-Дону
Сообщений: 369
Цитата:
Лучше то, что подходит в конкретном случае.
дык вот же:
Цитата:
Собственно, отсюда и вопрос: где и когда какой из вариантов более приемлем?

Старый 18.10.2011, 00:12
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 8  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Если вы не собираетесь использовать указанный класс как экземпляр и все его методы друг от друга не зависят, тогда static.

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

Регистрация: Sep 2010
Адрес: Ростов-на-Дону
Сообщений: 369
Цитата:
Если вы не собираетесь использовать указанный класс как экземпляр
вполне исчерпывающий ответ на вопрос, однако
Цитата:
все его методы друг от друга не зависят
в каком смысле? Не вызывают друг-друга? или имеется ввиду какая-то другая "зависимость"?

Старый 18.10.2011, 00:27
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 10  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Имеется ввиду зависимость по переменным и т. д. Т. е. если хотя бы пара статических методов использует одну и ту же статическую переменную, это повод превратить класс в обычный.

Создать новую тему Ответ Часовой пояс GMT +4, время: 17:21.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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