|
шарпопочитатель
59 / 26 / 7
Регистрация: 31.01.2010
Сообщений: 1,035
|
|
SOLID принципы23.01.2017, 17:55. Показов 17638. Ответов 359
Метки нет (Все метки)
всего 5 принципов:
1) srp - класс должен описывать только те характеристики, которые на объект из предметной области возложены. То есть либо кот, либо пес, котопес быть не может. 2) ocp - Писать надо классы так, чтобы их можно было легко расширить, но не изменять 3) Лисков - ??? 4) делайте много маленьких интерфейсов, один дольшой интерфейс это плохо. Так как рефакторинг усложняется... 5) Инверсия зависимостей. Типо композицию поменяйте на агрегацию Я не понимаю принцип Лисков. Можете объяснить популярно?
0
|
|
| 23.01.2017, 17:55 | |
|
Ответы с готовыми решениями:
359
Нелогичные принципы программирования SOLID Нарушен ли solid ? |
|
Модератор
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
|
|||
| 24.01.2017, 21:46 | |||
|
Добавлено через 3 минуты Но гибкость даётся не даром, а за счёт сложности. Поэтому важно найти баланс между гибкостью и сложностью. Оптимальный баланс разный для разных приложений.
0
|
|||
|
Заблокирован
|
||
| 24.01.2017, 21:55 | ||
|
Но проблем сделать такое уродство, где смешивается общее с частным, нет естественно, проблема появиться тогда, когда эту кашу из говна и помидоров кто-то будет сопровождать. ЗЫ И гибкости это не придаст, скорей наоборот
0
|
||
|
шарпопочитатель
59 / 26 / 7
Регистрация: 31.01.2010
Сообщений: 1,035
|
||||
| 24.01.2017, 21:57 [ТС] | ||||
|
Usaga,
Они гарантируют что человек в них разобравшись напишет божественный код? Если нет, то смысл их популяризировать ваще тогда? Чем гоф не устроил? hoggy,
hoggy,
0
|
||||
|
Заблокирован
|
|
| 24.01.2017, 22:09 | |
|
Shamil1,
Да, и возвращаясь к аналогии с функцией. Аналогия эта не верна. Функция рассчитывает на прием абстрактного, а не конкретного объекта, например, функция работающая с типом Integer, может работать с любым числом -- 1, 2, 3, n. Она специализирована только по типу принимаемого аргумента, но не по значению его. В вашем же примере с лампочкой получается так, что, дескать, наша функция изначально работает только и исключительно с одним числом, а мы расширяем это до типа Integer. То есть, до того, что и так должно быть
0
|
|
|
шарпопочитатель
59 / 26 / 7
Регистрация: 31.01.2010
Сообщений: 1,035
|
|||||||||||
| 24.01.2017, 22:16 [ТС] | |||||||||||
|
фуфел солида не в том что он неверен, а в том что он написан языком через жопу о простых вещах, соглашусь с asmquest... Он где-то про это примерно также выразился...
тот же самый пример инверсии зависимостей я понимаю так: Композиция:
Короче идея проста... Дом в нем может быть какое-то животное. Дом не должен зависеть от какого-то одного животного. Банально животное может умереть и дому нужно будет завести новое ))) У дома есть функция - пинок (хз пусть большой башмак будет с механизмом пинания, пофиг...). Так вот пинок нужно отвязать от конкретного животного, пинок нельзя менять, пинок должен быть для любого животного один и тот же. Добавлено через 4 минуты hoggy, насчет интерфейсов... В первом посте неверно выразился... Ну вот приведу Вам пример IClonable, IEnumerable, IDictionary - микрософт интерфейсы. Они удовлетворяют этому принципу. Согласны? Я то начал тему про Барабару Лисков, приведите пример мне пожалуйста системы где без ее принципа жить нельзя или сложно хотя бы?
0
|
|||||||||||
|
Заблокирован
|
||
| 24.01.2017, 22:32 | ||
|
0
|
||
|
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
|||
| 25.01.2017, 02:55 | |||
|
Добавлено через 4 минуты Добавлено через 12 минут Т.е. суть в чем. Класс моделирует тривиальные части поведения какой либо сущности, а нетривиальные, модифицируемые в широком, заранее непредсказуемом диапазоне на уровне каждого объекта, и имеющие возможности изменятся в рантайме делегирует внешним обработчикам. Что позволяет поднять гибкость до абсолютной. К примеру шейдеры тоже по большому счету являются делегатами графического конвейера. И использовать их начали по той причине что модификация поведения конвейера при помощи флагов и стейтов стала просто невменяемой и потребностям гибкости настройки поведения конвейера абсолютно не удовлетворяла.
0
|
|||
|
Заблокирован
|
|||
| 25.01.2017, 03:01 | |||
|
Добавлено через 5 минут
0
|
|||
|
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||||
| 25.01.2017, 03:15 | ||||
|
А есть прототипирование основанное на предзаготовленных модифицируемых иерархиях объектов скомпилированных классов со слабыми связями. Такое прототипирование и с полиморфизмом никогда не ругалось и позволяет превратить набор классов в универсальный конструктор сущностей заданной предметной области. Это по большому счету и есть КОП. Добавлено через 5 минут
0
|
||||
|
Заблокирован
|
|||
| 25.01.2017, 03:17 | |||
|
Добавлено через 1 минуту
0
|
|||
|
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||
| 25.01.2017, 03:20 | ||
|
0
|
||
|
Заблокирован
|
||
| 25.01.2017, 03:23 | ||
|
0
|
||
|
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
|||
| 25.01.2017, 03:27 | |||
|
В С++ такие средства тоже в принципе реализуются но только уже на уровне логики работы класса, что дает возможность контролировать непротеворичивость и соответствие таких модификаций спецификации класса. Добавлено через 1 минуту
0
|
|||
|
Заблокирован
|
||||
| 25.01.2017, 03:30 | ||||
|
Добавлено через 2 минуты
0
|
||||
|
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||
| 25.01.2017, 03:34 | ||
|
0
|
||
|
Заблокирован
|
||
| 25.01.2017, 03:39 | ||
|
На самом деле, бОльшей квалификации требует тот язык, на котором трудней писать, который не перекладывает на компилятор заботу об ошибках, и соответственно не ограничивает мощность языка до уровня полного убожества. Кроме того, на сегодняшний день динамические языки неплохо оптимизированы, и на практике зачастую работают не медленней, чем статические.
0
|
||
|
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
|||
| 25.01.2017, 03:44 | |||
|
На самом деле динамическая типизация дает на порядок больше геммороя чем профита и в 99,9% случаев статическая типизация (не путать с диспетчеризацией) предпочтительней динамической. А там где она нужна тип VARIANT никто в статических языках не отменял. При этом не следует забывать что все эти фичи динамической типизации под капотом реализованы средствам яззыка со статической типизацией. (даже если оно в машкод скомпилировано-у машкода типизация статическая). Соответсвенно если нужна именно динамическая типизация для чего то конкретного она средствами языков со статической типизацией реализуется просто, но при этом строго в необхходимом объеме и с контролем непротиворечивости в рамках конкретной задачи ее применения
0
|
|||
|
Заблокирован
|
||||
| 25.01.2017, 03:52 | ||||
|
0
|
||||
|
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
|||
| 25.01.2017, 04:08 | |||
|
А к примеру C++ сборщик мусора не нужен. Поскольку этот язык мусора вообще не генерит. Удалять же объекты явно распределенные программистом исключительно по рефкаунту или потере линка на рут идиотизм чистой воды. Поскольку определение "объект не нужен если на него нет ссылок" приемлемо только для хеллоувердов в которых ООП вообще не используется а только фундаментальные типы данных. Потому как по логике модели актуально другое определение - "объект не нужен когда он по логике его работы не может продолжать существование". и пофиг сколько ссылок на него в это время существует. Причем принять такое решение объект способен самостоятельно а не только извне в отличии от фундаментальных типов. А при таком подходе вот в этот момент прийдется обеспечить обнуление всех активных ссылок на него, что в языках с автоматическим мусоросборником очень сильно затруднено. Там по большому счету рулит концепция лечения висячих ссылок за счет утечек памяти. Потому как там для чего их проетировали надолго не утечет. Выплюнет свой кусок HTML в сокет и завершится с уничтожением всей кучи.
0
|
|||
|
Заблокирован
|
||||
| 25.01.2017, 04:22 | ||||
|
Добавлено через 5 минут Добавлено через 6 минут Fulcrum_013, Кстати, говоря, динамические языки хоть и используют обычно GC, это в принципе то не обязательно, вполне возможны и реализации без него. Кроме того, можно сделать реалтайм сборку мусора, и такие системы существуют. Для этого, насколько я знаю, нужна конкурентность.
0
|
||||
| 25.01.2017, 04:22 | |
|
Solid Works Api
Применение SOLID принципов Solid Works Api и C#
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет!
За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|