LINUX.ORG.RU

ООП - большой пузырь?

 


1

2

Доброго времени! По Вашему мнению, имеет ли смысл возня вокруг ООП? Все чаще ловлю себя на мысли, просматривая сорцы какого нибудь фреймворка, что всё слишком усложнено и виной этому ООП, скорее даже виной этому являются авторы кода, которые слишком глубоко упёрлись в программирование ради программирования. Код сложен, много слоёв абстракций, сложные иерархии наследования, примеси... Кажется все это существует чтобы просто усложнить процесс разработки и получать больше денег, больше занятости, имитировать деятельность. Не кажется ли вам, что просто Си или какой нибудь Го, проще для разработки реального кода в краткие сроки, вместо просиживания штанов за построением архитекторы ООП кода? Говорю с колокольни давнего ООПшника, который от этого дерьма подустал. Хоть в админство иди...


По Вашему мнению, имеет ли смысл возня вокруг ООП?

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

ya-betmen ★★★★★
()

Важно понимать что сам термин ООП не имеет строгого определения (лучше уточнять о чём речь, о Кеях всяких, замыканиях или абстрактных фабриках, чтобы разговор небыл похож на спор анонiмуса с царём) и является солянкой из хороших и не очень идей.

Полиморфизм — классно, инкапсуляция — если реализована так, что не мешает unit-тестированию — тоже классно, наследование — опасно.

имеет ли смысл возня вокруг ООП?

Нужно уточнить о чём конкретно речь.

Не кажется ли вам

Нужна суть.

anonymous
()

ООПы бывают разные

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

DonkeyHot ★★★★★
()

Си или какой нибудь Го

Там дженериков нет!

anonymous
()

просто Си ... проще для разработки реального кода в краткие сроки, вместо просиживания штанов за построением архитекторы ООП кода?

Ты делишь на ноль, использование Си для больших проектов обязательно подразумевает использование ООП, просто делается это в рамках Си. Другим словами всё что ты понаписал не имеет смысла.

mbivanyuk ★★★★★
()

Как раз сейчас закончил писать абстракцию для БД на С++. Реализация позволяет задавать состав таблиц, полей, умеет валидацию структуры и типов при подключении и т.д., при этом не привязана к конкретной СУБД. Как это можно сделать на С, описывая весь этот зоопарк только в одном хидере и в минимальном составе: имя таблицы, имя поля, нативный тип, тип хранения в БД, не используя ни наследование, ни шаблоны и без приготовления спагетти, приправленных макросами?

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

Человеку сложно держать в голове несколько объектов. А уровней абстракции, которые мозг способен разворачивать, и того меньше. Ничего не поделаешь, 6 слоев неокортекса.

Solace ★★
()
Ответ на: комментарий от deep-purple

Ответ в ФП стиле

Ответ в ФП стиле: Мая. Твая. Понимать. Соглашаться.

Ответ в ООП стиле: Я Вас прекрасно понимаю. И польностью согласен с Вашим мнением. Но, хочу заметить, очень часто без ООП никуда. Т.е. все же необходим симбиоз ФП и ООП. Но на деле чаще проявляется «ООП головного мозга». Мая. Твая. Понимать. Соглашаться.

data List a = Nil | Cons a (List a)

length :: List a -> Integer
length Nil = 0
length (Cons x xs) = 1 + length xs

map :: (a -> b) -> List a -> List b
map f Nil = Nil
map f (Cons x xs) = Cons (f x) (map f xs)

...more 1000 definitions of list operations here ...

параметрическая полиморфизма, натяльника.

---------- *** -----------

ООП


MyList := List clone

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

И в частности всё от того, что в ООП чёрт ногу сломит.

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

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

Ответ в ООП стиле: [Я понимать:Твоя сКачеством:Прекрасно].

Ответ в ООП стиле: [Я понял. Ты ниасилил. Печально...]

//finally fixed

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

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

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

Как это можно сделать на С, описывая весь этот зоопарк только в одном хидере и в минимальном составе: имя таблицы, имя поля, нативный тип, тип хранения в БД

struct tb table = {"table-name",
                    {{"f1", DB_VARCHAR, T_STRING, STORE_YES},
                     {"f2", DB_INTEGER, T_INT, STORE_NO}}};
monk ★★★★★
()
Ответ на: Ответ в ФП стиле от sadlinuxoid

more 1000 definitions of list operations here

Либа же, и в фп будет так же:

MyList := List clone

deep-purple ★★★★★
()
Ответ на: комментарий от sadlinuxoid

Правильная цитата. Вот только на практике не всегда все так радужно,говнокода в стиле ооп хватает, примеров, когда применение некой методики усложняет решение - тоже.

Кстати, цитата применима к любой методике вообще, ооп тут частный случай.

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

Любая ФП-абстракция выразим в рамках чистого ООП

Это ложь.

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

У мартышки с очками тоже не получилось:)

как у анонiмуса с ФП, да

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

Онанизмус не мог пройти мимо такого треда.

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

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

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

тогда давай и вторую сразу...

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

anonymous
()

Нет, не пузырь.

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

umren ★★★★★
()
Ответ на: тогда давай и вторую сразу... от anonymous

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

Заодно краткая истори этой пасты

A famous aphorism of David Wheeler reads: All problems in computer science can be solved by another level of indirection;[2] this is often deliberately mis-quoted with «abstraction» substituted for «indirection». It is also sometimes misattributed to Butler Lampson. Kevlin Henney's corollary to this is, "...except for the problem of too many layers of indirection."

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

Ну хорошо...И как привязать эту таблицу к клиентской либе СУБД? Гвоздями в 10 местах? А еще нужно предусмотреть конвертирование значений, т.к. не всегда строками и целыми можно обойтись (а еще различное кодирование символов, хранение бинарных структур с различным порядком байт), да и результаты с либы могут быть например в виде строк (в том числе и числа),а еще генерацию запросов (или их тоже подвязывать для каждой таблицы отдельно) и результатов запросов. И так, придется хардкодить во всех местах каждый раз, когда что-либо изменяется. Другой вариант ООП - один раз описал все абстракции и дополнил недостающими данными о требуемой структуре и типах, получив весь слой абстракции работы с БД, при этом легко изменяемый в едином месте. Да, абстракции довольно сложны для понимания, но зато получаем легкий в поддержке прикладной уровень.

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

И? Это все пишется как в рамках фп, так и в рамках обычного процедурного программирования, лишь бы полиморфизм присутствовал. ООП характеризуется инкапсуляцией состояний, а интерфейсы и нужные абстракции прекрасно пишутся и в виде функций.

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

И как можно, на том же C, отделить абстракцию от конкретных структур данных? Полиморфизм... Хорошо, но это будет означать переход от статического полиморфизма к динамическому (в рантайме) и не факт, что при этом получится оптимизировать структуру кода полностью полагаясь на компилятор. К тому же инкапсуляция состояний - это больше рантайм, а я говорю про удобство разработки(конкретизации абстракций) и поддержки кода, что ближе не к данным а к их типам. Ограничивая ООП до инкапсуляции можно и до POD дойти, но если смотреть шире...

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

Да тут у многих какой-то кризис в программировании. ТС'у: Ну нравится ФП - кодь на Go - кто не даёт? Многие современные языки прекрасно поддерживают две парадигмы: к примеру Python.

menangen ★★★★★
()

...

жООПа головного мозга.

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

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

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

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

maxmax
()

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

Когда ООП приобретает религиозные черты или свойства болезни, тогда начинаются проблемы.

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