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

SOLID принципы

23.01.2017, 17:55. Показов 17516. Ответов 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
1980 / 836 / 115
Регистрация: 01.10.2012
Сообщений: 5,208
Записей в блоге: 2
29.01.2017, 11:48
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от asmquest Посмотреть сообщение
Эту хрень я тоже полистал только сейчас..
Ну почему хрень? Может там чего-то и есть мудрого - хз. НО: неясно что я должен делать? Просто так, читать "подряд", надеясь что осознаю концепции и.т.п.? Сам ненавижу эту тупую отговорку "нет времени", но ведь так - вот сейчас надо импорт дописать, уже давно должно быть готово. Почему я должен воспринимать ту или иную книгу как предмет тщательного изучения? Какие к этому основания или мотивы? Не вижу "цели". Разрабатывать свой язык - ну этим я точно заниматься не буду.
0
Заблокирован
29.01.2017, 12:29
Igor3D, мотивы могут быть в том, что затраченные усилия и время служат инвестициями в будущее, например, Вы не будете решать задачу так, как решил бы ее Вася Пупкин, стандартно, идиоматично Вашему языку и шаблонам принятым в нем, а найдете стократно более эффективное решение.
0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
29.01.2017, 14:36
Цитата Сообщение от Igor3D Посмотреть сообщение
Не слыхал ни о первой ни о второй. Для интереса открыл первую. Ну все как обычно. Длииинное оглавление и введение. Ладно. Сначала рассказывают что (оказывается) есть переменные, ф-ции, списки, объекты. Примеры в псевдокоде. Ну хорошо. Дальше почему-то начинают рассматривать вещи из multi-threading (concurrency, atomic). На этом мой энтузиазм иссяк. В общем, как всегда - полистал и закрыл.
Нет, не то чтобы я "бравирую безграмотностью", но полагаю что подавляющее большинство точно так же пролистывает все эти книги "по диагонали". Возможно там и есть глубокие вещи которых я не знаю - но кому ж охота до них докапываться, а главное - зачем?
Насколько я понял, Вы Предисловие пропустили и сразу начали листать первую главу, которая называется "Введение в понятия программирования" (Introduction to Programming Concepts).

В этой главе авторы знакомят читателя с основными понятиями - функции, списки, потоки, объекты и т.д. (поэтому списки оказались рядом с потоками). Подробно эти понятия объясняются в последующих главах. В частности concurrency посвящено три главы (4, 5 и 8).

В этой книге нет примеров на псвдокоде. Все примеры там на языке Oz. Вы можете запустить их, например, в ideone.
Насчёт "зачем" (если Вам интересно) прочитайте Предисловие.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
30.01.2017, 16:49
Цитата Сообщение от Shamil1 Посмотреть сообщение
ООП никак нельзя имитировать ни в процедурных, ни в функциональных языках. В каждом языке оно либо есть, либо его нет. Ничто не мешает добавить ООП (наследование) в функциональный язык.
расскажите это сишникам,
который на чистой сишечке велосипедят ооп - только в путь.

Добавлено через 10 минут
Цитата Сообщение от ht1515 Посмотреть сообщение
Инъекция зависимостей и инверсия синонимы?
там же по вашей же ссылочке всё написанно:

инъекция - одна из реализаций инверсии))
0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
30.01.2017, 16:57
Цитата Сообщение от hoggy Посмотреть сообщение
расскажите это сишникам,
который на чистой сишечке велосипедят ооп - только в путь.
Вы путаете Объектно-Ориентированное Программирование с Основанным-На-Объектах Программированием.
Для ООП нужно наследование. Нельзя имитировать наследование на чистой сишечке.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
30.01.2017, 17:06
Цитата Сообщение от Shamil1 Посмотреть сообщение
Вы путаете Объектно-Ориентированное Программирование с Основанным-На-Объектах Программированием.
ничего я не путаю.

оо-программирование,
это программирование с применением оо-парадигмы.
собственно, это - единственное требование.

на сишке ничего не мешает проэмулировать и наследование,
и полиморф.

а вообще, сама по себе оо-парадигма основана на процедурной парадигме.
без процедурщины ооп просто не может существовать.

это же такая банальщина и очевидность
0
шарпопочитатель
 Аватар для ht1515
59 / 26 / 7
Регистрация: 31.01.2010
Сообщений: 1,035
30.01.2017, 17:22  [ТС]
Ооп это типо ии.
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
30.01.2017, 17:36
Ооп это типо ого-го!
0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
30.01.2017, 19:23
Цитата Сообщение от hoggy Посмотреть сообщение
на сишке ничего не мешает проэмулировать и наследование
Каким образом?

Цитата Сообщение от hoggy Посмотреть сообщение
оо-программирование,
это программирование с применением оо-парадигмы.
собственно, это - единственное требование.
оо-парадигма подразумевает использование наследования
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
30.01.2017, 21:35
Цитата Сообщение от hoggy Посмотреть сообщение
а вообще, сама по себе оо-парадигма основана на процедурной парадигме.
без процедурщины ооп просто не может существовать.
Точно так же как развитием процедурной парадигмы ООП может быть и развитием ФП-парадигмы. В любом случае все механизмы ООП-парадигмы это всего лишь способ группировки функций по их применимости к наборам данных.
0
шарпопочитатель
 Аватар для ht1515
59 / 26 / 7
Регистрация: 31.01.2010
Сообщений: 1,035
30.01.2017, 21:38  [ТС]
На си пишет линус торвольдс например. И многие линуксоиды, они ваще сипипи не уважают. Гип глейд делает. А ядре линукса дофига гоуту.. вот так
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
30.01.2017, 22:09
Цитата Сообщение от Shamil1 Посмотреть сообщение
Каким образом?
гляньте на дизайн gtk+, для примера.

всё то, что оо-язык предоставляет из коробки,
благодаря технологиям компиляторов,
в сишке велосипедируется вручную.
тоже наследование - при помощи макросов.
синтаксически это конечно отличается от дизайна какого нибудь с++,
но смысл тот же.

вообще, ключевая мысль:
оо-парадигма базируется на процедурной парадигме.

любой оо-код можно представить в виде процедурной парадигмы.
а вот наоборот - нельзя.

без процедурной парадигмы существование ооп - невозможно.

и вот это:

C++
1
2
some obj;
obj.work();
ни что иное, как:

C++
1
2
3
4
5
// обычная свободная функция
// которая первым аргументом принимает объект
// (кусок памяти)
// над которым нужно произвести манипуляции
work(obj);
пройдём ещё немножко в этом направлении,
и сможем сделать так:
C++
1
2
3
4
5
6
7
8
some obj.
//подписались на сообщение
obj.subscribe<message>(); 
...
 
//теперь из любой точки программы
//можно послать объекту сообщение
send_message( message{"hello"} );
а под капотом - обычный полиморфизм,
который реализуется при помощи обычных свободных функций
самой что ни на есть процедурной парадигмы.

и разница между сишкой и каким нибудь "тру-ооп-языком" заключается лишь в том,
что в первом случае всё делается вручную.
а во втором - куча синтаксического сахара.

и вот сейчас будет главный тезис:
оо-парадигма, не что иное,
как эволюция развития процедурной парадигмы.

считайте, что ооп - наследник процедурщины.

Цитата Сообщение от Shamil1 Посмотреть сообщение
оо-парадигма подразумевает использование наследования
нет, не предполагает.

"парадигма" вообще - это система взглядов и способа абстрагирования.
в контексте оо-программирования:
смотреть в исходный код,
и видеть не просто какие то закорючки,
а объекты - сущности,
наделенные свойствами и умениями.

взять какой нибудь к примеру std::string.
вполне себе полноценный самостоятельный механизм.
ну или там, std::vector какой нибудь.

они и не нуждаются ни в каком наследовании,
но от этого они не перестают быть механизмами.

я хочу сказать, что наследование, полиморфизм - это конечно киты,
на котором держится развитое оо-программирование.
но это не является основополагающим для самой парадигмы.

Добавлено через 5 минут
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
может быть и развитием ФП-парадигмы
нееет.

вот здесь интересный момент:
у них есть что-то общее.
понятие функции, например.
но сама фп-парадигма в корне отличается от процедурщины.
если рассматривать фп в контексте с++,
то это - язык метапрограмминга.
полный по тьюрингу,
но он в корне отличается и от привычной сишной процедурщины,
и от привычной приплюснутой системы классов.

собственно, главная проблема новичков с шаблонами:
они привыкли думать в оопешном стиле.
а что бы освоить шаблоны, нужно думать в фпшном стиле.

проблема новичков с Александресску - ребятам тупо трудно перестроить мышление.
Алесандресску забыл сказать,
что с шаблонами нужно думать по другому.

