Александр Горный ([info]gornal) wrote,
  • Music: тишина

Объектно ориентированное программирование

Моё глубочайшее убеждение состит в том, что Web-программирование и объектная модель друг другу противопоказаны. Да, конечно, функционально тоже можно программировать плохо, но ООП и ООД дают слишком много дополнительных возможностей, чтобы испортить код, не предоставляя взамен совершенно никаких бонусов. (Почему при этом проекты у нас ОО - вопрос отдельный, стоит отдельного поста, но вряд ли этот пост когда-нибудь будет написан.)

Естественно, сейчас я в подавляющем меньшинстве, но так как у меня есть гражданская ответственность - в меру сил пытаюсь соотношение исправить. Любимый вопрос на собеседованиях: "А какой стиль Вы предпочитаете? Процедурный или объектный?". Все естественно начинают рассказывать про ОО (даже если не знают, чем private отличается от protected - ОО это же модно, а "с преподавателями надо всегда соглащаться"(c)), но вот дальше, после вопроса "А почему? Чем он лучше?" могут только мямлить. Если выжимать конкретику, то в 70% случаев оказывается, что объектное программирование позволяет проще сменить хранилище данных, дальше, естественно, следует "А часто ли Вам приходилось это делать в реальной жизни" и ответ "Ни разу". Может быть, после этого они и задумываются о чем-либо, по крайней мере, я чувствую, что сделал что-то полезное.

Вчера пациент, наконец, впервые вспомнил случай и он такой показательный, что не могу его не описать. Собеседуемому на одной из работ достался в наследство красивый, объектно-ориентированный код, который хранил все свои данные в одном XML-файле. Ну а он героически перевел его на mysql. Это примерно всё, что я могу сказать об ООП в вебе:

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

XML, я кстати, люблю примерно так же, как объекты.
Tags: децимация, наша служба и опасна и трудна

  • Post a new comment

    Error

  • 255 comments

[info]quappa

February 16 2008, 12:36:31 UTC 4 years ago

++, но с вопросом. А что такого особенно несовместимого с ООП, по-твоему, в web-программировании?

[info]gornal

February 16 2008, 12:55:17 UTC 4 years ago

1. Отсутствие состояний. Любой веб-скрипт это "получить команду пользователя, достать данные из базы, положить в базу изменения, вывести результат пользователю", иногда одна-две-три стадии оказываются не нужны. Где здесь место для объектов-событий-сообщений? (В Аякс-приложениях уровня pusk.ru/pro.mail.ru (НЕ в Аякс-удалении комментария!) объекты на стороне клиента, вероятно, полезны.)

2. Производительность. В вебе производительность до сих пор очень важна, при этом основные её потери не в бизнес-логике, а как раз в тех мелочах, которые ООП должен маскировать (и маскирует) от программиста.

[info]hedin

4 years ago

[info]gornal

4 years ago

[info]hedin

4 years ago

[info]gornal

4 years ago

[info]hedin

4 years ago

[info]gornal

4 years ago

[info]hedin

4 years ago

Deleted comment

[info]hedin

4 years ago

Deleted comment

[info]hedin

4 years ago

[info]hedin

4 years ago

[info]sdfgh153

3 years ago

[info]skyer

4 years ago

[info]alll

4 years ago

[info]gornal

4 years ago

[info]alll

4 years ago

[info]gornal

4 years ago

[info]alll

4 years ago

[info]hedin

February 16 2008, 12:44:01 UTC 4 years ago

И таки что? таки тебе никто не смог обьяснить преимущество ОО перд процедурным програмированием?

И таки тебе в серьез интересно послушать ответ на этот вопрос?

А вот про дополнительные возможности испортить код, можно поподробнее?

[info]gornal

February 16 2008, 12:57:16 UTC 4 years ago

1. В случае веба - никто. Очень сложно найти черную кошку в темной комнате, особенно, если её там нет.
2. Попробуй :-)
3. http://gornal.livejournal.com/55794.html?thread=479986#t479986 - пункт 2.

[info]hedin

4 years ago

[info]gornal

4 years ago

[info]beldmit

4 years ago

[info]hedin

4 years ago

[info]gornal

4 years ago

[info]hedin

4 years ago

[info]gornal

4 years ago

[info]hedin

4 years ago

[info]gornal

4 years ago

Deleted comment

[info]hedin

4 years ago

[info]hedin

4 years ago

[info]gornal

4 years ago

[info]hedin

4 years ago

[info]gornal

4 years ago

[info]hedin

4 years ago

[info]gornal

4 years ago

[info]hedin

4 years ago

[info]gornal

4 years ago

[info]hedin

4 years ago

[info]earwin

3 years ago

[info]earwin

3 years ago

[info]sigterm

February 16 2008, 15:03:37 UTC 4 years ago

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

[info]gornal

February 16 2008, 15:20:49 UTC 4 years ago

В этом случае неестественно использовать эти языки для веба. Характерно, не давно читал статью фаната RoR про их проект, там фраза типа "не стали использовать репликацию, потому что в RoR это достаточно сложно". Между прочим, Яндекс.

