[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Немного моих наблюдений на тему ООП
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
Zzepish
Всем привет.

Я, работая уже достаточно длительное время программистом, до сих пор не понимаю в полной мере ООП. Однако - недавно лед тронулся. Код стал стал лучше, более продуманным и расширяемым. Однако я заметил одну проблему: если код написан плохо и не очевидно, и, не дай Бог, к нему нет документации - дебажить фигову гору классов очень тяжело (а ведь все мы знаем, сколько сейчас уже всего готового ,и дебажить приходиться иногда очень огромные сегменты чужого кода). Из этого я делаю вывод: ООП - это круто, но только в том случае, если ваш код очевиден и интуитивно понятен, чтоб не надо было лезть "под капот", чтоб методы были легко читаемы и хорошо задокументированными (пример: мне нужен метод в каком-то классе, и я начинаю вводить его название, и он там таки есть, ибо это было очевиднм). За всю жизнь я такое встречал только в Zend Framework (и то - не везде), и, немного в Symfony Framework. В принципе - имея какой-то опыт, я могу разобрать достаточно быстро почти любой инструмент (тем-же дебагом), но как быть новичкам? Проблемы у них в том, что у них нет этого опыта и знаний. А куча кривого кода на просторах интернета просто множиться (во всяких либах и т.д.). А весь этот код написан на классах. В итоге - все думают что это ООП (хотя и не всегда). Имхо - отсюда и растет недовольство ООП у многих людей.

Что думаете?
Valick
Цитата (Zzepish @ 17.06.2019 - 12:27)
Что думаете?

так и есть


_____________
Стимулятор ~yoomoney - 41001303250491
twin
Цитата (Santehnick @ 18.06.2019 - 03:48)
Вот и всё. Даже в спор бессмысленно вступать, так как один пытается донести профит, а другой отстоять свой текущий уровень знаний.
Прикол в том, что ровно тоже самое можно сказать и в другую сторону. Многие просто переросли ООП, а многие так в нем и застряли, считая вершиной мироздания.

Так что кто что защищает и кто что оправдывает, вопрос двоякий. И если это просто ниочемный холивар, это одно. А если это как то обосновывается фактами и доказательствами - это другое.
Вот к примеру.

А тот, кто застрял на уровне махрового ООП будет отстаивать свой текущий уровень знаний. А вот дядька из ролика пытается донести профит. smile.gif

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

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

Если это получится,т я буду рад за него. Обычно этого ни у кого не получается. Так что все задекларированные преимущества ООП - чистая теория. Да и теория то так себе.

Справедливости ради нужно сказать, что и процедурный код вовсе не золотая пуля. Там тоже полно недостатков. Именно по этому я всегда агитирую за мультипарадигму. smile.gif

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Valick
Цитата (twin @ 18.06.2019 - 08:42)
Именно по этому я всегда агитирую за мультипарадигму.

какое красивое название для говнокода biggrin.gif

_____________
Стимулятор ~yoomoney - 41001303250491
twin
Цитата (Santehnick @ 18.06.2019 - 12:19)
Я не понимаю как это на практике.

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

Цитата (Santehnick @ 18.06.2019 - 12:19)
Нам свойственно мыслить объектами, а не процедурами или функциями.

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

И нет ни одного ЯП, который в полной мере назвать ООП-языком. Ну может разве что Smalltalk)))
В каждом есть какие то свои отступления. Так что по сути чистого ООП не бывает, другой вопрос на сколько у программиста хватает смелости признаться себе в этом, а главное, на сколько хватает смелости использовать фишки, которые другими ортодоксами типа Valick'а упрямо называются говнокодом.

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

Или хэлперы к примеру. Почему не использовать обычные функции, не заморачиваясь с неймспейсами. Наш любимый PHP на 90% состоит из функций и ничего. )))

Я про мидлвары вообще молчу.

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

НО это в части модификации. К тому же доменные объекты великолепно мапятся на реляционные базы. Так почему бы не использовать в рамках CQRS в части чтения те же сервисы и ту же процедурку?

Что мешает?

Вот ООП и мешает. И сильно. Как только в рамках ООП делается попытка использовать реляционные возможности, рождаются уродливые Active Records. Потому что иначе либо возникнет опасность импеданса, либо нужно забыть про SQL-возможности. И если в части модификации это вполне терпимо и даже удобно, то в плане чтения полный капец.

Хотя давно уже есть альтернатива, DOD (Data Oriented Design), который сам по себе не является золотой пулей, но в части чтения валит ООП на обе лопатки,

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

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

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

И так далее. Вы все, волей или неволей, осознавая это или нет, идете по неизбежному пути, в котором ООП рассыплется на мелкие кусочки, как бы не старались его слепить в кучу всевозможными SOLID и GoF. И он перестанет быть чем то божественным, а станет рядовым инструментом, одним из. И использоваться тоже будет не как главенствующая панацея, а как удобная на своем месте фишка. А это и есть мультипарадигма. Просто программирование, как и сказал Гаррет.

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

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.