Шаблоны проектировнания в исполнении С++ (обсуждение)
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.159] |
|
|
| Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Шаблоны проектировнания в исполнении С++ (обсуждение)
|
Сообщ.
#1
,
|
|
|
|
Буэнос диас, амигос!
ИМХО, данная тема несильно раскрыта в рамках форума. Да, в сети есть материалы, а чего там только нет ... Если кому есть что сказать - вэлкомь!!! А я сойду за должность секретаря. Пишите статьи по паттернам - и вам воздатся))) Я найду способ это оформить правильно. |
|
Сообщ.
#2
,
|
|
|
|
Интересная тема. Некоторые шаблоны очень полезны. Другие непонятно как реализовывать на плюсах.
Для начала, можно, наверное просто накидать ссылок. Как на счёт хабра? Помню там были интересные описания паттернов, применительно к C++. |
|
Сообщ.
#3
,
|
|
|
|
Цитата Eric-S @ Помню там были интересные описания паттернов, применительно к C++. Любую норм оформленную тему - занесу в FAQ! Админы форума, уверен, создадут все условия! |
|
Сообщ.
#4
,
|
|
|
|
|
Сообщ.
#5
,
|
|
|
|
Амигос, приветствую!
Вернулся я к когда-то надёжно забытой этой теме Начал изучать язык программирования Dart. Думаю, а почему бы и не зацепить эту тему. Сделать в сравнении С++ и Dart. Попутно разбираясь. Не знаю, с материалами в сети мне как-то не повезло. Трактовки несколько отличаются, примеры невнятные. В общем - я решил немного скомуниздить инфу с разных сайтов, а вот примерами - напрячь ChatGPT. Получилось у меня вот такое "изделие". ChatGPT - конечно штука классная, но частенько беззастенчиво и нагло врёт Посему, если вы найдете время и обнаружите желание пробежаться по сделанному мною ресурсу и найти лажу - буду вам безмерно благодарен. |
|
Сообщ.
#6
,
|
|
|
|
Как говорится "не прошло и пол года"
Амигос!!! Ну неужели ни у кого не возникло чувство, что нужно поделиться сокровенным? Наверняка же вы в своих проектах юзали эти вот паттерны... Ну приведите примеры, ну пожалуйста!!! "Синтетика" из моей "шпаргалки" и останется шпаргалкой, а нужны примеры реализаций |
|
|
|
|
|
Цитата Majestio @ ...Наверняка же вы в своих проектах юзали эти вот паттерны... Ну приведите примеры, ну пожалуйста!!!.. Патерны...патерны? патерны... Хорошая тема для обсуждения за кружкой пива и собственно всё. Если Вы читали Гради Буча - то там чёрным по белому написано, что дескать объектный подход ползёт от жизни. И решаются задачи исходя из жизненной ситуации бизнеса. Лично я - не встречал два одинаковых под копирку бизнеса, значит и коллекция сущностей, а затем и классов - будут другими. Есть конечно-же, что то универсально-общее в подходах решения одного человека или одной группы разработки - но как правило это выливается в библиотеки. Библиотеки которые есть удачные и не очень, стандартные и не очень. Когда решается задача - опираются не на некие совы которые надо тянуть на разные (дажы не глобусы...) чумуданы, а на рассуждения про те сущности которые опознаны; и успешно применяются носителями в повседневной жизни. Так, что слово патерны - это там у эйчаров бестолковых встретить толпами можно. Но можно достать кружку чая и протянув ноги к камину рассуждать о великом пути таракана под плинтусом. удачи Вам она Вам потребуется... (круглый) |
|
Сообщ.
#8
,
|
|
|
|
Давай линк на Гради Буча
Срочно давай |
|
Сообщ.
#9
,
|
|
|
|
Цитата Majestio @ Давай линк на Гради Буча Срочно давай ![]() Да это не обязательно. Можно тут почитать. Все объяснения про функционирование паттернов объясняются на реальных жизненных примерах и потребностях программирования. |
|
Сообщ.
#10
,
|
|
|
|
Цитата ЫукпШ @ Можно тут почитать. Эт я почитал и перечитал. Имхо, это учебная синтетика. Нет ... именно интересуют вариации из реальной практики. Типа "вот вштырило и я реализовался по каноническим практикам по учебникам. Вот такое реально интересно. Есть такое? |
|
Сообщ.
#11
,
|
|
|
|
Цитата Majestio @ Цитата ЫукпШ @ Можно тут почитать. Эт я почитал и перечитал. Имхо, это учебная синтетика. Нет ... именно интересуют вариации из реальной практики. Типа "вот вштырило и я реализовался по каноническим практикам по учебникам. Вот такое реально интересно. Есть такое? Подход к любому шаблону это как подход к женщине. Все примерно там же и в тех же местах. Но есть нюансы... |
|
Сообщ.
#12
,
|
|
|
|
Цитата Majestio @ Типа "вот вштырило и я реализовался по каноническим практикам по учебникам. Почти. Однажды было так: Скрытый текст Надо было писать и поддерживать программу подведения баланса небольшой торговой точки за смену (неделя). Для этого на видах/диалогах присутствует значительное колическтво однострочных эдитов. Но в них надо фильтровать данные, чтобы случайно не ошибиться с вводом символов. Берём библиотечный объект-эдит, который пропускает всё. Ура, я умею писать наследников ! 1. Делаем наследника, корорый позволяет вводить фио. те фильтруем большие/маленькие русские буквы. 2. делаем наследника для ассортимента - кроме букв могут быть, цифры и спец. символы. Например, "Сок яблочный, 0.25 л" Пирожное Картошка 100 гр. итп итд 3. делаем наследника для цены - цифры, точка 4. приход/расход - цифры, точки, знаки 5. дата - целые цифры 6. что-то ещё было - не помню.. В это время лудил ещё прогу - понадобились 16-ричные цифры Всё работает, всё в порядке, но не удобно - сам путаюсь кто какой объект. Случайно читаю про стратегию, и понимаю, что это она. Надо разделить две сущности, которые я слил вместе. Эдит изначальный и фильтр. В эдите вместо вызова виртуальной функции фильтра, вызовем по указателю интерфейса "SomeRoutine" какую то его реализацию. (Если указатель действителен). Собственно, это всё. В качестве реализации указанного интерфейса могут быть использованы объекты, реализующие различные фильтры. В том числе и те, которые мне пока не нужны. При этом, поскольку объект-фильтр не является автоматом состояний, один объект-фильтр может обслуживать любое количество эдитов. Другая история. Скрытый текст Мне захотелось сделать вывод диагностической и разной другой инфы разным приёмникам, в том числе по сети. 1. в DbgView - чтобы сразу посмотреть в окошке 2. на UDP-сервер - у меня есть достаточно различных программ - клиентов, хочется знать об их проблемах удалённо. К тому же они на разных версиях Виндус, поэтому вопрос актуален. 3. в файл конечно 4. В некоторых случаях в консоль (если приложение консольное) 5. В какое-то окно приложения 6. Никуда, если не нужно 7. Если ещё что-то потребуется, чтобы прямо сразу. В программе я пишу что-то вроде: AppTypeMessageF(_T("SomeProject %s %d случилось плохое, а именно ..."),_T(__FILE__),__LINE__,...); Особенно интересно, если это используется в библиотечной процедуре. Вывод будет определять конкретное приложение. Это паттерн "наблюдатель", я почти сразу догадался. 1. Определим интерфейс вроде I_TypeMessage. 2. Если собираемся вообще выводить, проинициализируем указатель на этот интерфейс реализацией. Это почти всё. И как быть с желанием выводить сразу нескольким получателям ? Это просто. Делаем объект - контейнер адресов объектов-реализаций. Созданные объекты-реализации вывода (например DbgView, Udp, Сonsol) "подписываются на события" передавая контейнеру свой адрес. Приведённый к типу интерфейса (ясное дело). Как только произойдёт "событие" - попытка вывода " AppTypeMessageF(...); " будет вызван метод контейнера, который сам выводить не должен. Но зато он перечислит все занесённые адреса и переправит выводимое каждому "подписавшемуся" объекту. Это очень удобно работает. Можно даже в процессе работы приложения менять получателей информации. Третий случай. Наследование тут не поможет Скрытый текст Мне надо было подключить абонента по RS485 к компу. я взял объект - COM-порт, унаcледовался от него и сделал объект-абонент. и всё заработало. Роутины объекта COM-порта умеют принимать/передавать вообще, а "абонент" формирует, что именно надо передавать и разбирается в принятом. И тут вдруг оказалось, что надо несколько абонентов. Наследование не возможно, каждый наследник - отдельный объект COM-порт. А все абоненты подключены к одному физическому порту. Значит, каждому "абоненту" надо занести адрес объекта COM-порта. (Или адрес интерфейса "I_ComPort", реализацией которого пользуемся. В данном случае это не важно.) Это паттерн "мост". И без "моста" решить проблему вообще невозможно. Есть ли необходимость писать про "адаптер" ? Это самый простой паттерн, и поэтому я не помню точно где использовал.. |
|
Сообщ.
#13
,
|
|
|
|
Цитата sharky72 @ Все примерно там же и в тех же местах. Но есть нюансы... Добавлено ЫукпШ, пасиба - ты кросава!!! |
|
Сообщ.
#14
,
|
|
|
|
Цитата sharky72 @ Подход к любому шаблону это как подход к женщине. Все примерно там же и в тех же местах. Но есть нюансы... ![]() Однажды я понял, как и для чего нужен паттерн "посетитель". Дело было так - я был дома. Скрытый текст И ждал вызванного сантехника, который был вызван для ряда работ. Думая о паттернах вообще, я сообоазил, что вызванный "специалист" - это аналог класса-интерфейса. Для выполнения работ прибыл мужик - это аналог объекта класса, реализующего абстрактный интерфейс "специалист". Открывание двери - это аналог занесения указателя на интерфейс "специалист" в объект обрабатываемого класса. Далее, производится акция "визит". Т.е. прибывшему "специалисту" передаётся this квартиры. (Для получения доступа к производству работ.) this приводится к типу указателя "доступ_к_сантехнике". Для которой и производятся работы. |
|
Сообщ.
#15
,
|
|
|
|
Читаю я вас тут и думаю, что у меня паттерн на паттерне и паттерном погоняет, только я и в ус не дул, что применяю какие-то там паттерны
|