Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обсуждение шаблонов проектирования (стереотипы), связь между кодом C++ и проектированием 
:(
    Опции темы
Леопольд
Дата 24.6.2009, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 943
Регистрация: 17.6.2009

Репутация: 10
Всего: 13



Цитата(Леопольд @ 24.6.2009,  08:59)
Цитата(mes @ 24.6.2009,  08:53)
Цитата(Леопольд @  24.6.2009,  07:32 Найти цитируемый пост)

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

Это вообще лишнее.

Я пытался "привязаться" к чему то. По моему, так понятнее, зачем может понадобиться "абстрактная фабрика"

Хотя, и правда лишнее, только мешает, удалил.

Добавлено через 7 минут и 13 секунд
Цитата(mes @ 24.6.2009,  13:08)
Цитата(Леопольд @  24.6.2009,  11:06 Найти цитируемый пост)
Мне очень интересно Ваше мнение о предназначении "абстракной фабрики". Не могли бы Вы его "озвучить"?

Предназначение фабрики : независимость клиента от процесса создания продукта, а также инкапсуляция деталей этого процесса.
Предназначение абстрактной фабрики : к вышеназванному добавляется также независимость от конкретной фабрики.

Я видимо неправильно выразился. Хотелось бы какой-то, пусть абстрактный, пример использования. Куда её можно прикрутить. и каие выгоды от этого поиметь. smile


--------------------
вопросов больше чем ответов
PM MAIL   Вверх
mes
Дата 24.6.2009, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Леопольд @  24.6.2009,  12:13 Найти цитируемый пост)
Я видимо неправильно выразился. Хотелось бы какой-то, пусть абстрактный, пример использования. Куда её можно прикрутить. и каие выгоды от этого поиметь

Фабрика : создание "героев" для игры.
A. Фабрика : плагин по созданию "героев" для игры.



Это сообщение отредактировал(а) mes - 24.6.2009, 14:26


--------------------
PM MAIL WWW   Вверх
Леопольд
Дата 24.6.2009, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 943
Регистрация: 17.6.2009

Репутация: 10
Всего: 13



Цитата(mes @ 24.6.2009,  14:23)
Цитата(Леопольд @  24.6.2009,  12:13 Найти цитируемый пост)
Я видимо неправильно выразился. Хотелось бы какой-то, пусть абстрактный, пример использования. Куда её можно прикрутить. и каие выгоды от этого поиметь

Фабрика : создание "героев" для игры.
A. Фабрика : плагин по созданию "героев" для игры.

У меня сразу появилось два вопроса.
1. Я считаю что небольшая потеря производительности ничто по сравнению с лёгкостью поддержки, дебага и дальнейшего развития хорошо спроектированной системы. Но предположим smile что я ленивый читатель и мне лень думать самому...  smile Меря распирает от любопытства, Вам знакомо это ощущение?  smile  Зачем же Вам нужна фабрика для создания героев? Что она вам даёт, кроме возможной потери производительности?

2. Зачем "игре в героев" smile плагин для героев? Предназначений может быть огромное количество. Могу только гадать, которое из них Вы имели ввиду. smile 

Это сообщение отредактировал(а) Леопольд - 24.6.2009, 16:24


--------------------
вопросов больше чем ответов
PM MAIL   Вверх
mes
Дата 24.6.2009, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Леопольд @  24.6.2009,  15:15 Найти цитируемый пост)
Зачем "игре в героев" smile плагин для героев

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


Это сообщение отредактировал(а) mes - 24.6.2009, 16:25


--------------------
PM MAIL WWW   Вверх
Леопольд
Дата 24.6.2009, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 943
Регистрация: 17.6.2009

Репутация: 10
Всего: 13



Цитата

Фабрика нужна для того, чтоб  эпизод игры не зависил от конкретных персонажей.

А это как?  smile 
Цитата

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

Как именно она это делает? Я не понимаю!!! smile

Ещёб' 20 строчек про них. smile


--------------------
вопросов больше чем ответов
PM MAIL   Вверх
azesmcar
Дата 24.6.2009, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Леопольд

Почитайте GoF, там есть описание абстрактной фабрики и конкретный пример ее применения. Кажется на лабиринте пример.

Добавлено через 2 минуты и 3 секунды
Скопировал из GoF. Известные применения шаблона проектирования "Абстрактная фабрика"
Цитата

В библиотеке Interviews [Lin92] для обозначения классов абстрактных фаб¬рик используется суффикс «Kit». Так, для изготовления объектов пользователь¬ского интерфейса с заданным внешним обликом определены абстрактные фабри¬ки WidgetKit и DialogKit. В Interviews есть также класс Lay out Kit, который генерирует разные объекты композиции в зависимости от того, какая требуется стратегия размещения. Например, размещение, которое концептуально можно было бы назвать «в строку», может потребовать разных объектов в зависимости от ориентации документа (книжной или альбомной).
В библиотеке ЕТ++ [WGM88] паттерн абстрактная фабрика применяется для достижения переносимости между разными оконными системами (например, X Windows и SunView). Абстрактный базовый класс Window System определяет ин-терфейс для создания объектов, которое представляют ресурсы оконной системы (MakeWindow, MakeFont, MakeColor и т.п.). Его конкретные подклассы реализу¬ют эти интерфейсы для той или иной оконной системы. Во время выполнения ЕТ++ создает экземпляр конкретного подкласса WindowSystem, который уже и порождает объекты, соответствующие ресурсам данной оконной системы.

PM   Вверх
Леопольд
Дата 24.6.2009, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 943
Регистрация: 17.6.2009

Репутация: 10
Всего: 13



Цитата(azesmcar @ 24.6.2009,  16:43)
Леопольд

Почитайте GoF, там есть описание абстрактной фабрики и конкретный пример ее применения. Кажется на лабиринте пример.

Добавлено @ 16:45
Скопировал из GoF. Известные применения шаблона проектирования "Абстрактная фабрика"

Я читал smile Но почему то мне кажется что, здесь "в игре с героями" её предлагается использовать несколько иначе? smile И на мой взгляд, изложение, гораздо интереснее чем у переводчика GoF. Ещё и из первых уст, так сказать smile а не на перевод на английский язык... 

smile По моему, некоторые переводчики временами просто не понимают что они пишут. Слышал что Страуструпа гораздо легче читать в оригинале. Ничего удивительного, что он сложен для понимания на русском... Но даже если переводчик "грамотный", он всё равно не сможет передать авторский стиль писателя.

Это сообщение отредактировал(а) Леопольд - 24.6.2009, 16:59


--------------------
вопросов больше чем ответов
PM MAIL   Вверх
azesmcar
Дата 24.6.2009, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(Леопольд @  24.6.2009,  16:56 Найти цитируемый пост)
Я читал smile 

Я не говорю что не читал, я говорю где есть пример. Перефразирую, посмотрите в GoF.

Цитата(Леопольд @  24.6.2009,  16:56 Найти цитируемый пост)
По моему, некоторые переводчики временами просто не понимают что они пишут. Слышал что Страуструпа гораздо легче читать в оригинале. Ничего удивительного, что он сложен для понимания на русском... 

Бывает и такое, но тут я что-то не заметил проблем понимания. Вроде все понятно. Насчет героев - я думаю автор идеи изложет лучше.
PM   Вверх
mes
Дата 24.6.2009, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Леопольд @  24.6.2009,  15:39 Найти цитируемый пост)
Фабрика нужна для того, чтоб  эпизод игры не зависил от конкретных персонажей.

А это как?  smile 

Например игра Pacman, тогда возможные персонажи :

1 . Колобок и демоны - классический
2.  Снегурочка и снеговики - новогодний
3.  Облачко и Тучи - небесный 
smile

Т.е. один и тот же эпизод можно поиграть в различной обстановке.
(Фабрика может поставлять не только персонажи игры, но и другие объекты сцены, в зависимости от требовани разработчиков)



--------------------
PM MAIL WWW   Вверх
Леопольд
Дата 24.6.2009, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 943
Регистрация: 17.6.2009

Репутация: 10
Всего: 13



Отлично. Есть понимание что она делает. Но как именно она это делает, я не понимаю smile

Добавлено @ 17:49
Цитата(azesmcar @ 24.6.2009,  17:00)

Я тоже. Яж' и говорю что я про это слышал (и местами читал)... smile
Т.е. автор идеи про героев расскажет лучше? smile

Это сообщение отредактировал(а) Леопольд - 24.6.2009, 17:53


--------------------
вопросов больше чем ответов
PM MAIL   Вверх
atomicxp
  Дата 24.6.2009, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 2.5.2009
Где: Удмуртия, Ижевск

Репутация: 1
Всего: 1



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

user posted image

Каждый контакт ведёт к какому-то конкретному продукту, их количество определяется числом этажей, а массив тех что расположены одни над другими можно считать конкретной фабрикой. Абстрактные фабрики нужны чтобы массово менять продукты, на которые ссылаемся. Была высказана идея использования всего этого в виде плагинов. Сами плагины с помощью интерфейсов заключают контракты, что позволяет им быть независимыми. Следовательно, техника плагинов это не абстрактная фабрика. Но ведь как уже было сказано, абстрактные фабрики это массовые переключатели между объектами продуктов.

Однако даже не комбинируясь, интерфейсы способны переключаться. Вероятно абстрактные фабрики нужны для массовых параллельных, то есть не пересекающихся переключений. Вопрос в другом, можно ли обойтись без них, надо ли их использовать, но это уже зависит от разработчиков. Нам просто дали способ, которым мы можем воспользоваться, и который отличим от других.
PM MAIL WWW Skype GTalk Jabber   Вверх
atomicxp
  Дата 24.6.2009, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 2.5.2009
Где: Удмуртия, Ижевск

Репутация: 1
Всего: 1



Observer/Наблюдатель, Dependents, Publish-Subscribe, Event listener (GoF)

user posted image

Определяет зависимость типа «один ко многим» между объектами таким образом, что при изменении состояния одного объекта все зависящие от него оповещаются об этом событии.

При реализации шаблона «наблюдатель» обычно используются следующие классы.

    * Observable — интерфейс, определяющий методы для добавления, удаления и оповещения наблюдателей.
    * Observer — интерфейс, с помощью которого наблюдаемый объект оповещает наблюдателей.
    * ConcreteObservable — конкретный класс, который реализует интерфейс Observable.
    * ConcreteObserver — конкретный класс, который реализует интерфейс Observer.

Шаблон «наблюдатель» применяется в тех случаях, когда система обладает следующими свойствами:

    * существует, как минимум, один объект, рассылающий сообщения
    * имеется не менее одного получателя сообщений, причём их количество и состав могут изменяться во время работы приложения.

Данный шаблон часто применяют в ситуациях, в которых отправителя сообщений не интересует, что делают с предоставленной им информацией получатели.
PM MAIL WWW Skype GTalk Jabber   Вверх
mes
Дата 24.6.2009, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Леопольд @  24.6.2009,  16:46 Найти цитируемый пост)
Но как именно она это делает, я не понимаю smile

Вот условный заготовок , надеюсь станет понятнее smile

Код

struct LevelObjectAbstractFactory
{
   virtual IeHero  * CreateHero  () =0;
   virtual IEnemy  * CreateEnemy () =0;
   virtual IBlock  * CreateBlock () =0;
};

class Scene
{
  public:
     void  CreateLevel (LevelDescriptor const& d, LevelObjectAbstractFactory& f)
    {
 
          for (unsigned i=0; i<d.PlayersCount(); ++i)
             m_HeroArray.push_back(f.CreateHero());

          for (unsigned i=0; i<d.EnemyCount(); ++i)        
             m_EnemyArray.push_back (f.CreateEnemy());        

          ...
    }      
};


 


Это сообщение отредактировал(а) mes - 24.6.2009, 20:02


--------------------
PM MAIL WWW   Вверх
Леопольд
Дата 24.6.2009, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 943
Регистрация: 17.6.2009

Репутация: 10
Всего: 13



Цитата(mes @ 24.6.2009,  20:00)
Цитата(Леопольд @  24.6.2009,  16:46 Найти цитируемый пост)
Но как именно она это делает, я не понимаю smile

Вот условный заготовок , надеюсь станет понятнее smile

Мне всё было понятно из самого первого поста про игру с героями. Просто я люблю намекать. smile
Я предлагал пофилосовствовать и совсем не использовать С++ для выражения мыслей. Потому что словами, в данном случае, описать сложнее. Но в результате придёт полное понимание и к тому, кто первый раз услышал про паттерны проектирования. Если, конечно, объяснено достаточно подробно и доступно.

Добавлено @ 21:29
Цитата(atomicxp @ 24.6.2009,  18:30)
Предположим, что интерфейс это некий многоконтактный переключатель (multicontact switch) между объектами (здесь ещё можно подумать над темой классов с полностью статическими членами).

Статические методы С++ не могут быть виртуальными. Можно конечно использовать таблицу указателей на функции, но зачем тогда вообще нужны классы если обходиться без встроенного полиморфизма С++? Можно, например, просто использовать пространство имен и обычные функции...

Это сообщение отредактировал(а) Леопольд - 24.6.2009, 21:30


--------------------
вопросов больше чем ответов
PM MAIL   Вверх
mes
Дата 24.6.2009, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Леопольд @  24.6.2009,  20:22 Найти цитируемый пост)
Я предлагал пофилосовствовать и совсем не использовать С++ для выражения мыслей. Потому что словами, в данном случае, описать сложнее. Но в результате придёт полное понимание и к тому, кто первый раз услышал про паттерны проектирования. Если, конечно, объяснено достаточно подробно и доступно.

Про абстрактную фабрику имхо нечего филосоствовать, так как она не имеет собственной сущности, а представлена обобщением двух других паттернов : Фабрика и Интерфейс.


Это сообщение отредактировал(а) mes - 25.6.2009, 09:54


--------------------
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0964 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.