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

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

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

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

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

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

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

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

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

Соседние файлы в папке POSIBNIK