|
Заблокирован
|
|
ООП - парадигмы, паттерны, подходы - кратко и доходчиво03.06.2020, 16:34. Показов 17930. Ответов 153
Метки нет (Все метки)
Я не проф программист и никогда им не буду (старый уже). Потихоньку что-то читал и делал на c# WPF. Получалось, работало, но это были относительно простые штуковины и собственно ОПП там особо не использовалось. Но ту взялся сделать (для себя) более сложную штуковину и увидел, что не сделал ещё и малой части, а уже приходится неоднократно переписывать почти всё заново. Чё-то не очень получается делать ладные "кирпичики", из которых будут строиться блоки программы, а из блоков постепенно усложняться большое здание программы. Постоянно что-то "подпиливаю" в кирпичиках и даже их заменяю. Если так и дальше пойдет, то я эту штуку никогда не сделаю. Оказалось, что это очень не просто правильно сделать модель предметной области, правильно определиться со способами реализациями идей, правильно разбить программу на какие-то правильно взаимодействующие части. К тому же, c# имеет богатый функционал средств. Одно и то же можно сделать по разному. Постоянно встает проблема выбора - и так можно и эдак... Код поначалу всё терпит)
В итоге оказалось, что "что-то не так" - очевидно не хватает каких-то системных знаний. Сама задача достаточно стандартная - анализ исторических данных биржевых курсов акций, выработка и реализация торговых стратегий и т.д. Это интересно, но чувствую, что что-то идёт не так) Забавно, что в рамках процедурного программирования достаточно быстро "слепил" один небольшой кусочек программы и частично оттестировал микроидею. Усложнять далее в рамках процедурного подхода было уже не рационально. Поэтому стал переписывать в рамках подхода ООП. Это заняло гораздо больше времени и никак не закончу). Постоянно что-то переделываю. Честно говоря, не ожидал, что возникнут такие принципиальные трудности. Одного здравого смысла и соображалки явно не достаточно. И шо же делать?) Изучить все парадигмы, подходы, паттерны программирования, чтобы потом легко выбирать нужные? Это конечно правильный, но очень долгий путь. Что подскажут профессионалы? Может есть какой-то не оч объемный (страниц 100 - 200) "тот самый" фолиант, или статья, или блог, или ещё что, который мне тут может помочь? Как-то подтолкнёт в нужном направлении. А далее уже методом проб и ошибок - путём набора опыта.
0
|
|
| 03.06.2020, 16:34 | |
|
Ответы с готовыми решениями:
153
Парадигмы: императивная vs ООП
Подходы к разработке ПО и их связь с ООП |
|
Модератор
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,910
|
||
| 08.06.2020, 17:41 | ||
![]() Я так сходу не припомню ни одного паттерна (не путать с антипаттернами), где бы класс представлял из себя "совокупность данных и способов работы с ними". Обычно так бывает только для элементов интерфейса. В остальных случаях класс содержит только свойства (и, возможно, методы для "вычисляемых полей" и т.п.) или только методы (и, возможно, свойства только для чтения для хранения настроек - строка соединения, контекст и т.п.).
0
|
||
|
14742 / 9516 / 1364
Регистрация: 21.01.2016
Сообщений: 35,908
|
||
| 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,910
|
||
| 09.06.2020, 10:34 | ||
|
0
|
||
|
|
|||
| 09.06.2020, 11:00 | |||
|
Первая же ошибка привела к последующему валу ошибочных теорий. Первой ошибочной теорией стала структурная парадигма. А так как в структурном стиле было очень трудно писать достаточно сложные и умные программы из-за того, что теперь приходилось использовать туеву кучу различных флагов, которые запутывают программу не хуже не правильного использования goto. Достаточно большие программы достигли пределов поддерживаемости. Поэтому задумались о разделении кода. Первые "отцы" пошли путем создания модульных языков - Паскаль, Модула, Оберон. Вторые - пошли путем создания классов (которые в действительности были призваны обеспечить хоть какую-то модульность в объектной парадигме), создавая чисто обьектные языки. Первые это профессора из академической науки. Вторые = коммерсанты. Это привело к тому, что код стал очень обьемен и не быстр. если раньше та же программа с той же функциональностью требовала скажем 1 мегабайт, то сейчас 10-100. Налицо кризис и об этом кто только не говорит. Налицо полная разруха, руины, но если деньги продолжают капать приходится делать вид, что все в порядке.. ![]() Я лично скорее гребу против течения, и мне по нраву чисто академические теории и разработки. Добавлено через 15 минут
0
|
|||
|
Модератор
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,910
|
|
| 09.06.2020, 11:42 | |
|
CoderHuligan,
Не могли бы Вы на примере быстрой сортировки показать преимущества автоматного программирования? (В отдельной теме)
0
|
|
|
Модератор
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,910
|
|||
| 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,910
|
||
| 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
|
|
|
14742 / 9516 / 1364
Регистрация: 21.01.2016
Сообщений: 35,908
|
||
| 10.06.2020, 07:38 | ||
|
В виде полноценной модели могу привести агрегат из той же системы сбора статистики. Это большая модель с набором методов для внесения в неё данных. Такие методы сразу реализуют бизнес-правила не дающие перевести эту модель в противоречивое состояние, а так же дополняющие модель комплементарными вещами. К примеру, когда в модель добавляется обвинение по статье "Вандализм", в коллекцию "Пострадавшие стороны" добавляется "Государство". А в "Вещественные доказательства" нельзя добавить "Наркотики", если нет обвинений по нужной статье (получите исключение). Это тоже очень удобно, так как такая модель превращается в чёрный ящик, с которым очень просто работать, о ней вообще ничего не надо знать. Модель или сама будет донастраиваться, или кинет исключение, которое достаточно показать пользователю и пускай он выполняет корректные действия. Это успешно можно было реализовать анемичной моделью и группой отдельных сервисов, которые выполняют над ней действия и валидацию. Но это уже явные действия, которые ещё надо не забыть выполнить, да ещё и в нужном порядке. Если бы эти сервисы обращались к другим (скажем, к базе), то так и пришлось бы сделать, чтобы не перегружать модель. Но в данном случае все манипуляции шли только с самой моделью и сокрытие этого кода в ней сделало работу с моделью значительно более простой. Или вот ещё один пример, того, что мне в начале года довелось реализовать. Нужно было определить временной промежуток выгрузки отчётов. Это две даты: от и до. Но даты эти формируются на основе кучки разных факторов, которые можно найти в разных частях системы и которые могут быть противоречивыми. Поэтому был сформирован класс ReportExtractionDateRange, который отправился в пешее сексуальное по этой самой системе, где в него добавляется информация о прошлых выгрузках, типах выгрузок прошлых и текущей запрошенной, квоты пользователя на это дело, прав и прочее и прочее. При этом, моделька проверяет соблюдение бизнес-правил и на полпути может швырнуть исключение о том, что в данной ситуации репорт запросить не можно. В общем, получаются или маленькие концепции (а-ля НомерТелефона) или модели, которые самостоятельно гарантируют свою непротиворечивость не выставляя наружу кучу бизнес-логики. Оно может быть звучит переусложнённо. Но я к этому пришёл наевшись вездесущих примитивов для представления каких-нибудь возрастов, цен и почтовых индексов, а так же наевшись чёрно-белого деления на анемичные модели с одной стороны и Statless-сервисы с другой. Некоторые (не все!) вещи в более-менее крупном проекте просто слёзно просят перевести их в rich-модель.
1
|
||
| 10.06.2020, 07:38 | |
|
Паттерны vs ООП
Основы Java освоены, понятия, парадигмы, ООП. Читать код могу, понятия есть, но все бы ничего, что дальше? Доходчиво разъясните...
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|
|
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
|
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ
Основная суть и тезисы по измерениям:
0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема.
Объект не может перемещаться в 0D.
1D (Первое измерение):. . .
|
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek
ВВЕДЕНИЕ
Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
|
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
|