+к теме спора о выборе подхода
задолбало "на пальцах" объяснять критерии выбора того или иного подхода - хочется один раз "отрезать и все"
(сорри, если где какие лаги - поток сознания и все вытекающее)...
тут
AmdY высказался за определение критериев выбора на основе
>> самая важная проблема - это состояния, собственно ради состояний мы и используем объекты. если состояний нет, а важны только результаты работы, то стоит использовать функциональный стиль.
не спора для, а обсуждения ради...
состояние системы (объекта, процесса, ...) определяется как совокупность состояний его степеней свободы в заданный момент времени
X = F(t), X определено на множестве {X} = {x_1, ..., x_N}, F(t) принадлежит множетсву {X}
это в "простых случаях" - поясняю: в наших обсуждениях часто встречается аргументация вида - "в простом проекте это так, а вот у нааас, система слооожная, распределенная.... - там все сложно, математика сложная, хрен разберешься"
так вот, в простых случаях мы можем определить динамику состояний так
X=F(t) => {x_i=f(t)}
так вот, в общем случае сложных не(квази)детерменированных систем (сложные распределенные программные комплексы)
описание меняется математически меняется не значительно:
X=F(t,G(X)) => {x_i=f(t, g(x_1, ..., x_(i-1), x_(i+1, ..., x_N)))}
(в недетерминиролванных системах для некоторых степеней свободы - неисключается и x_i, так, к слову)
т.е. состояние суть функция аргументов время и некоторая функция состояния (определенная на некотором своем множестве)
Далее, в нашем мире так сложилось, что информация на аппаратном уровне представлена линейно - 0/1.
Для постороения более сложных (более информативных - тафтологически) систем и операций над ними - используются некоторые соглашения.
Часто эти соглашения называют контрактами.
Любой контракт, повышающий уровень абстракции, приводит к затратам дополнительных ресурсов - притивно - увеличению единиц используемой машинной памяти и тактов процессора.
Есть контракты аппаратные - 8бит=1байт, и тд... + аппаратные реализации двоичной арифметики + более сложные абстракции аппаратных матричных операций над сущностями более высокой разрядности, но в конечном итоге конечные операции - суть операции над линейными структурами - т.е. _контракты_затратны_
Далее, контракты семантики и базового функционала средств разработки - машинные коды, асм, ...
Тут уже отмечались, те кто помнят первые домашние "игровые" ПК - чтобы сделать на них дейтвительно что-то интересное, контрактов и абстраций встроенных средств разработки (бэйсик, паскаль) было недостаточно - приходилось часть подпрограмм кодировать напрямую или ассемблировать.
Далее,... средства и их контракты эволюционируют, оптимизируются и снова эволюционируют и тд.. тп - появляются структурные языки, объектные, объектно-ориентированные - и каждый новый контракт - это затраты, затраты, затраты, затраты, затраты,......
За этими всеми контрактами забываются начальные 0/1, потеря производительности, рост "стоимости владения", ... - хорошо, если продукт или разрабатываемая его часть не требует оптимизаций на уровне понижения абстракций за счет отказа от дополнительных контрактов.
А если требует?
Вот здесь, только на этой грани и возникает вопрос выбора конкретного средства, парадигмы, подхода, алгоритма, ... - И это _чистый_критерий_ _идеализированного_процесса_ разработки программного продукта.
А ведь есть еще бизнес затраты - ниокр, стоимость средств разработки, стоимость кадров, железо, ...
--------
так что... "самая важная проблема" _для_меня_ где-то в этом, а не "ооп это просто круто и правильно" или "функциональный подход ускоряет разработку"
------------------------
я перейду полностью на ооп на объектно-ориентированном железе - напр., на квантовых компах, оперирующих на самом низком уровне переходами в пространстве с количеством степеней свободы, достаточным для хранения информации о состояниях объектов реального мира, но не ранее...
-~{}~ 17.03.09 11:46:
x-yuri
http://phpclub.ru/talk/showthread.php?s=&threadid=69253
(действующие лица - те же
)
а вообще - это было очень давно, "в другой жизни"...