LINUX.ORG.RU
ФорумTalks

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

 


3

2

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

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

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

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

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

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

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

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

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

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

Если в коде нет ООП, то вы пишите одноразовый код, который затем нужно выкинуть. Например, в Go так и происходит. Из наиболее известных случаев это переписывание клиента/ноды для ethereum.

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

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

Вот водка — популярна тема. А самоучителей как пить водку нема. Неувязочка

Ты бы еще онанизм вспомнил. Если бы в программировании нужно было только дергать или лить в горло, то программистов бы сейчас было половина мира. Но почему-то у нас хаскелисты после застолья не рождаются — потому что программирование само по себе непросто, независимо от инструмента. У нас вон люди, которые умеют электронные таблички делать в экселе — и те уже называются «программисты», потому что, блин, сложно. А если башпортянку сможешь хотя бы прочитать — ты уже «хакер». А ты говоришь «книжки по ООП». Это вообще в их глазах «архитектор всех программ и компьютеров».

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

самоучителей как пить водку нема. Неувязочка.

есть (устные)–> «наливай да пей»

и главное, даже если найдётся гений чудик, умеющий расписать эту концепцию на страниц 300..500 читать его никто не станет – практика сильней теории

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

Но почему-то у нас хаскелисты после застолья не рождаются

Не знаю кто такой Хаскель, но тренеров сбороной страны по футболу после застолья - чуть меньше, чем пьющее население страны.

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

Наша любимая компания открыла доступ к комплекту для разработки игр

Я надеюсь там все как надо, модульный, но с элементами ООП?

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

Не согласен. ООП - это раковая опухоль, которая раздувает такие проекты как Qt, Unreal Engine, Godot и многие другие до безобразный размеров (bloatware), с которыми мне приходилось сталкиваться. По возможности, стараюсь бежать от них как от огня.

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

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

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

Я надеюсь там все как надо, модульный, но с элементами ООП?

Этот тред не понятно о чем …
Без объектов и кода

И не туды и не сюды

Если речь о ООП С++ class …, то это лишь частный случай средненькой архитектуры …

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

Если речь о ООП С++ class …, то это лишь частный случай средненькой архитектуры …

Ныне вариаций ООП много.
Неплохо бы обсудить …

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

надеюсь там все как надо, модульный, но с элементами ООП?

Установить и не могу /не использую Window 10 /.
Вот пример исходника

/// <summary>
/// Contains information about the results of a string verification.
/// </summary>
class verify_string_result
{
public:
    /// <summary>
    /// The result code for the string verification.
    /// </summary>
    inline verify_string_result_code result_code() const;

    /// <summary>
    /// first_offending_substring() contains the first offending substring if the
    /// result code is verify_string_result_code::offensive.
    /// </summary>
    inline const string_t& first_offending_substring() const;

    /// <summary>
    /// Internal function
    /// </summary>
    inline verify_string_result();

    /// <summary>
    /// Internal function
    /// </summary>
    inline verify_string_result(
        XblVerifyStringResultCode resultCode,
        const char* firstOffendingSubstring
    );

private:
    verify_string_result_code m_resultCode;
    string_t m_first_offending_substring;
};
anonymous
()
Ответ на: комментарий от anonymous

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

OS/360 ? До миллиардов строк Google ей, конечно, далеко, но, несомненно, система – bloatware своего времени. По реализованным возможностям, а не лишнему коду.

Не только ООП, но даже структурного программирования в ней толком не было, хотя идеи в 1960-е уже были известны, и пользователям предлагались языковые процессоры Algol и PL/I в дополнение к традиционным RPG, COBOL и FORTRAN.

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

Хорошо, какие в 2021 году есть причины не использовать ООП в проектах масштаба Qt, Unreal Engine и т.д.? Есть ли современные подобные проекты, где намеренно отказались от ООП и преуспели?

anonymous
()

Короче, автор - очередной метапрог. Как обычно критиками выступают не опытные специалисты, а недоучки, которые не разобрались в существующем, но уже знают, как сделать всем лучше (нет).

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

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

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

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

Пиши отличия ООП от ОП, раз ты их разделяешь.

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

Короче, автор - очередной метапрог.

Мы ничего не знаем о ТС и он мало что в этом треде сказал.
Поэтому трудно что-либо сказать о нем …
Что касаемо ООП, то его часто используют там где он и не нужен.
Может быть ТС это хотел сказать?

В целом struct уже является кирпичиком для создания объектов …

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

ОП = ООП - наследование(и последующая работа через базовый тип). Не помню, где встречал такое, поэтому источник не укажу. Но думаю, достаточно ясно.

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

Не использую class, template, STL, …
Потому, что использование их в run-time весьма проблематично.
Вместо этого используются метаданные.
Они содержат все то, что можно было бы как-то получить при использовании class, template, STL, …
Но еще раз акцентирую на то, что использование их весьма проблематично для run-time.
Можно было бы, но тогда потребуется использование компилятора, …
У меня свой API, который позволяет в run-time работать с объектами, о которых компилятор ни чего не знает.

Вот поэтому, то для разработки OLE class, template, STL, … не использую.
Это к тому сказал, что не являюсь противником ООП.
Он у меня есть, но он пригоден как для compil-time, так и run-time.

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

~500 постов, самое время выяснить что же хотел сказать ТС.

Эээээээ, причем здесь ТС?

ТС лишь повод к 500 постам
anonymous
()
Ответ на: комментарий от anonymous

Есть ли современные подобные проекты, где намеренно отказались от ООП и преуспели?

Посмотрите ради интереса исходники Firebird-4.0.0.2496-0.tar.xz в директории Firebird-4.0.0.2496-0\src\common\classes.
ИМХО пример хорошего использования class.
Многие просто

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

Продолжим. Тема 3. Инкапсуляция. Тема будет состоять из двух вопросов.

  1. В сишных библиотеках часто оперируют указателем на мега-структуру в куче, который часто называют хэндлом. Подразумевается, что работать с этим хэндлом надо через специальное API, в том числе создавать и удалять мега-структуру. Но наверняка есть чудаки, которые правят эту структуру не через API, а напрямую. Знает ли кто-нибудь эпичные истории, когда какой-нибудь профессиональный программист занимался подобным чудачеством и это приводило к краху проекта?

  2. В Питоне есть квази-инкапсуляция полей через подчёркивание (по крайней мере так было во второй версии). При этом доступ к полям остаётся. Знает ли кто-нибудь эпичные истории, когда какой-нибудь профессиональный программист занимался правкой этих полей напрямую и это приводило к краху проекта?

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

этих полей напрямую и это приводило к краху проекта

Что понимать под крахом проекта? Это приводит к тому, что при обновлении библиотеки или соседнего модуля внезапно перестаёт работать ранее оттестированная программа. Это крах проекта?

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

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

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

На Питоне было вообще классно:

Python2: print «The answer is», 2*2

Python3: print(«The answer is», 2*2)

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

Ну да, поломали abi. Там множество способов, включая опции компилятора. Я только не понимаю, к чему у товарища выше столько пафоса.

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

Я только не понимаю, к чему у товарища выше столько пафоса.

Могу предположить, что он хотел сказать, что инкапсуляция не нужна.

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

Вопрос в другом.

Это приводит к тому, что при обновлении библиотеки или соседнего модуля внезапно перестаёт работать ранее оттестированная программа.

Это теоретическая ситуация, когда мы действуем некорректно. Мой вопрос был в том, известны ли случаи, чтобы какой-то серьёзный программист действовал некорректно, то есть не в соответствии с документацией на библиотеку? Вот мы оградили доступ к внутренностям класса в C++, а имело ли это исторические предпосылки?

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

Ну тут тоже не должно быть проблем в случае с хендлом на структуру, которую пользователь должен использовать только через API. Или тут есть какое-то различие с this класса в C++?

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

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

Могу предположить, что он хотел сказать, что инкапсуляция не нужна.

Инкапсуляция нужна. Хочется понять, достаточно ли инкапсуляции на уровне модулей и документации. То есть на уровне модулей прячем вспомогательные функции и константы. На уровне документации говорим, что вот эта главная структура доступна только через API. А поля структур-параметров остаются полностью открытыми. Достаточно ли этого? Или обязательно все поля заинкапсулировать?

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

