
- •Тема 1 Введение
- •Новейшие направления в области создания технологий программирования
- •Законы эволюции программного обеспечения
- •Трансляция программ
- •Классификация языков программирования
- •Технологическая схема решения задач
- •Эволюция современных систем программирования
- •Структурное программирование
- •Структурирование алгоритмов и программ
- •Методы разработки алгоритмов
- •Концепция модульного программирования
- •Объектно-ориентированное программирование
- •Моделирование при разработке программного обеспечения. Case-системы
- •Проблема искусственного интеллекта. Экспертные системы
- •Тема 2 Особенности программирования в оконных операционных средах
- •Общие сведения о технологии .Net
Концепция модульного программирования
Модульное программирование – это организация программы как совокупности небольших независимых блоков, называемых модулями, структура и поведение которых подчиняются определенным правилам.
Концепцию модульного программирования можно сформулировать в виде нескольких понятий и положений:
Функциональная декомпозиция задачи – разбиение большой задачи на ряд более мелких, функционально самостоятельных подзадач – модулей. Модули связаны между собой только по входным и выходным данным.
Модуль – основа концепции модульного программирования. Каждый модуль в функциональной декомпозиции представляет собой «черный ящик» с одним входом и одним выходом. Модульный подход позволяет безболезненно производить модернизацию программы в процессе ее эксплуатации и существенно облегчает ее сопровождение (тестирование и обнаружение ошибок). Дополнительно модульный подход позволяет разрабатывать части программ одного проекта на разных языках программирования, после чего с помощью компоновочных средств объединять их в единый загрузочный модуль. Кроме того, такие модули могут использоваться как строительные блоки в других программах.
Реализуемые решения должны быть простыми и ясными. Если назначение модуля непонятно, то это говорит о том, что декомпозиция начальной или промежуточной задачи была проведена недостаточно качественно. В этом случае необходимо еще раз проанализировать задачу и при необходимости провести дополнительное разбиение на подзадачи. При наличии сложных мест в проекте их нужно подробнее документировать с помощью продуманной системы комментариев. Этот процесс нужно продолжать до тех пор, пока действительно не удастся добиться ясного понимания назначения всех модулей задачи и их оптимального сочетания.
Назначение всех переменных модуля должно быть описано с помощью комментариев по мере их определения.
Здесь следует заметить, что нужно различать использование слова «модуль» когда имеется в виду синтаксическая конструкция языков программирования (например, Unit в Паскале), и когда имеется в виду единица дробления большой программы на отдельные блоки (в виде процедур или функций).
Еще в 1972 году Дэвид Парнас в двух своих статьях выдвинул концепцию скрытия информации в программировании. Однако существовавшие в те годы синтаксические конструкции (такие как процедура и функция) не могли обеспечить надежного скрытия информации, поскольку подвержены влиянию глобальных переменных, поведение которых в сложных программах зачастую бывает трудно предсказуемым. Поэтому необходимо было разработать новую синтаксическую конструкцию, которая не подвержена влиянию глобальных переменных, но в то же время объединяла и надежно скрывала детали реализации определенной подзадачи. Такая конструкция была создана и названа модулем. Количество модулей в программе должно определяться только декомпозицией поставленной задачи на независимые подзадачи (вплоть до одной процедуры в модуле).
Таким образом, выполняемые процедурами модуля локальные действия были бы гарантированно независимым от влияния других частей программы при любых изменениях и коррекциях. Такое использование модуля характерно для класса задач реального времени, в которых критерий надежности и предсказуемости поведения программы является ключевым.