9 августа 2008 г.

ООП как создание предприятия

Недавно я писал об опасности излишней "объектаризации" (или объективизации?..) и провел аналогию между написанием программы и управлением предприятием. Сейчас давайте рассмотрим эту аналогию поподробнее.

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

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

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

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

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