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

SOLID принципы

23.01.2017, 17:55. Показов 17645. Ответов 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
01.02.2017, 00:39
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от asmquest Посмотреть сообщение
можно
А кто и когда проверит тот факт что запихиваемое в этот массив имеет подходящий интерфейс включения и выключения?
0
Заблокирован
01.02.2017, 00:42
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
А кто и когда проверит тот факт что запихиваемое в этот массив имеет подходящий интерфейс включения и выключения?
если нужна проверка, она реализуется вручную. Но только в рантайме
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
01.02.2017, 00:47
Цитата Сообщение от asmquest Посмотреть сообщение
если нужна проверка, она реализуется вручную.
Она нужна всегда иначе ничего работать не будет. Запихиваем мы один раз и в компайл тайме можем проверить имеет ли оно необходимый интерфейс или нет. Зачем пилить все это на каждый пук в ручную и опять же проверять на каждый пук в рантайме, если все эти проверки может сделать компилятор в компайл тайме, а без подобной проверки код будет неработоспособным? С какой стороны у скриптовой версии профит в эффективности выполнения и разработки? Насколько вижу одни лузы.
0
Заблокирован
01.02.2017, 00:54
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Зачем пилить все это на каждый пук в ручную и опять же проверять на каждый пук в рантайме, если все эти проверки может сделать компилятор в компайл тайме, а без подобной проверки код будет неработоспособным?
эта гребаная проверка компилятором налагает на язык катастрофические ограничения, превращая язык в полнейшее убожество. Мало того, что приходится плясать с бубнами при создании разнотиповых структур, самое главное, это напрочь отсекает все возможности манипуляций сущностями в рантайме, невозможно уже даже тупо изменить интерфейс, не говоря о чем то серьезном. Это уже вообще не ООП, потому что в ООП не программист, а именно программы манипулируют программами, в этом вся сила. А иначе это очередной сраный алгол под личиной ООП.

На практике, эти проверки, как правило, вообще не нужны.
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
01.02.2017, 01:01
Цитата Сообщение от asmquest Посмотреть сообщение
эта гребаная проверка компилятором налагает на язык катастрофические ограничения, превращая язык в полнейшее убожество.
Эта проверка позволяет проверить наличие интерфейса на этапе компиляции и гарантировать что в объекте содержится бульдог который имеет команду голос а не носорог который ее не имеет и в результате когда будет подана команда голос обрушит программу. Причем гарантировать это без каких либо действий программиста. А языки которые этого не умеют на самом деле и есть убожество. Хотя бы потому как убожеством являются рантайм проверки что там за тип и что с ним можно делать, а называть подобный подход ООП вообще маразм и слабоумие, т.к. главное преимущество и назначение ООП - избавится от таких рантайм-проверок за счет динамической диспетчеризации методов. А лепить динамическую диспетчеризауию чтобы проверять потом есть ли метод или нет не имеет вообще никакого смысла.
0
Заблокирован
01.02.2017, 01:10
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Эта проверка позволяет проверить наличие интерфейса на этапе компиляции и гарантировать
бла бла бла, свидетели святой проверки. Знаем мы, какое отношение проверка типов имеет отношение к корректности программы. чуть менее чем никакое.

Ключевым моментом является то, что язык с проверкой типов -- это слабый язык. На этом все.

Добавлено через 4 минуты
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
наличие интерфейса на этапе компиляции
а то я без сраного тайпчекера не знаю, какой я интерфейс пилю, он умней меня, ага.
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
01.02.2017, 01:11
Цитата Сообщение от asmquest Посмотреть сообщение
Это уже вообще не ООП, потому что в ООП не программист, а именно программы манипулируют программами, в этом вся сила. А иначе это очередной сраный алгол под личиной ООП.
ООП потому и ООП что работа с объектами идет через интерфейс, не заморачиваясь о реализации этого интерфейса конкретным объектом. Вы же предлагаете менять интерфейсы в рантайме что как раз и тянет за собой кучу выяснений со стороны обрабатующего кода что там за нтерфейс. Это маразм называется.
Цитата Сообщение от asmquest Посмотреть сообщение
Мало того, что приходится плясать с бубнами при создании разнотиповых структур
Вот как раз ООП эту пляску с бубном и делает ненужным. За счет того что эти разноплановые структуры имеют единый неизменный интерфейс управления ими. При этом не нужно рассматривать объект как пассивное хранилище данных. Это автономная сущность которая способна себя обрабатывать сама. При таком подходе для решения всех проблем разнородности структур данных таким структурам достаточно иметь только единый неизменный интерфейс через который дирижер (использующий их код) может подать команды произвести ту или иную обработку.
Вы же предлагаете вместо этих единых интерфейсов устроить кашу которую еще непонятно как необходимо разгребать извне, исключительно за счет проверок со стороны дирижера. А это есть не что иное как скатывание обратно в процедурно-структурную кашу а не ООП.
0
Заблокирован
01.02.2017, 01:12
Fulcrum_013, короче, я не собираюсь тут проповедовать что-либо, равно как и разубеждать адептов

Хотите понимать ООП, смотрите в первоисточники, а мантры обсуждать нет смысла.
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
01.02.2017, 01:18
Цитата Сообщение от asmquest Посмотреть сообщение
а то я без сраного компилятора не знаю, какой я инерфейс пилю, он умней меня, ага.
Он всего лишь проверяет что в данную переменную присваивается объект имеющий заданный этой переменной интерфейс. Что позволяет не разгребать что там именно за реализация интерфейса.

Добавлено через 5 минут
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
При этом не нужно рассматривать объект как пассивное хранилище данных
Видел одного товарисча который начитался книг именитых маразматиков проповедующих бред подообный вашему. Эти именитые маразматики докатились до аксиомы что тру-объект это пассивное хранилище данных и в тру-ООП объект должен обрабатываться исключительно извне. Вот вы тоже потихоньку катитесь именно к такому маразму.
Отрезвление наступило после подсчета количества сравнений "что там за тип" при обработке которое нужно сделать для обработки последовательности. N^2 у этих маразматиков против 0 в реальном ООП с проверкой типов при компиляции.
0
Заблокирован
01.02.2017, 01:23
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Что позволяет не разгребать
да никто ничего не разгребает. Основная проблема программистов в том, что они не способны справляться с растущей сложностью. Ошибки типов, на этом фоне -- вообще ничто. А в качестве оправдания своей творческой импотенции, постоянно находятся какие то нелепые словечки, то недостаточно быстро, то недостаточно типобезопасно. Основная проблема в том, чтобы написать программу, смочь это сделать, а потом хоть оптимизируй, хоть типизируй. об этом как правило помалкивают. А как только программа, таки написанна, об оптимизациях и типизациях почему-то внезапно все забывают.

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

