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

Поиск:

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


uploading...
****


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

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



Цитата(atomicxp @  21.6.2009,  14:40 Найти цитируемый пост)
как ты лично оцениваешь эффективность использования абстрактной фабрики в реальных примерах

Фабрика и абстрактная фабрика очень красиво могут быть использованы с другими паттернами. Command например. Я использовал фабрику комманд в реализации RPC. 
Код

rpcCommands->CreateCommand(commandStr)->Execute();

можно возвращать boost::shared_ptr чтобы избежать надобности очищать память. Ну и так далее...
PM   Вверх
Sajra
Дата 22.6.2009, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Кто  знает  как  на  С++ реализировать  патерн  Proxy  c умной  ссылкой????
PM MAIL ICQ   Вверх
Леопольд
Дата 22.6.2009, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Sajra @ 22.6.2009,  20:59)
Кто  знает  как  на  С++ реализировать  патерн  Proxy  c умной  ссылкой????

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


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


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



какие тут все умные, даже неловко писать в этом умном трэде smile

Добавлено через 6 минут и 29 секунд
Цитата(Sajra @  22.6.2009,  20:59 Найти цитируемый пост)
Кто  знает  как  на  С++ реализировать  патерн  Proxy  c умной  ссылкой????

что-то мне подсказывает, что для этого нужны 3 класса, причем один из них - смарт-поинтер, а другой - прокси smile 
PM MAIL Skype GTalk   Вверх
atomicxp
  Дата 22.6.2009, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Lazin @  22.6.2009,  21:45 Найти цитируемый пост)
какие тут все умные, даже неловко писать в этом умном трэде smile

Ты выражаешь общую мысль, вероятно от этого тема столь непопулярна.
PM MAIL WWW Skype GTalk Jabber   Вверх
Sajra
Дата 22.6.2009, 22:10 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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




Леопольд, у  меня  именно  такое  задание  было!

Народ  ОЧЕНЬ  нужен  код...просто  я  так  и  не  поняла  нормально  этой  темы....мы  ее  разбирали  минут  15.....книг  нормальный  нету.....НУ  ПОЖАЛУЙСТА!!!!!!  smile  smile  smile  smile  smile 


PM MAIL ICQ   Вверх
mes
Дата 23.6.2009, 00:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Sajra, не флейми. Если есть свой вопрос открой новую тему.



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


Опытный
**


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

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



Цитата(Sajra @ 22.6.2009,  22:10)
Леопольд, у  меня  именно  такое  задание  было!

Народ  ОЧЕНЬ  нужен  код...просто  я  так  и  не  поняла  нормально  этой  темы....мы  ее  разбирали  минут  15.....книг  нормальный  нету.....НУ  ПОЖАЛУЙСТА!!!!!!  smile  smile  smile  smile  smile

Книги есть. Рекомендую почитать классику GoF "Паттерны проектирования"
http://www.rsdn.ru/res/book/oo/design_patterns.xml


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


Опытный
**


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

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



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

Я вот и говорю, изучить очень хорошо, но без свободы мысли, понять паттерны проектировани нельзя. Можно только использовать чужие и быть ими ограниченным. Конечно, придумать что-то новое не так просто. Но если понимать идеи так как будто ты их сам придумал, тогда можно постичь их истинный смысл. smile

Это сообщение отредактировал(а) Леопольд - 23.6.2009, 18:26


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


Опытный
**


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

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



Предалагю пофилосовствовать. Философия - мать всех наук. 

Когда полезна "абстрактная фабрика"?

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

Относительно интерфейса. Мне кажется, что интерфейс надо сужать путём разбиения на "неделимые единицы". Под "неделимыми единицами" я подразумеваю те  интерфейсы, которые не имеет смысла делить дальше. Например, автомобиль состоит из зап.частей. - колёса, мотор, корпус... Однако речь идёт об интерфейсе, и по моему, автомобиль не должен иметь что-то от интерфейса колеса, двигателя, корпуса... (предположим что они нужныsmile ) Если, придумать, как делегировать вызовы методов колёс, двигателя, корпуса... через интерфейс автомобиля, то можно будет с лёгкостью добавлять новые автомобили в систему. К примеру, у автомобиля, есть метод "ехать по этой дороге", он принимает ссылку на "эту дорогу" и движется по ней, для этого он передает эту дорогу методу колеса, для которого существует не просто дорога, а ещё ухабы, открытые люки и т.д, которые находятся на этой дороге. А что такое дорога? Это тоже набор объектов... Свернул на другую дорогу, вот тебе ссылка на неё, поехали!


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

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


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


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


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

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



Цитата(Леопольд @  24.6.2009,  07:32 Найти цитируемый пост)
Если, придумать, как делегировать вызовы методов колёс, двигателя, корпуса... через интерфейс автомобиля, то можно будет с лёгкостью добавлять новые автомобили в систему.

Это плохой тон делегировать колесам команды автомобиля, он должен управлять ими.  Но интерфейс автомобиля, может предоставлять интерфейс руля. smile


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

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

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

Цитата(Леопольд @  24.6.2009,  07:32 Найти цитируемый пост)
что-бы создавать.заменять некоторые его части динамически, можно использовать "абстрактную фабрику"

Для этого достаточно обычной (не-абстрактной) фабрики.
 smile 

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


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


Опытный
**


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

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



Цитата(atomicxp @ 20.6.2009,  21:35)
Цитата
...Говорить о превосходстве других языков перед C++ - все равно, что сравнивать научно доказанные факты с языческими суевериями.

Не согласен! smile
Идеализировать что-то одно нельзя. Идолопоклонники как правило не могут мыслить гибко. Т.е. "выходить за рамки"...


Цитата(mes @ 24.6.2009,  08:53)
Цитата(Леопольд @  24.6.2009,  07:32 Найти цитируемый пост)
Если, придумать, как делегировать вызовы методов колёс, двигателя, корпуса... через интерфейс автомобиля, то можно будет с лёгкостью добавлять новые автомобили в систему.

Это плохой тон делегировать колесам команды автомобиля, он должен управлять ими.  Но интерфейс автомобиля, может предоставлять интерфейс руля. smile

Бесспорно. Руль для делегации подходит гораздо лучше потому что это руль. smile Я просто пытался передать саму идею.


Цитата(mes @ 24.6.2009,  08:53)
Цитата(Леопольд @  24.6.2009,  07:32 Найти цитируемый пост)
что-бы создавать.заменять некоторые его части динамически, можно использовать "абстрактную фабрику"

Для этого достаточно обычной (не-абстрактной) фабрики.
 smile

Т.е. я имел ввиду, что, например, для замены руля на спортивный, можно сменить фабрику, "выпускающую" рули. При этом метод, который создает рули, переписывать/дописывать не надо.
Насколько я помню, "абстрактная фабрика" это на самом деле семейство фабрик (с общим интерфейсом, думаю, не обязательно с одним). Т.е. вызов Create делегируется через интерфейс. Уверен, можно придумать другой способ динамически заменить фабрику. 


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

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

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

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

И, пожалуйста, побольше философии. smile Комментов типа "это лишнее", "для этого не нужна абстрактная фабрика" явно не достаточно для понимания того, почему это лишнее, и почему не нужна "абстрактная фабрика"...

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


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


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


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

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



Цитата(Леопольд @  24.6.2009,  07:59 Найти цитируемый пост)
И, пожалуйста, побольше философии. smile Комментов типа "это лишнее", "для этого не нужна абстрактная фабрика" явно не достаточно для понимания того, почему это лишнее, и почему не нужна "абстрактная фабрика"..

Комментарий "это лишнее" я добавил, потому что на мой взгляд  процитированная часть высказывания уводила от сути в сторону. Т.е была не просто лишней, а мешающей для понимания.

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

Насколько я помню, "абстрактная фабрика" это на самом деле семейство фабрик (с общим интерфейсом, думаю, не обязательно с одним). Т.е. для вызова Create используется интерфейс а не конкретная фабрика. 

Ага. 
Цитата(Леопольд @  24.6.2009,  07:59 Найти цитируемый пост)
Уверен, можно придумать другой способ динамически заменить фабрику. 

Не понял смысла фразы. Какая разница как менять ? главное что есть возможность заменить smile


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


Опытный
**


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

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



Цитата(mes @ 24.6.2009,  09:43)
Цитата(Леопольд @  24.6.2009,  07:59 Найти цитируемый пост)
Уверен, можно придумать другой способ динамически заменить фабрику. 

Не понял смысла фразы. Какая разница как менять ? главное что есть возможность заменить smile

Цитата(mes @ 24.6.2009,  08:53)
Цитата(Леопольд @  24.6.2009,  07:32 Найти цитируемый пост)
что-бы создавать.заменять некоторые его части динамически, можно использовать "абстрактную фабрику"

Для этого достаточно обычной (не-абстрактной) фабрики.
 smile

Это был комментарий к комментарию smile

Мне очень интересно Ваше мнение о предназначении "абстракной фабрики". Не могли бы Вы его "озвучить"?
Как известно, сколько людей, столько и мнений. Хотелось бы взглянуть вашими глазами.

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


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


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


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

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



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

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





--------------------
PM MAIL WWW   Вверх
Страницы: (7) Все « Первая ... 3 4 [5] 6 7 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

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

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

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

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


 




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


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

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