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

SOLID принципы

23.01.2017, 17:55. Показов 17632. Ответов 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
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
01.02.2017, 22:12
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от asmquest Посмотреть сообщение
продолжайте чудить, не хватает веселья сегодня.
а это уже противоречие здравому смыслу.
0
Заблокирован
01.02.2017, 22:16
hoggy, если вы хотите сказать, что динамически типизированные языки реализуются обычно на статически-типизированных, то это не значит что динамика реализуется через статику. Никто не мешает динамически-типизированный язык реализовать на динамически-типизированном, или статически-типизированный на динамически-типизированном. То что текущие реализации таковы, продиктованно, как правило, соображениями производительности.
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
01.02.2017, 22:51
Цитата Сообщение от korvin_ Посмотреть сообщение
но какие некриворукие альтернативы JSON существуют?
Бинарные форматы. А еще лучше система RPS на автоматическом маршаллинге построенном на рефлешин-инфо.

Добавлено через 2 минуты
Цитата Сообщение от asmquest Посмотреть сообщение
Никто не мешает динамически-типизированный язык реализовать на динамически-типизированном,
CPU умеет только статически типизированными данные обрабатывать. Причем тип данных закодирован в номере инструкции. Соответсвенно любая динамическая типизация возможна исключительно как эмуляция средствами статической типизации.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
01.02.2017, 23:01
Цитата Сообщение от asmquest Посмотреть сообщение
если вы хотите сказать, что динамически типизированные языки реализуются обычно на статически-типизированных, то это не значит что динамика реализуется через статику. Никто не мешает динамически-типизированный язык реализовать на динамически-типизированном, или статически-типизированный на динамически-типизированном. То что текущие реализации таковы, продиктованно, как правило, соображениями производительности.
я хочу вам сказать, что вы вообще никак не реализуете динамику без статики.
динамика на динамике - это ещё один оверхед.
ещё одна прослойка.
самая первая динамика всё равно будет через статику.
и уже она будет отсасывать по эффективности у статики по полной.
0
Заблокирован
01.02.2017, 23:06
Цитата Сообщение от hoggy Посмотреть сообщение
самая первая динамика всё равно будет через статику.
а машинный код является статически-типизированным языком

Вообще, Вы оффтопите, о производительности речи не было в данной ветке. Прекратите
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
01.02.2017, 23:08
Цитата Сообщение от asmquest Посмотреть сообщение
а машинный код является статически-типизированным языком
чо за бред?

машинный код вообще является без типизированным.

статика позволяет его отлично оптимизировать.
в отличие от динамики,
которая в этом смысле сосет по полной.
0
Заблокирован
01.02.2017, 23:11
Цитата Сообщение от hoggy Посмотреть сообщение
машинный код вообще является без типизированным.
ух ты, а как же это сочетается с Вашим предыдущим утверждениям об "основах основ"?
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
01.02.2017, 23:13
Цитата Сообщение от hoggy Посмотреть сообщение
машинный код вообще является без типизированным.
Как это безтипизированным? Машинный код далеко не ассемблерные мнемоники. И отличается машкод от мнемоник именно тем что в машкодекоде тип (размер) операндов указан а в мнемониках нет, выводитcя из самих операндов в компайл тайме.
0
Заблокирован
01.02.2017, 23:15
hoggy, да и вообще, положа руку на сердце, статика считается производительной скорей по-традиции. На мелких синтетических тестах, примитивных сниппетах она все еще превосходит динамику, да и то, не так критично, но вот производительность сложного приложения в целом, где производительность обусловлена не столько быстротой выполнения, сколько архитектурой -- уже совсем другой вопрос. И этот вопрос становится еще более запутаным, когда речь идет о JIT-компиляции.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
01.02.2017, 23:18
Цитата Сообщение от asmquest Посмотреть сообщение
ух ты, а как же это сочетается с Вашим предыдущим утверждениям об "основах основ"?
молча. слегка можно поднапрячь мазги.
попробовать хоть раз попрограммировать в машинных кодах.

и осознать, что процедурный императив не имеет никакого отношения к типизации.

Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Как это безтипизированным? Машинный код далеко не ассемблерные мнемоники.
ага.
это просто циферки.

взял сишку.
забил чаровый массив циферкаме и привел к типу "указатель на функцию".

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

и запустил на выполнение!

так на сишке рулили и педалили деды в далекие времена,
когда ещё не было этих ваших питонов.

и что примечательно:
в этих циферках в массиве нет понятия типа. внезапно.
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
01.02.2017, 23:28
Цитата Сообщение от asmquest Посмотреть сообщение
И этот вопрос становится еще более запутаным, когда речь идет о JIT-компиляции.
Да какой бы компиляция не была. Во всех языках даже компилируемых в машкод работа с динамической типизацией значительно уступает по скорости статической типизации. Потому что операции со статической типизацией выполняются нативными инструкциями процессора. А для динамической предварительно нужна двойная диспетчеризация оператора. А это такая штука у которой исключительно низкая эффективность по определению, причем настолько низкая что подавляющее большинство ООП языков двойной диспетчиризации методов не имеет.
Кстати одна из причин почему нишу на которую претендовал смалтолк в кросс-платформенной разработке заняли другие JIT языки со статической типизацией. Типа Java, CX, C#

