Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   [Паттерны] Объектный пул. (http://www.flasher.ru/forum/showthread.php?t=211623)

ZackMercury 03.10.2015 14:46

Объектный пул.
 
Как я себе представляю, что такое пул.
Пул - это массив объектов, которые заранее инициализируются, и если неизвестно, сколько из них может понадобиться, при нехватке инициализируются ещё.
Объекты в пуле хранятся для отсутствия необходимости в создании новых объектов на лету в работе программы.
Это позволяет экономить производительность за счёт заранее забронированной памяти.
Как правило, свойства объекта сбрасываются на свойства по умолчанию, при условии, что затем нужны свойства по-умолчанию, и не сбрасываются, если в последствии они устанавливаются в нужные.

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

Почему я считаю, что это не пул?
Я уже описал, как я представляю себе пул. Я считаю, что объект из пула должен доставаться либо чистым, либо его свойства должны быть перезаписаны перед использованием. Но то, что представлено больше похоже на обычную базу данных с доставанием значений по ключам.

//Объясните же мне, почему я неправ и что же на самом деле пул.

Zebestov 03.10.2015 14:53

Это не пул.

И да, пул (в моем понимании) не столько (не только?) резервирует память, сколько экономит время на выполнение конструктора, т.е. на создание объекта, и, как следствие, время, которое GC откусит на уборку уже отработанных объектов.

caseyryan 03.10.2015 15:03

Цитата:

Тот, кто работает над проектом называет это "объектный пул", при этом вытаскивая не первый попавшийся объект, а ищет объект с нужными координатами, чтобы получить его другие значения.
Этот "тот кто работает над проектом" я. Он мне уже весь мозг взорвал пытаясь доказать, что у меня не пул объектов а просто массив или что-то в этом роде.
Суть такая: есть класс ObstaclePool с набором статических методов. При запуске локации туда передается XML инструкция для создания объектов, которая сгенерирована редактором локаций. Этот пул создает необходимые объекты. Но не просто так в том количестве, в котором они прописаны в XML, а с максимальной экономией памяти. То есть если 2 объекта одного типа не могут одновременно быть отображены на экране, то и нет смысла создавать два объекта. Будет исползоваться один и тот же, просто его значения будут меняться в соответствии с теми значениями, которые заданы для его координат. Все эти настройки координат хранятся в спецаильной обертке ObjectWrapper
Код AS3:

internal class ObstacleWrapper {
 
 
        public var obstacle:        Obstacle        = null;
        public var isDestroyed:        Boolean                = false;
        public var posX:                int                        = 0;
        public var posY:                int                        = 0;
        public var health:                int                        = 0;
 
        public function ObstacleWrapper() {
 
        }
}

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

Но Захар мне упорно пытается доказать, что значения должны быть сброшены на значения по умолчанию при извлечении объекта из пула. А если этого не происходит, то это совсем не пул)

udaaff 03.10.2015 15:03

https://ru.wikipedia.org/wiki/%D0%9E...BF%D1%83%D0%BB
Гугл пестрит определениями того, что есть объектный пул.

caseyryan 03.10.2015 15:07

Цитата:

Сообщение от udaaff (Сообщение 1187613)
https://ru.wikipedia.org/wiki/%D0%9E...BF%D1%83%D0%BB
Гугл пестрит определениями того, что есть объектный пул.

Я ему это уже скидывал)

ZackMercury 03.10.2015 15:13

Именно, это просто массив данных об объектах, или "карта объектов", которая хранит не только позицию, а и другие свойства объекта, повреждение и т.д.

udaaff 03.10.2015 15:14

caseyryan, почему ты считаешь, что это именно объектный пул, а не объектный массив?

Zebestov 03.10.2015 15:14

Ну тогда у тебя целый завод, а не пул :) там у тебя все, и пул в том числе.

caseyryan 03.10.2015 15:17

Цитата:

caseyryan, почему ты считаешь, что это именно объектный пул, а не объектный массив?
Это игра слов "объектный пул", "объектный массив", можно назвать "объектный набор" или "коллекция объектов".
Главное что определению пула это соответствует. Объекты создаются один раз при запуске, а потом используются во всем процессе игры одни и те же
Цитата:

Ну тогда у тебя целый завод, а не пул там у тебя все, и пул в том числе.
Да! Ты здесь первый кто это сразу просек. Как я уже написал, там для удобства добавлены методы поиска объекта.
Но основная задача - все-таки пул

udaaff 03.10.2015 15:19

Цитата:

Сообщение от Zebestov (Сообщение 1187618)
Ну тогда у тебя целый завод, а не пул :) там у тебя все, и пул в том числе.

Больше напоминает объектную клоаку :)
Цитата:

Если объекты после возвращения в пул оказываются в неправильном или неопределённом состоянии, такая конструкция называется объектной клоакой


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

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