Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
42
Добавлен:
23.03.2015
Размер:
461.31 Кб
Скачать

1.1.Декомпозиция и абстракция

Базовая парадигма в подходе к любой большой задаче ясна: мы должны разделять и властвовать». К сожалению, буквальное следование этому макиавеллевскому принципу по-прежнему пред­полагает долгий путь к решению задачи. Самым важным является то, каким образом мы осуществляем это разделение.

Нашей целью при декомпозиции программы является создание модулей, которые в свою очередь представляют собой небольшие программы, взаимодействующие друг с другом по хорошо опреде­ленным и простым правилам. Если мы достигнем этой цели, то разработка отдельных модулей может осуществляться различ­ными людьми независимо друг от друга, без необходимости об­щения друг с другом, при этом все эти объединенные вместе про­граммы будут функционировать правильно. Помимо этого в про­цессе модификации программы появится возможность корректи­ровать отдельные модули без необходимости исправления других.

При декомпозиции задачи мы разбиваем ее на ряд подзадач так, что 1)каждая подзадача имеет один и тот же уровень рас­смотрения; 2)каждая задача может быть решена независимо и3)полученные решения могут быть объединены вместе, позволяя решить исходную проблему.

Изящным примером декомпозиции является сортировка с использованием метода «сортировка слиянием». В этом случае сорти­руемый список произвольного размера разбивается на две более простые задачи, каждая из которых сортирует половину списка, после чего производится слияние двух отсортированных списков произвольной величины.

Декомпозиция является весьма полезным и экономящим время способом решения задач в самых различных областях. Со времен Беббиджа люди осознали выгоду от использования программи­стами таких средств декомпозиции, как макроопределения и под­программы. Важно понимать, что декомпозиция не является не­кой панацеей и при неграмотном использовании может принести массу неприятностей. Отметим далее, что большие или плохо понимаемые задачи поддаются декомпозиции с большим трудом. К числу наиболее распространенных проблем относится ситуация, ври которой создание отдельных компонент, способных решить соответствующие подзадачи, не приводит к тому, что объединение этих компонент позволяет решить исходную задачу. Это является одной из причин, по которой интеграция системы часто оказы­вается затруднительной.

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

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

Соседние файлы в папке Б. Лисков