- •2. По сфере применения
- •2. Разработка пользовательского интерфейса
- •3. Разработка программы
- •4. Отладка
- •5. Внедрение
- •6. Трансляция и интерпретация программ
- •7. Среды и реализации языков программирования
- •9. Теория первичных программ
- •11. Представление алгоритма и псевдокод
- •12. Алгоритм последовательного поиска
- •13. Алгоритм двоичного поиска
- •14. Алгоритм сортировки методом вставки
- •15. Модульное программирование
- •2.1. Нижнюю половину можно одеть в два этапа:
- •2.2. Верхнюю половину можно также одеть в два этапа:
- •20. Принципы объектно-ориентированного программирования
- •5.9. Оптимизация
- •5.3. Ход тестирования
- •5.4. Автономное тестирование модулей программы
- •5.5. Методы тестирования
- •5.6. Аксиомы тестирования
- •5.7. Классификация тестов
14. Алгоритм сортировки методом вставки
В этом алгоритме решается задача сортировки списка имен в алфавитном порядке. При этом необходимо отсортировать список путем перестановки его элементов, не перемещая весь список в другое место. Подобное ограничение типично для компьютерных приложений, где стремятся наиболее эффективно использовать весь доступный объем памяти.
Для их сортировки должны повторяться следующие действия. Поднять карточку с именем, первую в неотсортированной части списка, сдвинуть вниз карточки с именами, которые находятся ниже по алфавиту, чем имя на взятой карточке, а затем поместить эту карточку на освободившееся место в списке. Текст программы сортировки на языке псевдокода выглядит так:
procedure Сортировка (<список>) assign N the value 2;
while (значение N не превышает <длина списка>)
do (Выбрать N-й элемент списка в качестве опорного; Переместить этот элемент во временное хранилище, оставив в списке пустое место;
while (над пустым местом есть имя, которое по алфавиту размещается ниже, чем опорный элемент)
do (переместить имя, находящееся над пустым местом вниз, оставив в прежней позиции пустое место); Поместить опорный элемент на пустое место в списке assign N the value N+1
здесь N - счетчик, параметр <длина списка> - количество элементов в списке.
Программа сортирует список, многократно повторяя следующие действия: «Элемент извлекается из списка, а затем вставляется на надлежащее ему место».
Каждое выполнение тела внешнего цикла приводит к тому, что внутренний цикл инициализируется и выполняется до тех пор, пока не будет выполнено условие его окончания. Условие окончания внешнего цикла выполняется, когда значение счетчика N превысит длину сортируемого списка.
Управление внутренним циклом инициализируется, когда опорный элемент извлекается из списка и в нем образуется пустое место. Операция модификации включает перемещение расположенных выше элементов на пустое место вниз, в результате чего свободное место перемещается вверх по списку. Условие окончания выполняется, когда пустое место или находится непосредственно под именем, которое по алфавиту размещается выше опорного значения или же достигает верхней позиции списка.
15. Модульное программирование
Модульное программирование является естественным следствием проектирования сверху вниз и заключается в том, что программа разбивается на части – модули, разрабатываемые по отдельности.
Модуль – это самостоятельная часть программы, имеющая определенное назначение и обеспечивающая заданные функции обработки автономно от других программных модулей. Модуль состоит из логически взаимосвязанной совокупности функциональных элементов.
В программировании под модулем понимается отдельная подпрограмма, а подпрограммы часто называются процедурами или процедурами-функциями. Поэтому модульное программирование еще называется процедурным.
При создании программных продуктов выделяются многократно используемые модули, проводится их типизация и унификация, за счет чего сокращаются сроки и трудозатраты на разработку программного продукта в целом.
Некоторые программные продукты используют модули из готовых библиотек стандартных подпрограмм, процедур, функций, объектов, методов обработки данных.
Среди множества модулей различают:
головной модуль – управляет запуском программного продукта (существует в единственном числе);
управляющий модуль – обеспечивает вызов других модулей на обработку;
рабочие модули – выполняют функции обработки;
сервисные модули и библиотеки, утилиты – реализуют обслуживающие функции.
В работе программного продукта активизируются необходимые программные модули. Управляющие модули задают последовательность вызова на выполнение очередного модуля. Информационная связь модулей обеспечивается за счет использования общей базы данных либо межмодульной передачи данных через переменные обмена.
Каждый модуль может оформляться как самостоятельно хранимый файл; для функционирования программного продукта необходимо наличие программных модулей в полном составе.
Модуль должен обладать следующими свойствами:
один вход и один выход – на входе программный модуль получает определенный набор исходных данных, выполняет содержательную обработку и возвращает один набор результатных данных, т.е. реализуется стандартный принцип IPO (Input–Process–Output – вход-процесс-выход);
функциональная завершенность – модуль выполняет перечень регламентированных операций для реализации каждой отдельной функции в полном составе, достаточных для завершения начатой обработки;
логическая независимость – результат работы программного модуля зависит только от исходных данных, но не зависит от работы других модулей;
слабые информационные связи с другими программными модулями – обмен информацией между модулями должен быть по возможности минимизирован;
обозримый по размеру и сложности программный код.
Установить разумные размеры модулей трудно, хотя стоит придерживаться правила: выделять модули, пока это целесообразно. Обычно размеры модуля ограничены несколькими десятками строк кода на языке высокого уровня.
Модули содержат:
определение доступных для обработки данных;
операции обработки данных;
схемы взаимосвязи с другими модулями.
Каждый модуль состоит из спецификации и тела. Спецификации определяют правила использования модуля, а тело – способ реализации процесса обработки.
Однотипные функции реализуются одними и теми же модулями. Функция верхнего уровня обеспечивается главным модулем; он управляет выполнением нижестоящих функций, которым соответствуют подчиненные модули.
При определении набора модулей, реализующих функции конкретного алгоритма, необходимо учитывать следующее:
каждый модуль вызывается на выполнение вышестоящим модулем и, закончив работу, возвращает управление вызвавшему его модулю;
принятие основных решений в алгоритме выносится на максимально «высокий» по иерархии уровень;
для использования одной и той же функции в разных местах алгоритма создается один модуль, который вызывается на выполнение по мере необходимости.
В результате дальнейшей детализации алгоритма создается функционально-модульная схема (ФМС) алгоритма приложения, являющаяся основой для программирования (рис. 2).
Состав и вид программных модулей, их назначение и характер использования в программе в значительной степени определяются инструментальными средствами.
Рис. 3. Функционально-модульная структура алгоритма приложения
Большинство современных программ прикладного характера, ориентированных на конечного пользователя, работают в диалоговом режиме взаимодействия с пользователем таким образом, что ведется обмен сообщениями, влияющими на обработку данных. В диалоговом режиме под воздействием пользователя осуществляются запуск функций обработки, изменение свойств объектов, производится настройка параметров выдачи информации и т.п. Диалоговый процесс управляется согласно созданному сценарию, для которого определяются:
точки (момент, условие) начала диалога;
инициатор диалога – человек или программный продукт;
параметры и содержание диалога – сообщения, состав и структура меню, экранные формы и т.п.;
реакция программного продукта на завершение диалога.
Для создания диалоговых процессов и интерфейса конечного пользователя наиболее подходят объектно-ориентированные инструментальные средства разработки программ.
Графический интерфейс пользователя (GUI, Graphics User Interface) является обязательным компонентом большинства современных программных продуктов, ориентированных на работу конечного пользователя.
16. Нисходящее проектирование
Спецификация задачи служит отправной точкой в создании программы. Нужно понять, какие действия должны быть совершены для решения задачи, описать их на естественном языке и на достаточно высоком уровне абстракции.
Спецификация задачи является ее первичным проектом. От неё мы движемся к программе, постепенно уточняя описание.
Постепенное уточнение проекта называется методом проектирования сверху вниз (пошаговой детализации или нисходящего проектирования).
Пример 1. В качестве примера рассмотрим проект одевания ребенка.
Решение:
1. Первичная цель:
Одеть.
2. Конкретизация цели на первом шаге:
Одеть нижнюю половину.
Одеть верхнюю половину.
