Методы проектирования алгоритмов и программ достаточно разнообразны, их можно классифицировать по различным признакам, важнейшими из которых являются:
I. Степень автоматизации проектных работ
а) традиционная(неавтоматизированное) проектирование
б) автоматизированное проектирование(CASE- технологии и их элементов)
II. Методология процесса разработки программного оборудования.
а) Информационное моделирование предметной области и связанных с ней приложений.
б) Структурное проектирование.
в) Модульное программирование.
г) Объектно-ориентированное программирование.
1. Структурное проектирование
В основе этого подхода лежит последовательная декомпозиция, т.е. целенаправленное структурирование на отдельные составляющие. Основу этой технологии составляет следующее положение:
а) сложная задача разбивается на более мелкие и лучше управляемые задачи, имеющие один вход и один выход. В этом случае управляющий поток программы состоит из совокупности подзадач с явным функциональным назначением.
б) простота управляющих структур, используемых в задаче. Это положение означает, что логически в задаче должна состоять из минимальной функционально-полной совокупности простых управляющих структур.
в) нисходящее проектирование(проектирование сверху-вниз)
В результате строится иерархическая схема, которая отражает состав и взаимоподчинённость отдельных функций. Она носит название «функциональная структура алгоритма». В ней отражаются:
- Цели предметной области.
- Состав приложений, обеспечивающих реализацию поставленных целей
- Характер взаимосвязей приложений и основных характеристик предметной области
- Набор функций, обработки данных
Разложение должно носить строго функциональный характер, т.е. отдельный элемент функциональной структуры алгоритма, описывает законченную содержательную функцию обработки информации, которая предполагает определённый способ реализации на программном уровне.
2. Модульное программирование
Концепцию модульного программирования можно сформулировать так:
а) Функциональная декомпозиция задачи, т.е. разбиение её на ряд более мелких функционально самостоятельных подзадач- модулей.
б) Модуль представляет собой совокупность логически связанных элементов предназначенных для использования другими модулями и программами.
Каждый модуль функциональной декомпозиции представляет собой чёрный ящик с одним входом и одним выходом. Модульный проход упрощает процесс модернизации программы при её эксплуатации. Позволяет также создавать модули на разных языках программирования, а затем с помощью компоновочных средств объединять их в единый загрузочный модуль.
в) Реализуемые решения должны быть простыми и ясными, если назначение модуля не понятно – это говорит о том, что декомпозиция начальной или промежуточной задачи выполнена некачественно.