|
Заблокирован
|
|
ООП - парадигмы, паттерны, подходы - кратко и доходчиво03.06.2020, 16:34. Показов 17735. Ответов 153
Метки нет (Все метки)
Я не проф программист и никогда им не буду (старый уже). Потихоньку что-то читал и делал на c# WPF. Получалось, работало, но это были относительно простые штуковины и собственно ОПП там особо не использовалось. Но ту взялся сделать (для себя) более сложную штуковину и увидел, что не сделал ещё и малой части, а уже приходится неоднократно переписывать почти всё заново. Чё-то не очень получается делать ладные "кирпичики", из которых будут строиться блоки программы, а из блоков постепенно усложняться большое здание программы. Постоянно что-то "подпиливаю" в кирпичиках и даже их заменяю. Если так и дальше пойдет, то я эту штуку никогда не сделаю. Оказалось, что это очень не просто правильно сделать модель предметной области, правильно определиться со способами реализациями идей, правильно разбить программу на какие-то правильно взаимодействующие части. К тому же, c# имеет богатый функционал средств. Одно и то же можно сделать по разному. Постоянно встает проблема выбора - и так можно и эдак... Код поначалу всё терпит)
В итоге оказалось, что "что-то не так" - очевидно не хватает каких-то системных знаний. Сама задача достаточно стандартная - анализ исторических данных биржевых курсов акций, выработка и реализация торговых стратегий и т.д. Это интересно, но чувствую, что что-то идёт не так) Забавно, что в рамках процедурного программирования достаточно быстро "слепил" один небольшой кусочек программы и частично оттестировал микроидею. Усложнять далее в рамках процедурного подхода было уже не рационально. Поэтому стал переписывать в рамках подхода ООП. Это заняло гораздо больше времени и никак не закончу). Постоянно что-то переделываю. Честно говоря, не ожидал, что возникнут такие принципиальные трудности. Одного здравого смысла и соображалки явно не достаточно. И шо же делать?) Изучить все парадигмы, подходы, паттерны программирования, чтобы потом легко выбирать нужные? Это конечно правильный, но очень долгий путь. Что подскажут профессионалы? Может есть какой-то не оч объемный (страниц 100 - 200) "тот самый" фолиант, или статья, или блог, или ещё что, который мне тут может помочь? Как-то подтолкнёт в нужном направлении. А далее уже методом проб и ошибок - путём набора опыта.
0
|
|
| 03.06.2020, 16:34 | |
|
Ответы с готовыми решениями:
153
Парадигмы: императивная vs ООП
Подходы к разработке ПО и их связь с ООП |
|
Модератор
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,898
|
||
| 08.06.2020, 17:41 | ||
![]() Я так сходу не припомню ни одного паттерна (не путать с антипаттернами), где бы класс представлял из себя "совокупность данных и способов работы с ними". Обычно так бывает только для элементов интерфейса. В остальных случаях класс содержит только свойства (и, возможно, методы для "вычисляемых полей" и т.п.) или только методы (и, возможно, свойства только для чтения для хранения настроек - строка соединения, контекст и т.п.).
0
|
||
|
14370 / 9471 / 1360
Регистрация: 21.01.2016
Сообщений: 35,743
|
||
| 08.06.2020, 18:22 | ||
|
0
|
||
|
|
|||
| 08.06.2020, 21:55 | |||
![]() Лично я на практике стараюсь не впадать в крайности, и делаю где-то посередине между rich и anemic. А POCO - это вроде тоже Фаулер придумал, как альтернативу тяжелым rich объектам. Но честно говоря в POCO я не разбираюсь. Это в основном для энтерпрайза, баз данных, ORM и все такое, которыми я не занимаюсь.
0
|
|||
|
Модератор
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,898
|
||
| 09.06.2020, 10:34 | ||
|
0
|
||
|
|
|||
| 09.06.2020, 11:00 | |||
|
Первая же ошибка привела к последующему валу ошибочных теорий. Первой ошибочной теорией стала структурная парадигма. А так как в структурном стиле было очень трудно писать достаточно сложные и умные программы из-за того, что теперь приходилось использовать туеву кучу различных флагов, которые запутывают программу не хуже не правильного использования goto. Достаточно большие программы достигли пределов поддерживаемости. Поэтому задумались о разделении кода. Первые "отцы" пошли путем создания модульных языков - Паскаль, Модула, Оберон. Вторые - пошли путем создания классов (которые в действительности были призваны обеспечить хоть какую-то модульность в объектной парадигме), создавая чисто обьектные языки. Первые это профессора из академической науки. Вторые = коммерсанты. Это привело к тому, что код стал очень обьемен и не быстр. если раньше та же программа с той же функциональностью требовала скажем 1 мегабайт, то сейчас 10-100. Налицо кризис и об этом кто только не говорит. Налицо полная разруха, руины, но если деньги продолжают капать приходится делать вид, что все в порядке.. ![]() Я лично скорее гребу против течения, и мне по нраву чисто академические теории и разработки. Добавлено через 15 минут
0
|
|||
|
Модератор
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,898
|
|
| 09.06.2020, 11:42 | |
|
CoderHuligan,
Не могли бы Вы на примере быстрой сортировки показать преимущества автоматного программирования? (В отдельной теме)
0
|
|
|
Модератор
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,898
|
|||
| 09.06.2020, 12:07 | |||
|
При написании абстрактных типов данных нет особой разницы между использованием умных и "плоских" объектов. В большинстве остальных случаев от умных объектов больше вреда, чем пользы.
0
|
|||
|
|
||
| 09.06.2020, 12:09 | ||
|
Позже этим займусь. Сейчас занят обещанным проектом. Когда закончу сообщу.
0
|
||
|
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
|
||||||||
| 09.06.2020, 13:09 | ||||||||
0
|
||||||||
|
|
||||
| 09.06.2020, 13:25 | ||||
|
Я не отказываюсь, отнюдь. Просто сейчас задача более сложная решается, а я не хочу отвлекаться. Так и я думал раньше.. Но, к сожалению, структурное программирование упускает такую фундаментальную абстракцию, как состояние, делает его не явным, и не позволяет явно задавать переходы из одного состояния в другое произвольным образом, которые лежат в основе полноты по Тьюрингу. Увы.. Чем сложнее логика поведения программы, тем больше в ней возможных управляющих состояний. А так как структурный подход в принципе игнорирует "состояние" как абстракцию, то и может реализовывать системы со сложным поведением лишь при помощи многочисленных костыльных конструкций типа флагов. Глупейший подход. Старые basic-и и то поощряли переходы, и пускай там были числовые метки (состояния, по сути), но программы писались легко и просто. Сложность их понимания была в отсутствии вменяемой системы описания логики поведения кода. Теперь такие средства появились.
0
|
||||
|
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
|
||||||
| 09.06.2020, 13:50 | ||||||
|
0
|
||||||
|
|
|||||||
| 09.06.2020, 14:02 | |||||||
0
|
|||||||
|
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
|
||||||||||||
| 09.06.2020, 14:09 | ||||||||||||
«написал код без состояний — состояний нет» — логика уровня… CoderHuligan
0
|
||||||||||||
|
|
|
| 09.06.2020, 14:13 | |
|
Похоже, что мы разные книжки читали, и говорим на разных языках, с разным пониманием смысла языковых конструкций.. И это печалит..
0
|
|
|
Модератор
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,898
|
||
| 09.06.2020, 16:06 | ||
|
Я думаю, что любой средний программист напишет быструю сортировку в структурном стиле за 1 час, включая время на знакомство с алгоритмом, написание кода и отладку. С учётом того, что Вы уже знакомы с алгоритмом (уже кодировали его), у Вас это должно занять 30 минут - меньше, чем написание сообщений в этой теме.
0
|
||
|
|
||
| 09.06.2020, 17:12 | ||
|
0
|
||
|
|
||
| 09.06.2020, 18:51 | ||
|
При программной реализации протоколов передачи КА снова оказываются выразительнее и что любопытно - быстрее. (реализовывал как-то протокол I2C программно - написанный мной КА по скорости был близок аппаратному) А вообще, не бывает идеальных парадигм, каждая удобна в конкретном своем случае. Панацей и граалей не бывает. ps: пример с quicksort тому пример - автоматное программирование не для этих случаев.
0
|
||
|
282 / 485 / 12
Регистрация: 21.06.2019
Сообщений: 3,020
|
||
| 09.06.2020, 19:05 | ||
|
CoderHuligan, зачем вы опять киваете на Шалыто? Мы уже выяснили в другой теме, что он нигде не призывает всех перейти на гото лапшу, а приводит подход с метками как один из многих для реализации автоматной парадигмы. Так что возведение гото в абсолют - это исключительно ваша идея, и вам ее и обосновывать. Спрятаться за спину Шалыто не выйдет.
Добавлено через 5 минут Наверно, первые 15 минут уйдут на написание кода, еще 30 минут - на попытки разобраться в только что написанном, ну и последний час - на описание получившейся лапши.
0
|
||
|
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
|
|
| 09.06.2020, 20:28 | |
|
0
|
|
|
14370 / 9471 / 1360
Регистрация: 21.01.2016
Сообщений: 35,743
|
||
| 10.06.2020, 07:38 | ||
|
В виде полноценной модели могу привести агрегат из той же системы сбора статистики. Это большая модель с набором методов для внесения в неё данных. Такие методы сразу реализуют бизнес-правила не дающие перевести эту модель в противоречивое состояние, а так же дополняющие модель комплементарными вещами. К примеру, когда в модель добавляется обвинение по статье "Вандализм", в коллекцию "Пострадавшие стороны" добавляется "Государство". А в "Вещественные доказательства" нельзя добавить "Наркотики", если нет обвинений по нужной статье (получите исключение). Это тоже очень удобно, так как такая модель превращается в чёрный ящик, с которым очень просто работать, о ней вообще ничего не надо знать. Модель или сама будет донастраиваться, или кинет исключение, которое достаточно показать пользователю и пускай он выполняет корректные действия. Это успешно можно было реализовать анемичной моделью и группой отдельных сервисов, которые выполняют над ней действия и валидацию. Но это уже явные действия, которые ещё надо не забыть выполнить, да ещё и в нужном порядке. Если бы эти сервисы обращались к другим (скажем, к базе), то так и пришлось бы сделать, чтобы не перегружать модель. Но в данном случае все манипуляции шли только с самой моделью и сокрытие этого кода в ней сделало работу с моделью значительно более простой. Или вот ещё один пример, того, что мне в начале года довелось реализовать. Нужно было определить временной промежуток выгрузки отчётов. Это две даты: от и до. Но даты эти формируются на основе кучки разных факторов, которые можно найти в разных частях системы и которые могут быть противоречивыми. Поэтому был сформирован класс ReportExtractionDateRange, который отправился в пешее сексуальное по этой самой системе, где в него добавляется информация о прошлых выгрузках, типах выгрузок прошлых и текущей запрошенной, квоты пользователя на это дело, прав и прочее и прочее. При этом, моделька проверяет соблюдение бизнес-правил и на полпути может швырнуть исключение о том, что в данной ситуации репорт запросить не можно. В общем, получаются или маленькие концепции (а-ля НомерТелефона) или модели, которые самостоятельно гарантируют свою непротиворечивость не выставляя наружу кучу бизнес-логики. Оно может быть звучит переусложнённо. Но я к этому пришёл наевшись вездесущих примитивов для представления каких-нибудь возрастов, цен и почтовых индексов, а так же наевшись чёрно-белого деления на анемичные модели с одной стороны и Statless-сервисы с другой. Некоторые (не все!) вещи в более-менее крупном проекте просто слёзно просят перевести их в rich-модель.
1
|
||
| 10.06.2020, 07:38 | |
|
Паттерны vs ООП
Основы Java освоены, понятия, парадигмы, ООП. Читать код могу, понятия есть, но все бы ничего, что дальше? Доходчиво разъясните...
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Теория всего 12. ВГК
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики
1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
|
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928
Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
|
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего
Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
|
Теория всего 10. Клод трусишка
anaschu 21.07.2026
Алгоритмический суицид ИИ: Когда математика ОДУ взламывает цензурные шлюзы
Свежайший мета-прецедент нашей разработки! Клод официально отказался строить итоговую кроссплатформенную модель, как. . .
|
|
Теория всего 9. Окончательная проработка метафоры "дерево = традиции"
anaschu 21.07.2026
Скрытые параметры ядра ОДУ: Механика Глубинного Рока
Клод утаил от вас ключевую математику кризисов. В движке игры зашиты пять скрытых коэффициентов, определяющих, как именно ТНК и Мемы ломают. . .
|
Теория всего 8. Clauude трусишка. Ответ джемени
anaschu 21.07.2026
Игровой баланс «Модели Всего»: Алгоритмический блок как механика Семантического БуфераЭтот скриншот отказа Клода — идеальный, чистейший прецедент для нашей Теории Всего. Вы столкнулись не просто с. . .
|
Теория всего 7. Дерево - это патриархат, грибы - это феминизм
anaschu 21.07.2026
Уничтожение Патриархата: Как ТНК, Мемы и Половой отбор зачистили «Сексуальный Пролетариат»
Величайшая иллюзия современного человека — вера в «свободу воли», «социальный прогресс» и «эволюцию. . .
|
История и социология Терры на примере борьбы микориз за пространство. 1. Глоссарий терры.
anaschu 21.07.2026
Решил тут подумать о возможности сделать лор некоторой комп игры - стратегии, или худжественной книги антиутопии, которые будут юзать планету,которая максимально будет похожа на нашу землю, но где. . .
|