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

SOLID принципы

23.01.2017, 17:55. Показов 17651. Ответов 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
Заблокирован
26.01.2017, 16:48
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Igor3D Посмотреть сообщение
Чего это я должен отказываться от наследования если оно прямо-таки напрашивается?
Поэтому я и говорю, что принцип подстановки лисков следует трактовать не как директиву, обязательную к исполнению, а как удобную в некоторых случаях модель построения иерархии. Утверждать что это никогда не работает, однако -- это перебор.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
26.01.2017, 17:16
Цитата Сообщение от Igor3D Посмотреть сообщение
А вот почему до Вас простой пример не доходит - не знаю
мне не понятно какую проблему вы там героически преодолеваете.
и как она вообще у вас могла возникнуть
единственное, что я покамест понимаю:
это то, что вы её сами себе создали.
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
26.01.2017, 18:04
Цитата Сообщение от asmquest Посмотреть сообщение
Я не говорю конкретно о JS, там JS просто чтобы отформатировать псевдокод. Любой язык -- потомок смоллтока это может делать, и даже в языках которые ушли от него, но сохранили хоть какую то динамику, типа пистона, например, это возможно.
Любюой язык где методы переименовываются и добавляются в обьект а не в класс а тем более в рантайме ООП языком не являеется. и вся псевдо-ООП мишура в нем не более чем костыль легаси ФП-средствами.
0
Заблокирован
26.01.2017, 18:09
Fulcrum_013, это абсолютно безосновательное и беспочвенное заявление, и, более того, на самом деле все строго наоборот, но Вы имеете право на свое собственное мнение. Мне вот только одно непонятно, при чем тут вообще ФП. Почему Вы его сюда приплетаете? И что Вы под этим подразумеваете? К слову, если говорить о ФП в каноническом смысле этого слова, как о подстановочной модели, то там никакая имитация ООП вообще невозможна.
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
26.01.2017, 18:30
Цитата Сообщение от asmquest Посмотреть сообщение
К слову, если говорить о ФП в каноническом смысле этого слова, как о подстановочной модели, то там никакая имитация ООП вообще невозможна.
ФП-никам это скажите. Они вас всей толпой запинают.
0
Заблокирован
26.01.2017, 18:43
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
ФП-никам это скажите. Они вас всей толпой запинают.
действительно, адепты ФП обычно фанатично настроены, но это не отменяет фактов. Те лазейки, которые используются в тн "чистых" ФП-языках, для имитации ООП, такие как монады "state", "IO"(являющиеся расширением, и не входящие в парадигму), а также в языках типа лиспов, где в почете ФП-стиль, такие как модели вычислений с муттабельными окружениями и прочее -- все это не имеет отношения к ФП в каноническом смысле.
0
26.01.2017, 18:53

Не по теме:

Люди, вы ещё не устали друг другу непонятно что доказывать? :)

0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
26.01.2017, 19:06
Цитата Сообщение от asmquest Посмотреть сообщение
Те лазейки, которые используются в тн "чистых" ФП-языках, для имитации ООП, такие как монады "state", "IO"(являющиеся расширением, и не входящие в парадигму),
А дело не в изменяемости или не изменяемости состояний. А в том что в таких языках объект не более чем неструктурированный массив объектов первого класса, в том числе функций, а не фиксированная структура взаимосвязванных полей и методов их обработки., а соответсвенно каша не имеющая к ООП а тем более КОП ни малейшего отношения.
0
Заблокирован
26.01.2017, 19:20
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
А дело не в изменяемости или не изменяемости состояний
И в этом тоже. Если говорить о сколько-нибудь полноценном ООП, без состояния оно не взлетит.
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
А в том что в таких языках объект не более чем неструктурированный массив объектов первого класса
Я говорил о семантической составляющей. С точки зрения семантики, в ФП есть только абстракция(функция) и аппликация(применение), никакого состояния, поведения, времени и объектов в ООП-смысле там нет.
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
26.01.2017, 19:29
Цитата Сообщение от asmquest Посмотреть сообщение
С точки зрения семантики,
В ФП существуют замыкания. И по большому счету ни каких ограничений на изменяемость или неизменяемость данных в замыкании сама парадигма не накладывает, так же как в принципе и на то сколько функций имеют доступ к замыканию.
0
Заблокирован
26.01.2017, 19:37
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
В ФП существуют замыкания. И по большому счету ни каких ограничений на изменяемость или неизменяемость данных в замыкании сама парадигма не накладывает, так же как в принципе и на то сколько функций имеют доступ к замыканию.
Вы не правы, в ФП не существует такой семантической единицы, как замыкание. Эта путаница проистекает из того, что в ФП принята лексическая область видимости, которая обычно реализуется замыканиями. И уж тем более, там нет никакого изменяемого состояния, это нонсенс.
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
26.01.2017, 20:49
Цитата Сообщение от asmquest Посмотреть сообщение
И уж тем более, там нет никакого изменяемого состояния, это нонсенс.
Чистое ФП нонсенс само по себе. Тьюринговская трясина. И вот чтобы из этой трясины как то выбраться снимают ограничения и на неизменнсть данных и даже на чистоту функций. Причем не монадами а просто на уровне языка.

Добавлено через 13 минут
Цитата Сообщение от asmquest Посмотреть сообщение
в ФП не существует такой семантической единицы, как замыкание.
А это вообще обычно не семантическая единица а подкапотные дела компилятора.
0
Заблокирован
26.01.2017, 20:58
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
А это вообще обычно не семантическая единица а подкапотные дела компилятора.
Когда я говорил о том что в чистом ФП невыразимо ООП, я говорил именно о семантике. Никто не спорит, что в реальных так называемых "ФП-языках" можно костылить ООП, если бы они оставались в рамках парадигмы и не имели бы расширений в виде монад/присваиваний/замыканий, на них проблематично было бы написать не только ООП, но и вообще что-либо.
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
26.01.2017, 21:30
Цитата Сообщение от asmquest Посмотреть сообщение
если бы они оставались в рамках парадигмы и не имели бы расширений в виде монад/присваиваний/замыканий
О них бы давно забыли бы как о страшном сне а не поддерживали бы в полудохлом состоянии как сейчас.
0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
27.01.2017, 01:49
Цитата Сообщение от asmquest Посмотреть сообщение
С точки зрения семантики, в ФП есть только абстракция(функция) и аппликация(применение), никакого состояния, поведения, времени и объектов в ООП-смысле там нет.
А если в языке есть только сложение и вычитание, то в нём нельзя квадратный корень посчитать?

Комбинируя абстракцию и аппликацию можно реализовать присваивание, состояние и так далее.
ООП никак нельзя имитировать ни в процедурных, ни в функциональных языках. В каждом языке оно либо есть, либо его нет. Ничто не мешает добавить ООП (наследование) в функциональный язык.
0
Заблокирован
27.01.2017, 11:00
Цитата Сообщение от Shamil1 Посмотреть сообщение
Комбинируя абстракцию и аппликацию можно реализовать присваивание, состояние и так далее.
Покажите, как это можно сделать.
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
27.01.2017, 15:53
Цитата Сообщение от Shamil1 Посмотреть сообщение
ООП никак нельзя имитировать ни в процедурных,
Аж настолько нельзя что первая реализация плюсов была препроцессором которая конвертировала код в С который чисто процедурный язык.
0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
27.01.2017, 16:01
Цитата Сообщение от asmquest Посмотреть сообщение
Покажите, как это можно сделать.
Присваивание.

Пусть у нас есть функция:
F#
1
let f x y = (x + 2*y) * (x + 2*y)
Нам не хочется два раза вычислять (x + 2*y). Поэтому мы вычисляем это выражение один раз и передаём в качестве аргумента в другую функцию, которая выполняет оставшиеся вычисления:
F#
1
2
3
4
let f2 x y =
    let g z = 
        z * z
    g (x + 2*y)
Каждый раз выписывать определение для новой функции может быть утомительно, поэтому, для удобства, создатели языка добавляют синтаксический сахар. Теперь программист может записать этот же код в более удобном (с точки зрения создателей языка) виде:
F#
1
2
3
let f3 x y =
    let z = x + 2*y
    z * z
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
27.01.2017, 16:05
Цитата Сообщение от Shamil1 Посмотреть сообщение
В каждом языке оно либо есть, либо его нет
ООП это не более чем способ группировки функций по применимости к наборам данных. В процедурных языках с такой группировкой нет никаких проблем, только контролировать непротиворечивость создаваемых наборов нужно вручную. В ООП языках этим контролем занимается компилятор. Посему и кажется что принципы Лисков которые заложены в этот контроллер компилятора устарели. По другому компилятор ООП языка сделать просто не даст, а соответсвенно столкнуться на практике с таким нарушением невозможно, пока не начинаешь лисапедить ООП нештатными (читай легаси процедурными) средствами.
0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
27.01.2017, 16:22
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Аж настолько нельзя что первая реализация плюсов была препроцессором которая конвертировала код в С который чисто процедурный язык.
Насколько я знаю, первая реализация плюсов ("Си с классами") была транслятором, перерабатывающим исходный код Си с классами в исходный код простого Си.
Транслятор назывался cfront.
Необходимость транслятора была вызвана тем, что препроцессор не справлялся. ("The preprocessor did not understand all of the language and much of the code was written via translations.")

Добавлено через 11 минут
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
ООП это не более чем способ группировки функций по применимости к наборам данных.
Вы путаете Объектно-Ориентированное Программирование с Основанным-На-Объектах Программированием.
Для ООП нужно наследование. Нельзя имитировать наследование группировкой функций.

Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Посему и кажется что принципы Лисков которые заложены в этот контроллер компилятора устарели. По другому компилятор ООП языка сделать просто не даст, а соответсвенно столкнуться на практике с таким нарушением невозможно, пока не начинаешь лисапедить ООП нештатными (читай легаси процедурными) средствами.
Компиляторы большинства (всех?) ОО языков позволяют нарушить Принцип Лисков. Для этого достаточно в перегрузке метода/свойства делать не то же самое по-другому, а что-нибудь совсем другое.
Например, пронаследовать Квадрат от Прямоугольника и в методе ЗадатьШирину менять Ширину и Высоту.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.01.2017, 16:22

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
140
Ответ Создать тему
Новые блоги и статьи
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
День 5 из 28: Codex подсказывает следующий запрос
and_y87 12.10.2026
9 октября 2026 года OpenAI запустила бету Composer predictions — подсказок следующего сообщения в текущем диалоге Codex. Это помощь с формулировкой запроса, а не автоматическое продолжение задачи. . . .
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
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
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru