Глава 3. Объектно-ориентированные анализ и проектирование 59
Рис. 3.1. Процедурный подход: деление задачи о внесении вклада на сберегательный счет на меньшие подзадачи *
Вы заметили, что диаграмма имеет древовидную форму. Все проблемы с деревьями в компьютерной науке происходят от этих самых вездесущих ветвей. Если их слишком много, ваша задача становится неуправляемой. Главный недостаток процедурного программирования и разделения больших задач на мелкие подзадачи в конечном счете состоит в том, что если решаемая вами задача достаточно велика, то количество подзадач становится огромным и трудноуправляемым; вам или даже целой группе программистов будет нелегко осмысливать свои же собственные решения.
Замечание
Несмотря на то что граница, за которой сложность процедурного программирования становится непосильной, предсказуема, рано или поздно вы все равно на нее натыкаетесь. Некоторые компьютерщики оценивают эту "точку фазового перехода" примерно в 100000 строк кода. Не так давно одному из авторов книги довелось работать над цифровым телефонным коммутатором, где число строк исходного текста перевалило за 8000000. Даже после разделения проекта на самостоятельные части (в количестве порядка 1000—2000 строк) осталось очень немного подразделений, и еще меньше отдельных людей, способных понять, как все это друг с другом стыкуется.
Из процедурного программирования возникло новое оружие для борьбы со сложностью программного обеспечения — объектно-ориентированное программирование. В объектно-ориентированном программировании вы уходите от деления задач на меньшие части. Вы пытаетесь увидеть вашу задачу, состоящей из взаимодействий между абстракциями — идеализированными объектами реального мира. Таким образом, цель в том, чтобы использовать в программировании повседневный опыт и знания о поведении обыденных объектов.