6 августа 2008 г.

ООП навязывает управленческий образ мышления

... причем в худшем его проявлении - в стремлении переложить всю работу на подчиненных и нежелании делать ничего самому. Беда в том, что в результате самому работать приходится еще больше.
Например, недавно мне пришлось писать модуль вычисления выражений (короче, калькулятор, считающий "a + 2px * sqrt(2) - 3.0em") на C#. В этом языке нет ничего, кроме объектов. Поэтому я, недолго думая, создал классы Лексема, Выражение, Оператор и т. п. И оказался в глубокой задумчивости: а какие же "приказы" им раздать, чтобы они сами все сделали?
Здесь полезно обратиться к аналогии между ООП и управлением предприятием, где каждый объект - это работник, а программист (ну или разработчик) олицетворяет высшее руководство. (Можно еще добавить, что операционная система - это государство, а аппаратура - это сама природа).

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

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

Комментариев нет: