Форум программистов, компьютерный форум, киберфорум
ООП и паттерны
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.64/74: Рейтинг темы: голосов - 74, средняя оценка - 4.64
Заблокирован

ООП - парадигмы, паттерны, подходы - кратко и доходчиво

03.06.2020, 16:34. Показов 18459. Ответов 153
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я не проф программист и никогда им не буду (старый уже). Потихоньку что-то читал и делал на c# WPF. Получалось, работало, но это были относительно простые штуковины и собственно ОПП там особо не использовалось. Но ту взялся сделать (для себя) более сложную штуковину и увидел, что не сделал ещё и малой части, а уже приходится неоднократно переписывать почти всё заново. Чё-то не очень получается делать ладные "кирпичики", из которых будут строиться блоки программы, а из блоков постепенно усложняться большое здание программы. Постоянно что-то "подпиливаю" в кирпичиках и даже их заменяю. Если так и дальше пойдет, то я эту штуку никогда не сделаю. Оказалось, что это очень не просто правильно сделать модель предметной области, правильно определиться со способами реализациями идей, правильно разбить программу на какие-то правильно взаимодействующие части. К тому же, c# имеет богатый функционал средств. Одно и то же можно сделать по разному. Постоянно встает проблема выбора - и так можно и эдак... Код поначалу всё терпит)
В итоге оказалось, что "что-то не так" - очевидно не хватает каких-то системных знаний.
Сама задача достаточно стандартная - анализ исторических данных биржевых курсов акций, выработка и реализация торговых стратегий и т.д. Это интересно, но чувствую, что что-то идёт не так)
Забавно, что в рамках процедурного программирования достаточно быстро "слепил" один небольшой кусочек программы и частично оттестировал микроидею. Усложнять далее в рамках процедурного подхода было уже не рационально. Поэтому стал переписывать в рамках подхода ООП. Это заняло гораздо больше времени и никак не закончу). Постоянно что-то переделываю. Честно говоря, не ожидал, что возникнут такие принципиальные трудности. Одного здравого смысла и соображалки явно не достаточно. И шо же делать?)
Изучить все парадигмы, подходы, паттерны программирования, чтобы потом легко выбирать нужные? Это конечно правильный, но очень долгий путь.
Что подскажут профессионалы? Может есть какой-то не оч объемный (страниц 100 - 200) "тот самый" фолиант, или статья, или блог, или ещё что, который мне тут может помочь? Как-то подтолкнёт в нужном направлении. А далее уже методом проб и ошибок - путём набора опыта.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.06.2020, 16:34
Ответы с готовыми решениями:

Парадигмы: императивная vs ООП
Здравствуйте, форумчане. Меня мучает проблема, можно так сказать, эстетически-идеологического характера. Суть заключается в следующем: ...

Насколько распространены такие подходы ("паттерны")
Всем привет. Встретил некоторые паттерны (конечно, таковыми их можно назвать с натяжкой). Хочу узнать, в реальных (а не учебных...

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

153
 Аватар для vantfiles
1018 / 1921 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
26.06.2020, 10:56
Студворк — интернет-сервис помощи студентам
согласен, некорректно, извините, надеюсь из контекста форумчане поймут, о чем идет дискуссия и с кем
1
Заблокирован
26.06.2020, 12:34  [ТС]
Интересно и не понятно как такое вообще может быть. Это я о противоречиях в изложении структуры архитектурных уровней у Мартина и Эванса. Ни в одной области знания нет ничего подобного (не первый раз замечаю). Наверное, это связано с тем, что программирование это не наука и от науки оно постоянно убегает куда-то. Это некая слишком быстро развивающаяся практическая деятельность, которая основана на науке только частично. Тут руки (практика) часто обгоняют голову (теорию). Эванс, наверное, в этой заочной дискуссии растёт от практики и представляет головастые руки, а Мартин - рукастую голову.
И что мы видим?
А то, что Мартин помещает сущности (модель предметной области) в самый центр (или на самый верх) и все зависимости кода по его мнению должны организовываться правдами и неправдами от них наружу (или вниз). А Эванс слой модели предметной области помещает внутрь слоев. По Эвансу же, те слои, что выше модели, зависят от неё, а сама модель зависит от инфраструктурного слоя.
Мне не понятно пока что это означает. Это такая терминологическая путаница или это нечто принципиально разное?
Я уж не говорю о том, что они же знают друг про друга. Могли бы как-то устаканиться в терминах и представлениях. Почему я должен это за них решать?)))


Добавлено через 13 минут
Я не пояснил. Инфраструтурный слой у Эванса ещё ниже модели, то бишь, он самый глубинный по Эвансу. У Эванса верхний слой зависит от нижнего.
P.S. Они с Мартином ещё и верх и низ перепутали. Зачем? Не понятно.
0
 Аватар для vantfiles
1018 / 1921 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
26.06.2020, 19:04
Цитата Сообщение от titan4ik Посмотреть сообщение
программирование это не наука
Это инженерное творчество. И как любое творчество - индивидуально.
0
26.06.2020, 19:42

Не по теме:

titan4ik, а я предупреждал — не читай этих «рекламщиков» =)

0
Заблокирован
27.06.2020, 17:03  [ТС]
Цитата Сообщение от korvin_ Посмотреть сообщение
«рекламщиков»
korvin_, что значит "рекламщики"?
То есть, вы полагаете, что их святая цель не поделиться истинными и сокровенными знаниями, которые прошли достаточно серьезную верификацию на основе их личного опыта и опыта сообщества программистов, а "несколько иная"?!)
0
Модератор
Эксперт функциональных языков программирования
3142 / 2290 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
27.06.2020, 22:01
Цитата Сообщение от titan4ik Посмотреть сообщение
что значит "рекламщики"?
Потому что постоянно спорят, чьё кун фу сильнее.

Ситуация осложняется тем, что наука довольно молодая. Проекты усложняются, на первый план выходят другие задачи (цифровые технологии проникают в новые сферы). Паттерны меняются. Например, для сохранения в БД - активная запись, репозиторий, команда-запрос... Думаю, лет через 100 более-менее утрясётся всё.

У каждого паттерна есть свои преимущества и недостатки. Баланс часто зависит от типа и размера задачи... и даже от привычки (у каждого свой стиль).
0
Заблокирован
28.06.2020, 14:57  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
titan4ik, почитайте Эрика Эванса. Гарантированно с первого раза не усвоите, но никто не запрещает перечитать) Лично мне очень сильно понравилось.
Usaga,
Я сейчас его читаю. Но у меня возникли смутные сомнения.
На стр 133-140 идут рассуждения о полезности шаблона Фабрика. Сейчас слегка глянул что это такое и задумался - "а оно мне нужно"? Не использовать конструкторы классов? New - это уже криминал и т.п.
Вопрос. На каком уровне сложности проекта всё это может быть полезно? Я имею ввиду и всю книгу Эванса и конкретно паттерн Фабрика. Очень многое из книги Мартина "чистая архитектура" и этой Эванса связано именно с масштабом проекта и с тем, что он разрабатывается большим коллективом людей.
Но я-то один и мыслю сейчас только о десктоп приложениях для 1 компьютера (+ немного веб).
Меня собственно в эти дебри затащила проблема того, как организовать взаимодействие между функциональными модулями программы.
Средства C# для реализации механизмов взаимодействия модулей программы
Ну и ещё, конечно, проблема моделирования предметной области (тут я из Эванса кое-что черпаю, но боюсь в нём зарыться)
Чувствую, что читая книги этих достойных людей, я черпаю мизер полезного для себя.
Вон и Эванс Мартин в итоге честно признался -
Разработка архитектуры для уровня предприятия, когда в действительности нужен маленький и удобный инструмент для настольного компьютера, — это верный рецепт провала.
То есть, знания они конечно лишними не бывают но...
P.S. А вообще, пришел к выводу, что наиболее быстро можно получать знания по программированию только работая в команде программистов. Всё остальное (чтение книг и т.п.) важно, но без первого компонента теряет свою эффективность на порядок.

Добавлено через 12 минут
Цитата Сообщение от Shamil1 Посмотреть сообщение
Ситуация осложняется тем, что наука довольно молодая.
Это не наука. Это способы, методы и средства решения практических задач. Причем, в основном - бизнес-задач.
Все попытки создать строгую научную (математическую) дисциплину так и остались попытками. Некие научные основы конечно есть, и временами появляются некие "правильные шаблоны", но в целом это всё очень подвижная динамичная и достаточно неупорядоченная информационная среда.
Именно потому в ней занимают столь значимое место те, кто умеет что-то очень хорошо сделать практически. Это в какой-то степени можно сравнить с "боевыми искусствами". Есть мастер - есть школа и есть некий путь. Каждый раз, когда в науке или технике заходит речь об искусстве что-то уметь это означает только одно - недостаток знания, умений. Когда есть знание, для искусства уже нет места. Искусство нужно для прорыва знания, для того, чтобы сделать то, что никто пока не делал. Но если искусство нужно в решении рутинных задач - это говорит только об одном - о разрухе в данной области знания (разрухе в головах). Возможно, что даже эти лучшие - эти умные и искусные головы - просто не поспевают за общей бурной движухой в мире программирования (развитие железа, инструментов, сред, языков, появление новых задач).

Добавлено через 2 минуты
Не ну для любой рутинной задачи, конечно, есть способ ее решения. проблема в том, что этот способ не один))) И знать и/или выбрать его - это искусство.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
28.06.2020, 15:48
Цитата Сообщение от titan4ik Посмотреть сообщение
Это не наука.
Скорее так: это не только наука. Так же как, например, строительная архитектура — это не только дизайн («красивость» здания, «эргономичность»), но и теоретическая механика, и сопротивление материалов, и наверняка, много что ещё.

Цитата Сообщение от titan4ik Посмотреть сообщение
что значит "рекламщики"?
Цитата Сообщение от titan4ik Посмотреть сообщение
Но у меня возникли смутные сомнения.
Вот потому и сомнения: подобные книги не являются научными трудами, они излагают субъективный опыт отдельных людей. Это не значит, что знакомство с этим опытом бесполезно, напротив, но нужно помнить о его субъективности и специфичности, о том, что это не своды законов математики/логики или что-то такое. И одна из целей авторов — продать эти книги (и себя в том числе). В этом мало плохого, в общем-то, но стоит помнить об этом.
1
Заблокирован
28.06.2020, 17:43  [ТС]
Цитата Сообщение от korvin_ Посмотреть сообщение
они излагают субъективный опыт отдельных людей.
Проблема в другом - в том, что читателю нужно ИЗНАЧАЛЬНО понимать насколько этот их личный опыт может помочь читателю в задачах его уровня.
Например, человек собирается на охоту на уток с двустволкой. Но наткнулся у инете на книгу по теории обнаружения, сопровождения и поражения низколетящих целей средствами дивизионной ПВО. Насколько это ему полезно прочитать перед охотой?!)

Добавлено через 1 час 40 минут
Эванс стр 167 об антипримере разбиения на модули программы для организации поставок грузов:
Деление на модули несет какую-то информацию, но это не информация о процессе поставок - это
информация о том, какую книжку читал программист, когда писал эту программу.
0
Модератор
Эксперт функциональных языков программирования
3142 / 2290 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
28.06.2020, 23:37
Цитата Сообщение от titan4ik Посмотреть сообщение
Это не наука. Это способы, методы и средства решения практических задач. Причем, в основном - бизнес-задач.
Даже ботаника - наука. Сейчас слишком много новых паттернов появляется ежегодно. Их выводят из собственного опыта и без всякого обоснования. Но рано или поздно всё это систематизируют, подведут под это дело математику, посчитают преимущества и недостатки в человеко-часах в зависимости от типа и размера проекта. Появятся таблицы (и программы) для выбора оптимальных паттернов для конкретного проекта и так далее.

Да, в основном бизнес-задач. Для вычислительных задача достаточно алгоритмов (включая структуры данных). А это почти чистая математика и спорить там особо не о чем (так как математика не терпит дилетантства). А вот о лучших паттернах и лучших языках программирования можно вещать не зависимо от знаний и опыта.
0
Заблокирован
29.06.2020, 00:00  [ТС]
Ботаника это раздел биологи. Безусловно - ботаника это наука. Без всяких "даже".
Цитата Сообщение от Shamil1 Посмотреть сообщение
Но рано или поздно всё это систематизируют, подведут под это дело математику
Подвести научные методы можно. Это давно делают с большим или меньшим успехом. Но от этого программирование наукой не становится. По крайней мере, пока программирование будет программированием (то есть, тем, чем оно является сейчас) - точно нет. Это прикладная деятельность. Примерно, как конструирование табуреток. Сколько под конструирование табуреток науку не подводи, оно от этого наукой не станет. Но научные методы, разумеется, использовать будет.
0
29.06.2020, 10:36

Не по теме:

https://music.yandex.ru/album/496812

