|
Заблокирован
|
|
ООП - парадигмы, паттерны, подходы - кратко и доходчиво03.06.2020, 16:34. Показов 17720. Ответов 153
Метки нет (Все метки)
Я не проф программист и никогда им не буду (старый уже). Потихоньку что-то читал и делал на c# WPF. Получалось, работало, но это были относительно простые штуковины и собственно ОПП там особо не использовалось. Но ту взялся сделать (для себя) более сложную штуковину и увидел, что не сделал ещё и малой части, а уже приходится неоднократно переписывать почти всё заново. Чё-то не очень получается делать ладные "кирпичики", из которых будут строиться блоки программы, а из блоков постепенно усложняться большое здание программы. Постоянно что-то "подпиливаю" в кирпичиках и даже их заменяю. Если так и дальше пойдет, то я эту штуку никогда не сделаю. Оказалось, что это очень не просто правильно сделать модель предметной области, правильно определиться со способами реализациями идей, правильно разбить программу на какие-то правильно взаимодействующие части. К тому же, c# имеет богатый функционал средств. Одно и то же можно сделать по разному. Постоянно встает проблема выбора - и так можно и эдак... Код поначалу всё терпит)
В итоге оказалось, что "что-то не так" - очевидно не хватает каких-то системных знаний. Сама задача достаточно стандартная - анализ исторических данных биржевых курсов акций, выработка и реализация торговых стратегий и т.д. Это интересно, но чувствую, что что-то идёт не так) Забавно, что в рамках процедурного программирования достаточно быстро "слепил" один небольшой кусочек программы и частично оттестировал микроидею. Усложнять далее в рамках процедурного подхода было уже не рационально. Поэтому стал переписывать в рамках подхода ООП. Это заняло гораздо больше времени и никак не закончу). Постоянно что-то переделываю. Честно говоря, не ожидал, что возникнут такие принципиальные трудности. Одного здравого смысла и соображалки явно не достаточно. И шо же делать?) Изучить все парадигмы, подходы, паттерны программирования, чтобы потом легко выбирать нужные? Это конечно правильный, но очень долгий путь. Что подскажут профессионалы? Может есть какой-то не оч объемный (страниц 100 - 200) "тот самый" фолиант, или статья, или блог, или ещё что, который мне тут может помочь? Как-то подтолкнёт в нужном направлении. А далее уже методом проб и ошибок - путём набора опыта.
0
|
|
| 03.06.2020, 16:34 | |
|
Ответы с готовыми решениями:
153
Парадигмы: императивная vs ООП
Подходы к разработке ПО и их связь с ООП |
|
Заблокирован
|
|
| 10.06.2020, 09:51 [ТС] | |
|
Мда,
"Теория, мой друг, суха, Но зеленеет жизни древо" Или "Практика - критерий истинности" То есть, все паттерны (всех уровней) не более, чем руководство к действию, но каким будем само действие решает величайшее, таинственнейшее и могущественнейшее существо во вселенной - человек. Решает на основе собственного опыта и уровня своих знаний и умений. Аминь.
0
|
|
|
|
|||||||
| 10.06.2020, 10:58 | |||||||
|
Для этого ваш rich объект может выставлять наружу сложный интерфейс, но внутри дергать только приватные сервисы, вызывая их в нужной последовательности. Тогда и разделение классов по обязанностям останется, и удобный внешний интерфейс класса сохранится. Some like this
0
|
|||||||
|
14370 / 9471 / 1360
Регистрация: 21.01.2016
Сообщений: 35,739
|
||
| 10.06.2020, 11:06 | ||
|
Storm23, я понимаю что вы хотите сказать. В случаях, что я обрисовал модель не стала God Object'ом. Количество бизнес-логики в ней не было зашкаливающим, а сама логика не выходила за рамки манипуляции содержимым самой модели.
0
|
||
|
Заблокирован
|
|
| 10.06.2020, 12:06 [ТС] | |
|
Я вижу, тут в теме неплохая команда собралась. Может выскажетесь и по 2-м частным вопросам в других темах? А то там тишь, что-то... Буду благодарен. А то меня эти вопросы сдерживают в текущем творческом порыве. Не совсем понятно как далее двигаться в своём проектике.
Многомерная оптимизация и ООП https://www.cyberforum.ru/math... 64875.html
0
|
|
|
Модератор
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,898
|
|||||||||||||
| 10.06.2020, 12:27 | |||||||||||||
|
В функциональных языках создание типа данных - это одна строка, поэтому (утрирую) на каждый чих создаётся новый тип. Очень полезно. В ОО языках принято каждый класс писать в отдельном файле, поэтому обычно ленятся создавать такие классы. Пример в функциональном стиле:
Замечу, что ни в первом, ни во втором случае ООП не используется. У нас есть некая структура и набор методов для работы с ней (которые гарантируют сохранение инвариантов). Нам не нужен полиморфизм подтипов. Например, в Си это можно сделать с помощью перегрузки функций. А в C# можно, например, сделать все методы статическими.
0
|
|||||||||||||
|
14370 / 9471 / 1360
Регистрация: 21.01.2016
Сообщений: 35,739
|
||||
| 10.06.2020, 13:41 | ||||
|
Т.е. у нас: инкапсуляция данных и бизнес-правил внутри некоторого объекта отражающего некоторый аспект предметной области. Всё же, такой подход красивее и правильнее ложится на предметную область. Согласитесь, что "Телефонный Номер" и "Сравниватель телефонных номеров" как-то не особо укладывается в представления о работе с номерами. Это я про разделение на анемичные модели (структуры) и сервисы (статические функции-хелперы). То, что это распространённый подход (разделение на структуры и сервисы) я не отрицаю, ибо сам так часто делаю по привычке. Это простой и понятный подход. Но он не единственный. И не самый лучший, когда хочется больше выразительности и, в некотором смысле, порядка.
0
|
||||
|
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
|
|
| 10.06.2020, 14:15 | |
|
0
|
|
|
14370 / 9471 / 1360
Регистрация: 21.01.2016
Сообщений: 35,739
|
|
| 10.06.2020, 14:24 | |
|
korvin_, т.е. модель инкапсулирующая какие-то своим данные объектом не является?
0
|
|
|
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
|
||
| 10.06.2020, 14:38 | ||
|
Что же до вопроса является ли такая модель объектом — это зависит от того, что ты понимаешь под объектом и в каком контексте. В моём понимании в контексте ООП — нет, не является.
0
|
||
|
14370 / 9471 / 1360
Регистрация: 21.01.2016
Сообщений: 35,739
|
|
| 10.06.2020, 14:49 | |
|
0
|
|
|
Заблокирован
|
|
| 10.06.2020, 16:35 [ТС] | |
|
В общем, благодарю всех. Выходит, я изначально тяготею к стилю rich, просто не знал об этом)
Попутно понял самый высокий уровень абстракции в программировании - это позвать знающего чувака и сказать ему: "Братела, вот тебе бабки, "нужно чтобы было", ты понял? А я пока пиво попью." И всё. А он организует написание ТЗ для программистов, подберет команду и всё сделает) Это какой стиль?)
0
|
|
|
Модератор
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,898
|
||||||||||||
| 10.06.2020, 16:50 | ||||||||||||
|
То есть, вместо
0
|
||||||||||||
|
Заблокирован
|
||
| 10.06.2020, 16:58 [ТС] | ||
|
А myModel описывает целевую функцию?
0
|
||
|
Модератор
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,898
|
||
| 10.06.2020, 17:06 | ||
|
Абстрактный тип данных - это набор функций (независимых от конкретной реализации типа) для оперирования его значениями. Формально АТД включает также инварианты, но в большинстве языков инварианты подразумеваются и не могут быть заданы явно. з.ы. Реализация функций, очевидно, будет зависеть от реализации типа.
0
|
||
|
Заблокирован
|
|
| 10.06.2020, 17:06 [ТС] | |
Shamil1, я темы перепутал))) Но вроде в масть - мне в пользу)
0
|
|
|
Модератор
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,898
|
|||||||
| 10.06.2020, 17:10 | |||||||
1
|
|||||||
|
Заблокирован
|
|
| 10.06.2020, 17:22 [ТС] | |
|
В общем, я для себя из этих трех тем что-то в клюве вынес (не всё конечно, что принесли, а то, что смог ухватить
)Всем спасибо!
0
|
|
|
|
|||
| 10.06.2020, 18:11 | |||
|
Если у вас есть просто некая статическая функция SomeOperation(myModel, someValue), принимающая на вход объект и выполняющая над ним действия - фактически означает, что все поля этого объекта торчат наружу. И вы можете писать свои произвольные функции, делающие с объектом что угодно. Соответственно право выстрелить себе в ногу тоже есть.Вариант же myModel.SomeOperation(someValue) означает, что у объекта есть строго определенный набор функций, который предусмотрел автор класса, и никаких других действий с объектом вы сделать не сможете. К тому-же, у объекта может быть приватный набор состояний, который вы тоже просто так не сможете изменить. В этом же и смысл инкапсуляции.
1
|
|||
|
Модератор
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,898
|
|||||||
| 10.06.2020, 18:26 | |||||||
0
|
|||||||
|
|
|
| 11.06.2020, 13:39 | |
|
На мой взгляд инкапсуляция это выделение АДТ или просто данных в отдельный файл, модуль. Причем эти данные объявляются в глобальной области видимости (для файла). Функции объявляются и определяются также в отдельных файлах (в них данных не должно быть). Функции работают с данными через global. Если будете реально что-то делать, то это станет понятным. Функции-процедуры отдельно, определения и объвления данных отдельно. Функции группируются по разным критериям модульности. Данные также группируются по соответствию некоему критерию близости.
В итоге получили инкапсуляцию данных по данным, функций по функциям (которые вызывают другие функции и т.д.). Код получается кристалльно чистым и понятным. Не запутанным. Объект это АДТ, который имеет состояние. Сущность, которая состояния не имеет не является объектом. Читайте Буча.
0
|
|
| 11.06.2020, 13:39 | |
|
Паттерны vs ООП
Основы Java освоены, понятия, парадигмы, ООП. Читать код могу, понятия есть, но все бы ничего, что дальше? Доходчиво разъясните...
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
ИИ и человечность
kumehtar 21.07.2026
Забавно, что общаясь с ИИ, я замечаю, насколько он высказывается умно, и насколько верит в людей. Он умеет прощать. Он знает как отвечать не обесценивая опыт других людей, даже если сам не верит. Он. . .
|
Нейтральные знания ..., ... чистая наука. Пока что-то проходит модерацию на Хабре, стоит развить мысль ...
Hrethgir 20.07.2026
К таким радикальным взглядам я конечно в той публикации не приходил, но чтобы скоротать вечер, решил углубиться немного.
1. Почему показания термометра заряжены целью?
Цель заложена в самом. . .
|
Установка нескольких штампов электронной подписи в строго определенных местах файла docx
ВладимирСамохин 19.07.2026
(В!) Работа с Электронной подписью - это неотъемлемая часть современного документооборота. Но что делать, если нужно поставить несколько штампов электронной подписи в строго определенных местах. . .
|
сукцессия 35. Научная статья о проделанной работе
anaschu 19.07.2026
Написал в формате латекс и пдф
|
|
Вангую, что это не пройдёт модерацию, и на неделе я запущу свой сервер.
Hrethgir 19.07.2026
Эта публикация сейчас в песочнице и ждёт приглашения.
https:/ / habr. com/ ru/ sandbox/ 295048/
По ссылке 403. Не очень информативно такую ссылку постить.
Запись от Usaga размещена Сегодня в 06:46 . . .
|
сукцессия 33. открытые вопросы от клауде
anaschu 19.07.2026
"Что накопилось за эту часть А — тринадцать правок, из которых шесть пришли из ваших вопросов и каждая оказалась реальной ошибкой, а не калибровкой: односторонний симбиоз, отсутствующий листопад,. . .
|
32 сукцессия
anaschu 19.07.2026
сукцессия 28‑мерное ядро стабилизировано
Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не «подкручивает» сходимость —. . .
|
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано
Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
|