|
Заблокирован
|
|
ООП - парадигмы, паттерны, подходы - кратко и доходчиво03.06.2020, 16:34. Показов 17992. Ответов 153
Метки нет (Все метки)
Я не проф программист и никогда им не буду (старый уже). Потихоньку что-то читал и делал на c# WPF. Получалось, работало, но это были относительно простые штуковины и собственно ОПП там особо не использовалось. Но ту взялся сделать (для себя) более сложную штуковину и увидел, что не сделал ещё и малой части, а уже приходится неоднократно переписывать почти всё заново. Чё-то не очень получается делать ладные "кирпичики", из которых будут строиться блоки программы, а из блоков постепенно усложняться большое здание программы. Постоянно что-то "подпиливаю" в кирпичиках и даже их заменяю. Если так и дальше пойдет, то я эту штуку никогда не сделаю. Оказалось, что это очень не просто правильно сделать модель предметной области, правильно определиться со способами реализациями идей, правильно разбить программу на какие-то правильно взаимодействующие части. К тому же, c# имеет богатый функционал средств. Одно и то же можно сделать по разному. Постоянно встает проблема выбора - и так можно и эдак... Код поначалу всё терпит)
В итоге оказалось, что "что-то не так" - очевидно не хватает каких-то системных знаний. Сама задача достаточно стандартная - анализ исторических данных биржевых курсов акций, выработка и реализация торговых стратегий и т.д. Это интересно, но чувствую, что что-то идёт не так) Забавно, что в рамках процедурного программирования достаточно быстро "слепил" один небольшой кусочек программы и частично оттестировал микроидею. Усложнять далее в рамках процедурного подхода было уже не рационально. Поэтому стал переписывать в рамках подхода ООП. Это заняло гораздо больше времени и никак не закончу). Постоянно что-то переделываю. Честно говоря, не ожидал, что возникнут такие принципиальные трудности. Одного здравого смысла и соображалки явно не достаточно. И шо же делать?) Изучить все парадигмы, подходы, паттерны программирования, чтобы потом легко выбирать нужные? Это конечно правильный, но очень долгий путь. Что подскажут профессионалы? Может есть какой-то не оч объемный (страниц 100 - 200) "тот самый" фолиант, или статья, или блог, или ещё что, который мне тут может помочь? Как-то подтолкнёт в нужном направлении. А далее уже методом проб и ошибок - путём набора опыта.
0
|
|
| 03.06.2020, 16:34 | |
|
Ответы с готовыми решениями:
153
Парадигмы: императивная vs ООП
Подходы к разработке ПО и их связь с ООП |
|
3136 / 1735 / 273
Регистрация: 19.02.2010
Сообщений: 4,535
|
||
| 04.06.2020, 21:31 | ||
|
Вот тут Общий код базового класса месяц назад разбирался такой случай. Если правильно помню (лень Мартина листать) - ситуация/пример проще, чем у Мартина. Плюс указано, как данный конкретный приём называется в паттернах проектирования.
0
|
||
|
|
|
| 04.06.2020, 21:40 | |
|
Кстати, в довесок к паттернам не мешает ознакомиться и с антипаттернами - это тоже очень хороший опыт.
На английском тут: http://wiki.c2.com/?AntiPatternsCatalog Если кратко, там упомянуты и спагетти и индусский и многое другое...
0
|
|
|
|
||
| 04.06.2020, 21:48 | ||
|
0
|
||
|
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
|
||||
| 04.06.2020, 23:31 | ||||
|
Никогда особо не «восхищался» Мартином, но тут он совсем разочаровал ограниченностью своего кругозора.
1
|
||||
|
Модератор
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,912
|
||||
| 05.06.2020, 10:45 | ||||
|
Добавлено через 12 минут Ещё лучше сделать миксин, чтобы можно было наследовать интерфейс сразу вместе с дефолтной реализацией. А ещё лучше сделать классы типов (как в Хаскеле), чтобы не нужно было прописывать это наследование при написании класса.
0
|
||||
|
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
|
||
| 05.06.2020, 11:28 | ||
|
0
|
||
|
|
|||
| 05.06.2020, 16:48 | |||
|
В ООП как описывают напримере автомобиль (часто в учебниках по ООП приводят)? Класс "автомобиль". Потом создают его потомков (ага - у автомобиля есть потомки, ну, ну..) - "двигатель", "дверь", "багажник", "кузов". Допустим от кузова порождают - "трансмиссия", от трансмиссии - "колеса".. Обращаются к этому примерно так если хотят добраться до колес: автомобиль.кузов.трансмиссия.колесо. Можно продолжить дальше: от колеса породить "ступица", от ступицы - "подшипник". Стоп! Ведь подшипники есть и в других частях машины? Да, они есть в рулевой колонке, в двигателе и т.д. Уже что-то не то происходит? "подшипник" надо в класс "кузов" вынести? Или в "автомобиль"? А хр.. знает.. Проблема в том, что реальный мир реляционен, а не иерархичен. А обьектная модель плохо работает в программировании реальных обьектов. Давайте делить код на модули-компоненты, которые как можно больше независимы друг от друга. "Рука" не порождается от "тело", потому что в реальном мире тело рук не рождает. Тело рождается сразу с руками, ногами и даже с причиндалами. И наследуют тела только такие же тела - своих потомков - сыновей, дочерей.. Вот вам реальный мир.. Обьект нельзя разделить на руки, ноги, сумки, тряпки.. В этом проблема.. Проблема в иерархических классификациях, которые все усложняют и порождает то самое спагетти-код. Для корпораций это просто находка: чем более запутаннее код, тем сложнее в нем разбираться конкурентам.
0
|
|||
|
|
|||||
| 05.06.2020, 17:32 | |||||
|
Наследование означает связь является. Разве дверь является автомобилем? Нет. Поэтому и не должна наследоваться от автомобиля. Дверь наследуется от автомобиля только в вашем разгоряченном воображении. Кроме того (и это даже важнее в архитектуре) модели не строятся для "отображения реальности". Программа - это не симулятор предметной области. Модель ПО строится исходя из задач, которые ПО решает. Программа отображает только определенный аспект предметной области. Сильно упрощенный и заточенный для решения конкретной задачи. Поэтому я сомневаюсь что в каком-то ПО вообще понадобится делать все эти подшипники и колеса внутри автомобиля. Например, если это ПО по продаже автомобилей, то там будет только модель, цвет кузова и цена. Но там не будет список всех компонентов машины, несмотря на то, что они там в реальности есть. Если это ПО для механика, то там скорее всего будет просто список комплектующих с названием и кодом. И т.д.
1
|
|||||
|
Модератор
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,912
|
|||
| 05.06.2020, 17:45 | |||
|
0
|
|||
|
Заблокирован
|
||
| 05.06.2020, 21:19 [ТС] | ||
Хорошо, что я на время оставил чтение)![]() А вы бы кого порекомендовали вместо Мартина по архитектуре?
0
|
||
|
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
|
|
| 05.06.2020, 22:27 | |
|
0
|
|
| 06.06.2020, 08:43 | |
|
Не по теме: https://ru.wikipedia.org/wiki/Готическая_архитектура
0
|
|
| 06.06.2020, 11:37 [ТС] | |
|
Не по теме: vantfiles,
0
|
|
|
|
||||||||
| 06.06.2020, 14:39 | ||||||||
|
0
|
||||||||
|
Заблокирован
|
||
| 06.06.2020, 18:57 [ТС] | ||
|
Storm23 только совершенно справедливо заметил, что отражается не реальность как таковая, а реальность с точки зрения решаемой задачи. Иными словами, отражается модель реальности. А модель эта строится сообразно решаемой задачи. Иначе можно докатиться то того, что строить иерархии вплоть до атомов и молекул. А они ведь тоже структуры. Речь о разумной (с точки зрения критериев именно решаемой задачи) модели реальности. И эта модель и отражается в ПО. Добавлено через 1 минуту Но всё это уже немного не по теме. Или по теме?) Возможно) Добавлено через 1 час 13 минут Интересный момент. ![]() Я там вначале писал, что только начал делать проектик, а уже переписываю. Так я опять это "начало" переписываю. И дело тут в основном в том, что изначально не вполне представлял себе эту самую модель предметной области в контексте задачи. То есть, дело не столько в самом программировании, и даже не в архитектуре ПО, дело, в основном, именно в этом - потихоньку приходит понимание модели в контексте задачи. А если контекст не понимать или не верно его понимать, то можно столько химер тупиковых наплодить даже с хор умением программировать и архитектурировать. Вообще, правильная постановка задачи - это уже, как минимум, пол дела. Хорошее ТЗ (во всех областях деятельности) - это так редко встречается! Когда сам себе ТЗ выдаешь, то методом последовательных итераций можно придти к хор варианту без межличностных конфликтов ![]()
0
|
||
|
|
|
| 06.06.2020, 19:17 | |
|
А модель к архитектуре не имеет отношения. Архитектура это о том, как структурировать различные части кода, чтобы было легче разобраться. так делают например писатели: делят роман на части, главы, разделы.. Словари структурируют по алфавитному принципу.. А код как структурировать? По какому принципу? По модели? Модель у каждой задачи своя собственная, а нам надо отыскать единый принцип. ООпщики считают, что уже его отыскали.. При этом пытаясь с переменным успехом модель натягивать на структуру..
Структурировать надо по принципу разделения ответственности и по тем состояниям в которых может находится программа.. Нажатие на одну кнопку вызывает соответственный модуль, на другую, другой. Отдельные модули разделяются на задачи, задачи на состояния.
0
|
|
|
Заблокирован
|
||
| 06.06.2020, 20:02 [ТС] | ||
|
Хотя эти архитектурные паттерны могут быть и общими у задач одного класса. Как называются арх и прочие паттерны для реализации некой автоматики (упр процессами)? Тут в муравьиной теме упоминалось автоматное программирование, по каким ключевым словам погуглить? Чтобы хоть знать как правильно модули называть)
0
|
||
|
|
|||
| 07.06.2020, 09:43 | |||
|
Полезно начинать изучение программирования именно с азов философии управления, пусть даже технологическими процессами. Она достаточно развита в научном смысле, в отличие от ООП, которое под науку до сих пор не подведено (математики нет). 1. https://ru.wikipedia.org/wiki/... 0%B8%D0%B5 2. http://is.ifmo.ru/ 3. http://is.ifmo.ru/books/_book.pdf
0
|
|||
|
14748 / 9523 / 1364
Регистрация: 21.01.2016
Сообщений: 35,917
|
|||||||
| 08.06.2020, 10:56 | |||||||
|
0
|
|||||||
|
Модератор
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,912
|
|
| 08.06.2020, 17:25 | |
|
Обфускация нужна, если пишешь программу из трёх строк и хочешь за неё бабла срубить. В реальных больших проектах, если баг нашёл или новая фича нужна, проще обратиться к разработчикам. Выйдет дешевле, чем делать самому, даже если тебе исходный код с комментариями предоставят.
0
|
|
| 08.06.2020, 17:25 | |
|
Паттерны vs ООП
Основы Java освоены, понятия, парадигмы, ООП. Читать код могу, понятия есть, но все бы ничего, что дальше? Доходчиво разъясните...
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
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 (Первое измерение):. . .
|