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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 25.03.2012, 01:33
renych вне форума Посмотреть профиль Отправить личное сообщение для renych Найти все сообщения от renych
  № 11  
Ответить с цитированием
renych
[+1 25.03.12]

Регистрация: Jul 2009
Сообщений: 22
Цитата:
т.е. статика это плохо да?
для меня проблема хранения данных в статических переменных в том, что они ограничивают количество экземпляров класса одной штукой.

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

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
Статика - это один для всех. Поэтому
Цитата:
для меня проблема хранения данных в статических переменных в том, что они ограничивают количество экземпляров класса одной штукой.
это не понимание, что такое статика.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 25.03.2012, 01:44
anmelegov вне форума Посмотреть профиль Отправить личное сообщение для anmelegov Найти все сообщения от anmelegov
  № 13  
Ответить с цитированием
anmelegov
[+4 07.04.12]
[+1 20.01.12]

Регистрация: Nov 2009
Адрес: Украина, Славутич
Сообщений: 263
ну у меня как-бы 1 игрок, 1 уровень и всего остального что там лежит тоже по одному, а экземпляров этого класса как-бы вообще нету... просто перенести переменные в контроллер уровня вообще не проблема, надо только понять имеет ли это смысл.. я подозреваю что имеет, но хочется точно узнать чтобы зря не делать лишних движений

Добавлено через 18 минут
кстати по поводу менеджера клавиатуры, кто как это делает? у меня сейчас кейкоды нажатых кнопок хранятся в векторе<юинт>, но только что в голову пришла мысль что можно все хранить в одной переменной юинт и проверять побитово с помощью оператора &...


Последний раз редактировалось anmelegov; 25.03.2012 в 01:47.
Старый 25.03.2012, 02:02
renych вне форума Посмотреть профиль Отправить личное сообщение для renych Найти все сообщения от renych
  № 14  
Ответить с цитированием
renych
[+1 25.03.12]

Регистрация: Jul 2009
Сообщений: 22
Цитата:
это не понимание, что такое статика.
Что Вы имеете ввиду?

Старый 25.03.2012, 02:13
Yahen вне форума Посмотреть профиль Отправить личное сообщение для Yahen Посетить домашнюю страницу Yahen Найти все сообщения от Yahen
  № 15  
Ответить с цитированием
Yahen

Регистрация: Jan 2012
Сообщений: 35
Цитата:
Сообщение от renych Посмотреть сообщение
т.е. это нормально, что если
в комнате есть шкаф, в шкафу есть книга, в книге есть закладка и закладка будет знать про комнату?
Приблизительно так и реализована иерархия объектов на сцене. В закладке есть ссылка на комнату. и книгу. книге на комнату и шкаф. И в шкафу на комнату.
Совершенно нормальная структура.

Добавлено через 1 минуту
Цитата:
Сообщение от Silicium Посмотреть сообщение
Нет, это не нормально как правило с точки зрения самой архитектуры. Взгляните под другим углом на решение своей задачи, возможно найдете более правильное решение построения архитектуры. Однако, в любом случае, если уж и передавать, то именно ссылку на объект, в котором содержатся все эти переменные, собственно, как и предложил Yahen.
Разработчики самого AS c Вами не согласятся
__________________
----
Когда мне странно, то я заполняю книжку записей

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

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
Цитата:
Сообщение от renych Посмотреть сообщение
Что Вы имеете ввиду?
Если "Статика - это один для всех", то не должно возникать понятия "один экземпляр".
__________________
(и)Нильс.ru | Плагины для FlashDevelop

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
И того имеем три переменные. Далее в классе создаётся куча других классов, которые так или иначе
работают с BitmapData. Рисуют в него, копируют и т.п. Им всем нужен доступ к width, height и bmp.
Более того, в каждом из этих классов могут быть созданы другие классы, которое тоже захотят работать
c этим битмапом.
Вообще говоря, споры на эту тему всегда переходят в холивар. У всех есть свои привычки, свой опыт, ошибки и их решения. Если делать ООП, то это должен быть изначально ООП. Это важно понимать. Невозможно сделать пикник на обочине, накидав мусора на стейдж, а потом зафигачить туда "ООП"-класс. Или два. Или шаблон))) Поэтому спрашивать о каком-то фрагменте программы, как это сделать по ООП, и при этом подразумевать что остальные системы будут спроектированы "как фишка ляжет" – бессмысленно.
Вот Вы приводите пример, и сразу хочется сказать – почему три, если передается битмапдата, то у нее уже есть ширина и высота, зачем передавать их отдельно. И так будет с каждым конкретным примером.
Далее – если классы работают с битмапдатой, то как блин Вы можете им ее не передавать?))) Спроектировать классы так, что они будут запрашивать битмапдату у какого-то "глобального" класса-хранилища? Это смерть ООП. Это значит, что такой класс-попрошайка не сможет быть использован больше ни в одном проекте. Вы можете сделать электромобиль и заряжать его в своем гараже. Но если поедете на нем в другой город, Вам надо построить там зарядную станцию. То есть в другом проекте для использования этого побочного классика Вам придется разворачивать глобальную структуру поддержки на верхнем уровне. Он не самодостаточен как исполнитель. Это такая секретарша заведующего отделом, которая по любому вопросу звонит главе компании. И это семечки – глава компании при этом должен еще и знать ответы на ее местячковые вопросы.
ООП без иерархии это свалка. Это когда "контроллер клавиатуры" почему-то управляет персонажем, получивший новые настройки стилей xml-лоадер рассылает события сотням детей-GUI, и те толпами ломятся к нему за своими каскадами стилей, вместо того чтобы просто спустить каскад вниз и каждому выдать конкретное указание... да мало ли каких странностей не бывает. Для того и придумано ООП, чтобы делать "по правилам", по единым и понятным правилам, не изобретая велосипедов и не создавая хитрых креативов, в которых придется разбираться потом самому, коллегам, компилятору и плееру. Но это уже каждый решает сам – воспользоваться чужим опытом и шаблонами, или положиться на свой гений и скреативить новое невиданное архитектурное решение.. Которое чаще всего оказывается решением на один раз и без возможности развернуться корпусом.
__________________
Reality.getBounds(this);

Старый 25.03.2012, 03:00
renych вне форума Посмотреть профиль Отправить личное сообщение для renych Найти все сообщения от renych
  № 18  
Ответить с цитированием
renych
[+1 25.03.12]

Регистрация: Jul 2009
Сообщений: 22
Так вот и хочется всё сделать максимально универсально и масштабируемо. Чтоб модель не зависела от представления, а контроллер не оперировал данными.

Цитата:
Далее – если классы работают с битмапдатой, то как блин Вы можете им ее не передавать?
Я вот тут подумал, а что если подписать их на события и передавать данные в аргументах? Тогда исчезнет необходимость передавать параметры всем и каждому в конструкторах или ссылку на класс верхнего уровня.

Пример про битмапдату - просто пример.

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

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Это как раз самый характерный пример супермена.
"Книга отреагирует на влажность в комнате" означает, что область ответственности книги простирается далеко за ее пределы. И что книга САМА решает, как ей реагировать на внешние изменения. Это не только нарушает иерархию, это как раз тянет за собой строительство станций обслуживания книги, которые должны будут держать книгу в курсе того, что происходит вовне, а книга должна обладать достаточно развитой логикой, чтобы реагировать на разные внешние факторы. Нетрудно догадаться, что этих факторов почти столько же, сколько объектов в программе.
Вот аналогия.
Мама звонит дочке, которая в школе, и сообщает ей: "У нас кончилась колбаса".
FamilyEvent.HUNGER_BEGIN, data="sausage".
Это ваша ситуация с книгой, ваше решение отношений. Родитель посылает ребенку событие.
Теперь дочка должна как-то среагировать. У нее должно быть достаточно логики, чтобы пойти после школы в магазин, снять с карточки денег, выбрать сорт и количество колбасы, купить ее и доставить домой. (хотя в вашем варианте "сгнить" дочка скорее должна "съесть" колбасу, а не "доставить домой". Тут есть определенная разница)) но это лишь детали). Кроме того, устройство детского организма не гарантирует, что дочка вообще как-то будет реагировать на событие. Во всяком случае, посылающая сообщение мама всего лишь посылает сообщение. Это просто dispatchEvent, и он ни к чему не обязывает получателей.
Как эта ситуация должна была бы разыгрываться при иерархических отношениях?
Мама звонит дочке и говорит "после школы зайди в "Веселую Сардельку" и купи полкило Брауншвейгской".
gotoAndBuy("Веселая Сарделька", "Брауншвейгская", .5);
И может заодно подписаться на событие BuyErrorEvent.STOCK_OUT, на случай если дочка позвонит из магазина и скажет, что Брауншвейгская закончилась. Потому что решать, какую колбасу купить взамен, должна мама, а не дочка.
Итак, от старших вниз идут приказы – прямые вызовы конкретных гарантированных методов детей, а от детей вверх – события и ошибки, то есть информация "с мест". Когда Вы возьмете этот класс дочки и перенесете в другой проект, вы будете точно знать, что она не спустит все ваши денежки на пирожные и не будет пытаться вызывать методы ваших старших классов, а в самом худшем случае будет звонить в пустоту (ну технически на самом деле не будет, если не будет подписчиков, но мы сейчас о логике разговариваем)). Что класс будет делать ровно то, что ему прикажут более ответственные товарищи. В вашем случае комната прикажет шкафу "увлажнись(120)", а шкаф прикажет всем своим обитателям "увлажнись(120-10)". Здесь книга может проверить свой лимит и выбросить сообщение "я же так сгнию!?". А вот понизит ли Комната влажность из-за сообщения от младшего члена – это логика Комнаты, и эта логика вправе проигнорировать событие от Книги, но отреагировать на событие "я же так сгнию!" от Шкафа, как более ценной сущности, например))) Мало того, Книга не должна сама гнить. Её кто-то создал, и только создатель знает, зачем. Книга не должна сама себя разрушать, удалять и т.п. Она – инструмент в какой-то большой игре, знать которую ей не надо. Только создатель может распоряжаться ее судьбой. Книга же должна отвечать только за своих подчиненных – приказывать страницам листаться и т.п.
__________________
Reality.getBounds(this);

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

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
Пример с книгой очень плохой. Книга именно сама и гниет. Шкаф тут вообще не причем.
Если брать примеры из жизни, то ООП работать не будет. Именно потому, что все объекты сами по себе. Понятие родитель-ребенок весьма условны. Вот книга на полке и она подчиняется полке только пока действует сила тяжести и только в направлении полки и стенки. Но стоит ее поднять и связи уже не будет.

По сути, единственный пример из жизни, которые выстраивает иерархию, это армия. Есть командир, и есть подчиненный. Приказ приходит сверху и уходит вниз. И чем ниже чин, тем меньше его свобода действий.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

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

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

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


 


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


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