LINUX.ORG.RU
ФорумTalks

О вреде ООП надо говорить! Это - слишком важная тема, чтобы отмалчиваться.

 


3

2

Здравия всем!

Я редко пишу на этом форуме, никого здесь не знаю… Но всё-таки решил попробовать. Удалят - и ладно.

Хочу лишь обратиться к молодому поколению программистов: в университете вам будут впаривать ООП - не ведитесь. Я много лет жизни потерял пытаясь понять что это за зверь. Это настоящая религия. Тебя убеждают что это хорошо, а когда ты понимаешь что это плохо - тебе говорят: ну ты просто ещё не знаешь паттернов, 5 принципов дяди Боба и т.д.

Много лет спустя, я поизучал эти паттерны, принципы и пришёл к выводу. Всё это демагогия. Это реально секта. Создана парадигма, которая не работает из-за противоречия в самой своей сути. И чтобы оправдать её существование была создана куча теорий, которые добавляют сложность в систему.

Есть много статей, разбирающих по косточкам различные аспекты ООП. Это тяжелое чтиво и мало кто из студентов сможет понять о чём речь. Тут сессии, курсовые, языки, вечеринки. Не до философии. Но всё сводится именно к философии:

информация ничего не значит без контекста.

В классическом примере ООП используется для пользовательского интерфейса. ООП объект хочет быть самостоятельным, «знать» как себя отобразить. Но это зависит от размера экрана, а если вывод в документ PDF, то предпочтительнее вектор, а не растр и так далее. Рано или поздно работа с ООП постоянно натыкается на конфликт: как передать контекст объекту.

Об этом много сказано, есть много примеров и разборов. Я уверен что студентам некогда читать длинные статьи где много буков. Они легко гуглятся и вот одна из наиболее кратких со ссылками на более подробные https://habr.com/ru/post/451982/

В идеале, хочу создать новую статью, ещё короче но с конкретными примерами. Просто реально трудно общаться с ООП-зомбированными людьми. Их так учили 5 лет и они даже не допускают мысли что их разводили все эти годы…

Перемещено xaizek из development

Ответ на: комментарий от cocucka

Ды нет его тут, кстате, нормальный земной мужик,лично с ним этиловые употреблялись, соображает в направлении качество кода в эквиваленте финансов - правильно! в отличие от …..

fpastush
()
Ответ на: комментарий от anonymous

блин да оно из другого вытекает, grasp, gof… лерману крегу и эрих.гамма и банде респект, так бы и бегали до сих пор со 105-кнопочной AT и кидались на паравоз

fpastush
()

Вдогонку, еще немного о том, какие проблемы тащит за собой дата-ориентированный подход. Мы тут вот в этой теме обсуждаем продвинутые техники программирования применительно именно к дата-ориентированному подходу. Там мы в процессе сильно нырнули в модели консистентности, но уже выныриваем. Суть в том, что одного только языка мало. Дата-ориентированный подход требует наличия хорошей такой мультимодельной встраиваемой базы данных, способной в современное железо. Совсем на поверхности это функциональные/персистентные структуры данных, но это только вершина айсберга. Как только данные становятся динамическими (а Array of Structures обычно — нет), сразу возникает уймища технических проблем, как управлять состоянием сложноструктурированных данных. И проблема, в общем-то, именно в этом, а не в ООП самом по себе.

aist1 ★★★
()
Ответ на: комментарий от fpastush

блин да оно из другого вытекает, grasp, gof

Читать и принимать во внимание в этих работах-книгах стоит только конкретные шаблоны и методики. НО НЕ ИСПОЛЬЗОВАТЬ! Особенно если первый раз видишь эти шаблоны и методики. И не принимать во внимание обще-философские ничего-не-значащие и проиворечивые слова, как приведенные тобой. Эти книги стоит читать только для того, чтобы понимать других, кто уже понапихал этих жаблонов (от жаба и шаблон) к месту и не к месту.

anonymous
()
Ответ на: комментарий от aist1

в Мемории

Ты какой-то неправильный. Договариваешься с Шаманом. И пишешь новости каждую неделю о своей Мемории, как pvs студия, и прочие клоны chromium с нескучными обоями. Тебя все полюбят. Гарантирую.

anonymous
()
Ответ на: комментарий от anonymous

жаблон

Не зря в тред зашел — новое крутое слово выучил!

Nervous ★★★★★
()

Если попытаться выпить ведро воды то можно умереть. Вывод - вода вредная и ее не надо пить?

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от aist1

Не забывай выкладывать листинг .clang-format, это очень важно. И байки про логарифмы на вырожденных деревьях.

anonymous
()
Ответ на: комментарий от anonymous

Не забывай выкладывать листинг .clang-format, это очень важно.

Учту, спасибо!

aist1 ★★★
()

Подтверждаю. ООП в классическом виде избыточен. Но его части полезны.

Инкапсуляция. Т.е. разделение данных и функций на закрытые для внутреннего пользования и открытые. Это полезно.

Наследование и полиморфизм. Это не нужно, т.к. избыточно и чаще всего вредно.

Однако что нужно:

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

  2. Полиморфизм на уровне интерфейсов. Т.е. есть сущность - интерфейс. По сути таблица с указателями на методы. И есть реализация этого интерфейса. Интерфейсы могут наследоваться, реализация может реализовывать несколько интерфейсов.

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

Legioner ★★★★★
()
Ответ на: комментарий от fsb4000

Проекты росли, никто не мог поддерживать проект хотя бы в миллион строк в процедурном стиле. Нужно было решение. Вот и появился ООП. ООП доказало на практике, что оно подходит для огромных проектов.

Ключ к поддерживаемости больших проектов - это модульность. ООП тут ни при чём. Линукс модульный и без ООП.

Просто корпорациями управляют отделы продаж, а для них важно отчётность. По каким параметрам бухгалтер может оценить продвижение проекта? Правильно: количество строк! Если ты нанял 1 программиста и он пишет 1к строк в неделю, значит 10 программистов должны писать 10к строк. Вот ООП с этим легко справляется. Качество переросло в количество. Программы стали требовать в разы больше места на диске. И когда в 95 году Винда зависла на презентации (!) я уже тогда понял что барыги у руля ИТ индустрии. В те времена, когда радиолюбители паяли компьютеры по схемам в журнале Радио - для меня это было шоком. Как можно так насрать в души людей? Выпустить некачественный продукт и с прямой физиономией продавать его по немалой цене? «И так схавают!». Я тогда ещё верил в светлое будущее и мечтал стать программистом. Сейчас «программист» - звучит как ругательство и, наверное, я врядли бы мечтал им стать в 2021 году…

svyatozar ★★
() автор топика
Последнее исправление: svyatozar (всего исправлений: 1)
Ответ на: комментарий от svyatozar

Читаю и читаю, ты чистый на голову долбанутый укурыш, где ты в ядре видел онли модульность ? я поимаю, что тебя отпустят чудо таблетки или жидкость или что ты м потребляешь, ты хер услышешь у будешь переть как баран на непонятное для тебя что-то, если бы ты так как думаешь кодил, ты б здох бы давншно, напрашивается мысля, что школьник задрот с японскими в миндах

fpastush
()
Ответ на: комментарий от svyatozar

Линукс модульный и без ООП.

А почему ты считаешь что linux без ООП? Я считаю, что там ООП во все поля. Сформулируй, что ты понимаешь под ООП.

BRE ★★
()
Ответ на: комментарий от fpastush

В книжке, из которой я взял пример, автор приводит 14 видов тестов. Некоторые из них больше относятся не к конкретной функции, а к программе в целом, типа проверки на ввод значений не являющихся числами, нулей или отрицательных чисел. Но также рассматриваются случаи, когда x > (y + z) и x == (y + z), где x, y, z - длины сторон. В данном случае фигура не является треугольником. Также рассматривается случай, когда длины сторон не являются целочисленными.

При этом, автор рассматривает как один тест ввод (x, y, z) и (z, y , x), хотя в одном случае тест может пройти, а во втором - нет.

Но мораль в том, что фанаты тестов на самом деле большинство случаев не проверяют. Либо все их функции проще приведённой.

Kogrom
()
Ответ на: комментарий от BRE

Сформулируй, что ты понимаешь под ООП.

Если нет фабрики синглтонов, то тончо не ООП.

anonymous
()
Ответ на: комментарий от Kogrom

А я тебе что ответил ? тож самое, один тест, но входных данных у него, ну например, кортежиком, стопицот могёт быть…

fpastush
()
Ответ на: комментарий от Kogrom

и вообще, по программированию, а особенно тестированию меньше книжки читай, только личная практика, онли на подпытных тебе сотрудниках!

fpastush
()
Ответ на: комментарий от svyatozar

Даёшь модульно-векторную промышленную технологию!

anonymous
()
Ответ на: комментарий от fpastush

блин да оно из другого вытекает, grasp, gof

Что касается GRASP, то есть подозрение, что отдельная функция больше им соответствует, чем класс: связанность меньше, зацепление больше.

Если говорить про GoF, то предполагаю, что для них в языке желательно не только синтаксис с ООП, но и сборщик мусора. Иначе либо код будет не оптимальным, либо поддержка его будет нетривиальной задачей. В идеале, конечно, должен быть и перехват всяких «Null reference exception», с подробным выводом, где оно возникло, ибо подозреваю, что при использовании этих шаблонов оно будет возникать регулярно. То есть у C++ тут будет не всё хорошо. На счёт Rust не уверен.

Kogrom
()
Последнее исправление: Kogrom (всего исправлений: 1)
Ответ на: комментарий от fpastush

долгие годы философских скитаний

Вот именно. Эти книги не для новичков. Эти книги для тех, кто уже написал мегатонны кода и хочет понять и систематизировать то, что уже сделано и уже работает. Вообще-то, эти книги таким способом и написаны: сперва написали кучу кода и решили выделить часто используемые шаблоны-патерны. Один раз сделали по коду, написанному в прошлом веке на опеределенном языке.

anonymous
()
Ответ на: комментарий от fsb4000

Я с Gtk когда-то работал. Ну не мог я сказать что он не основан на ООП. Хватит врать уже!

svyatozar ★★
() автор топика
Ответ на: комментарий от BRE

Линукс модульный и без ООП.

А почему ты считаешь что linux без ООП? Я считаю, что там ООП во все поля. Сформулируй, что ты понимаешь под ООП.

То что в Линуксе где-то встречается ООП ещё не значит что он построен на принципах ООП. Не надо передёргивать!

svyatozar ★★
() автор топика
Последнее исправление: svyatozar (всего исправлений: 1)
Ответ на: комментарий от Kogrom

связанность меньше, зацепление больше.

Да используй эти противоречивые термины. А для графов вроде есть вполне конкретные свойства, похожие на «эти термины». Толи «мощность графа», толи «жесткость графа», ну и тому подобные характеристики свазанностм графов

anonymous
()
Ответ на: комментарий от fpastush

Читаю и читаю, ты чистый на голову долбанутый укурыш…

Кто обзывается - тот сам так называется!

svyatozar ★★
() автор топика
Ответ на: комментарий от Kogrom

Комраде, скажу честно, Вы нихера не поняли ни grasp ни gof, у авторов сиих священописаний нет ни слова про конкретику, в особенности уточнений в языках программирования и про сборщиков мусора. Тем более про выше упомятных языках. Смотрите на это абстрактно!

fpastush
()
Ответ на: комментарий от svyatozar

Где-то ??? да везде, только по этим грамотным исходникам можно учиться ООП. а ты я смотрю на некогерентные для тебя вопросы не отвечаешь, неужто ли все по дедушке Фрейду ???

fpastush
()
Ответ на: комментарий от vM

И с определёнными целями.

Ничего, скоро напишут новый талмуд по гигатоннам кода, написанным на жаба- … -скрипте. С определенными целями. Будут новые реактивные шаблоны, например.

anonymous
()
Ответ на: комментарий от anonymous

да то что объекты все наследуются от Object….да еще и с несвязными друг с другом методами, можно ж лучше было придумать!

fpastush
()
Ответ на: комментарий от anonymous

банальное несовершенство ООП что у QT, что VCL. Где единичная ответсвенность у отдельно взятого класса ? откуда появляются понятно/непонятные методы hash и sinchronize etc… ? куда вообще делось нормальное метапрограммирование ?

fpastush
()
Ответ на: комментарий от svyatozar

я смотрю, в твоих богодельнях не только думать не учили, так и еще второй и третий язык не проподавали, по-русски спрашиваю, тебе N-цать раз носом ткнули, что в ядре Linux одно ООП, так херли ты сопротивляешься от фактов ? Али чудо чудное уже двое суток держит, да не отпускает ?

fpastush
()
Ответ на: комментарий от fpastush

Тот кто придумал что в ядре Линукса «Одно ООП» - пусть и смеётся. Я что, должен всем доказывать что это бредовая идея? Да, встречается кое-где. И что это докзывает? Что модульность возможна только через ООП? Ну что за бред!

svyatozar ★★
() автор топика
Ответ на: комментарий от svyatozar

90% там ООП, а это доказывает, что ты нихера никогда не читал ни сторочки кода не то, что LINUX, да и чьего либо(github блин есть), внятно сказать не можешь, ничего, только какие-то бредовые, Тебе говорят, что бизнес так построен, а ты в ответ: Н****я, вы все дэ.

Я так понимаю, что Python ты никогда не видел и Сишный ооп там под капотом тем более!

fpastush
()
Ответ на: комментарий от fsb4000

не мог поддерживать проект хотя бы в миллион строк в процедурном стиле.

Сколько было строк в OS/360? Там и стиля, как такого, не было, хотя общая архитектура, несомненно, была.

vM ★★
()
Ответ на: комментарий от LINUX-ORG-RU

Эх, как же круто было в садике =) Босоного бегать по полям :D

По каким таким полям? Крошечная территория, забор, надзирательницы. Концлагер сраный.

По онтопику имею сказать следующее: на кывте срачи [были] на порядки содержательнее. Впрочем, я пока что осилил (с трудом) только первую страницу.

dimgel ★★★★★
()
Ответ на: комментарий от fpastush

90% там ООП, а это доказывает, что ты нихера никогда не читал ни сторочки кода не то, что LINUX, да и чьего либо(github блин есть), внятно сказать не можешь, ничего, только какие-то бредовые, Тебе говорят, что бизнес так построен, а ты в ответ: Н****я, вы все дэ.

Ну если ты говоришь что 90%, то это конечно что-то там тебе доказывает.

svyatozar ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.