я хочу сказать, что фп, и процедурщина - вообще не совместимые парадигмы.
там нужно по разному думать.
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
30.01.2017, 22:23
Цитата Сообщение от hoggy Посмотреть сообщение
я хочу сказать, что фп, и процедурщина - вообще не совместимые парадигмы.
Ключем тут является то что ФП рассматривает функцию как объект первого класса. Без внесения такого довеска в процедурную парадигму реализация ООП (как минимум рантайм-полиморфизма) средствами процедурного программирования невозможна, потому как объект это структура содержащая список полей и методов их обработки.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
30.01.2017, 22:46
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Без внесения такого довеска в процедурную парадигму реализация ООП (как минимум рантайм-полиморфизма) средствами процедурного программирования невозможна, потому как объект это структура содержащая список полей и методов их обработки.
бред какой то
0
Заблокирован
30.01.2017, 22:50
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Ключем тут является то что ФП рассматривает функцию как объект первого класса.
ничего подобного. Ф-ция как объект первого класса есть в значительном количестве чистейших ООП-языков. Это никакого отношения к ФП не имеет.
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
30.01.2017, 22:54
Цитата Сообщение от hoggy Посмотреть сообщение
бред какой то
Для реализации динамической диспетчеризации нужны указатели на функции. т.е функция должна быть объектом первого класса.

Добавлено через 1 минуту
Цитата Сообщение от asmquest Посмотреть сообщение
Ф-ция как объект первого класса есть в значительном количестве чистейших ООП-языков.
А что значит чистейших? Как только в языке появляются указатели на функции так функцию сразу же можно рассматривать как объект первого класса, т.е. имеем некоторую домесь ФП.
0
Заблокирован
30.01.2017, 23:00
Цитата Сообщение от hoggy Посмотреть сообщение
вот здесь интересный момент:
у них есть что-то общее.
понятие функции, например.
Не надо путать функцию в виде процедуры и ф-цию в ФП-смысле. Это совершенно разные вещи.
Цитата Сообщение от hoggy Посмотреть сообщение
если рассматривать фп в контексте с++,
то это - язык метапрограмминга.
полный по тьюрингу,
очень смешно сравнивать метапрограммирование и фапэ. В фапэ как раз полностью отсутствуют средства метапрограммирования, это одна из ключевых особенностей ФП.
Что касается шаблонов, то это можно конечно, назвать метапраграммированием, с натяжкой. Это макросистема, переписывание кода препроцессором. С++ де факто сам представляет из себя препроцессор си, хотя сейчас уже таковым не является.

Но переписывание шаблонов препроцессором -- это слишком убогий вид метапрограммирования. Настоящее метопрограммирование немыслимо без интроспекции и рефлексии, свойств, которыми в полной мере сейчас обладают только некоторые ООП-языки, и некоторые лиспы.

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

Добавлено через 1 минуту
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Как только в языке появляются указатели на функции так функцию сразу же можно рассматривать как объект первого класса, т.е. имеем некоторую домесь ФП.
ну, в принципе, да, так оно и есть. О чем я и говорю, этот критерий слишком смешон.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
30.01.2017, 23:25
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Для реализации динамической диспетчеризации нужны указатели на функции. т.е функция должна быть объектом первого класса.
на сишке нет никаких "объектов первого класса".
и это не мешает ей манипулировать указателямии на функции.
что за бред?

вы вообще понимаете,
как устроен полиморфизм на низком уровне?

как устроенна технология COM ?

это всё - сишка чистой воды.

Цитата Сообщение от asmquest Посмотреть сообщение
Не надо путать функцию в виде процедуры и ф-цию в ФП-смысле. Это совершенно разные вещи.
я вроде бы не давал повода так думать.

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

Цитата Сообщение от asmquest Посмотреть сообщение
Это макросистема, переписывание кода препроцессором.
бред. полное незнание основ с++

Цитата Сообщение от asmquest Посмотреть сообщение
интроспекции и рефлексии
в плюсы в грядущие стандарты завезут статическикую рефлексию.

хотя в принципе... не считая сериализации допустим,
что уже сейчас нельзя сделать,
используя существующую технологию метапрограмминга?
0
Заблокирован
30.01.2017, 23:32
Цитата Сообщение от hoggy Посмотреть сообщение
статическикую рефлексию
статическая рефлексия -- это оксюморон.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
30.01.2017, 23:34
Цитата Сообщение от asmquest Посмотреть сообщение
статическая рефлексия -- это оксюморон.
аха, с точки зрения человека,
который не умеет в метапрограмминг.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.01.2017, 23:34

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
180
Ответ Создать тему
Новые блоги и статьи
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
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. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru