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

SOLID принципы

23.01.2017, 17:55. Показов 17893. Ответов 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
Модератор
Эксперт функциональных языков программирования
3142 / 2290 / 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
14817 / 9593 / 1369
Регистрация: 21.01.2016
Сообщений: 36,138
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
Ответ Создать тему
Новые блоги и статьи
Генератор паролей (вариант №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 — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки. Добавлены следующие реквизиты типа Булево: - Буквы; - Цифры; - Символы. Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store. И так: 1. Скачиваем с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru