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

SOLID принципы

23.01.2017, 17:55. Показов 17620. Ответов 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
Заблокирован
30.01.2017, 23:37
Студворк — интернет-сервис помощи студентам
слово оксюморон означает противоречие определению, абсурдное выражение, как "сладкая горечь", например. Рефлексия -- это изменение кода программы в рантайме, соответственно, никакой "статической" рефлексии быть не может.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
30.01.2017, 23:47
Цитата Сообщение от asmquest Посмотреть сообщение
соответственно, никакой "статической" рефлексии быть не может.
вероятно, мир с++ поклал на эти ваши определения.
получение информации о коде времени компиляции,
и его трансформации - динамическая рефлексия не нужна.
0
Заблокирован
30.01.2017, 23:49
Цитата Сообщение от hoggy Посмотреть сообщение
мир с++ поклал
мир с++ вообще на все поклал, в том числе и на ООП. Страуструп сказал: ООП не нужно, нужно чтобы называлось "ООП". Так оно и случилось. А у меня ООП-кошка, стратически рефлекированная
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
30.01.2017, 23:49
Цитата Сообщение от asmquest Посмотреть сообщение
мир с++ вообще на все поклал, в том числе и на ООП
не просто поклал.
он ещё их всех поимел))
0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
30.01.2017, 23:52
Цитата Сообщение от hoggy Посмотреть сообщение
гляньте на дизайн gtk+, для примера.
Насколько я себе представляю, в gtk+ фиксированная иерархия.


Не по теме:

Цитата Сообщение от hoggy Посмотреть сообщение
в сишке велосипедируется вручную.
тоже наследование - при помощи макросов.
Продемонстрируйте, как. Очень интересно.




Цитата Сообщение от hoggy Посмотреть сообщение
тоже наследование - при помощи макросов
Какое отношение язык макросов имеет к процедурной парадигме?
Реализуйте наследование, например, на Фортране.


Цитата Сообщение от hoggy Посмотреть сообщение
любой оо-код можно представить в виде процедурной парадигмы.
Любой ОО код можно представать в виде последовательности машинных команд. Но это будет уже не ОО код.


Цитата Сообщение от hoggy Посмотреть сообщение
и вот это:
Не вижу ничего объектно-ориентированного в данном коде. Но если Вы используете другую терминологию, не собираюсь Вас переубеждать.


Цитата Сообщение от hoggy Посмотреть сообщение
в контексте оо-программирования:
смотреть в исходный код,
и видеть не просто какие то закорючки,
а объекты - сущности,
наделенные свойствами и умениями.
Это Вы сейчас про object based programming рассказываете. Но если Вы используете другую терминологию, не собираюсь Вас переубеждать.


Цитата Сообщение от hoggy Посмотреть сообщение
я хочу сказать, что фп, и процедурщина - вообще не совместимые парадигмы.
Нормально сочетаются. Например, LINQ.
0
Заблокирован
30.01.2017, 23:55
Цитата Сообщение от hoggy Посмотреть сообщение
он ещё их всех поимел))
адептов плюсов уж точно, насчет всех -- это слишком сильно сказанно
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
31.01.2017, 04:51
Цитата Сообщение от hoggy Посмотреть сообщение
в плюсы в грядущие стандарты завезут статическикую рефлексию.
Ну и на кой она такая нужна? От нее толку что мертвому припарка. Динамическая нужна.
Цитата Сообщение от hoggy Посмотреть сообщение
хотя в принципе... не считая сериализации допустим,
Вот с этого и начнем. Без возможности сериализации/десериализации обрабатываемых данных любая прога не более чем хеллоуверд. А для этого так же как и для создания абстрактных фабрик нужна именно рантайм рефлексия. Вот и костылят ее везде в ручную при этом тратят кучу времени на поддержание соответствия костыля коду, при том что компилятор все нужные данные в процессе компиляции имеет, только выбрасывает по завершению компиляции а не в аккуратненькую табличку в сегменте данных упаковывает.

Добавлено через 8 минут
Гнать этих неучей из коммитета нужно к чертовой матери. Свойства почему до сих пор не ввели? Они синтаксическим сахаром не являются, как это ошибочно кричится на каждом углу. При этом именно свойства делают пару гетте/сеттер единой сущностью. А соответсвенно для эффективной реализации внешней сериализации/десериализации и внешнего редактирования объектов в рантайм рефлексии нужна именно информация о свойствах. А для этого свойства должны быть нативными а не костыльными.

Добавлено через 11 минут
Цитата Сообщение от hoggy Посмотреть сообщение
вы вообще понимаете,
как устроен полиморфизм на низком уровне?
Прекрасно понимаю. Таблица указателей на виртуальные методы для каждого класса, в инстансе указатель на таблицу. Это внешние VMT. А возможна как реализация со внутренним VMT, когда VMT живет в каждом инстансе, так и смешанная.

Добавлено через 18 минут
Цитата Сообщение от hoggy Посмотреть сообщение
аха, с точки зрения человека,
который не умеет в метапрограмминг.
Начнем с того что метапраграмминг и шаблономазня это две огромные разницы. к примеру в STL метопрограмминга процентов 10, остальные 90% - шаблономазня.

Добавлено через 3 часа 25 минут
Цитата Сообщение от asmquest Посмотреть сообщение
Рефлексия -- это изменение кода программы в рантайме
Рефлексия это отражение, т.е. получение информации о типах данных и структуре самих типов. Соответсвенно может быть как статическая (компайлтайм) так и динамическая (рантайм).
0
шарпопочитатель
 Аватар для ht1515
59 / 26 / 7
Регистрация: 31.01.2010
Сообщений: 1,035
31.01.2017, 07:23  [ТС]
Позволю с вами не согласиться сэр. Рефлексия не только - получение. С помощью механизмов рефлексии можно вызывать прайвет методы класса. Асмкуест более точно сказал. Если не нравятся шаблоны, то скажите это фанатам буста.
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
31.01.2017, 07:56
Цитата Сообщение от ht1515 Посмотреть сообщение
С помощью механизмов рефлексии можно вызывать прайвет методы класса
С помощью механизма рефлексии можно получать адреса методов и описание их параметров. А при наличии этой информации можно и вызывать. Но никакого динамического изменения кода при этом нет. Обычный косвенный вызов. Причем каких методов - это уже зависимо от реализации и флагов. К примеру в С++ Builder при дефаултных настройках рефлексии можно получить только public методы и геттеры и сеттеры published свойств в независимости от зоны где непосредственно расположен геттер и сеттер. Потому как такой у C++ Builder механизм реализации свойств с полной инкапсуляцией. т.е. Обычно прячут сеттер и геттер от прямого вызова. Если же пользовать механизм свойств Visual Studio то там можно давать в рефлекшине только public методы так как в микрософтовском механизме доступность зависит не от секции в которой свойство объявлено а от секции в которой геттер/сеттер объявлены. А других плюсовых реализаций рефлексии в общем то нет.

Добавлено через 6 минут
Цитата Сообщение от ht1515 Посмотреть сообщение
Если не нравятся шаблоны, то скажите это фанатам буста.
Я просто обожаю шаблоны. А вот бестолковое их использование там где это абсолютно не нужно не приемлю в принципе. А особенно попытки заменить рантайм полиморфизм компайл-тайм полиморфизмом.
0
шарпопочитатель
 Аватар для ht1515
59 / 26 / 7
Регистрация: 31.01.2010
Сообщений: 1,035
31.01.2017, 08:04  [ТС]
Бестолковость понятие относительное. Гавнокод тоже понятие относительное. Может вы в коде поноворотите, а придет новый прогер убьет ваш код и заменит его свитчем и у него все прозрачней и быстрей будет работать. А вы будете кричать, что мол это противоречит какому-то принципу, блаблабла... Но как бы там не было если его прога будет работать быстрей и будет прозрачней доя других, то ваш изяшный код тоже назовут гавнокодом. Меня лично в ооп бесит то что как следствие оно родило кучу балтунов. Которые изначально имея неправильное мышление начинают спорить об абстракциях каких-то. Нужен тупо технарский сленг, нех мерить на себя мантию философа. Коль начал трещать как филосов, так и иди в философию, решаешь конкретные задачи по программированию, то и говори норм. Это я все про солид принципы. Воняет пафосом от этого всего...
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
31.01.2017, 08:17
Цитата Сообщение от ht1515 Посмотреть сообщение
ваш код и заменит его свитчем и у него все прозрачней и быстрей будет работат
Не будет. у свича под капотом в лучшем случае таблица индирект переходов. в худшем сравнение бинарным поиском в отсортированном массиве пар ключ-индирект переход. Так что быстрее вызова виртуального метода свич в общем случае работать не будет. Именно поэтому виртуальные методы и появились.

Добавлено через 3 минуты
Цитата Сообщение от ht1515 Посмотреть сообщение
Нужен тупо технарский сленг, нех мерить на себя мантию философа.
Кстати так о птичках за бугром научные степени (бакалавры, магистры, доктора и т.д) от программирования, математики, физики, техники и т.д. все до единой числятся аки научные степени именно по философии.
Цитата Сообщение от ht1515 Посмотреть сообщение
решаешь конкретные задачи по программированию, то и говори норм
Решение любой конкретной задачи по программированию это научное исследование.

Добавлено через 2 минуты
Цитата Сообщение от ht1515 Посмотреть сообщение
Меня лично в ооп бесит то что как следствие оно родило кучу балтунов.
В ООП а тем более КОП обычно гораздо больше практиков. А что касается болтунов это прерогатива ФП.

Добавлено через 1 минуту
Цитата Сообщение от ht1515 Посмотреть сообщение
начинают спорить об абстракциях каких-то
А программирование и заключается в выделении абстракций и реализации их в коде. Причем чем более высокоуровневые абстракции выделены, тем меньше кода нужно для решения конкретной задачи.
0
шарпопочитатель
 Аватар для ht1515
59 / 26 / 7
Регистрация: 31.01.2010
Сообщений: 1,035
31.01.2017, 08:52  [ТС]
Ну в этом то и проблема. Что никто из ваших ооп богов не задал границ выделения уровня иерархии. Доходит до идиотизма порой из-за этого. Ооп это философия в первую очередь , а потом уж программирование. Сколько два человека из ооп будут спорить про то что арбуз ягода это или фрукт? Как его абстрагировать? Вот типичные ооп программисты входящие в вечный цикл философствования и маразма, когда на сишник человек материальный сделает просто арбуз. Раньше еще говорили что ооп позволяет быстрей пилить софт, ага философский маразм все перечеркивает. Так что используем тихо и не выпендриваемся! И скажите своим айчарам, что процедурное программирование, тоже хорошо для своих задач, а то у них при слове ооп оргазм наступает

Добавлено через 12 минут
Я вон вас прошу конкретные примеры привести в коде, с трудом кто-то приводит. Вот он ваш абстрактный мир. А почему? Сложно потому что мыслить абстракциями, заранее верно структурирую какие-то объекты. Программист должен и может ошибаться!!! Гавнокод нужно писать. Это нормально. Стивина кинга читали? 99% книг вата, 1% гениальные. Надо давать людям шанс ошибаться, чтобы общее развитие шло. Ненавижу прогеров, которые других высмеивают... Вы хоть знаете что такое гавнокод и кто этот термин и как придумал?
0
Заблокирован
31.01.2017, 10:24
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
т.е. получение информации о типах данных и структуре самих типов.
это интроспекция, а не рефлексия. Однако же есть устоявшаяся терминология, и все это к компилтайму относить не принято, да и смысла в этом передергивании нет никакого
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
31.01.2017, 10:50
Цитата Сообщение от asmquest Посмотреть сообщение
а не рефлексия
Это и есть рефлекшн. В переводе "отражение". Все остальные возможности типа вызова метода по имени и создание инстанса по имени класса делаются абсолютно штатным средствами на основе этой информации.

Добавлено через 1 минуту
Цитата Сообщение от ht1515 Посмотреть сообщение
Ооп это философия в первую очередь
Начнем с того что современный научный метод это чистейшей воды философия.

Добавлено через 1 минуту
Цитата Сообщение от ht1515 Посмотреть сообщение
Сколько два человека из ооп будут спорить про то что арбуз ягода это или фрукт?
Очень просто. Ягоды это вид фрукт. Соответственно арбуз принадлежит к ягодам а ягоды в свою очередь к фруктам. Соответственно арбуз потомок как ягод так и фруктов.

Добавлено через 1 минуту
Цитата Сообщение от ht1515 Посмотреть сообщение
И скажите своим айчарам, что процедурное программирование, тоже хорошо для своих задач, а то у них при слове ооп оргазм наступает
Спору нет для своих задач самое то. Только задачи для которых было хорошо процедурное программирование остались в 60-х годах прошлого века. А хеллоуверды в 70-х,

Добавлено через 6 минут
Цитата Сообщение от ht1515 Посмотреть сообщение
Вы хоть знаете что такое гавнокод и кто этот термин и как придумал?
Говнокод это плохо читаемый (вызывающий затруднения визуального восприятия алгоритма) код. Обычно такое бывает при вынесении наружу тех деталей логики, реализации которые можно убрать под капот (непродуманном интерфейсе), либо непродуманных идентификаторах. Например код STL или код с использованием STL. Так же в говнокод неизбежно превращается процедурщина при увеличении бъёма задачи.

Добавлено через 7 минут
Цитата Сообщение от ht1515 Посмотреть сообщение
Программист должен и может ошибаться!!!
Программист 10% времени создает ошибки остальные 90% времени их устраняет. При этом интерфейсы классов и даже дерево наследования не исключение.

Добавлено через 2 минуты
Цитата Сообщение от ht1515 Посмотреть сообщение
а то у них при слове ооп оргазм наступает
ООП было относительно хорошим средством для задач второй половины 70-ых и 80-ых. А с начала максимум середины 90-ых рулит КОП который есть дальнейшим развитием ООП.
0
Заблокирован
31.01.2017, 10:54
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Это и есть рефлекшн. В переводе "отражение"
нет. В контексте программирования, рефлексия -- это модификация программой программы в рантайме, а интроспекция -- чтение программой исходного кода в рантайме.
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
31.01.2017, 11:10
Цитата Сообщение от asmquest Посмотреть сообщение
В контексте программирования, рефлексия -- это модификация программой программы в рантайме, а интроспекция -- чтение программой исходного кода в рантайме.
В вики вообще много бреда написано. А про программирование так вообще кроме бреда практически ничего нет. При этом все приведенные примеры пользуют исключительно индирект вызовы на основе RTTI информации и ничего больше. Никаким изменением кода программы это не является. При этом и интраспекцией рефлексия не является так как дает информацию только о структуре данных и об адресах функций позволяющих модифицировать данные но не о самом коде программы.
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
31.01.2017, 11:14
Программист 10% времени создает ошибки остальные 90% времени их устраняет.
вся суть ооп в одном предложении
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
31.01.2017, 11:17
Цитата Сообщение от pycture Посмотреть сообщение
вся суть ооп в одном предложении
Это вообще суть программирования. Как и вообще любой научной или технической задачи. Вообще современный научный метод это оптимизированный метод научного тыка. Благодоая оптимизации и имеем 10% времени создания ошибок 90% устранения. В первой версии метода научного тыка было никак не более 0,01% времени создание ошибок 99,99% расхлебывание. так что прогресс науки и техники на лицо.
0
Заблокирован
31.01.2017, 12:04
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
рефлексия не является так как дает информацию
рефлексия не "дает" никакой информации, это модификация кода в рантайме, это термин такой, слово такое, которое люди употребляют, для описания определенного конкретного процесса
0
Эксперт .NET
 Аватар для Usaga
14792 / 9566 / 1367
Регистрация: 21.01.2016
Сообщений: 36,069
31.01.2017, 12:06
Цитата Сообщение от asmquest Посмотреть сообщение
рефлексия не "дает" никакой информации, это модификация кода в рантайме
Разве не даёт?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.01.2017, 12:06

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

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

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

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

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


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

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