|
Заблокирован
|
|
ООП - парадигмы, паттерны, подходы - кратко и доходчиво03.06.2020, 16:34. Показов 18017. Ответов 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
|
|||||||
|
14749 / 9524 / 1364
Регистрация: 21.01.2016
Сообщений: 35,928
|
||
| 10.06.2020, 11:06 | ||
|
Storm23, я понимаю что вы хотите сказать. В случаях, что я обрисовал модель не стала God Object'ом. Количество бизнес-логики в ней не было зашкаливающим, а сама логика не выходила за рамки манипуляции содержимым самой модели.
0
|
||
|
Заблокирован
|
|
| 10.06.2020, 12:06 [ТС] | |
|
Я вижу, тут в теме неплохая команда собралась. Может выскажетесь и по 2-м частным вопросам в других темах? А то там тишь, что-то... Буду благодарен. А то меня эти вопросы сдерживают в текущем творческом порыве. Не совсем понятно как далее двигаться в своём проектике.
Многомерная оптимизация и ООП https://www.cyberforum.ru/math... 64875.html
0
|
|
|
Модератор
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,912
|
|||||||||||||
| 10.06.2020, 12:27 | |||||||||||||
|
В функциональных языках создание типа данных - это одна строка, поэтому (утрирую) на каждый чих создаётся новый тип. Очень полезно. В ОО языках принято каждый класс писать в отдельном файле, поэтому обычно ленятся создавать такие классы. Пример в функциональном стиле:
Замечу, что ни в первом, ни во втором случае ООП не используется. У нас есть некая структура и набор методов для работы с ней (которые гарантируют сохранение инвариантов). Нам не нужен полиморфизм подтипов. Например, в Си это можно сделать с помощью перегрузки функций. А в C# можно, например, сделать все методы статическими.
0
|
|||||||||||||
|
14749 / 9524 / 1364
Регистрация: 21.01.2016
Сообщений: 35,928
|
||||
| 10.06.2020, 13:41 | ||||
|
Т.е. у нас: инкапсуляция данных и бизнес-правил внутри некоторого объекта отражающего некоторый аспект предметной области. Всё же, такой подход красивее и правильнее ложится на предметную область. Согласитесь, что "Телефонный Номер" и "Сравниватель телефонных номеров" как-то не особо укладывается в представления о работе с номерами. Это я про разделение на анемичные модели (структуры) и сервисы (статические функции-хелперы). То, что это распространённый подход (разделение на структуры и сервисы) я не отрицаю, ибо сам так часто делаю по привычке. Это простой и понятный подход. Но он не единственный. И не самый лучший, когда хочется больше выразительности и, в некотором смысле, порядка.
0
|
||||
|
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
|
|
| 10.06.2020, 14:15 | |
|
0
|
|
|
14749 / 9524 / 1364
Регистрация: 21.01.2016
Сообщений: 35,928
|
|
| 10.06.2020, 14:24 | |
|
korvin_, т.е. модель инкапсулирующая какие-то своим данные объектом не является?
0
|
|
|
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
|
||
| 10.06.2020, 14:38 | ||
|
Что же до вопроса является ли такая модель объектом — это зависит от того, что ты понимаешь под объектом и в каком контексте. В моём понимании в контексте ООП — нет, не является.
0
|
||
|
14749 / 9524 / 1364
Регистрация: 21.01.2016
Сообщений: 35,928
|
|
| 10.06.2020, 14:49 | |
|
0
|
|
|
Заблокирован
|
|
| 10.06.2020, 16:35 [ТС] | |
|
В общем, благодарю всех. Выходит, я изначально тяготею к стилю rich, просто не знал об этом)
Попутно понял самый высокий уровень абстракции в программировании - это позвать знающего чувака и сказать ему: "Братела, вот тебе бабки, "нужно чтобы было", ты понял? А я пока пиво попью." И всё. А он организует написание ТЗ для программистов, подберет команду и всё сделает) Это какой стиль?)
0
|
|
|
Модератор
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,912
|
||||||||||||
| 10.06.2020, 16:50 | ||||||||||||
|
То есть, вместо
0
|
||||||||||||
|
Заблокирован
|
||
| 10.06.2020, 16:58 [ТС] | ||
|
А myModel описывает целевую функцию?
0
|
||
|
Модератор
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,912
|
||
| 10.06.2020, 17:06 | ||
|
Абстрактный тип данных - это набор функций (независимых от конкретной реализации типа) для оперирования его значениями. Формально АТД включает также инварианты, но в большинстве языков инварианты подразумеваются и не могут быть заданы явно. з.ы. Реализация функций, очевидно, будет зависеть от реализации типа.
0
|
||
|
Заблокирован
|
|
| 10.06.2020, 17:06 [ТС] | |
Shamil1, я темы перепутал))) Но вроде в масть - мне в пользу)
0
|
|
|
Модератор
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,912
|
|||||||
| 10.06.2020, 17:10 | |||||||
1
|
|||||||
|
Заблокирован
|
|
| 10.06.2020, 17:22 [ТС] | |
|
В общем, я для себя из этих трех тем что-то в клюве вынес (не всё конечно, что принесли, а то, что смог ухватить
)Всем спасибо!
0
|
|
|
|
|||
| 10.06.2020, 18:11 | |||
|
Если у вас есть просто некая статическая функция SomeOperation(myModel, someValue), принимающая на вход объект и выполняющая над ним действия - фактически означает, что все поля этого объекта торчат наружу. И вы можете писать свои произвольные функции, делающие с объектом что угодно. Соответственно право выстрелить себе в ногу тоже есть.Вариант же myModel.SomeOperation(someValue) означает, что у объекта есть строго определенный набор функций, который предусмотрел автор класса, и никаких других действий с объектом вы сделать не сможете. К тому-же, у объекта может быть приватный набор состояний, который вы тоже просто так не сможете изменить. В этом же и смысл инкапсуляции.
1
|
|||
|
Модератор
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,912
|
|||||||
| 10.06.2020, 18:26 | |||||||
0
|
|||||||
|
|
|
| 11.06.2020, 13:39 | |
|
На мой взгляд инкапсуляция это выделение АДТ или просто данных в отдельный файл, модуль. Причем эти данные объявляются в глобальной области видимости (для файла). Функции объявляются и определяются также в отдельных файлах (в них данных не должно быть). Функции работают с данными через global. Если будете реально что-то делать, то это станет понятным. Функции-процедуры отдельно, определения и объвления данных отдельно. Функции группируются по разным критериям модульности. Данные также группируются по соответствию некоему критерию близости.
В итоге получили инкапсуляцию данных по данным, функций по функциям (которые вызывают другие функции и т.д.). Код получается кристалльно чистым и понятным. Не запутанным. Объект это АДТ, который имеет состояние. Сущность, которая состояния не имеет не является объектом. Читайте Буча.
0
|
|
| 11.06.2020, 13:39 | |
|
Паттерны 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 (Первое измерение):. . .
|