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

SOLID принципы

23.01.2017, 17:55. Показов 18081. Ответов 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,242
Записей в блоге: 2
29.01.2017, 11:48
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от asmquest Посмотреть сообщение
Эту хрень я тоже полистал только сейчас..
Ну почему хрень? Может там чего-то и есть мудрого - хз. НО: неясно что я должен делать? Просто так, читать "подряд", надеясь что осознаю концепции и.т.п.? Сам ненавижу эту тупую отговорку "нет времени", но ведь так - вот сейчас надо импорт дописать, уже давно должно быть готово. Почему я должен воспринимать ту или иную книгу как предмет тщательного изучения? Какие к этому основания или мотивы? Не вижу "цели". Разрабатывать свой язык - ну этим я точно заниматься не буду.
0
Заблокирован
29.01.2017, 12:29
Igor3D, мотивы могут быть в том, что затраченные усилия и время служат инвестициями в будущее, например, Вы не будете решать задачу так, как решил бы ее Вася Пупкин, стандартно, идиоматично Вашему языку и шаблонам принятым в нем, а найдете стократно более эффективное решение.
0
Модератор
Эксперт функциональных языков программирования
3142 / 2290 / 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
Модератор
Эксперт функциональных языков программирования
3142 / 2290 / 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
Модератор
Эксперт функциональных языков программирования
3142 / 2290 / 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
Ответ Создать тему
Новые блоги и статьи
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru