LINUX.ORG.RU
ФорумTalks

Отрицательные составляющие ООП, что скажете?

 


0

2

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

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

Накладные расходы на память: каждому объекту требуются метаданные для администрирования. Миллионы мелких объектов фрагментируют рабочую память (ОЗУ).

Промахи кэша ЦП: современные процессоры работают быстрее всего с линейными структурами данных (ориентированный на данные дизайн). ООП разбрасывает данные в памяти, что замедляет работу ЦП.

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

Успешные альтернативы: современные языки, такие как Rust, Go или Zig, предпочитают композицию, простые структуры (Structs) и функциональный подход вместо жестких иерархий классов.



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

ниша ООП — это написание гуёвых интерфейсов

То-то его из оплота гуёвых интерфейсов — Реакта — попросили под зад коленом, и не сожалеют о содеянном.

Из борделя за аморалку, так сказатб.

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

И вот так ты тянешь этап за этапом все косяки предков

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

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

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

…и надо идти перепердоливать всю иерархию наследования ниже развалившегося класса.

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

…и надо идти перепердоливать всю иерархию наследования ниже развалившегося класса.

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

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

А тепер представь, тебе нужен не точно такой класс, а чуть другой дом на основе этого.

А проблема тут в том, что унаследовалось еще и подвальное помещение

Я так понимаю в таком случае делают более абстрактный класс более «верхнего» уровня - ну например класс «Объект недвижимости» - и в него пихают только то, что гарантированно нужно вообще абслютно всем домам, баням и гаражам. Ну например там кадастровый номер и координаты местнахождения. И от него уже наследувают.

Вроде логично выглядит, или это тоже уже нынче плохо считается?)

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

И вот ты изобрел комозицию? Что мешает разбить этот общий класс на абстрактные и не наследовать, а просто использовать в нашем итоговом?

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

вся жЫрная ветка с теплыми полами осталась без изменений

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

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

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

С точки зрения строителя, эта ценная информация вообще никак не нужна для его работы %)

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

После таких строителей потом соседи судятся из-за 10 см. забора :)

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

или это тоже уже нынче плохо считается

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

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

Что эти кадастровые номера и координаты делают внутри объектов?

А где, согласно эталоннй ООПешной идеее, они должны быть?

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

А где, согласно эталоннй ООПешной идеее, они должны быть?

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

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

а не родителя

Пижди, откуда родители взялись? Речь о классах и об абстрактном классе в частности же.

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

Что мешает разбить этот общий класс на абстрактные и не наследовать, а просто использовать в нашем итоговом?

вопрос не в том, что мешает, а в том - что помогает?
ничто не мешает труселя через голову надевать
но помогает ли это делать жизнь проще?

возвращаясь к нашим баранам - можно попилить все хоть на доски, хоть на дрова, хоть на опилки - «ничто не мешает» (с)
но проще все-таки со шкафом работать как со шкафом, а не с набором дощечек из комплекта «сделай сам».
тем более не как «вылепи себе сам из мешка опилок».

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

удачи в строительстве,
привет прорабам!

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

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

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

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

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

Где-то выше, в коде который управляет группами таких объектов. Например, кадастровый номер это явно какая-то уникальная идентифицирующая данный объекта штука и может быть ключом в объекте мапе (представляющий целый район города), в таком объекте ему место, здесь активно используется, а объектам нижнего уровня он для чего не нужен. В этом и смысл оопешной черноящиковости в какой-то мере действительно полезный.

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

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

Ну вообще да

Я наверное слишком по DBA-шному мыслю про объекты, мне надо чтобы у всех штучек обязательно были свои PK. Иначе паничка долбит 😁

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

Понял, ошибка проектирования, а не то что я подумал :)

Понял +реализация :)

Ты описал более-менее средний проект на языке с ООП.

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

На святое покушаетесь! Защищать косяки инструмента недостатком квалификации исполнителя это классика. Как же мы без этого?

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

На святое покушаетесь! Защищать косяки инструмента недостатком квалификации исполнителя это классика. Как же мы без этого?

Каковы предложения? Изменить мир? Сразу и везде? Тебя не Адольфом кличут?

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

Тебя не Адольфом кличут?

Не, я не он. Я рисую гораздо хуже.

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

но это косметика

Вот из-за такой «косметики» лет через 25 очень трудно искать почему полы вдруг греть перестали.

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

но проще все-таки со шкафом работать как со шкафом, а не с набором дощечек

Нет, если бы ты поработал на сборке корпусной мебели, ты бы узнал, что шкаф мы собираем не из опилок, не из других шкафов, а в из типовых дощечек. Ты путаешь работу со шкафом с производством шкафа. Мы не создаем шкаф-купе из кухонного шкафа - это бессмысленно. Мы делаем обоих из типовых дощечек. Это полки, стойки, дверцы.

Меняются лишь размеры этих типовых дощечек.

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

Ты путаешь работу со шкафом с производством шкафа.

ты путаешь производство шкафа с производством полочек для шкафа. и вешалок для шкафа. имея в руках готовый шкаф действовать проще, чем когда у тебя в руках набор типовых дощечек, из которых ты можешь гибко выбирать что склепать - то ли шкаф, то ли БМП, то ли банковское хранилище, то ли ящик рыболова, «то ли лошадь, то ли бык, то ли баба, толь мужик» (с)

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

лет через 25 очень трудно искать

это да, через 25 лет вообще хрен чего найдешь.
проще спроектировать и запрограммировать заново.
забывчивость - двигатель прогресса, бгг

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

Нет, полка и стойка это технические термины, а не бывтовые. Полка - это любая горизонтальная доска. Стойка - любая вертикальная. Это те модули, из которых строится любой шкаф. Кухонный, шкаф купе, стол. Не важно - вся корпусная мебель.

А есть еще и фурнитура - те самые вешалки. Они тоже отдельными модулями.

И в программах для производства мебели есть готовые объекты для построения разных типов шкафов. И они тоже строятся из этих базовых элементов.

Чтобы начать собирать мебель, ты должен понимать именно из каких блоков состоит шкаф, а не на что он похож.

И да, если ты начнешь наследовать от «кухонной тумбы», ничего хорошего не выйдет. Даже кухонная тумба бывает очень разной комплектации под разные задачи. Например боковые стойки (стенки тумбы) могут стоять на нижней полке (на дне), а могут находится по бокам от дна. И разница тут в назначении тумбы. Зависит от нагрузки на это самое дно и на стенки.

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

Чтобы начать собирать мебель, ты должен понимать именно из каких блоков состоит шкаф

сдаюсь, ты мебельщик круче

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

Я просто описал свою эволюцию и работу на фабрике. От проектировщика до сборщика и установщика. Вот меня мастер так однажды посадил и спросил: «Из чего состоит кухонная тумба?». А я даже проблеять ничего не смог. Вот он мне и показал стандартные элементы.

Оказалось, все очень просто, логично, отработано даже не знаю сколькими годами или десятками лет эволюции.

То же самое мне и помогло в проектировке мебели.

Я думаю, если мы возьмем строительство - там будет то же самое. Да и много где.

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

Да и много где.

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

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

в принципе и стройка и мебель с ним охотно поборолись бы за майку лидера, но там затраты на один только бетон и станки такие

Ахаххаха.. Знал бы ты сколько материала уходит в мусор. Портится сборщиками, установщиками итд. Не знаю про строительство, но я лично испоганил минимум каждую 5-10 деталь. Представь, дорогущий фасад МДФ крашеный. На него усилий угроблено не один день. Это распиловочный цех, фрезеровка, потом покраска. А я одним движением ставлю шуруповерт со сверлом на метку и не замечаю, что сверло вставлено чуть криво… И через весь фасад этим сверлом провожу кучу царапин. Все - на покраску заново.

Косяки есть везде, где можно накосячить. А мастерство достигается только опытом и тысячами повторений одного и того же. Больше повторяешь, меньше косячишь.

Дорогущие станки тоже ломают просто по кд. Тут и отсутствие опыта у работников и отношение хозяев. Везде раздолбайство.

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

Везде раздолбайство.

кроме ювелиров!
хотяаааа…. если в стоимость бриллиантов закладывать косяки подмастерий…

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

я лично испоганил минимум каждую 5-10 деталь

Ну кто бы мог подумать.

thesis ★★★★★
()

Отрицательные составляющие ООП, что скажете?

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

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

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

Скажу что это полный бред сродни «отрицательным составляющим молотка».

Это плохая аналогия, и потому вывод о бредовости тоже плохой.

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

И вот в таком раскладе у гвоздей (+молотка) есть вполне обсуждаемые отрицательные и положительные составляющие, по сравнению с саморезами (+отвёрткой/шуруповёртом). И их достоинства и недостатки друг перед другом как-раз вполне имеет смысл обсуждать, это не бред.

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

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

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

И вот в таком раскладе у гвоздей (+молотка) есть вполне обсуждаемые отрицательные и положительные составляющие, по сравнению с саморезами (+отвёрткой/шуруповёртом).

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

Простите, не смог удержаться.

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

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

Этот тезис принимается многими на веру некритично! На деле он вызывает сомнения! Чтобы их рассеять, необходимо провести эксперимент и сравнить плохо вбитый сморез с хорошо закрученным гвоздём по своим свойствам, так сказать, на практие. И вот при проверке, вынужден констатировать, что я столкнулся с, похоже, общей проблемой экспериментаторов при попытке получить вбитый саморез и закрученный гвоздь для последующей проверки их свойств. Если плохо вбить саморез не составляет труда, то хорошо (или хотя бы даже как-то) закрутить гвоздь у меня ни разу не получилось! На этом этапе эксперимент срывается в виду невозможности подготовки одного из исследуемых сэмплов :(

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

Если плохо вбить саморез не составляет труда, то хорошо (или хотя бы даже как-то) закрутить гвоздь у меня ни разу не получилось!

Меня больше настараживает, что ты пытался. Хотя и не удивляет.

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

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

Например, зачем писать MVC-фреймворк, когда можно заставить чатбота на rust писать лапшу. ;)

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

когда можно заставить чатбота на rust писать лапшу

А можно научить их писат не лапшу? Ведь они речь разумную понимают, а как писать не лапшу - нет. Непонятновое…

LightDiver ★★★★★
()

Добавлю-ка я ТС-а в игнор. Чисто карантин на всякий случай.

dimgel ★★★★★
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)