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 ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.