Технологии программирования | страница 8
Необходимость в проекте вызвана сложностью задачи.
Следующий пример показывает нелинейную зависимость роста сложности задачи от ее размера. Необходимо в уме сложить числа 4 и 3. Ответ, разумеется, — 7. Необходимо в уме перемножить числа 7 и 9. Ответ, конечно, — 63. Но если не знаете таблицу умножения, то надо выполнить нестандартное преобразование в виде многократного сложения. Трудно ли оно для вас? Необходимо в уме перемножить числа 289 и 347. Если вы не феноменальный счетчик, то хватит ли в вашей голове оперативной памяти? А сможете ли вы перемножить в уме шестизначные числа? Но если декомпозировать данную задачу на вычисление ряда произведений одного из сомножителей на отдельные цифры другого сомножителя и затем найденные произведения сложить (при этом записывать на бумаге все промежуточные результаты), то с этой задачей вполне может справиться заурядный человек.
Еще пример, показывающий один из путей снижения сложности задачи за счет ее декомпозиции на обозримые части. Обычный нормальный человек со средними способностями может одновременно в своей голове удержать не более семи мыслей. В школе задачи с шестью действиями считаются задачами повышенной сложности и помечаются символом «*». В армиях разных стран, времен и народов производилось деление на десятки, сотни, тысячи. У командиров в подчинении находилось либо десять воинов, либо десять младших командиров.
Программа — очень сложный объект, содержащий до сотен тысяч и даже нескольких миллионов мыслей. Сложность программного продукта — отнюдь не случайное свойство, скорее необходимое. Его сложность определяется четырьмя основными причинами: сложностью задачи, сложностью управления процессом разработки, сложностью описания поведения отдельных подсистем, сложностью обеспечения гибкости конечного программного продукта.
В табл. 1.1 приведены пять признаков сложной системы вместе с примерами. Эти признаки инвариантны как для осязаемой системы из реального мира «музыкальный центр», так и для программной системы — текстового редактора.
Таблица 1.1.
Примеры музыкального центра и текстового редактора как сложных систем
Признаки | Музыкальный центр | Текстовый редактор |
1. Сложность часто представляется в виде иерархии. Сложная система обычно состоит из взаимозависимых подсистем, которые в свою очередь также могут быть разделены на подсистемы и т. д., вплоть до самых низких уровней абстракции | Состоит из 6 подсистем: усилителя, блока цифрового управления системой, проигрывателя компакт-дисков, кассетной деки, радиоприемника, динамиков. Каждая из подсистем может быть в свою очередь разделена на подсистемы. Усилитель разделяется на фильтры, предварительные каскады усиления и усилитель мощности. Блок цифрового управления системой разделяется на процессор, панель кнопок, панель индикации и на цифроаналоговые, аналого-цифровые преобразователи. Проигрыватель компакт-дисков — на лазер, устройство управления лазером, цифроаналоговый преобразователь и т. д. |