Все ли реализации Smalltalk’ов лишают программиста прямого доступа к инкапсулированным полям? Или некоторые надеются на дисциплинированность программиста?

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

Я не знаю ответ на этот вопрос, но википедия пишет, что в Smalltalk-е так же, как и в Python-е. То есть надеются на дисциплинированность программиста. А что из этого следует?

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

Самая ирония в том что в Си идеальная инкапсуляция на уровне файла: используешь ключевое слово static и передаёшь указатель на объект через void*. И всё!

А «ООП-шном» С++, весь приватный срам класса нараспашку в файле заголовка!

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

А в смоллтоках private – это комментарий, поясняющий программисту, как правильно использовать внутренности объекта.

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

Самая ирония в том что в Си идеальная инкапсуляция на уровне файла: используешь ключевое слово static и передаёшь указатель на объект через void*.

Да, идея понятна. Это хорошо, но идеально было бы не void*, а некий защищённый явный тип, поля которого полностью открыты внутри модуля и полностью закрыты снаружи. Иначе могут же какую-нибудь левую структуру подсунуть. И тут через typedef не выкрутиться - надо на уровне синтаксиса языка менять.

Сейчас мы опять к какому-нибудь ОКамлу придём или даже Расту.

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

Да, но в Си++ если даже меняется внутренняя часть класса, все клиентские программы надо перекомпилировать с обновлённым файлом заголовка. Это такой гемор, особенно когда обновляешь библиотеки, а программы слинкованы со старой версией.

По мне так лучше как в Си… Ну или хотя бы интерфейсы библиотек делать в ситле Си. Там тебе библиотека выдала указатель на свой объект, а ты уж сам следи чтобы он у тебя не перепутался. По мне так это куда лучше сохраняет совместимость интерфейса с новыми версиями библиотеки!

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

Вот водка — популярна тема. А самоучителей как пить водку нема. Неувязочка.

ISBN 5-902617-18-9

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

А и верно. Онанизм популярнее ООП, а вала обучающей литературы нет. Вот что значит настоящая интуитивность.

А ты говоришь «книжки по ООП».

Так это не я утверждаю, что ООП самоочевидно, интуитивно понятно и т.п.

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

Онанизм популярнее ООП, а вала обучающей литературы нет

Есть обучающий материал с наглядной демонстрацией в более удобном формате.

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

Онанизм популярнее ООП, а вала обучающей литературы нет

Есть обучающий материал с наглядной демонстрацией в более удобном формате.

И что, в университетах уже заставляют использовать?

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

Что значит «заставляют использовать»? А что в университетах вообще «заставляют использовать»? Там учат. Не нравится — можете не учиться.

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

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

«Наливай да пей» это инструкция для алкоголиков, такое мне не интересно.

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

Так это не я утверждаю, что ООП самоочевидно, интуитивно понятно и т.п

Да, ты говоришь, что программирование — это сложно и понятно, и этому нужно учиться. Я могу еще космические ракеты вспомнить — там вообще интуитивной ясности выше крыши.

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

Мой любимый вопрос к тем, кто думает, что программирование интуитивно понятно: «Как ты пишешь программы?».

После нескольких интуитивно понятных, но неправильных, попыток на него ответить, меня готовы бить ногами, но здоровья на это не хватит. Программист — зверек хилый.

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

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

по сабжу:

меня это заявление даже радует, т.к. я не осили ООП (прикрываясь тем, что я админ)=)

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

а я специально стал листать в надежде его увидеть:)

Он пишет на Си :)

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

Всякие попадаются.

Те, кто в спортзале проводит больше, чем за компом в свободное время, до такого «теста на интуицию» просто не дойдут. Тестостерон не способствует.

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

у нас тут ведьмак бегает. я периодически с его тестостероном на форуме сталкиваюсь. все у него с ним в порядке=)

p.s.

а ты крепко подумал с 2001 года и перешел из ro в rw на лоре?:)

crypt ★★★★★
()
Последнее исправление: crypt (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.