Добавлено через 3 минуты
Цитата Сообщение от asmquest Посмотреть сообщение
это как раз от типодрочеров чаще всего исходит
Та нет. Это как раз от динамиков. Потому как если объект автономный то для управления им нужен как раз строго определенный интерфейс. А вот с динамической кашей вместо интерфейса именно к тому и идет что дирижер не знает как дерижировать пока не разгребет по данным чем и как там можно дережировать. В пределе приходим к пассивным хранилищам как в процедурщине и функциональщине от которых и ушло ООП в сторону активных сущностей.
0
Заблокирован
01.02.2017, 01:32
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
то мало того что это может оказаться головняком на недели отладки
все это фантазии статик-фанбоев, для оправдания убогости плюсов и прочих хаскелей, такие ошибки на практике возникают крайне редко, и если есть голова, нормально обнаруживаются. Гораздо трудней отловить ошибки не связанные с типами, в плюсовой лапше, где из-за убогости языка, код растет экспоненцеально, и быстро превращается в помойку, которую никто не в силах разгрести.
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
01.02.2017, 01:41
Цитата Сообщение от asmquest Посмотреть сообщение
такие ошибки на практике возникают крайне редко,
Ну не надо рассказывать сказки. Сталкивался с тем что то что в плюсах компилятор отлавливает в JavaScript или PHP попробуй найди где в этот чертов массив строка вместо инта сунулась, и какого лешего она вообще строкой а не интом оказалась.
Цитата Сообщение от asmquest Посмотреть сообщение
Гораздо трудней отловить ошибки не связанные с типами, с плюсовой лапше, где из-за убогости языка, код растет экспонцеально, и быстро превращается в помойку, которую никто не в силах разгрести
Существуют два типа языков - которые никто не ругает и на которых никто не пишет. А лапша она у криворуких везде лапша какой язык не дай. В плюсах кстати при правильной разработке код очень часто в объеме не увеличивается а уменьшается за счет выделения более высокоуровневых абстракций при доделке нового функционала.
Мало того ООП язык в сборщике мусора не просто не нуждается, а сборщик мусора ООП языкам категорически противопоказан. Потому как сам по себе мусора генерировать не должен как к примеру С++, а по какому принципу организовывать уборку явно распределяемых программистом объектов виднее программисту исходя из сути задачи/назначения объектов. А встроенный мусоросборник и отсутствие деструкторов в скриптовых языках делают задачу создания иерархий автономных объектов вообще нереальной. К примеру объект не может самостоятельно удалится.
0
Заблокирован
01.02.2017, 01:49
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
К примеру объект не может самостоятельно удалится.
может он удалится самостоятельно, в таких языках удаляется ссылка на объект. удалил ссылку -- считай что удалил объект, разницы нет
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
01.02.2017, 03:22
Цитата Сообщение от asmquest Посмотреть сообщение
в таких языках удаляется ссылка на объект
Откуда объект о ссылке на него знает? А для того чтобы знал и остальным не надо было знать что он знает нужна не просто ссылка а двунаправленный смартпоинтер который мусоросборнику головняка и тормозов ой как добавит. А если мусоросборника нету все один раз строк в 200 разруливается. В результате реально слабые ссылки и реально слабовладеющие контейнеры (при любом откуда бы оно не было сделано удалении объекта все ссылки на него тут же обнуляются и из всех контрейннеров/списков обработки вычищаются). Мусоросборник скриптовых языков в таких делах не помощь а только помеха. Потому как рассчитаны эти скриптовые языки в исходе были на форматирование ввода вывода между клиентом и сервером БД, при котором контекст выполнения живет только время генерации страницы. а соответсвенно и подвисшие ссылки в них лечили фактически утечкой памяти которая недолгая в виду недолгой жизни самого контекста памяти. Потом дальше начали такую концепцию развивать работая по принципу "объект не нужен когда на него нет ссылок", которая пригодна разве что для вебхеллоувердов. А для автономных иерархий объектов актуальна концепция "объект не нужен когда логика его модели не допускает его дальнейшее существование в независимости от количества активных ссылок". при таком подходе ссылки на объект должены быть незамедлительно удалены из всех списко вобработки в которых он числится а все просто ссылки обнулены. И самое удобное место где хранить список ссылающихся при этом - сам объект, а самое удобное место в котором производить подобную чистку - деструктор. При этом если учесть возможность того что ссылающийся может удалиться раньше объекта, то в языках с мусоросборником вообще начинаются жутики по по поводу обеспечения установления/разрыва связи на оповещение об удалении.

Добавлено через 1 час 16 минут
Цитата Сообщение от asmquest Посмотреть сообщение
Ключевым моментом является то, что язык с проверкой типов -- это слабый язык.
Во всех современных языках со статической типизацией есть библиотечные средства для работы с динамической типизацией. Их даже используют изредка. Например для работы с БД и т.п. а так же всяким криворуким бредом типа JSON и XML. Но не более. Потому как в 99% случаев динамическая типизация дает исключительно гемморой а не профит, а соответственно ее использование оправдано там и только там где структура данных неизвестна на момент компиляции. А такие случаи по большому счету исчерпывается вышеперечисленными задачами.
Посему язык с динамической типизацией по определению предназначен не более чем для хеллоувердов, а для решения серьезных комплексных задач средств просто напросто не имеет.
0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
01.02.2017, 17:29
Цитата Сообщение от asmquest Посмотреть сообщение
http://wiki.c2.com/?AlanKaysDefinitionOfObjectOriented
Документ по ссылке не является серьёзным источником.
Кто-то пересказывает своими словами, что Алан Клей когда-то сказал про ООП неизвестно в каком контексте. Эти слова относятся к тому, как было реализовано ООП в Смолтолке. Где гарантия, что Алан Клей считает, что эта реализация самая правильная?
Более того, по ссылке вообще нет описания ООП. Только несколько принципов без разъяснений, что они означают. Да те были сформулированы очень давно. Алан Клей с тех пор мог поменять своё мнение.

Если у Вас не секта адептов тру ооп, то должны быть учебники/книги/статьи и так далее. Поэтому вопрос остаётся:

Где можно почитать про настоящее ООП?

Добавлено через 8 минут
Цитата Сообщение от asmquest Посмотреть сообщение
Хотите понимать ООП, смотрите в первоисточники, а мантры обсуждать нет смысла.
Вы до сих пор не привели ни одной ссылки на первоисточник.

Добавлено через 3 минуты
Цитата Сообщение от asmquest Посмотреть сообщение
На практике, эти проверки, как правило, вообще не нужны.
Чтобы некорректно написанная программа могла положить всю систему?

Добавлено через 3 минуты
Цитата Сообщение от asmquest Посмотреть сообщение
то уже вообще не ООП, потому что в ООП не программист, а именно программы манипулируют программами, в этом вся сила.
Об этом не было ни слова даже в тех тезисах, на которые Вы дали ссылку.

Добавлено через 8 минут
Цитата Сообщение от asmquest Посмотреть сообщение
Ключевым моментом является то, что язык с проверкой типов -- это слабый язык. На этом все.
На самом деле в научном мире сейчас наблюдается прямо противоположная тенденция. Предпочтение отдаётся языкам со статической типизацией. В языки с динамической типизацией добавляют команды "включить проверку типов". Учёные изобретают новые типы данных, позволяющие всё больше ошибок отлавливать на этапе компиляции.

Несколько примеров (из TPL):

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

Компилятор ML Kit с помощью мощного алгоритма вывода регионов (region inference) заменяет большинство вызовов сборщика мусора (а иногда даже все вызовы) операциями управления памятью в стеке.

Есть даже типы (dependent types), позволяющие выход за границы массива проверять во время компиляции.
0
Заблокирован
01.02.2017, 19:21
Цитата Сообщение от Shamil1 Посмотреть сообщение
На самом деле в научном мире сейчас наблюдается
деградация. Это касается не только программирования.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
01.02.2017, 20:23
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
а так же всяким криворуким бредом типа JSON и XML
Ну про XML согласен, но какие некриворукие альтернативы JSON существуют?
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
01.02.2017, 22:05
Цитата Сообщение от asmquest Посмотреть сообщение
Ключевым моментом является то, что язык с проверкой типов -- это слабый язык. На этом все.
динамика реализуется через статику.
нужно либо совсем не понимать природы статики,
либо быть совсем упоротым,
что бы не осознавать,
какую цену приходится платить за динамику.

и вопрос:
а нахрена она вообще нужна?
остается открытым.
0
Заблокирован
01.02.2017, 22:08
Цитата Сообщение от hoggy Посмотреть сообщение
динамика реализуется через статику.
продолжайте чудить, не хватает веселья сегодня.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.02.2017, 22:08

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
260
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
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
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение 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 и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru