|
шарпопочитатель
59 / 26 / 7
Регистрация: 31.01.2010
Сообщений: 1,035
|
|
SOLID принципы23.01.2017, 17:55. Показов 15408. Ответов 359
Метки нет (Все метки)
всего 5 принципов:
1) srp - класс должен описывать только те характеристики, которые на объект из предметной области возложены. То есть либо кот, либо пес, котопес быть не может. 2) ocp - Писать надо классы так, чтобы их можно было легко расширить, но не изменять 3) Лисков - ??? 4) делайте много маленьких интерфейсов, один дольшой интерфейс это плохо. Так как рефакторинг усложняется... 5) Инверсия зависимостей. Типо композицию поменяйте на агрегацию Я не понимаю принцип Лисков. Можете объяснить популярно?
0
|
|
| 23.01.2017, 17:55 | |
|
Ответы с готовыми решениями:
359
Нелогичные принципы программирования SOLID Нарушен ли solid ? |
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
| 23.01.2017, 21:38 | |
|
1
|
|
|
шарпопочитатель
59 / 26 / 7
Регистрация: 31.01.2010
Сообщений: 1,035
|
|
| 23.01.2017, 21:50 [ТС] | |
|
А можно кратко и своими словами, как я?
Добавлено через 55 секунд Почему неверно? Множество маленьким специализированных интерфейсов, вместо одного большого универсального.
0
|
|
|
Заблокирован
|
|
| 23.01.2017, 23:33 | |
|
Принцип лисков заключается в том, грубо говоря, что если существуют контракты для класса, то они должны соблюдаться и для всей цепочки его подклассов. Иными словами, клиент должен иметь возможность обратится к любому подклассу абстрагируясь от того, класс это или подкласс.
Но все эти принципы солид -- это туфта для лохов. Они могут быть полезны в частных случаях, но надо исходить из задачи, не надо ничего абсолютизировать. Надо еще учитывать, что все они разрабатывались для быдло--ооп, поэтому, в основном, идиоматичны именно в его контексте. Добавлено через 12 минут Можно еще проще сформулировать принцип лисков: вся цепочка наследования должна повторять интерфейс верхнего класса(что не исключает расширения интерфейса подклассов, но запрещает изменение интерфейса. Изменение реализации допускается)
1
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||
| 24.01.2017, 00:03 | |||
|
интерфейсов должно быть ровно столько, сколько необходимо. и чем меньше их нужно - тем лучше.
0
|
|||
|
Модератор
3137 / 2284 / 469
Регистрация: 26.03.2015
Сообщений: 8,888
|
|||
| 24.01.2017, 00:15 | |||
|
Например, у нас модуль с Кнопкой зависел от модуля с Лампочкой, потому что Кнопка включала Лампочку. Мы переделали Кнопку так, что он включает любой Включабельный объект. Теперь модуль с Лампочкой зависит от модуля с Кнопкой, потому что Лампочка реализует интерфейс Включабельный. Зависимость теперь направлена в противоположную сторону - мы её развернули. Пятый принцип заключается в том, что конкретные классы не должны зависеть от конкретных классов. Но могут зависеть от абстрактных классов и интерфейсов. После разворота зависимости в предыдущем примере этот принцип соблюдается.
0
|
|||
|
Заблокирован
|
|||
| 24.01.2017, 00:44 | |||
|
Вообще говоря, лампочка всегда будет зависеть от кнопки, а не наоборот, потому что лампочка (как и включабельный) -- это пассивная сторона. Добавлено через 12 минут Shamil1, если исходить из формулировки в википедии(не настаиваю): Формулировка: Модули верхних уровней не должны зависеть от модулей нижних уровней. Оба типа модулей должны зависеть от абстракций. Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций. Инверсия зависимости, это какое-то чрезжопное название простейшей вещи: при построении иерархии следует двигаться от общего к частному, но не наоборот. Собственно говоря, каким боком тут слово "инверсия" -- вообще непонятно, тем не менее это явно не о том, о чем вы говорите. Ваш пример -- это всего лишь пример обобщения, если я его правильно понял.
0
|
|||
|
шарпопочитатель
59 / 26 / 7
Регистрация: 31.01.2010
Сообщений: 1,035
|
|
| 24.01.2017, 11:05 [ТС] | |
|
Спасибо) асмкуест, вот такое мне объяснение и надо было) чет принцип лисков фуфло какое-то, то есть если в дерайвед классе я не переопределяю интерфейсную функцию, то я нарушил принцип... Ну хз
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||
| 24.01.2017, 12:09 | |||
|
потому что ни кнопка, ни лампочка вообще никак друг от друга не зависят. между ними вообще нет никаких взаимоотношений. Dependency Invertion вообще не об этом. его суть: конкретные детали ничего не должны знать о других конкретных деталях. все общение только через интерфейсы. деталь может зависеть только от интерфейса. например: есть некий клиент для работы с базой данных. у него есть кучка высокоуровневых методов аля: "получить список друзей персонажа", и тп. что бы реализовать свою функциональность, клиент внутри себя дергает коннектор к бд, делегируя ему более низкоуровневые запросы (например - sql) ну так вот, согласно DI, клиент ничего не должен знать о том, с какой на самом деле базой данных он работает. то бишь он не знает ни про какие коннекторы. знает лишь про интерфейс коннектора. что в теории позволяет поддерживать работу сразу с множеством различных бд а если кому то понадобится работать с клиентом, то максимум, что он должен о нём знать - его интерфейс. собственно, слепое и бездумное следование этому канону является причиной болезни под названием "ООП головного мозга". этот принцип жестко и яростно критикуется авторами многих именитых книг. например, Макконелл писал: "гибкость ради гибкости не нужна". гибкость нужна только по необходимости. а код должен быть максимально жёстким. и чем жёстче, тем проще в нем будет ориентироваться.
0
|
|||
|
шарпопочитатель
59 / 26 / 7
Регистрация: 31.01.2010
Сообщений: 1,035
|
|
| 24.01.2017, 12:23 [ТС] | |
|
Солид принципы фуфло, но на собеседованиях о них спрашивают ж ...
0
|
|
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||||
| 24.01.2017, 12:28 | ||||
|
Добавлено через 3 минуты
0
|
||||
|
14321 / 9411 / 1356
Регистрация: 21.01.2016
Сообщений: 35,480
|
||
| 24.01.2017, 13:06 | ||
|
0
|
||
|
Заблокирован
|
|
| 24.01.2017, 13:38 | |
|
Fulcrum_013, может Вы и правы относительно принципа, но, вообще говоря, рассуждения в стиле "этот знает о том", сами по себе порочны в корне. То что мы пишем в программе, это, по большому счету синтаксическая абстракция, и вопрос "кто кого включает" это вопрос соглашений. Если рассуждать подобным образом, Вы неизбежно скатитесь в идиотизм "распределения ролей". Реально ни выключатель ни лампочка ни "включабельные интерфейсы" ничего "не знают" друг о друге. Выключатель замыкает цепь, и он даже ничего не знает о том, что он что то замыкает, и замыкает он не сам себя, а замыкаем из-вне, а лампочка ничего не знает не только о выключателе, но и о цепи, к которой она подключена, и не имеет представления о тех физических процессах, которые происходят внутри нее при изменении ее состояний для внешнего наблюдателя
Задача не в том, чтобы воспроизвести какие то отношения зависимостей, а в том, чтобы создать удобный интерфейс для моделирования тех аспектов проблемы, которые для нас важны в конкретном случае.
1
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||
| 24.01.2017, 13:43 | ||||
|
принцип открытости/закрытости (Open-closed) выполните его, и проблем с расширяемостью не будет. куча классов ради классов. в таком коде вообще не понятно, кто делает настоящую (полезную работу)
0
|
||||
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||
| 24.01.2017, 13:45 | ||
|
0
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||
| 24.01.2017, 13:49 | ||
|
программист сегодня отвечает лишь на два единственных вопроса: кто о ком знает, и кто кем владеет. а вот рассуждения старой школы: "А не должно зависеть от Б" уже практически утратило свою актуальность. так например, паттерн "коллбек" (делегаты) позволяет кнопке вообще не знать ничего о том, что произойдёт при нажатии. не знать ни о лампочках, ни об интерфейсах лампочках. речь о полном отсутствии зависимостей. SOLID во многих своих аспектах банально устарел.
0
|
||
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||
| 24.01.2017, 13:51 | ||
|
0
|
||
|
Заблокирован
|
||
| 24.01.2017, 14:02 | ||
|
0
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||
| 24.01.2017, 14:27 | |||||||
|
что именно так и реализуется промышленный гуй в современном мейнстрим:
которые вместо простого делегата, предлагают фигачить 100500 интерфейсов на каждый чих, а затем 100500 же различных их наследников.
0
|
|||||||
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||
| 24.01.2017, 14:52 | ||
|
0
|
||
| 24.01.2017, 14:52 | |
|
Помогаю со студенческими работами здесь
20
Solid Works Api
Применение SOLID принципов Solid Works Api и C#
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2.
Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
|
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2.
Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом.
В. . .
|
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2.
Задача: отобразить спецтехнику, которая на данный момент находится в ремонте.
Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
|
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
|
|
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
|
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут
Суть:
- Группа наркоманов из 10 человек.
- Только один инфицирован ВИЧ.
- Колются одной иглой.
- Колются раз в день.
- Колются последовательно через. . .
|
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
|
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
|