Добавлено через 4 минуты
Цитата Сообщение от hoggy Посмотреть сообщение
так на сишке рулили и педалили деды в далекие времена
Ага... было дело в прошлом тысячелетии... причем оно не просто куда то пилилось а со смыслой. И еще в разные проги само себя дописывало. Гоняли за это дело в универе ужасть как. Аж грозились справочники по асму и внутрянке дос отобрать.
Только тайпкасты указателей и типизацию операндов инструкции путать не надо, это две огромные разницы.
0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
01.02.2017, 23:35
Цитата Сообщение от asmquest Посмотреть сообщение
деградация. Это касается не только программирования.
Думаю, все уже поняли, что только Вам известна Истина... Не ясно, зачем Вы так тщательно скрываете источник своей осведомлённости.
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
01.02.2017, 23:36
Кстати и разница то статической и динамической типизации именно в том что при статической типы данных заданы инструкциями которые обрабатывают данные, в динамической тип задан в самих данных а код обработки на основе этих идентификаторов типов постоянно вангует какому именно набору инструкций все это добро на обработку перекинуть.
0
Заблокирован
01.02.2017, 23:37
Fulcrum_013, Вы все путаете. Все в любом случае компилируется в инструкции для процессора, хоть в динамике хоть в статике. JIT отличается тем, что там перекомпиляция происходит во время выполнения. Статической типизированности это, в целом, ортогонально, исключая то, что при статической типизации компилятору легче оптимизировать код, вследствие того что он тупой, и даже машина в состоянии разобраться, что имела в виду мартышка и в чем она облажалась. Явная типизация тут играет дополнительным плюсом: как можно больше переложить на руки программиста.

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

Хороший пример, в этом отношении -- жаба. Она показывает неплохие результаты на синтетических тестах, однако же едва ли найдется более тормозной ЯП "в деле". Также тут имеет значение то, что все скомпилированное говно занимает огромные объемы памяти, и оверхед идет тупо из-за перелопачивания этой памяти. Ну и сам себе жер памяти __имеет_значение__ с тз конечного пользователя, не есть гуд.
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
01.02.2017, 23:43
Цитата Сообщение от hoggy Посмотреть сообщение
когда ещё не было этих ваших питонов.
О змеях ни слова . (С) Летучая мышь.
Единственная змея с которой дружу - P-39 AirCobra

Добавлено через 4 минуты
Цитата Сообщение от asmquest Посмотреть сообщение
Ну и сам себе жер памяти __имеет_значение__ с тз конечного пользователя, не есть гуд.
Вот как раз при динамической типизации жер и начинается. Потому как каждая переменная это динамически распределяемый объект. Чем меньше размер объектов тем больше оверхед у менеджера кучи. При этом если к каждому еще и рефкаунтинг приставлен мусоросборником то совсем ужасть-ужасть. А при динамической типизации еще и вангование каким куском кода ее делать на каждую арифметическую операцию.
При статической типизации как минимум вангования нет да и распределяются все промежуточные данные преимущественно на стеке вообще без оверхеда. А в куче обычно только долгоживущие крупные куски данных живут.
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
01.02.2017, 23:48
Цитата Сообщение от asmquest Посмотреть сообщение
хоть в динамике хоть в статике
Динамика и статика понятия растяжимые и без указания к чему относятся (выделение памяти, диспетчеризация методов, типизация и т.д.) никакого смысла вообще не несут.
0
Заблокирован
01.02.2017, 23:48
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Вот как раз при динамической типизации жер и начинается
нет. классика жера памяти -- это жаба и хашкель. жер памяти обусловлен тем, что там каждый дочерний класс копирует все из родительского класса, и вся метаинфа каждого класса фактически содержит всю иерархию. В Ъ-динамике используется делегирование, там лукапы дольше, но расход памяти на порядки меньше. Если конечно с умом писать.
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
01.02.2017, 23:55
Цитата Сообщение от asmquest Посмотреть сообщение
и вся метаинфа каждого класса фактически содержит всю иерархию
Ошибаетесь. Копировать ничего не нужно. Указатель на метаинфу обычно хранится в VMT. Так что при наличии метаинфы никакого ни оверхеда по памяти у каждого объекта, ни копирования чего либо что не копируется без наличия метаинфы нету.

Добавлено через 4 минуты
Цитата Сообщение от asmquest Посмотреть сообщение
что там каждый дочерний класс копирует все из родительского класса, и вся метаинфа каждого класса фактически содержит всю иерархию
Вы часом Java c JavaScript и SmallTalk не путаете? Именно возможность динамически добавлять в объект методы и поля как в SmallTalk и JavaScript требует внутренних VMT и копирования всей VMT при клонировании объекта. При определении сигнатур классов в компайлтайме достаточно внешнего VMT а следовательно исключительно указателя на VMT в объекте.
0
Заблокирован
02.02.2017, 00:04
Fulcrum_013,
не вникал в детали реализации, но практика показывает обратное. Именно статически-типизированная жаба -- лидер жера памяти.

Добавлено через 1 минуту
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
и копирования всей VMT при клонировании объекта
это вообще бред какой-то несусветный. Без комментариев.

Добавлено через 2 минуты
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
при клонировании объекта
при "клонировании" объекта просто создается пустой объект, и туда пишутся только специфические для этого конкретного объекта поля,которые указаны в ините или конструкторе, их обычно 2-3-4 штуки, не более.
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
02.02.2017, 00:04
Цитата Сообщение от asmquest Посмотреть сообщение
Именно статически-типизированная жаба -- лидер жера памяти.
Далеко не лидер. Причем жер по другим причинам. Криво сделанная стандартная библиотека живущая исключительно на динамике. А так же концепция работы мусоросборника который занимается лечением проблемы висячих ссылок фактически контролируемыми временными утечками памяти. А лидеры по жеру памяти это динамически типизированные Python, JavaScript, PHP, васик и т.д.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.02.2017, 00:04

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
280
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
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