[info]sigterm

4 years ago

[info]gornal

4 years ago

[info]sigterm

4 years ago

[info]gornal

4 years ago

[info]sigterm

4 years ago

[info]sigterm

4 years ago

[info]gornal

4 years ago

[info]sigterm

4 years ago

[info]gornal

4 years ago

[info]taraslive

February 16 2008, 17:16:10 UTC 4 years ago

Спасибо. Я сам был всегда сторонник этой идеи, но побаивался её активно продавливать, так как считал себя нерепрезентативным, я мне ОО вообще никаким боком никогда не был нужен.

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

Буду в понедельник рассказывать что ОО это недостаток языка :)

[info]hedin

February 16 2008, 23:22:11 UTC 4 years ago

Можно таки уже от когонибудь пример?

Я вам потом покажу кусочек phpBB чтоб вам хорошо стало :-)

[info]taraslive

4 years ago

[info]hedin

4 years ago

[info]taraslive

4 years ago

[info]hedin

4 years ago

[info]taraslive

4 years ago

[info]hedin

4 years ago

Anonymous

February 16 2008, 18:27:04 UTC 4 years ago

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

[info]gornal

February 16 2008, 21:06:00 UTC 4 years ago

И в чем же эти преимущества?

Anonymous

4 years ago

[info]gornal

4 years ago

[info]skyer

4 years ago

Anonymous

4 years ago

[info]sigterm

4 years ago

Anonymous

4 years ago

Anonymous

4 years ago

[info]ormuz

February 16 2008, 19:03:39 UTC 4 years ago

Я конечно, совсем не спец в веб программировании,
но разве обьектно ориентированное программирование и функциональное программирование ортогональны?

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

[info]beldmit

February 16 2008, 19:06:06 UTC 4 years ago

Правильный ответ на вопрос о стиле: тот, который используется в этом проекте сейчас.

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

[info]raa

February 16 2008, 19:22:51 UTC 4 years ago

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

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

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

[info]hedin

February 16 2008, 23:10:26 UTC 4 years ago

Может разясните что за проблемы с ООП и работой с хранилищами?

Или вы считаете что человек пишущий в ООП стиле по определению "не врубающийся в реляционную модель"?

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

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

Если ее много и она важна, значит пишем фабрику порождающую группу обьектов из 1 грамотно составленого запроса. А иногда можем и сериализовать обьект.

Все в руках програмиста.

[info]raa

4 years ago

[info]hedin

4 years ago

[info]gornal

4 years ago

[info]sigterm

4 years ago

[info]gornal

4 years ago

[info]sigterm

4 years ago

[info]gornal

4 years ago

[info]hedin

4 years ago

[info]madm1ke

4 years ago

[info]hedin

4 years ago

[info]hedin

4 years ago

[info]hedin

4 years ago

[info]raa

4 years ago

[info]hedin

4 years ago

[info]raa

4 years ago

[info]hedin

4 years ago

[info]mike_mihalych

February 17 2008, 00:30:20 UTC 4 years ago

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

Мои любимые грабли. :-)

[info]quappa

February 17 2008, 15:37:48 UTC 4 years ago

А ещё ООП проще, соответственно найти людей легче.

[info]hedin

February 18 2008, 07:00:07 UTC 4 years ago

Эх, хорошо похоливарили ... ты не против ссылок сюда?

[info]voronka

February 18 2008, 16:16:26 UTC 4 years ago

Отчасти согласен. Но причина ИМХО в другом. Трудно (а зачастую просто невозможно невозможно) эффективно работать с хранилищами оперируя объектами, представляющими какие-то логические сущности. Все это касается естественно только высоконагруженных проектов и большого объема данных в хранилище. Программисту предоставляется крайне опасная и губительная возможность абстрагироваться от способа хранения данных, что порождает крайне неэффективную работу с этим самым хранилищем. А в подавляющем большинстве случаев именно оно является узким местом.
Если же проект не особо нагружен и не требует большой аккуратности в работе с хранилищем, но требует постоянных значительных переделок в логике проекта - ООП всеж рулит, буть он на перле или на настоящем ОО языке.

Deleted comment

[info]voronka

4 years ago

Anonymous

4 years ago

[info]voronka

4 years ago

Anonymous

4 years ago

[info]hedin

4 years ago

[info]voronka

4 years ago

[info]hedin

4 years ago

[info]plumqqz

4 years ago

[info]voronka

4 years ago

[info]plumqqz

February 19 2008, 10:19:22 UTC 4 years ago

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

Deleted comment

[info]plumqqz

4 years ago

Deleted comment

[info]plumqqz

4 years ago

[info]hedin

4 years ago

[info]plumqqz

4 years ago

[info]hedin

4 years ago

[info]plumqqz

4 years ago

[info]hedin

4 years ago

[info]plumqqz

4 years ago

[info]hedin

4 years ago

[info]plumqqz

4 years ago

[info]hedin

4 years ago

[info]gornal

4 years ago

[info]hedin

4 years ago

[info]plumqqz

4 years ago

[info]hedin

4 years ago

[info]plumqqz

4 years ago

[info]hedin

4 years ago

[info]plumqqz

4 years ago

[info]hedin

4 years ago

[info]plumqqz

4 years ago

[info]hedin

4 years ago

Deleted comment

[info]gornal

4 years ago

[info]itman

February 20 2008, 09:02:28 UTC 4 years ago

Вот, например, некая хуевина обрабатывает текст кусками и что-то там запоминает у себя, что после обработки всех кусков сделать несколько магических пассов на полученным текстом.
Я готов разлюбить объекты, если Вы мне объясните, как в таком случае можно обойтись без паттерна состояние?
Класс State
функции
doPiece(somePiece)
doFinal(reference to someText)

PS: Да, код должен быть удобным, надежным (ау инкапсуляция) и сопровождаемым, структуры с all open members, просьба, не предлагать.

[info]gornal

February 20 2008, 09:14:29 UTC 4 years ago

my $h;
while(<>) {
$h=add($h,$_);
}
final($h);

?

[info]itman

4 years ago

[info]gornal

4 years ago

[info]itman

4 years ago

[info]itman

4 years ago

[info]gornal

4 years ago

[info]itman

4 years ago

[info]gornal

4 years ago

[info]itman

4 years ago

[info]hedin

4 years ago

[info]b00ter

February 27 2008, 21:25:04 UTC 4 years ago

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

[info]tvok

February 28 2008, 08:32:02 UTC 4 years ago

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

[info]b00ter

4 years ago

[info]tvok

4 years ago

[info]efreeti

4 years ago

[info]b00ter

4 years ago

[info]efreeti

4 years ago

[info]b00ter

4 years ago

[info]efreeti

4 years ago

[info]b00ter

4 years ago

[info]efreeti

4 years ago

[info]b00ter

4 years ago

[info]efreeti

4 years ago

[info]b00ter

4 years ago

[info]efreeti

4 years ago

[info]b00ter

4 years ago

[info]efreeti

4 years ago

[info]b00ter

4 years ago

[info]efreeti

4 years ago

Anonymous

3 years ago

[info]norguhtar

February 28 2008, 11:49:14 UTC 4 years ago

Ага. Шесть раз.

Вы еще корпорации Sun расскажите, про то что их их технлогии JSP и Servlet оказывается полная фигня.
Вообще-то зависит от того как у вас организовано вебприложение и какой оно сложности. Если приложение работает как в CGI (т.е. отработало и выключилось и нет никаких промежуточных состояний) и сложность ПО небольшая, то лучше будет процедурный метод. В случае если у вас есть таки и промежуточные состояния и сложно ПО высокая, то лучше использовать ООП.

[info]plumqqz

March 4 2008, 10:05:45 UTC 4 years ago

Re: Ага. Шесть раз.

Вы еще корпорации Sun расскажите, про то что их их технлогии JSP и Servlet оказывается полная фигня.

А что, разве частичная?

[info]norguhtar

4 years ago

[info]plumqqz

4 years ago

[info]norguhtar

4 years ago

[info]plumqqz

4 years ago

[info]norguhtar

4 years ago

[info]plumqqz

4 years ago

[info]norguhtar

4 years ago

[info]plumqqz

4 years ago

[info]norguhtar

4 years ago

[info]plumqqz

4 years ago

[info]norguhtar

4 years ago

[info]plumqqz

4 years ago

[info]norguhtar

4 years ago

[info]plumqqz

4 years ago

[info]norguhtar

4 years ago

[info]plumqqz

4 years ago

[info]norguhtar

4 years ago

[info]plumqqz

4 years ago

[info]norguhtar

4 years ago

[info]plumqqz

4 years ago

[info]norguhtar

4 years ago

[info]gornal

4 years ago

[info]norguhtar

4 years ago

[info]norguhtar

4 years ago

[info]norguhtar

4 years ago

[info]norguhtar

4 years ago

[info]norguhtar

4 years ago

[info]norguhtar

4 years ago

[info]norguhtar

4 years ago

Anonymous

April 15 2008, 13:19:59 UTC 4 years ago

Бред полный написан.

Ты посмотри сначала на такие системы как Catalyst & DBIx::Class, не с высока, не пролистав, а реально заюзав и влившись в атмосферу. Он они не "без состояний", там еще как есть состояния. Тогда таких совершенно дурацких постов не будет.

Anonymous

May 1 2009, 07:39:28 UTC 3 years ago

Need to download XRumer 5.0 for free!

Hi, my friends!! I want to download program XRUMER 5.07 Palladium free. Any download link?
I'm so need this magic program! It's can break captchas automatically! Activate accounts via email automatically too! Absolutely great software! Help me!
And did you hear news - price for XRumer 5.0 Palladium will grow up to $540 after 15 may 2009... And XRumer 2.9 and 3.0 - too old versions, it's cant break modern catpchas and cant break modern anti-bot protections. But XRumer 5.0 Palladium CAN!!!!
So help me for download this great soft for free! Thanks!
Create an Account
Forgot your login or password?
Facebook Twitter More login options
English • Español • Deutsch • Русский…