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

SOLID принципы

23.01.2017, 17:55. Показов 17642. Ответов 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
02.02.2017, 01:45
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от asmquest Посмотреть сообщение
в программировании все -- абстракции.
Абстракция в программировании - это то чего нет в оперативной памяти ЭВМ. А все что есть это уже не абстракция а данные.
0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
02.02.2017, 01:48
Цитата Сообщение от asmquest Посмотреть сообщение
где там про копирование классов в отношение хаскеля?
Вы не можете прочитать то, что сами написали? Я Вам подчеркну:
"классика жера памяти -- это жаба и хашкель. жер памяти [в Джаве и Хаскеле] обусловлен тем, что там каждый дочерний класс копирует все из родительского класса"

Цитата Сообщение от asmquest Посмотреть сообщение
так я же и сказал, что нет.
То есть, классов нет, но расход памяти из-за классов.

Цитата Сообщение от asmquest Посмотреть сообщение
Там суррогат
Опять Вы пишите свои суждения о том, о чём не знаете.

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

Добавлено через 2 минуты
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
А это ни что иное как абстрактная сигнатура которая существует в виде данных исключительно в компайл тайме в словаре парсинга.
это только в убогих недоязыках, где нет понятия класс как первоклассного объекта
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
02.02.2017, 01:56
Цитата Сообщение от asmquest Посмотреть сообщение
это объекты отвечающие на сообщения, то-есть программы
Объекты не есть программы это наборы программ как минимум связанные с обрабатываемыми ими данными. Это если в теории. А на практике никто не отменял данных фундаментальных типов которые как ни крути являются элементарными пассивными хранилищами обрабатывемыми извне, из которых собираются активные хранилища, способные к самообработке.
0
Заблокирован
02.02.2017, 02:05
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
это наборы программ
ничто не мешает быть программе набором из других программ. Так оно обычно и бывает.
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
являются элементарными пассивными хранилищами
с точки зрения ООП нет никаких пассивных хранилищ, пассивен ли объект или активен, зависит от применения оного. может быть как array.foreach (объект активен, принял сообщение), так и foreach(array, action)(пассивен, является объектом воздействия). Так же как и в реальном мире, животное может съесть, а может быть съедена. Вопрос точки зрения и стилистики языка(запомнить слово vs слово запоминается)

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

Добавлено через 1 минуту
Цитата Сообщение от asmquest Посмотреть сообщение
пассивен ли объект или активен, зависит от применения оного.
Переменная типа Int методов не имеет. соответсвенно обрабатываться может только извне.
0
Заблокирован
02.02.2017, 02:13
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
код методов в рантайме создан быть не может
не вижу препятствий
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
мало того, изменение интерфейсов объектов требует изменения кода дирижера который ими дирижирует
только в некоторых случаях, как правило -- нет
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
При этом для изменения типа объекта в общем случае недостаточно замены списка методов, необходима еще и конверсия данных по правилам создание которых не может быть в общем случае формализовано, так же как и не могут быть формализованы правила проверки совместимости полей класса A с полями класса B.
это какие то заморочки говноязыков, производных страусов и прочее. Нормальных языков это все не касается
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Переменная типа Int методов не имеет
В ООП нет никаких переменных, только имена слотов. В своем строчном контексте, имя слота имеет методы. А если речь об объекте типа Int, то, соответственно в нормальных языках также имеет методы, и является тру-объектом
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
02.02.2017, 02:18
Цитата Сообщение от asmquest Посмотреть сообщение
ничто не мешает быть программе набором из других программ. Так оно обычно и бывает.
Разница на самом деле огромна. Программа выполняет один строго определенный вид обработки. Набор же программ связанных общим контекстом данных мало того что выполняют разноплановую обработку, это совсем другая песня при котором каждая из программ может дать разные результаты в зависимости от последовательности их исполнения.

Добавлено через 2 минуты
Цитата Сообщение от asmquest Посмотреть сообщение
А если речь об объекте типа Int, то, соответственно в нормальных языках также имеет методы, и является тру-объектом
Ну если брать вообще концептуально то в плюсах все операторы рассматриваются как методы переменных.
0
Заблокирован
02.02.2017, 02:21
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Программа выполняет один строго определенный вид обработки. Набор же программ связанных общим контекстом данных мало того что выполняют разноплановую обработку, это совсем другая песня при котором каждая из программ может дать разные результаты в зависимости от последовательности их исполнения.
такое понимание идет от узости мышления. Любая программа, по сути, есть набор подпрограмм. ООП как раз и создан для такого абстрагирования. Но даже более примитивные концепции типа ФП и процедурщины позволяют строить подобные абстракции(композиция функций, вложенность и тп). Что уж говорить о таком мощном инструменте как ООП, у которого это by design
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
02.02.2017, 02:22
Цитата Сообщение от asmquest Посмотреть сообщение
это какие то заморочки говноязыков, производных страусов и прочее. Нормальных языков это все не касается
Это не заморочки это реалии. Даже если список полей классов A и B ограничивается одним интом то в A этот инт может кодировать цвет а в B может кодировать направление открытия двери. Даже введение раздельных типов для сущностей вопросов с повестки дня не снимает. Потому как в немного более сложной ситуации все равно возникнут неоднозначности для чего предназначены те или иные данные в сочетании с данными из другого поля. соответсвено кодировать конверторы из типа в тип все равно придется вручную.
0
Заблокирован
02.02.2017, 02:22
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
все операторы рассматриваются как методы переменных
в нормальных языках они не рассматриваются, а являются ими де-факто
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
02.02.2017, 02:25
Цитата Сообщение от asmquest Посмотреть сообщение
не вижу препятствий
Терминатор - это антинаучная фантастика. Препятствие одно - задача формализации задачи не формализуема.

Добавлено через 1 минуту
Цитата Сообщение от asmquest Посмотреть сообщение
в нормальных языках они не рассматриваются, а являются ими де-факто
Т.е. нормальными языками вы называете исключительно пожиратели памяти?
0
Заблокирован
02.02.2017, 02:27
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Даже если список полей классов A и B ограничивается одним интом то в A этот инт может кодировать цвет а в B может кодировать направление открытия двери
И что с того? Так оно и должно быть, а по вашему инты могут только что то одно кодировать? Если сложить можно умножить уже никак, или что? Я не понимаю в чем проблема. К чему это все вообще?

Добавлено через 1 минуту
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
пожиратели памяти?
Я уже сказал, там нет никакого жора памяти. Жор памяти обычно в статике. Там очень много дублирования, копирования, метаинформаци, инлайнинга и тп, отсюда и жор.
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
02.02.2017, 02:29
Цитата Сообщение от asmquest Посмотреть сообщение
Любая программа, по сути, есть набор подпрограмм
Ну дак объект это по большому счету не набор подпрограмм, а набор равноправных программ связанных общим контекстом данных. Во всяком случае это касается public секции. А подпрограммы которые эти программы сообща пользуют живут в секциях private и protected, т.е. к интерфейсу не имеют ни малейшего отношения.
0
Заблокирован
02.02.2017, 02:31
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Препятствие одно - задача формализации задачи не формализуема.
это как? А создание в компилтайме как формализуется?

Добавлено через 1 минуту
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
а набор равноправных программ
любые подпрограммы -- это и есть равноправные программы
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
02.02.2017, 02:38
Цитата Сообщение от asmquest Посмотреть сообщение
И что с того? Так оно и должно быть, а по вашему инты могут только что то одно кодировать? Если сложить можно умножить уже никак, или что? Я не понимаю в чем проблема. К чему это все вообще?
А это озночает что для конверсии объекта из типа A в тип B не достаточно просто поменять список методов. Необходимо еще сконвертировать данные причем по правилам которые не могут быть сгенерированны автоматически. Соответсвенно конвертер придется писать ручками. А поскольку возможность конверсии ограничена набором оных написанных ручками конвертеров, то и список пригодных к обработке сигнатур ограничен наборами в которые возможна конверсия. Соответсвенно может быть создан в компайлтайме, Следовательно какие либо изменения сигнатур классов в рантайме никакого смысла вообще не имеют.

Добавлено через 5 минут
Цитата Сообщение от asmquest Посмотреть сообщение
любые подпрограммы -- это и есть равноправные программы
Далеко не всегда. Некоторые не имеют смысла без вызова их из определенного набора надпрограмм. К примеру публичный метод вызывает протектед метод используя для его вызова приватные данные. Вызов такого метода извне объекта вообще смысла не имеет и может нарушить логику работы объекта. Поэтому метод не равноправен с публичными, вызов его извне публичного метода невозможен.
0
Заблокирован
02.02.2017, 02:52
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
А это озночает что для конверсии объекта из типа A в тип B не достаточно просто поменять список методов.
Ну, вообще то о конверсии из типа в тип речь не шла, хотя это тоже возможно.

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

Добавлено через 48 секунд
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Вызов такого метода извне объекта вообще смысла не имеет и может нарушить логику работы объекта. Поэтому метод не равноправен с публичными, вызов его извне публичного метода невозможен.
Это вообще из другой оперы

Добавлено через 2 минуты
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Соответсвенно может быть создан в компайлтайме, Следовательно какие либо изменения сигнатур классов в рантайме никакого смысла вообще не имеют.
Это все хрень, которая привязана к статической типизации, это не имеет значения для нормальных языков

Добавлено через 6 минут
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
какие либо изменения сигнатур классов в рантайме никакого смысла вообще не имеют.
Кстати, изменение классов в рантайме очень даже имеет смысл, это придает языку овер100000 гибкости. Все экземпляры и сабклассы всегда наследуют актуальные вещи, и могут сами вносить изменения в классы

Добавлено через 3 минуты
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
изменения сигнатур классов
Допустим, есть класс, который предоставляет курс валюты, есть объект, который в этом классе постоянно меняет этот курс, опрашивая некий сторонний ресурс раз в 10 секунд. В итоге все подклассы и экземпляры этого класса будут всегда оперировать актуальными данными
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.02.2017, 02:52

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

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

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

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

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


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

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