|
Заблокирован
|
|
ООП - парадигмы, паттерны, подходы - кратко и доходчиво03.06.2020, 16:34. Показов 17712. Ответов 153
Метки нет (Все метки)
Я не проф программист и никогда им не буду (старый уже). Потихоньку что-то читал и делал на c# WPF. Получалось, работало, но это были относительно простые штуковины и собственно ОПП там особо не использовалось. Но ту взялся сделать (для себя) более сложную штуковину и увидел, что не сделал ещё и малой части, а уже приходится неоднократно переписывать почти всё заново. Чё-то не очень получается делать ладные "кирпичики", из которых будут строиться блоки программы, а из блоков постепенно усложняться большое здание программы. Постоянно что-то "подпиливаю" в кирпичиках и даже их заменяю. Если так и дальше пойдет, то я эту штуку никогда не сделаю. Оказалось, что это очень не просто правильно сделать модель предметной области, правильно определиться со способами реализациями идей, правильно разбить программу на какие-то правильно взаимодействующие части. К тому же, c# имеет богатый функционал средств. Одно и то же можно сделать по разному. Постоянно встает проблема выбора - и так можно и эдак... Код поначалу всё терпит)
В итоге оказалось, что "что-то не так" - очевидно не хватает каких-то системных знаний. Сама задача достаточно стандартная - анализ исторических данных биржевых курсов акций, выработка и реализация торговых стратегий и т.д. Это интересно, но чувствую, что что-то идёт не так) Забавно, что в рамках процедурного программирования достаточно быстро "слепил" один небольшой кусочек программы и частично оттестировал микроидею. Усложнять далее в рамках процедурного подхода было уже не рационально. Поэтому стал переписывать в рамках подхода ООП. Это заняло гораздо больше времени и никак не закончу). Постоянно что-то переделываю. Честно говоря, не ожидал, что возникнут такие принципиальные трудности. Одного здравого смысла и соображалки явно не достаточно. И шо же делать?) Изучить все парадигмы, подходы, паттерны программирования, чтобы потом легко выбирать нужные? Это конечно правильный, но очень долгий путь. Что подскажут профессионалы? Может есть какой-то не оч объемный (страниц 100 - 200) "тот самый" фолиант, или статья, или блог, или ещё что, который мне тут может помочь? Как-то подтолкнёт в нужном направлении. А далее уже методом проб и ошибок - путём набора опыта.
0
|
|
| 03.06.2020, 16:34 | |
|
Ответы с готовыми решениями:
153
Парадигмы: императивная vs ООП
Подходы к разработке ПО и их связь с ООП |
|
3121 / 1710 / 273
Регистрация: 19.02.2010
Сообщений: 4,493
|
||
| 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
|
||||
|
Модератор
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,898
|
||||
| 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
|
|||||
|
Модератор
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,898
|
|||
| 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
|
|||
|
14368 / 9469 / 1360
Регистрация: 21.01.2016
Сообщений: 35,733
|
|||||||
| 08.06.2020, 10:56 | |||||||
|
0
|
|||||||
|
Модератор
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,898
|
|
| 08.06.2020, 17:25 | |
|
Обфускация нужна, если пишешь программу из трёх строк и хочешь за неё бабла срубить. В реальных больших проектах, если баг нашёл или новая фича нужна, проще обратиться к разработчикам. Выйдет дешевле, чем делать самому, даже если тебе исходный код с комментариями предоставят.
0
|
|
| 08.06.2020, 17:25 | |
|
Паттерны vs ООП
Основы Java освоены, понятия, парадигмы, ООП. Читать код могу, понятия есть, но все бы ничего, что дальше? Доходчиво разъясните...
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано
Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
|
сукцессия 30. Массив проверяющих друг друга моделей
anaschu 18.07.2026
Архитектура сети взаимопроверяющих моделей микоризной сукцессии (v2. 0)
Развитие тензорного ОДУ-ядра и создание кросс-платформенного калибровочного полигона
Уважаемые коллеги!
В продолжение. . .
|
Грибы - это женщины, деревья - это мужчины. Анти инь янь для союза мужчины и женщины.
anaschu 18.07.2026
ГЛАВНЫЙ НАУЧНО-ФИЛОСОФСКИЙ ВЫВОД: Сексуально-Репродуктивный Капитализм против Государства Моногамии
Коллеги, мы вышли на финишную прямую 20-мерного ОДУ-моделирования вековой сукцессии (ветка. . .
|
Текстовый слайдер с нумерацией страниц и кроссбраузерность.
russiannick 18.07.2026
Один мой друг написал текстовый слайдер с нумерацией страниц. Сегодня я расскажу как он умудрился подружить его с кроссбраузерностью.
Очевидно сложно угодить с шириной каждому браузеру. Один крадет. . .
|
|
Грибы - это мемы, дерево - это человек. Применение микоризной модели к теории меметики Докинза.
anaschu 18.07.2026
Меметический изоморфизм теории «всего»: Грибная сукцессия как модель эволюции идей Докинза
Базовый код системы ОДУ микоризной сукцессии описывает не просто биологию, а универсальную. . .
|
Грибы - это корпорации, деревья - это государства. Механизм массонского захвата власти
anaschu 18.07.2026
Макроэкономический изоморфизм теории «всего»: Грибная сукцессия как модель транснационального капитализма
Базовый код системы ОДУ микоризной сукцессии описывает не просто биологию, а. . .
|
Расчёт периметра прямоугольника по координатам вершин
Maks 18.07.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Вычислить периметр прямоугольника, заданного координатами своих вершин на плоскости.
Решение:
Создан документ со следующими. . .
|
Подсчёт частоты трёхбуквенных слов в тексте
Maks 18.07.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Выясните, сколько раз в предложенном тексте встречается каждое трехбуквенное слово.
Решение:
Создан документ с единственным. . .
|