LINUX.ORG.RU
ФорумTalks

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

 


3

2

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

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

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

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

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

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

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

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

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

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

да нет никакого ООП и прочих страшных слов, нет.

есть данные и способы их обработки\преобразования\трансформации тчк.

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

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

Нет таких кубиков лего из которых невозможно было бы сложить слово «жопа».

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

у нас в компании его идеи ввели, увеличилось КПД почти в двое, и читабельность кода, и производительность программистов. Вот это показатель,а говорить можно и о том, что на заборе написано.

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

Что предлагаете взамен? Километровые switch case?

Полиморфизм отменять вроде никто не предлагал.

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

Как вы предлагаете например кнопку в GUI делать? Код в студию.

Глянь, как в реакте сделано.

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

А я об этом и говорю, что объект «знает» как себя отрисовать, «только дайте мне контекст». Но в этом и заключается обман! Передача контекста в объект - неизбежный костыль ООП. Это всегда происходит. Рано или поздно, тем или иным способом!

То есть на самом-то деле объект нифига не знает как себя отобразить, ему надо «объяснить» как себя отобразить, создав понятный ему объект, который будет обёрткой того или иного интерфейса. И если объект не знает о существовании векторной графики, он в итоге так и будет делать растровые изображения, встроенные в SVG.

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

данные с функциями и их видимость это больше к модульному принципу

Это была ранняя попытка создания «объектов».

А я говорю про то, что ООП есть их обобщение, а не как отдельная современная ветка развития

Ну да.

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

Что-то не видел, чтобы солями таллия лечили.

  1. Дай дурню хрустальный хер…

  2. Сейчас нет, а завтра?..

  3. Даже у солей таллия есть ПДК

Итог: «Пользы никакой» - ∀, полез я за банхаммером канделябром…

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

Сейчас нет, а завтра?..

А после завтра? Разницы нет, живём мы в настоящем, а располагаем лишь прошлым.

Даже у солей таллия есть ПДК

Не делает их лекарством.

fernandos ★★★
()

Тебя убеждают что это хорошо, а когда ты понимаешь что это плохо...

ОПП - это инструмент. Если у Вас инструмент плохой или хороший, а не предназначенный для решения каких-то задач, сектант Вы.

ЗЫ а Вы случайно не школотрон, решивший поучить молодое поколение?!

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

Не хранить данные в объектах! Отдельно меши, отдельно текстуры, отдельно физику

Подходы AoS и SoA не просто так существуют. Без учёта контекста ты занимаешься в лучшем случае газификацией™.

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

стоимость проекта растет, а вместе с ней растет и капитализация

Што? Стоимость проекта — это же расходы. А капитализация вроде как должна отражать ожидаемые доходы.

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

Первый пункт таки пропустил…

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

Начиная от утверждений, что «Бог есть», и заканчивая утверждениями, что «Бога нет». Чем старше становишься, тем яснее понимание, что истина где-то посередине.

Мне кажется или это Бог Шрёдингера? :D

Juan-Carlos
()

лол. Очередной ниосилятор. Забавно, что на эту же стаейку ссылся местный хений @metaprog. Прочувствуй свой уровень, что называется :D

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

||||Gui без ООП

||||X-Window

||Что-что?

А что не так?

||||Ядро Линукс

||В котором ООП внезапно есть. Ну я, в общем, так и думал…

Эх, решето. Линус пошёл на поводу у мейнстрима ради того чтобы ему нахаляву драйверов нахреначили… А что в итоге имеем? Звук через ж*пу: адски сложная настройка, три разных сервиса (ALSA, JACK, PulseAudio) запущенные параллельно, а элементарно передать МИДИ по сети из коробки всё-равно нельзя.

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

Эх, решето. Линус пошёл на поводу у мейнстрима ради того чтобы ему нахаляву драйверов нахреначили… А что в итоге имеем? Звук через ж*пу: адски сложная настройка, три разных сервиса (ALSA, JACK, PulseAudio) запущенные параллельно, а элементарно передать МИДИ по сети из коробки всё-равно нельзя.

И во всём этом исключительно вина ООП, а как иначе!

Harald ★★★★★
()

Тред пока не читал. Сразу оговорюсь, я не программист, я железячник. Но постоянно приходится разбирать чужой код, что-то делать под себя. Мне не вбивали 5 лет в голову паттерны ООП (как равно и другие), но за много лет пришлось разбираться. Но я не являюсь ни фанбоем ООП, ни его противником. Я так…наблюдатель. Так вот:

Я много лет жизни потерял пытаясь понять что это за зверь. Это настоящая религия.

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

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

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

Создана парадигма, которая не работает из-за противоречия в самой своей сути.

И здесь крайне не хватает примера из твоей практики. А пока - это демагогия.

Но всё сводится именно к философии

Не на пустом же месте? Абсолютно верно. Это философия, подход к решениею задач, который просто работает.

Я не знаю как ты, я лично вижу в ООП не более чем абстракцию. Со всеми присущими минусами.

ООП объект хочет быть самостоятельным, «знать» как себя отобразить.

А когда таких объектов дохера? Ты сам же повесишься в процедурном стиле это все описывать. Это класс однотипных объектов с однотипными свойствами. ООП просто упрощает подход к работе с ними, снимая часть рутины по описыванию одного и того же каждый раз. На этом по сути все и заканчивается. ХЗ с чем ты там разобраться не можешь.

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

И причем тут ООП? для того, чтоб hi-res гонять достаточно одной альсы. Или вангую, что ты пианино напару с ООП познаешь, так вот выбирать что-то одно надо

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

три разных сервиса (ALSA, JACK, PulseAudio) запущенные параллельно

Так я и знал. Обычный неосилятор, который еще и путает тёплое с мягким

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

||Паттерн Bridge, один из выходов, прекрасное решение, как показала практика, обсуждение про него выше.

Это немного не то. Bridge скорее о «is A» против «has A».

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

еще раз повторюсь, паттерны GOF это не рецепт серебряной пули и уж тем более не она самая, а асбтрактный принцип, который ты берешь, включаешь голову и вуаля … все работает ! я этот паттерн вообще накладывал на архитектурное решение(не программное!) для связи в единое целое целое начиная сервер-шлюзы-….-esp32(SoC такой)

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

«Всё есть яд и всё есть лекарство…»

Покажите хоть одно научно подтверждённое лекарственное действие алкоголя. Это чистый яд.

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

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

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

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

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

Соответственно, в большой системе с ООП всегда будут такие монстры

Да, но без ООП никакой большой системы не будет вообще. Потому что люди тупые и потонут в своём говне. С ООП можно как-то плыть. «Красивые» программы бывают только на лабораторках и то не у всех.

no-such-file ★★★★★
()
Ответ на: комментарий от Oberstserj

ООП - никакая не абстракция, а вполне конкретная модель, обязывающая группировать данные по так называемым недетерминистическим «логическим» признакам. Она приводит к вполне ощутимому объёму лишнего кода.

Более простой пример извращения в программировании - TDD, которое объективно (тут тоже нет никаких абстракций) заставляет тебя писать больше кода, (код + тесты), а так как тесты переписывать лень, то и код подстраивается под готовые тесты, даже когда новый поворот в разработке проекта полностью оправдывает переписывание кода с нуля. Это ещё называется рефакторинг. Так вот, TDD вполне конкретно, а не абстрактно, препятствует здоровому рефакторингу.

Это не какие-то праздные размышления, а вполне конкретные, реально существующие грабли.

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

Про TDD: скорость по разработке ПО (на практике моей организации) увеличилась почти вдвое..

А ООП - это самая настоящая абстракция, обобщение той задачи которая перед тобой стоит.

И я так понимаю в институте ничему не учили ? Открываем Аристотеля Категории и читаем что же все таки есть абстракция, зачем же она хомосапиенсу здалась ?!, студент должен многа букаф съесть, а не прийти на готовое!

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

||Это разные уровни абстракции, перестань уже увеличивать количество бреда в теме.

Да что вы говорите? Обоснуйте!

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

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

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

Покажите хоть одно научно подтверждённое лекарственное действие алкоголя. Это чистый яд.

  1. man аллегория

  2. «Пользы никакой» <> «отсутствие лекарственного действия»

  3. «Этанол - яд» <> «От алкоголесодержащих напитков никакой пользы»

Мля, одни амёбы кругом: без логики, и спирта боятся…

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

Тесты должен сначала писать кодер на свой код, чтобы убедиться, в том что он напидалил работает хотябы, а у тестировщиков вообще своя работа. я смотрю, такое ощущение ты даже не представляешь о чем говоришь или работаешь ТЫЖПРОГРАММИСТ-ом. Да тесты не все пишут, веб-студии в 10 человек привет(не в обиду, сам таким же был), вместе с 1С-никами, у них это не оплачивается

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

И таки

Покажите хоть одно научно подтверждённое лекарственное действие алкоголя. Это чистый яд.

«этанол является противоядием при отравлении некоторыми токсичными спиртами»

:)Ь

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

TDD, которое объективно (тут тоже нет никаких абстракций) заставляет тебя писать больше кода

TDD - это ж про написание тестов до написания кода? А как вообще без тестов то жить?

TDD вполне конкретно, а не абстрактно,препятствует здоровому рефакторингу.

Без тестов рефакторить очень печально. Нормальные тесты позволяют тебе двигать реализацию, не боясь сломать ничего.

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

||Про TDD: скорость по разработке ПО (на практике моей организации) увеличилась почти вдвое..

Такой же эффект можно получить уволив половину сотрудников…

||А ООП - это самая настоящая абстракция, обобщение той задачи которая перед тобой стоит.

||И я так понимаю в институте ничему не учили ? Открываем Аристотеля Категории и читаем что же все таки есть абстракция, зачем же она хомосапиенсу здалась ?!, студент должен многа букаф съесть, а не прийти на готовое!

Если такой логике следовать, то написание функции - тоже абстрагирование. Ты детали прячешь в интерфейсе.

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

Покажите хоть одно научно подтверждённое лекарственное действие алкоголя. Это чистый яд.

Антисептик + противоядие при отравлении метанолом.

ya-betmen ★★★★★
()

Добро пожаловать в мир знаний. Тут секта на каждом шагу. Главное, чтобы секта приносила тебе больше, чем у тебя забирает. Хотя секты делаются для ровно противоположного. Соблюдай гигиену и береги себя. Христос с тобой (или иной Бог)!

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

ООП - никакая не абстракция, а вполне конкретная модель….

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

Она приводит к вполне ощутимому объёму лишнего кода.

В плохом применении - да. В хорошем - ровно наоборот.

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

Тестами занимаются тестировщики.

Нормальный тестировщик = программист. Внезапно, да?

Oberstserj ★★
()

Их так учили 5 лет и они даже не допускают мысли что их разводили все эти годы…

„Человека легче обмануть, чем доказать ему, что он был обманут“. Марк Твен

den73 ★★★★★
()

Надо конечно. Но, как правило, ничего лучшего нет. Портянка из функциональщины не выглядит и не пахнет лучше портянки из ООП.

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

Если такой логике следовать, то написание функции - тоже абстрагирование. Ты детали прячешь в интерфейсе.

никакой разницы между функцией и объектом в определенном смысле нет.

Отличие объекта в том что, он может иметь контекст, который иначе надо передавать в функцию параметром.

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

Мой знакомый утверждает, что он был пьян, когда его укусил каракурт. Итог: каракурт мёртв, знакомый утверждает, что он был пьян, когда его укусил каракурт, а следовательно, жив.

Также есть устойчивое поверье, что пьянство помогает при облучении. Об этом я знаю от двух сотрудников атомной отрасли. Один лазал по аварийным реакторам (и даже на ботинок случайно налепил какую-то частичку, в итоге чего нога через короткое время спонтанно сломалась), другой участвовал в ликвидации ЧАЭС.

Ты, конечно, можешь отмести эти три свидетельства. А я могу отмести твоё отметание.

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

Да, с возрастом наступает маразм и разум слабеет. Такова жизнь.

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

Не получишь такого эффекта….

Одна две, сто функций - да. для Процедурка для 500-1000 строк кода вполне годиться. Средний наш проект - это примерно 10000 классов, в них примерно по 10-20 методов до 50 строк кода, вот и считай. И как же в процедурном стиле потом это все саппортить, не скажешь ?

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