проблемы объектного сознания

Статус
В этой теме нельзя размещать новые ответы.

fixxxer

К.О.
Партнер клуба
>> вредно пытаться нацепить сомописную ORM на БД

невозможность ручной оптимизации, impedance mismatch, недавно активно обсуждали

>> как заменить front controller на nginx

location /users/([0-9]+)/ {
set $page UserProfile;
set $user_id $1;
fastcgi_param... - читаем из $_SERVER
}

контроллер сокращается до грубо
include autoload;
$page = new { $_SERVER['page'] . 'Dispatcher' };
$page->run();

>> реализовать статистику на основе логов

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

>> работу с потоками

а зачем? кроном пускам что надо, методика с форками и пид файлами классическая.

кстати тут нигде объекты не мешают =)
 

crocodile2u

http://vbolshov.org.ru
Поддержу, как ни странно прозвучит - практически всех :)

Из беседы ясно: у каждого, кто исповедует свою ОО-религию, есть аргументы за нее, и есть опыт, который доказывает ее практическую пользу. Я только хочу высказать мысль, которую высказываю с завидной регулярностью: не будьте фанатиками :) Главное, чтобы вы могли отказаться от своих воззрений, если видите, что они противоречат истине или перестают приносить плоды. Чрезмерная преданность идеологии - плохо.

Если о личной позиции насчет ООП и всяких там ОРМов - в последнее время придерживаюсь примерно таких взглядов:
1. Почти исключительно пишу объектно-ориентированный код (мне так привычнее и удобнее, тормозов, появляющихся именно из-за ОО-подхода, не замечаю)
2. Стараюсь использовать простые связи между объектами и не использовать сложные (сложные паттерны типа Посетитель, например)
3. Стараюсь не использовать сильно глубокие иерархии наследования, часто ищу пути для замены наследования агрегированием.
4. ОРМ не использую - разве что простейшие операции выношу в ActiveRecord, TableGateway, TableRowGateway или что-то подобное. Сложные запросы, за исключением редких случаев - ручками, иногда - простенький Query-Object (в основном - в тех случаях, когда необходимо сформировать запрос динамически, например - применить кучу фильтров с пользовательскими значениями, каждый из которых опционален: в таких случаях Query-Object подходит идеально, не заставляя писать заново то, что уже написано)
5. Заглядываю внутрь: что же там творится за публичным интерфейсом? Черный ящик - черным ящиком, а только если что если он начнет много на себя брать?
6. Стараюсь использовать простые вещи: например, не использую PHP-оберток вокруг коннекта к БД, если есть PDO (ибо нафиг?)

Уф.. Ну вот, и меня понесло...
 

svetasmirnova

маленький монстрик
whirlwind
> а тайп хинтинг, эксепшены, паттерны, TDD - это круто.

А почему TDD и тайп хинтинг нельзя в процедурном языке использовать?
 

whirlwind

TDD infected, paranoid
тайп - type. классы образуют новые типы. а tdd ну я не встречал любителей так поизвращаться. a + b можно конечно протестировать, но когда стек вызовов поглубже будет стоимость тестирования вырастет в разы.
 

svetasmirnova

маленький монстрик
> тайп - type. классы образуют новые типы.

Как бы в C type hinting тоже есть, хотя ни разу не объектный. Даже скажем, без него практически невозможно. И помимо классов ещё enum-ы есть. И структуры (хотя я не очень понимаю чем они от классов отличаются чисто технически, ну да ладно).

> а tdd ну я не встречал любителей так поизвращаться.

Да хоть *phpt файлы в PHP sources. Это не TDD в его чистом виде, конечно, но PHP тестами в какой-то степени покрыто. Как и подавляющее большинство Open Source ПО. Про closed source не знаю, но подозреваю, что там всё также.

Кстати мне вообще непонятно как TDD и type hinting связаны с парадигмой ООП.
 

StUV

Rotaredom
э... сумбурно все как-то

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

мне суть проблемы представляется в виде "попарного противостояния (A vs. B)" в терминах проблем:

производительность кода
производительность труда
уровень (стоимость) кадров
выбор средства/подхода
...

что-то забыл - ?..

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

-~{}~ 16.03.09 14:07:

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

whirlwind

TDD infected, paranoid
Автор оригинала: svetasmirnova
Кстати мне вообще непонятно как TDD и type hinting связаны с парадигмой ООП.
Как бы вопрос удобства и применимости обсуждается не заметно еще? Да, вариант "полиморфизма" в процедурном стиле будет работать, но сколько будет стоить его поддержка? Пишите tdd процедурно ради бога, и история про интеллектуальный онанизм станет реальностью. Если вы пишете программы для компьютера, то вам не нужны никакие технологии кроме машинного кода.
 

Lightning

Трудоголик
Смотрите что Вы делаете. Вместо того, чтобы рассматривать объективно проблемы - Вы аггресивно нападаете. Нехорошо. Впрочем, рассмотрим аргументы подробнее.
Я вовсе не нападаю на Вас. Но я категорически не согласен с тем, что описываемые Вами проблемы - это проблемы самой парадигмы ООП. Я считаю, что это скорее проблемы неправильного понимания ООП.
Мозги позволяют спроектировать гибкий код, в котором нет дублирования, а не паттерны.
Я про это и говорю:
Если человек понимает ООП, то ему не обязательно знать паттерны, он приходит к ним сам.
Смотрите глубже - смотрите на паттерны как на культурный феномен! С точки зрения языка как средства выражения мыслей паттерны - это вынужденный протокол. Вынужденный!
ООП никого не вынуждает использовать паттерны. Чрезмерное использование паттернов, излишняя косвенность и запутанность архитектуры - это результат неправильного понимания и использования ООП.
Для чего нужна инкапсуляция я, как Вы вероятно, догадываетесь, знаю. Я говорю о том, к чему она приводит - психологически.
Но это ведь субъективно, согласитесь. Если человек знает для чего нужна инкапсуляция, то его она не приводит психологически к тому, о чем вы говорите.
Вы ошибаетесь касательно ресурсов, и сильно. Есть некий уровень зрелости у веб-проекта, когда он упирается в CPU на вебах. Когда всё уже затюнено по самые не балуйся.
Тут я не могу ничего конкретного сказать, у меня нет большого опыта в хайлоаде. Возможно Вы правы, но все-таки, Вы же почему-то используете PHP для таких проектов, а не пишете их на С.
Разработчик строит модели, творит, и часто забывает - для чего. Это проблема любого разработчика на каком бы языке он ни писал - но чем богаче поле для умственной деятельности, тем больше шансов решить не ту задачу, которая требовалась, а ту, которую он себе придумал сам.
Но это ведь тоже субъективно, т.е. зависит от конкретного разработчика. Это проблема не ЛЮБОГО разработчика.

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

StUV

Rotaredom
whirlwind
Lightning
в этом топе уже 10 раз как минимум уточнялось, что данный вопрос обсуждается не с точки зрения "идеализированного сравнения идеализированных подходов в процессах разработки с участием команд на 100% из высококвалифицированных профессионалов" - а с точки зрения _реального_ опыта, достаточно обширной практики разработки/поддержки крупномасштабных долгосрочных проектов, базирующихся на применении большого числа различных технологий и т.д., т.п...
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
StUV
именно это и удивляет - люди пишут про реальный мир, бесценный опыт, а им фукают за то, что реальность расходится с любимой сказкой
 

Lightning

Трудоголик
StUV
grigori
fisher
Во всем виновато ООП. Если приложение тормозит, криво работает - в этом виновато именно ООП. Запутанный код - в этом виновато ООП. Кривая, избыточная архитектура - в этом виновато ООП. ООП - отстой, ООП - бред, идиотизм. Не используйте ООП и всех отговорите его использовать, и будет вам тогда счастье... )))
 

whirlwind

TDD infected, paranoid
Реальность у каждого своя. У кого то миллионы хитов в день, а у кого то десятки тысяч финансовых операций. Видимо топег неверно назвали. Надо переименовать в "процедурный подход круче ООП в самых быстрых вебсерверах и сосальных сетях". Я бы тогда и не вякал.
 

jahson

Новичок
Автор оригинала: Long
иметь большой водительский стаж и участвовать в какой-нибудь формуле-3000 два разных случая. вот fixxxer, ты можешь поручится за то, что через n-е время ты не посмотришь на текущую реализацию и не скажешь что она так же плоха как и предыдущие? если текущий работодатель по какой-то причине согласен оплачивать эксперименты - почему бы и нет. а что будет, если реальные нагрузки нагнут железо так, что потребуется не 53 фронта, а 103?
Удивительно будет, если ты, оглянувшись на свой прошлый код будешь кайфовать. Это будет значить, что ты достиг своего лимита. Пока ты не достиг лимита, почти любой код из прошлого будет со временем казаться окаменевшим дерьмом.

----

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

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

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

Про математику я молчу - там всё сложно. Вообще же интересно, как обычно все обтекают мимо существующие функциональные языки. Хотя это уже о другом.

Если уж определять хороший ООП, то есть одна книжка, которую почему-то незаслуженно затмевают в человеческих мозгах GOF и прочие фаулеры. Я о Object-Oriented Software Construction Мейера. Она огромна, но она хорошо проходится по многим вещам.
Про абстрактные типы данных (а они, кажется, связаны с ООП) есть небольшой кусочек из Кея (I was in the Air Force in 1961...) - http://blog.moryton.net/2007/12/computer-revolution-hasnt-happened-yet.html
Ну и да, Code Complete никто не отменял.

Ну вот. Наверное не совсем по теме, ну да ладно - я гляжу здесь всё равно не вышло того, что планировалось.

ps. Насяльника, работаю я )
 

StUV

Rotaredom
whirlwind
Lightning
у вас изначально негативный подход к процедурному программированию как таковому

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


"процедурный подход круче ООП в самых быстрых вебсерверах и сосальных сетях"
Да, топик, судя по всему, назвали неверно.
интересное, но вполне логичное заключение, ибо в топе
проблемы объектного сознания
;)
 

cDLEON

Онанист РНРСlub
Да просто люди насмотрелись всяких Limb, ZO а теперь носом вертят :)
[offtopic]
Вы то хотя бы смотрели внутрть этих фреймворков?
Я запускал через дебаггер, потому что страничка Hallo World у меня 0.3-0.4 секунды выполнялась. Ужаснулся...
Так вот...Там ядро было напичкано кучей паттернов типа Observer которые, собственно и тормозили весь процесс.
На таком фремворке, действительно, хрен соц сеть напишешь :)
Вернее написать, напишешь, но для домашней локальной сети.
[/offtopic]
По поводу "ООП - лишняя нагрузка на машину" - не верю. Если называть 1-3% КРИТИЧЕСКОЙ нагрузкой, и жертвовать удобством ради этих 3%, это клиника. Пишите своими процедурами дальше.
По поводу "ООП плохо поддерживать" - ООП рефакторить на много проще чем вы думаете. По-скольку там каждый объект - это инкапулированная библиотека. А у вас данные храняться (не БДшные, конфиги, временные переменные) не понятно где. (типа там $GLOBALS['config'] || static $config.
ЗЫ. А у ненавистников ООП подхода, помоему, аргументы закончились :))
 

whirlwind

TDD infected, paranoid
Автор оригинала: StUV
whirlwind
Lightning
у вас изначально негативный подход к процедурному программированию как таковому

при этом, аргументация в общем смысле - безосновательная
ибо, то что предполагает при идеализированном подходе быструю разработку относительно устойчивых в поддержке/развитии производительных систем (безотносительно отрасли), точно так же работает и в процедурных языках/технологиях/подходах (это достаточно давно придумано, описано, реализовано, используется, внедряется итд итп...)
Это не разные вещи. ООП - это эволюция процедурного подхода. Ты щас сказал примерно то же самое что - у нас изначально негативное отношение к хомо хабилис. Кароче меня спор задолбал уже. Лично у меня в ревхистори ну может 0.01% коммитов на багофиксы наберется. Мне ничего доказывать не надо. Покажите свои ревхистори процедурных проектов с таким же объемом багофиксов - для меня это будет аргумент. Все остальное - сотрясание воздуха.
 

ustas

Элекомист №1
ООП - это не эволюция, а революция определенных программистов -теоретиков, а куда это приведет мы точно не знаем. Хотя будущее не за ним, я вас уверяю. И покуда ресурсы недорогие, будет и код раздуваться, а он в последнее время он меня не радует, благодаря тем же библиотекам, которые, как написано в первом посте хер знает чем занимаются. Так что пока миром правят деньги (евреи), ООП будет, и нефть тоже будет.

-~{}~ 16.03.09 19:19:

whirlwind
И рассуждать о процедурном подходе можно, также и не любить, но ООП в пыхе напоминает обычные модули, не более. Хотелось бы увидеть дружественные методы тоже, если это ООП.

-~{}~ 16.03.09 19:22:

cDLEON
Это ты назывешь ООП? А какой изначально обьектно орентированный язык ты изучал? Модули - это не ООП.
 

StUV

Rotaredom
whirlwind

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

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

и, уж если на то пошло, то
ООП - это эволюция процедурного подхода
нет
это эволюция подхода к решению определенного класса задач

Если называть 1-3% КРИТИЧЕСКОЙ нагрузкой, и жертвовать удобством ради этих 3%, это клиника.
есть такое понятие - стоимость продукта
абстрагирование от технологий к стоимости приводит к пониманию

У кого то миллионы хитов в день, а у кого то десятки тысяч финансовых операций.
и все 10-ки тыс на ооп ВО_ВСЕХ_УЗЛАХ_СИСТЕМЫ - ?

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

svetasmirnova

маленький монстрик
Ну раз тема всё равно загнулась :)

whirlwind
>Как бы вопрос удобства и применимости обсуждается не заметно еще? ...
То есть ответа на мой вопрос нет?

И эта, а без "тайп хинтинг, эксепшены, паттерны, TDD" объектный код тоже, что ли, нельзя писать?

-~{}~ 16.03.09 20:57:

StUV
> и похоже, все-таки, стартовая тема топа в итоге загнулась - из-за твоего непонимания и последущего непонимания вопроса менее опытными людьми чем ты

Эээх, по теме добавить-то к п.1 из
http://phpclub.ru/talk/showthread.php?postid=844428#post844428 нечего :(
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху