Форум программистов, компьютерный форум, киберфорум
Обо всем!
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.91/55: Рейтинг темы: голосов - 55, средняя оценка - 4.91
шарпопочитатель
 Аватар для ht1515
59 / 26 / 7
Регистрация: 31.01.2010
Сообщений: 1,035

SOLID принципы

23.01.2017, 17:55. Показов 17675. Ответов 359
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
всего 5 принципов:
1) srp - класс должен описывать только те характеристики, которые на объект из предметной области возложены. То есть либо кот, либо пес, котопес быть не может.
2) ocp - Писать надо классы так, чтобы их можно было легко расширить, но не изменять
3) Лисков - ???
4) делайте много маленьких интерфейсов, один дольшой интерфейс это плохо. Так как рефакторинг усложняется...
5) Инверсия зависимостей. Типо композицию поменяйте на агрегацию


Я не понимаю принцип Лисков. Можете объяснить популярно?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.01.2017, 17:55
Ответы с готовыми решениями:

Нелогичные принципы программирования
Я вспомнил программу, по которой как то начинал изучать программирование на языке С++, код приложу к теме. Программа определяет количество...

SOLID
Здравствуйте, стоит ли использовать правила SOLID в маленьких задачках, например в том же шифре цезаря? Задаюсь таким вопросом потому что...

Нарушен ли solid ?
Привет. Есть например сущности предметной области Нож и Складной Нож. Как вы думаете нужно спроектировать классы в этом случае? ...

359
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
02.02.2017, 02:58
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от asmquest Посмотреть сообщение
Это все хрень, которая привязана к статической типизации, это не имеет значения для нормальных языков
А здесь речь не об типизации а о назначении данных. Нет абсолютно никакой алгоритмической возможности определять назначение данных в том или ином поле, а не их тип, определение же типа поля при наличии рефлекшина и в языках со статической типизацией тривиально даже в рантайме. А в компайлтайме так вообще типы абсолютно всего известны настолько что компилятор сам умеет генеррировать операторы присваивания, и т.п. для переменных того же типа. А вот с оператором к примеру сравнения уже никак. Потому как типы алгоритму (компилятора) то известны а назначения полей нет, а соответсвенно и логика их сравнения нет.

Добавлено через 1 минуту
Цитата Сообщение от asmquest Посмотреть сообщение
Допустим, есть класс, который предоставляет курс валюты, есть объект, который в этом классе постоянно меняет этот курс, опрашивая некий сторонний ресурс раз в 10 секунд. В итоге все подклассы и экземпляры этого класса будут всегда оперировать актуальными данными
И где тут изменение сигнатур? Здесь только изменение данных. Для этого ни динамическая типизация ни динамическое изменение типов не нужны. Для этого статики выше крыши.

Добавлено через 2 минуты
Цитата Сообщение от asmquest Посмотреть сообщение
Ну, вообще то о конверсии из типа в тип речь не шла, хотя это тоже возможно.
Тривиальным и распространенным является добавление родителя, в цепочку наследования, но можно и своп сделать. Но это, как бы, не очень распространенный кейз. Не очень то это нужно.
Если нет создания классов с новым кодом то абсолютно все необходимые и корректно обрабатываемые цепочки наследования могут быть созданы в компайл тайме.

Добавлено через 1 минуту
Цитата Сообщение от asmquest Посмотреть сообщение
то все хрень, которая привязана к статической типизации, это не имеет значения для нормальных языков
Эта хреь привязана к ООП парадигме. А именно к тому что для единообразного управления объектами их интерфейсы должны быть четко определены и постоянны в процессе выполнения программы. Это и есть полиморфизм в действии.
0
Заблокирован
02.02.2017, 03:05
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
И где тут изменение сигнатур?
нет, имеется в виду ситуация, когда в классе есть поле, допустим, USD/RUB, а в подклассе метод foo = (USD/RUB + 10), экземпляр этого подкласса принимает сообщение foo и всегда отдает актуальные данные. Такая вот примерно схема. А в какой то момент, например, класс отписывается от обновлений, или подписывается на другой источник, или добавляет USD/EURO и тп

Добавлено через 1 минуту
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Если нет создания классов с новым кодом то абсолютно все необходимые и корректно обрабатываемые цепочки наследования могут быть созданы в компайл тайме.
не обязательно создание с новым кодом, возможно и расширение существующего

Добавлено через 1 минуту
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
все необходимые и корректно обрабатываемые цепочки наследования могут быть созданы в компайл тайме.
и цепочки наследования могут меняться во время выполнения

Добавлено через 2 минуты
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
А именно к тому что для единообразного управления объектами их интерфейсы должны быть четко определены и постоянны
это противоречие, и искуственное ограничение. Например, в жизни, человек изначально был поваром, а потом научился играть в футбол, и стал футболистом. Должна быть возможность выражать абстракции времени и изменения состояния, иначе это не ООП, а ФП
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
02.02.2017, 03:09
Цитата Сообщение от asmquest Посмотреть сообщение
и цепочки наследования могут меняться во время выполнения
Изменение цепочки наследования влечет за собой изменение интерфейса.
Цитата Сообщение от asmquest Посмотреть сообщение
не обязательно создание с новым кодом, возможно и расширение существующего
А все необходимы списки методов с существующим на момент компиляции кодом могут быть созданы и в компайл тайме.

Добавлено через 3 минуты
Цитата Сообщение от asmquest Посмотреть сообщение
Должна быть возможность выражать абстракции времени и изменения состояния, иначе это не ООП, а ФП
Для этого не нужно изменять интерфейсы и цепочки наследования. Достаточно агреггировать новые дополнительные компоненты. И статическая типизация со статическими сигнатурами классов с этим прекрасно справляется. Ну это уже правда дальнейшее развитие ООП которое называют КОП. Это при добавлении навыкоф футболиста к навыкам повора. При замене же навыков повара навыками футболиста должна быть произведена соответствующая конверсия, список же возможных конверсий при этом ограничен набором описанных кодом алгоритмов конверсии соответсвенно генерируем в компайлтайме.
0
Заблокирован
02.02.2017, 03:12
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Изменение цепочки наследования влечет за собой изменение интерфейса.
Влечет. Изменение цепочки наследования автоматически меняет интерфейс объекта
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
могут быть созданы и в компайл тайме.
а если этот список должен зависеть от юзер-инпута?

Добавлено через 1 минуту
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Достаточно агреггировать новые дополнительные компоненты
всегда можно сделать что то через жопу, но это не эквивалентно, так как не сохраняется консистентность и концептуальная простота.
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
02.02.2017, 03:18
Цитата Сообщение от asmquest Посмотреть сообщение
Влечет. Изменение цепочки наследования автоматически меняет интерфейс объекта
Вот и я о том же. Сидит себе бульдог в списке собак, мяукает себе по команде голос. Тут ему предка на носорога заменили а дирижер сказал мяукать. креш батенька.

Добавлено через 23 секунды
Цитата Сообщение от asmquest Посмотреть сообщение
всегда можно сделать что то через жопу, но это не эквивалентно, так как не сохраняется консистентность и концептуальная простота.
Зато от крешей защищено.

Добавлено через 1 минуту
Цитата Сообщение от asmquest Посмотреть сообщение
а если этот список должен зависеть от юзер-инпута?
Вот это как раз с агрегацией гораздо проще реализуется. Так же как и сериализация/десериализация того что юзер наинпутил
0
Заблокирован
02.02.2017, 03:20
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Тут ему предка на носорога заменили а дирижер сказал мяукать. креш батенька.
какой дурак это все будет делать и зачем? Барабашка? можно сдуру и член сломать от этого никто не защитит
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
02.02.2017, 03:23
Цитата Сообщение от asmquest Посмотреть сообщение
какой дурак это все будет делать и зачем? Барабашка? можно сдуру и член сломать от этого никто не защитит
Алгоритм. Напомню при создании алгоритмов программист 10% времени создает ошибки 90% времени их расхлебывает. А защитит статическая типизация. При которой либо объект умеет хотя бы мяукать по команде голос, либо его в списке собак нет.
0
Заблокирован
02.02.2017, 03:28
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Вот это как раз с агрегацией гораздо проще реализуется.
агрегация -- это делегирование. В смоллток-лайк языках наследование реализуется делегированием полностью. А в говноязыках нужны костыли для этого.

Добавлено через 4 минуты
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Алгоритм. Напомню при создании алгоритмов программист 10% времени создает ошибки 90% времени их расхлебывает.
А в жизни чтобы член не ломался надо протез носить? Ну-ну. Заодно неплохо было бы запилить защиту от того, чтобы в хелловорде, в функции принт, принимался специальный тип, исключающий что-либо, кроме фразы "Hello world!"
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
02.02.2017, 03:29
Цитата Сообщение от asmquest Посмотреть сообщение
А в говноязыках нужны костыли для этого.
говноязыки это то где нет классического наследования. Аггрегация нужна и удобна далеко не всегда. Гораздо чаще от нее геммора больше чем профита. В некоторых местах (для тех классов объекты которых должны быть способны мутировать без изменения своеего адреса) она не заменима,либо трудно заменима другими средствами(фактически искуственным костылением аггрегации на частично внутренней VMT). Но таких случаев когда объекту необходимо мутировать очень мало. в большинстве случаев достаточно просто композиции компонентов.
0
Заблокирован
02.02.2017, 03:32
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
говноязыки это то где нет классического наследования
совершенно верно. А классика наследования -- это смоллток
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
02.02.2017, 03:32
Цитата Сообщение от asmquest Посмотреть сообщение
А в жизни чтобы член не ломался надо протез носить?
Знаете бородатый анекдот как от СПИДа уберечься? Пить морковный сок. Не до, не после, а вместо.
0
Заблокирован
02.02.2017, 03:32
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Гораздо чаще от нее геммора больше чем профита.
Например?
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
02.02.2017, 03:33
Цитата Сообщение от asmquest Посмотреть сообщение
А классика наследования -- это смоллток
Классика наследования это Modula. Аггреггация фактически наследованием вообще не является.
0
Заблокирован
02.02.2017, 03:33
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Пить морковный сок. Не до, не после, а вместо.
Вот этим и занимаются адепты статической типизации
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
02.02.2017, 03:35
Цитата Сообщение от asmquest Посмотреть сообщение
Например?
Например то что нужен лишний указатель, в большинстве случаев нужно при каждом обращении проверять он вообще живой или нет, нужно обернуть все методы и т.д. т.е расходы как кода так и накладные расходы при вызове методов.
0
Заблокирован
02.02.2017, 03:36
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Например то что нужен лишний указатель, в большинстве случаев нужно при каждом обращении проверять он вообще живой или нет, нужно обернуть все методы и т.д. т.е расходы как кода так и накладные расходы при вызове методов.
Ну, это снова про говноязыки, ладно, в них ничего нельзя делать не через жопу, это уже и так понятно
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
02.02.2017, 03:37
Цитата Сообщение от asmquest Посмотреть сообщение
Вот этим и занимаются адепты статической типизации
Ошибаетесь. Потому как такой СПИД живет исключительно в языках где возможно динамическое изменение интерфейса объекта. В языках где интерфейсы статические такого СПИДа нет по определению. Причем не зависимо от того динамическая или статическая сама типизация.
0
Заблокирован
02.02.2017, 03:39
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
такого СПИДа нет по определению.
так я про это и говорю, там программирования нет по-определению, только морковный сок
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
02.02.2017, 03:42
Цитата Сообщение от asmquest Посмотреть сообщение
Ну, это снова про говноязыки, ладно, в них ничего нельзя делать не через жопу, это уже и так понятно
Если этот код компилятор генерит автоматически (под капотом), он лишает программиста возможности модифицировать обертку, а накладные расходы остаются теми же.

Добавлено через 2 минуты
Цитата Сообщение от asmquest Посмотреть сообщение
так я про это и говорю, там программирования нет по-определению, только морковный сок
Ошибаетесь. Если нет спида то и шырять можно в любых местах ничего не боясь. А в языках с динамически изменяемыми интерфейсами таки да - морковный сок единственная стопроцентная защита от крешей по отсутствтию у объекта нужного метода
0
Заблокирован
02.02.2017, 03:46
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
он лишает программиста возможности модифицировать обертку, а накладные расходы остаются теми же.
Какую обертку?

Добавлено через 2 минуты
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Если нет спида то и шырять можно в любых местах ничего не боясь
Правильно. В кулачке обычно спида не бывает, вот и шныряют там. А "места" недоступны by design. Причем, когда спид то еще ладно, там хоть есть чего опасаться реально, а тут речь всего-лишь о гипотетической возможности ошибки. Причем, адепты, видимо, не воспринимают тот факт, что ошибки ПО не сводятся к ошибкам типов.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.02.2017, 03:46

Solid Works Api
Здравствуйте! Пишу програмку для Solid Works используя Api. Перестроение проекта, высвечивание элементов занимает много времени. Можно ли...

Пятый принцип SOLID
Здравствуйте. Формулировка пятого принципа гласит о том, что модули верхнего уровня не должны зависеть от модулей нижнего уровня. И те и...

Применение SOLID принципов
Всем доброго времени суток, Есть плохо написанный код машины Тьюринга на Java: package tm; import...

Solid Works Api и C#
Здравствуйте! Подскажите пожалуйста, ресурсы для изучения Solid Works Api на русском. Интересуют такие моменты как, 1. Вставка деталей,...

Тест по SOLID принципам
Нужна помощь по тестам, в принципах вроде как разобрался, но тест очень сильно путает своими вариантами ответов. Хочется узнать мнение...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
340
Ответ Создать тему
Новые блоги и статьи
ИИ не может найти нужный язык в списке
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 и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru