LINUX.ORG.RU
ФорумTalks

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

 


3

2

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

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

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

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

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

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

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

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

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

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

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

Садик был норм. Для того меня территория была огромная. А поля, за дачей/огородом, там и бегал =)

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

если я не ошибаюсь там вообще все на асме, для тех самых мэйнфреймов, кстате, вот поверх них американцы до сих пор крутят COBOL с каким-то софтом связанным с авиаперевозками

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

Если ООП такая простая и интуитивно понятная штука, то почему по ней столько обучающей литературы: начиная от паттернов и кончая всякими UML-диаграммами?

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

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

+100500.

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

Молодец, ты первый кто в этой теме вспомнил про UML. А я тебе отвечу из личной практики, UML - это совершенный язык блок-схем как один программист другому может хоть что-то объяснить.

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

UML просты до безобразия, с шаблонами немного сложней, тут хотя-бы работать надо!

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

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

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

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

Есть примеры на вполне конкретных языках. В книге про GoF используются примеры на Smalltalk и C++. И для Smalltalk примеры лаконичные и элегантные, а в C++ намного более многословные и опасные (сплошные указатели и выделения памяти в куче). Предполагаю, что на C++ они писали потому, что в то время этот язык был модным. Соответственно, книжку бы никто не понял и не купил, если бы примеры были только на Smalltalk. Подумайте, зачем вообще в этой книге примеры на Smalltalk, если его синтаксис большинство программистов не понимает.

Крейг Ларман писал свою книгу позже и у него уже примеры на Java (хотя их не так много). При этом, в одном месте он пишет, что примеры могли бы быть и на C#, Python, C++, а в другом благоразумно C++ убирает из этого списка.

Смотрите на это абстрактно!

Смотреть будем абстрактно, а ошибки будут прилетать конкретные.

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

блин, давай так, чтоб не писать бессмысленных 100500 букаффф. Используй что-то более современное, например, refactoringuru. Вот тут абстрактное мышление точно же должно сработать!

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

все на асме, для тех самых мэйнфреймов, кстате, вот поверх них американцы до сих пор крутят COBOL с каким-то софтом связанным с авиаперевозками

С авиаперевозками – отдельная специализированная система, оптимизированная для характеристик аппаратуры 1960-х: скорости вращения диска etc. То, что сейчас стало z/TPF. Там действительно было много прикладного кода на асме.

Сейчас, конечно, для работы можно использовать более попсовый инструментарий: Eclipse, С++ и т.п.

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

Это как под хвост заглянуть, система распознавания свой-чужой.

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

UML - это совершенный язык блок-схем как один программист другому может хоть что-то объяснить.

Не сможет, потому что они оба его не знают.

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

Если ООП такая простая и интуитивно понятная штука, то почему по ней столько обучающей литературы: начиная от паттернов и кончая всякими UML-диаграммами?

Есть спрос — есть предложение. А сколько видео всяких разных по обучению питону, и книжек, и статеек, и курсов. Питонистов уже скоро некуда будет девать. Как и ООП-шников. Собственно, питонисты и есть ООП-шники.

byko3y ★★★★
()

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

Ныне в тренде не ООП, а технология программирования

Херак, херак и в продакшен.
anonymous
()

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

Говорила мама мне про ООП обманный,
Да напрасно тратила слова,
Затыкала уши я, я её не слушала,
Ах, мама, мама, как же ты была права.
anonymous
()

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

Этого мало!
Нужно: сказки страшилки сочинить, песни, …

Нужно спасать молодое поколение от этой трясины.  
Сегодня не спал от негодования всю ночь ...   
anonymous
()

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

Иной взгляд на ООП.
Как известно нас окружили акулы капиталистического мира.
Так вот хорошие технологии они прячут, в всякую дрянь типа ООП - ПРОДВИГАЮТ.

Это заговор!
anonymous
()
Ответ на: комментарий от korvin_

Да, я верил что OCaml сможет. Ок, наследование интерфейсов победили. Теперь перейдём к полиморфизму.

Есть у нас файл, который грузится как одномерный массив. И этот одномерный массив мы можем преобразовать в картинку, а картинку в текст. При этом ни текст, ни картинка не являются наследниками файла. И, держа в голове эту идею, идём разрабатывать GUI-фреймворк.

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

Хорошо, GUI-фреймворк - это сложно. Возьмём другой пример. Например, делаем стратегию, где есть разные типы солдат. Пусть у нас будут классы «стрелок» и «гранатомётчик». Мы их можем отнаследовать от класса «солдат», а можем сделать наивную реализацию через структуру с полем типа солдата.

Какие плюсы у наивной реализации?

  1. Мы можем легко преобразовать стрелка в гранатометчика и обратно, просто меняя поле. В случае наследования придется пересоздавать объект с помощью специальных функций, которые знают, какие данные надо переносить, а какие нет. При этом мы, например, можем потерять данные о накопленных стрелковых навыках солдата при нескольких преобразованиях, так как у гранатомётчика нет поля для этих данных.
  2. В памяти эти структуры лежат друг за другом, что позволяет оптимизировать обработку массива солдат.

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

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

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

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

Полно таких языков: C/C++/Go/Pascal(не мейнстримный, правда, но бывший).

anonymous
()

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

Что про STL скажете?

Сам то ее не использую, потому как тасовать байтики можно и без помощи Степанова /свой API в котором vector, … имеется/ …

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

Откуда спрос на обучающую литературу по интуитивно понятной теме?

Интуитивная понятность — она такая. У каждого своя.

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

Сам то ее не использую, потому как тасовать байтики можно и без помощи Степанова /свой API в котором vector, … имеется/ …

Кстати в разрабатываемом OLE /конечно кроссплатформенное/ в struct используется например vector, да не тот, что в STL.
Например

  vector< DlgItemTemplateEX_ >  Controls;
anonymous
()
Ответ на: комментарий от Nervous

У меня из-за вас вьетнамские флешбэки пошли. Вспоминаю свою погубленную Ландафшицем молодость с ихъ «очевидно» и «легко показать». :-(

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

Почему так много обучающей литературы по сексу? Потому что есть спрос ввиду популярности темы.

Духовной и телесной распущенности …

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

Не знаю, никогда не интересовался подобным вопросом. А вот представить состоявшегося программиста, который игнорирует учебную литературу сложно. В этом отличие между настоящей интуитивностью и «интуитивно понятно, что квадрат наследуется от прямоугольника (или наоборот)».

ugoday ★★★★★
()

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

Как сказал бы Хазанов

Если есть ООП значит есть C++.  
Если есть C++ значит есть ООП.  
С++ лучше использовать без ООП.
anonymous
()
Ответ на: комментарий от Djanik

Почему так много обучающей литературы по сексу? Потому что есть спрос ввиду популярности темы.

Sorry
Логика типа

Почему сегодня был дождь?  
Потому что в Сомали корова усралась.
anonymous
()
Ответ на: комментарий от ugoday

Количество обучающей литературы зависит от хайпа вокруг темы. Борьбой с сусликами мало кто интересуется и литературы по этому вопросу очень мало.

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

Но ведь наследовать квадрат от прямоугольника(или наоборот) именно из учебной литературы и пошло…

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

Там везде отличия будут, поэтому не важно. setWidth() например.

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

литературы по сексу?

обучающей

Кто ищет, тот всегда найдет. Но я бы не сказал, что они «обучающие».

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

Почему так много обучающей литературы по сексу? Потому что есть спрос ввиду популярности темы.

Маяковский вам ответил бы так

Ночь  
  Лежу на жене.  

Одеяло
    прилипло
          к жопе.  

Я кую кадры  
        Советской Стране  
на зло
    буржуазной Европе 
anonymous
()
Ответ на: комментарий от anonymous

Почему так много обучающей литературы

к жопе

В литературном русском языке такого слова нет. Так что это - не литература.

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

Лучший ответ за 9 страниц флуда больных с владимирами. Говномодератор отметился на первой странице, а тред все еще висит. Мде…

Зато этот пост удалят.

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

На чём? C++ ООП своровал заимствовал откуда-то там, из simula, кажется.

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

Ты про Python и Java/C# не попутал? Если что на Python-е как раз редко кто ООП обмазывается сильно. А вот на Java/C# можно только ООП использовать.

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

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

Границы у тебя в голове. А под забором малой всегда может пролезть…

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

Откуда спрос на обучающую литературу по интуитивно понятной теме? Вот, что меня смущает

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

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

Вы всё же объясните зачем читать литературу по интуитивно понятным вещам.

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

кто совсем не имеет способностей к программированию — вот для них и пишут.

Они и пишут.

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