На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
  
> Шаблоны проектировнания в исполнении С++ (обсуждение)
    Буэнос диас, амигос!

    ИМХО, данная тема несильно раскрыта в рамках форума.
    Да, в сети есть материалы, а чего там только нет ...
    Если кому есть что сказать - вэлкомь!!! А я сойду за должность секретаря.
    Пишите статьи по паттернам - и вам воздатся)))

    Я найду способ это оформить правильно.
      Интересная тема. Некоторые шаблоны очень полезны. Другие непонятно как реализовывать на плюсах.
      Для начала, можно, наверное просто накидать ссылок.
      Как на счёт хабра? Помню там были интересные описания паттернов, применительно к C++.
        Цитата Eric-S @
        Помню там были интересные описания паттернов, применительно к C++.

        Любую норм оформленную тему - занесу в FAQ! Админы форума, уверен, создадут все условия!
            Амигос, приветствую!

            Вернулся я к когда-то надёжно забытой этой теме :whistle:

            Начал изучать язык программирования Dart. Думаю, а почему бы и не зацепить эту тему. Сделать в сравнении С++ и Dart. Попутно разбираясь.
            Не знаю, с материалами в сети мне как-то не повезло. Трактовки несколько отличаются, примеры невнятные.
            В общем - я решил немного скомуниздить инфу с разных сайтов, а вот примерами - напрячь ChatGPT.

            Получилось у меня вот такое "изделие".

            ChatGPT - конечно штука классная, но частенько беззастенчиво и нагло врёт :lol:

            Посему, если вы найдете время и обнаружите желание пробежаться по сделанному мною ресурсу и найти лажу - буду вам безмерно благодарен.
              Как говорится "не прошло и пол года" ;) Амигос!!! Ну неужели ни у кого не возникло чувство, что нужно поделиться сокровенным?
              Наверняка же вы в своих проектах юзали эти вот паттерны... Ну приведите примеры, ну пожалуйста!!!
              "Синтетика" из моей "шпаргалки" и останется шпаргалкой, а нужны примеры реализаций :'(
                Цитата Majestio @
                ...Наверняка же вы в своих проектах юзали эти вот паттерны... Ну приведите примеры, ну пожалуйста!!!..

                Патерны...патерны? патерны...
                Хорошая тема для обсуждения за кружкой пива и собственно всё.
                Если Вы читали Гради Буча - то там чёрным по белому написано, что дескать объектный подход ползёт от жизни. И решаются задачи исходя из жизненной ситуации бизнеса. Лично я - не встречал два одинаковых под копирку бизнеса, значит и коллекция сущностей, а затем и классов - будут другими. Есть конечно-же, что то универсально-общее в подходах решения одного человека или одной группы разработки - но как правило это выливается в библиотеки. Библиотеки которые есть удачные и не очень, стандартные и не очень.
                Когда решается задача - опираются не на некие совы которые надо тянуть на разные (дажы не глобусы...) чумуданы, а на рассуждения про те сущности которые опознаны; и успешно применяются носителями в повседневной жизни.

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


                удачи Вам
                она Вам потребуется...
                (круглый)
                  Давай линк на Гради Буча :( Срочно давай :(
                    Цитата Majestio @
                    Давай линк на Гради Буча :( Срочно давай :(

                    Да это не обязательно.
                    Можно тут почитать.

                    Все объяснения про функционирование паттернов объясняются
                    на реальных жизненных примерах и потребностях программирования.
                      Цитата ЫукпШ @
                      Можно тут почитать.

                      Эт я почитал и перечитал. Имхо, это учебная синтетика. Нет ... именно интересуют вариации из реальной практики. Типа "вот вштырило и я реализовался по каноническим практикам по учебникам. Вот такое реально интересно. Есть такое?
                        Цитата Majestio @
                        Цитата ЫукпШ @
                        Можно тут почитать.

                        Эт я почитал и перечитал. Имхо, это учебная синтетика. Нет ... именно интересуют вариации из реальной практики. Типа "вот вштырило и я реализовался по каноническим практикам по учебникам. Вот такое реально интересно. Есть такое?

                        Подход к любому шаблону это как подход к женщине. Все примерно там же и в тех же местах. Но есть нюансы... :)
                          Цитата 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", реализацией которого пользуемся.
                          В данном случае это не важно.)

                          Это паттерн "мост".
                          И без "моста" решить проблему вообще невозможно.




                          Есть ли необходимость писать про "адаптер" ?
                          Это самый простой паттерн, и поэтому я не помню точно
                          где использовал..
                          Сообщение отредактировано: ЫукпШ -
                            Цитата sharky72 @
                            Все примерно там же и в тех же местах. Но есть нюансы...

                            :lool:

                            Добавлено
                            ЫукпШ, пасиба - ты кросава!!! 8-)
                              Цитата sharky72 @
                              Подход к любому шаблону это как подход к женщине. Все примерно там же и в тех же местах. Но есть нюансы... :)

                              Однажды я понял, как и для чего нужен паттерн "посетитель".
                              Дело было так - я был дома.
                              Скрытый текст

                              И ждал вызванного сантехника, который был вызван для ряда работ.
                              Думая о паттернах вообще, я сообоазил, что вызванный "специалист" - это
                              аналог класса-интерфейса. Для выполнения работ прибыл мужик - это аналог
                              объекта класса, реализующего абстрактный интерфейс "специалист".
                              Открывание двери - это аналог занесения указателя на интерфейс "специалист"
                              в объект обрабатываемого класса. Далее, производится акция "визит".
                              Т.е. прибывшему "специалисту" передаётся this квартиры.
                              (Для получения доступа к производству работ.)
                              this приводится к типу указателя "доступ_к_сантехнике".
                              Для которой и производятся работы.
                              Сообщение отредактировано: ЫукпШ -
                                Читаю я вас тут и думаю, что у меня паттерн на паттерне и паттерном погоняет, только я и в ус не дул, что применяю какие-то там паттерны :unsure:
                                  Паттерн это вообще решение сферической задачи в вакууме. Это просто повод для размышления и способ общения узких специалистов о конкретных реализациях предметной области.

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

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

                                  Ну а мой первый - Команда. Че тут рассказывать? Надо было команды слать на устройства, вот и взял команду. Собственно то, что это команда это уже и есть рассказ о том что делал см. первую строчку.
                                  1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                  0 пользователей:


                                  Рейтинг@Mail.ru
                                  [ Script execution time: 0.0929 ]   [ 15 queries used ]   [ Generated: 19.09.26, 18:06 GMT ]