|
Заблокирован
|
|
ООП - парадигмы, паттерны, подходы - кратко и доходчиво03.06.2020, 16:34. Показов 17524. Ответов 153
Метки нет (Все метки)
Я не проф программист и никогда им не буду (старый уже). Потихоньку что-то читал и делал на c# WPF. Получалось, работало, но это были относительно простые штуковины и собственно ОПП там особо не использовалось. Но ту взялся сделать (для себя) более сложную штуковину и увидел, что не сделал ещё и малой части, а уже приходится неоднократно переписывать почти всё заново. Чё-то не очень получается делать ладные "кирпичики", из которых будут строиться блоки программы, а из блоков постепенно усложняться большое здание программы. Постоянно что-то "подпиливаю" в кирпичиках и даже их заменяю. Если так и дальше пойдет, то я эту штуку никогда не сделаю. Оказалось, что это очень не просто правильно сделать модель предметной области, правильно определиться со способами реализациями идей, правильно разбить программу на какие-то правильно взаимодействующие части. К тому же, c# имеет богатый функционал средств. Одно и то же можно сделать по разному. Постоянно встает проблема выбора - и так можно и эдак... Код поначалу всё терпит)
В итоге оказалось, что "что-то не так" - очевидно не хватает каких-то системных знаний. Сама задача достаточно стандартная - анализ исторических данных биржевых курсов акций, выработка и реализация торговых стратегий и т.д. Это интересно, но чувствую, что что-то идёт не так) Забавно, что в рамках процедурного программирования достаточно быстро "слепил" один небольшой кусочек программы и частично оттестировал микроидею. Усложнять далее в рамках процедурного подхода было уже не рационально. Поэтому стал переписывать в рамках подхода ООП. Это заняло гораздо больше времени и никак не закончу). Постоянно что-то переделываю. Честно говоря, не ожидал, что возникнут такие принципиальные трудности. Одного здравого смысла и соображалки явно не достаточно. И шо же делать?) Изучить все парадигмы, подходы, паттерны программирования, чтобы потом легко выбирать нужные? Это конечно правильный, но очень долгий путь. Что подскажут профессионалы? Может есть какой-то не оч объемный (страниц 100 - 200) "тот самый" фолиант, или статья, или блог, или ещё что, который мне тут может помочь? Как-то подтолкнёт в нужном направлении. А далее уже методом проб и ошибок - путём набора опыта.
0
|
|
| 03.06.2020, 16:34 | |
|
Ответы с готовыми решениями:
153
Парадигмы: императивная vs ООП
Подходы к разработке ПО и их связь с ООП |
|
Заблокирован
|
|
| 26.06.2020, 12:34 [ТС] | |
|
Интересно и не понятно как такое вообще может быть. Это я о противоречиях в изложении структуры архитектурных уровней у Мартина и Эванса. Ни в одной области знания нет ничего подобного (не первый раз замечаю). Наверное, это связано с тем, что программирование это не наука и от науки оно постоянно убегает куда-то. Это некая слишком быстро развивающаяся практическая деятельность, которая основана на науке только частично. Тут руки (практика) часто обгоняют голову (теорию). Эванс, наверное, в этой заочной дискуссии растёт от практики и представляет головастые руки, а Мартин - рукастую голову.
И что мы видим? А то, что Мартин помещает сущности (модель предметной области) в самый центр (или на самый верх) и все зависимости кода по его мнению должны организовываться правдами и неправдами от них наружу (или вниз). А Эванс слой модели предметной области помещает внутрь слоев. По Эвансу же, те слои, что выше модели, зависят от неё, а сама модель зависит от инфраструктурного слоя. Мне не понятно пока что это означает. Это такая терминологическая путаница или это нечто принципиально разное? Я уж не говорю о том, что они же знают друг про друга. Могли бы как-то устаканиться в терминах и представлениях. Почему я должен это за них решать?))) ![]() ![]() Добавлено через 13 минут Я не пояснил. Инфраструтурный слой у Эванса ещё ниже модели, то бишь, он самый глубинный по Эвансу. У Эванса верхний слой зависит от нижнего. P.S. Они с Мартином ещё и верх и низ перепутали. Зачем? Не понятно.
0
|
|
| 26.06.2020, 19:42 | |
|
Не по теме: titan4ik, а я предупреждал — не читай этих «рекламщиков» =)
0
|
|
|
Заблокирован
|
||
| 27.06.2020, 17:03 [ТС] | ||
|
То есть, вы полагаете, что их святая цель не поделиться истинными и сокровенными знаниями, которые прошли достаточно серьезную верификацию на основе их личного опыта и опыта сообщества программистов, а "несколько иная"?!)
0
|
||
|
Модератор
3138 / 2286 / 469
Регистрация: 26.03.2015
Сообщений: 8,892
|
||
| 27.06.2020, 22:01 | ||
|
Ситуация осложняется тем, что наука довольно молодая. Проекты усложняются, на первый план выходят другие задачи (цифровые технологии проникают в новые сферы). Паттерны меняются. Например, для сохранения в БД - активная запись, репозиторий, команда-запрос... Думаю, лет через 100 более-менее утрясётся всё. У каждого паттерна есть свои преимущества и недостатки. Баланс часто зависит от типа и размера задачи... и даже от привычки (у каждого свой стиль).
0
|
||
|
Заблокирован
|
||||
| 28.06.2020, 14:57 [ТС] | ||||
|
Я сейчас его читаю. Но у меня возникли смутные сомнения. На стр 133-140 идут рассуждения о полезности шаблона Фабрика. Сейчас слегка глянул что это такое и задумался - "а оно мне нужно"? Не использовать конструкторы классов? New - это уже криминал и т.п. Вопрос. На каком уровне сложности проекта всё это может быть полезно? Я имею ввиду и всю книгу Эванса и конкретно паттерн Фабрика. Очень многое из книги Мартина "чистая архитектура" и этой Эванса связано именно с масштабом проекта и с тем, что он разрабатывается большим коллективом людей. Но я-то один и мыслю сейчас только о десктоп приложениях для 1 компьютера (+ немного веб). Меня собственно в эти дебри затащила проблема того, как организовать взаимодействие между функциональными модулями программы. Средства C# для реализации механизмов взаимодействия модулей программы Ну и ещё, конечно, проблема моделирования предметной области (тут я из Эванса кое-что черпаю, но боюсь в нём зарыться) Чувствую, что читая книги этих достойных людей, я черпаю мизер полезного для себя. Вон и
P.S. А вообще, пришел к выводу, что наиболее быстро можно получать знания по программированию только работая в команде программистов. Всё остальное (чтение книг и т.п.) важно, но без первого компонента теряет свою эффективность на порядок. Добавлено через 12 минут Все попытки создать строгую научную (математическую) дисциплину так и остались попытками. Некие научные основы конечно есть, и временами появляются некие "правильные шаблоны", но в целом это всё очень подвижная динамичная и достаточно неупорядоченная информационная среда. Именно потому в ней занимают столь значимое место те, кто умеет что-то очень хорошо сделать практически. Это в какой-то степени можно сравнить с "боевыми искусствами". Есть мастер - есть школа и есть некий путь. Каждый раз, когда в науке или технике заходит речь об искусстве что-то уметь это означает только одно - недостаток знания, умений. Когда есть знание, для искусства уже нет места. Искусство нужно для прорыва знания, для того, чтобы сделать то, что никто пока не делал. Но если искусство нужно в решении рутинных задач - это говорит только об одном - о разрухе в данной области знания (разрухе в головах). Возможно, что даже эти лучшие - эти умные и искусные головы - просто не поспевают за общей бурной движухой в мире программирования (развитие железа, инструментов, сред, языков, появление новых задач). Добавлено через 2 минуты Не ну для любой рутинной задачи, конечно, есть способ ее решения. проблема в том, что этот способ не один))) И знать и/или выбрать его - это искусство.
0
|
||||
|
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,781
|
||||
| 28.06.2020, 15:48 | ||||
|
1
|
||||
|
Заблокирован
|
|||
| 28.06.2020, 17:43 [ТС] | |||
|
Например, человек собирается на охоту на уток с двустволкой. Но наткнулся у инете на книгу по теории обнаружения, сопровождения и поражения низколетящих целей средствами дивизионной ПВО. Насколько это ему полезно прочитать перед охотой?!) Добавлено через 1 час 40 минут Эванс стр 167 об антипримере разбиения на модули программы для организации поставок грузов:
0
|
|||
|
Модератор
3138 / 2286 / 469
Регистрация: 26.03.2015
Сообщений: 8,892
|
||
| 28.06.2020, 23:37 | ||
|
Да, в основном бизнес-задач. Для вычислительных задача достаточно алгоритмов (включая структуры данных). А это почти чистая математика и спорить там особо не о чем (так как математика не терпит дилетантства). А вот о лучших паттернах и лучших языках программирования можно вещать не зависимо от знаний и опыта.
0
|
||
|
Заблокирован
|
||
| 29.06.2020, 00:00 [ТС] | ||
|
Ботаника это раздел биологи. Безусловно - ботаника это наука. Без всяких "даже".
0
|
||
| 29.06.2020, 10:36 | |
|
Не по теме: https://music.yandex.ru/album/496812
0
|
|
|
|
||||||
| 29.06.2020, 16:01 | ||||||
|
Вам нужно реализовать принципы SOLID, DRY, YAGNI, KISS. Если же принципы не выполняются, то делаем рефакторинг. Если принципы продолжают не выполняться и нас это смущает - подбираем паттерн, который решает проблему. То есть используйте паттерны, когда без них обойтись нельзя. В реальности из всех паттернов вам скорее всего нужен только MVC/MVP/MVVP/MV*. Все остальное - только по явной необходимости. Во-вторых. Вы поймите, что тру язык - это только язык машинных кодов. Все остальное - это просто надстройка для удобства программиста. Поэтому непонятно какую научную базу вы собрались там подводить? Если изначально это просто вопрос удобства и проблема ограниченности мозгов человека. Языки высокого уровня ничего не делают такого, чего не может сделать машина тьюринга. Паттерны - тем более. Все это нужно просто потому, что: задача не четко сформулирована, человек может ошибаться, работает одновременно несколько человек и т.д. Все это субъективные проблемы, и не имеют отношения к точным наукам. Поэтому и непонятно какую точную науку вы там ожидаете увидеть. Никакая точная наука не заставит вашего заказчика точно сформулировать то, что он хочет увидеть в ПО. Никакая наука не заставит Васю не ошибаться в интерпретации ТЗ, и т.д. Понятное дело, что вы в модели данных будете использовать классы типа List<int>. Но это и так очевидно. Поэтому Мартин это отдельным слоем не считает. Через 100 лет на земле останутся только роботы, и им ЯПы вообще не нужны будут.
0
|
||||||
|
Заблокирован
|
||
| 29.06.2020, 16:29 [ТС] | ||
|
0
|
||
| 29.06.2020, 16:29 | |
|
Помогаю со студенческими работами здесь
154
Паттерны vs ООП
Основы Java освоены, понятия, парадигмы, ООП. Читать код могу, понятия есть, но все бы ничего, что дальше? Доходчиво разъясните...
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений.
. . .
|
21 мат мед. Планы на развитие модели здравоСохранения
anaschu 01.06.2026
AnyLogic: план развития симуляционной модели рабочего коллектива — динамический абсентеизм, реальные данные, три сценария сравнения
Продолжаю серию постов о дискретно-событийной модели рабочего. . .
|
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы
Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
|
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция
Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
|
|
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
|
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
|
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
|
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика
Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
|