0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10428 / 5158 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
29.06.2020, 16:01
Цитата Сообщение от titan4ik Посмотреть сообщение
рассуждения о полезности шаблона Фабрика. Сейчас слегка глянул что это такое и задумался - "а оно мне нужно"?
Я писал уже в самом начале. Не нужно впихивать паттерны. Паттерны нужно использовать, тогда когда в них возникает необходимость. То есть если без них - никак.
Вам нужно реализовать принципы SOLID, DRY, YAGNI, KISS. Если же принципы не выполняются, то делаем рефакторинг. Если принципы продолжают не выполняться и нас это смущает - подбираем паттерн, который решает проблему.
То есть используйте паттерны, когда без них обойтись нельзя.

В реальности из всех паттернов вам скорее всего нужен только MVC/MVP/MVVP/MV*. Все остальное - только по явной необходимости.

Цитата Сообщение от titan4ik Посмотреть сообщение
Все попытки создать строгую научную (математическую) дисциплину так и остались попытками
Во-первых, научная математическая база для программирования - есть. Это теория алгоритмов и автоматов. В том числе машина Тьюринга. Другой математики там не нужно.
Во-вторых. Вы поймите, что тру язык - это только язык машинных кодов. Все остальное - это просто надстройка для удобства программиста. Поэтому непонятно какую научную базу вы собрались там подводить? Если изначально это просто вопрос удобства и проблема ограниченности мозгов человека. Языки высокого уровня ничего не делают такого, чего не может сделать машина тьюринга. Паттерны - тем более.
Все это нужно просто потому, что: задача не четко сформулирована, человек может ошибаться, работает одновременно несколько человек и т.д. Все это субъективные проблемы, и не имеют отношения к точным наукам. Поэтому и непонятно какую точную науку вы там ожидаете увидеть. Никакая точная наука не заставит вашего заказчика точно сформулировать то, что он хочет увидеть в ПО. Никакая наука не заставит Васю не ошибаться в интерпретации ТЗ, и т.д.

Цитата Сообщение от titan4ik Посмотреть сообщение
что Мартин помещает сущности (модель предметной области) в самый центр (или на самый верх)
Цитата Сообщение от titan4ik Посмотреть сообщение
По Эвансу же, те слои, что выше модели, зависят от неё, а сама модель зависит от инфраструктурного слоя.
Да нет там особых противоречий. Ну решил Эванс сделать еще один слой "инфраструктура". Он скорее всего имеет ввиду какие то банальные вещи типа базовых классов фреймворка или паттерны взаимодействия типа шины сообщений или издатель-подписчик.
Понятное дело, что вы в модели данных будете использовать классы типа List<int>. Но это и так очевидно. Поэтому Мартин это отдельным слоем не считает.

Цитата Сообщение от Shamil1 Посмотреть сообщение
Думаю, лет через 100 более-менее утрясётся всё.
Аминь...
Через 100 лет на земле останутся только роботы, и им ЯПы вообще не нужны будут.
0
Заблокирован
29.06.2020, 16:29  [ТС]
Цитата Сообщение от Storm23 Посмотреть сообщение
Поэтому непонятно какую научную базу вы собрались там подводить?
Я? Никакой. Это старина Дейт (и прочие) хотел. Да и вы пишите о такой базе. Она безусловно есть (в какой-то степени). Я не вижу тут темы для обсуждения.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.06.2020, 16:29

Паттерны vs ООП
Как ни странно, но одно .. конфликтует с другим. Поясню на примере, задача: Создать обобщенное хранение файлов с описаниями...

Принципы и паттерны ООП
Используя принципы и паттерны ООП разработать программу на объектно-ориентированном языке. Предусмотреть исключающие ситуацию: ...

Основы Java освоены, понятия, парадигмы, ООП. Читать код могу, понятия есть, но все бы ничего, что дальше?
Доброго времени суток товарищи Столкнулся с такой ситуацией: куда двигаться дальше? Основы Java освоены, понятия, парадигмы, ООП....

Доходчиво разъясните...
1. Я до сих пор не понимаю работу комманды LEA. Главное я не понимаю практическиое использование. Так как меня всегда волнует win32 asm...

Объясните доходчиво Exit и Halt
Ребят, я немного недопонимаю, в чем различия между Exit и Halt, если они оба завершают программу?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
154
Ответ Создать тему
Новые блоги и статьи
Вступаем в новую фазу по генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки. Добавлены следующие реквизиты типа Булево: - Буквы; - Цифры; - Символы. Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru