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

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

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

Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
По умолчанию Про статические классы

Друзья! Возвращаюсь к столь головоломной для меня теме проектирования с новым вопросом к вам. Решил, правда, выделить его в отдельную ветку для удобства.

Имею локальную задачу, которая с одной стороны, достаточно узкая по содержанию, а с другой - весьма витиеватая по решению, т.к. одновременно содержит и набор шкал с фиксированными значениями, относительно которых оцениваются загружаемые извне параметры персонажа, и алгоритм последующего анализа полученных результатов. Тему единой ответственности предлагаю пока опустить: примем, что с точки зрения заложенной механики - это единый и неделимый функционал. Всё, что можно было от него оторвать и использовать повторно, уже оторвано

Поскольку всякого "мяса" в алгоритме много (хранилище шкал, система оценки, выдача результатов в разной форме), запихивать всё это в качестве группы методов в существующий класс не хочется, хотя это смотрелось бы органично в Character, где и "живут" все анализируемые свойства. Я убеждён, что тут нужен отдельный класс для удобства управления всем хозяйством, особенно если потом по части баланса покрутить потребуется. Что в итоге получается? Имеем некий новый класс, который является по сути набором из нескольких методов, решающих одну задачу и различающихся исключительно формой предоставления результата.

То что я накопал в сети, навело меня на мысль об использовании для моих целей класса со статическими переменными и методами? В качестве альтернативы я помню, как коллега Nooob в самом начале темы о проектировании демонстрировал код, содержащий именно экземпляр класса-модели, причём записанный в константу, и обращался к нему за расчётами. Хотелось бы получше понять преимущества и недостатки использования этих вариантов в описанной мною целях. Заранее спасибо!

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Плюс в том, что статическое свойство относится именно к классу, а не к экземпляру класса. То есть свойство будет одинаковым по значению, для всех экземпляров. А если это public static свойство, то и для всей остальной программы.
Если нужно какое-то глобальное свойство для всех экземпляров, то имеет смысла хранить его в статике
__________________
Ко мне можно и нужно обращаться на ты)

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

Регистрация: Mar 2007
Сообщений: 319
const != static
Если методы достаточно обособлены и утилитарны то можно их определить как static, например как сделан класс Math
статическая функция от метода отличается лишь тем что в статической нет ссылки на this и super и их нужно передавать в аргументах, что является по сути сахаром, можно вообще методы не использовать) если самому реализовать таблицу визуализации в случае необходимости переопределения
короче если функция/метод обособлены и однозначно выполняют свою задачу и не с чем не связанны смело в утилиты со статиками, если ты думаешь что было бы неплохо это потом переопределить и этот метод входит в части API к сущностям то это метод класса, содержимое не имеет значение
__________________
RocketJump


Последний раз редактировалось Nooob; 29.09.2017 в 00:41.
Старый 29.09.2017, 00:50
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 4  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Добавлю еще, что если возникнет потребность в отправке Событий, то в классах со статиками придется городить огород, агрегируя диспатчер и "некрасиво" на него подписываясь.
__________________
Reality.getBounds(this);

Старый 29.09.2017, 10:25
Appleman вне форума Посмотреть профиль Отправить личное сообщение для Appleman Найти все сообщения от Appleman
  № 5  
Ответить с цитированием
Appleman
 
Аватар для Appleman

Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
Nooob, Wolsh, спасибо, исчерпывающе! Некоторое понимание ситуации появилось. Похоже, нужно не откладывать надолго вопросы отображения и вообще ui. Я всё это не очень люблю, пока только игровой механикой занимаюсь с удовольствием. Но назревает ощущение, что если не планировать какие-то элементы сейчас, то потом может сильно боком выйти, с теми же событиями, например...

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Еще одним неочевидным моментом является то, что статики не наследуются. Вообще.

Неочевидным моментом констант является то, что константность не распространяется на свойства объекта, на которые ссылается константа. Многие наивно полагают, что "записав" в константу массив они могут рассчитывать на то, что этот массив нельзя будет модифицировать. Да запросто. Нельзя будет только записать в эту константу другой массив.
__________________
Reality.getBounds(this);

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

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

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


 


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


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