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

Учеб пособ ПОА

.pdf
Скачиваний:
12
Добавлен:
14.03.2016
Размер:
1.19 Mб
Скачать

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ ВОЛГОГРАДСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

А. А. Яковлев

ПРОГРАММИРОВАНИЕ И ОСНОВЫ АЛГОРИТМИЗАЦИИ

Учебное пособие

Допущено Учебно-методическим объединением вузов по образованию в области автоматизированного машиностроения (УМО АМ) в качестве

учебного пособия для студентов высших учебных заведений, обучающихся по направлению подготовки дипломированных специалистов «Автоматизированные технологии и производства»

РПК «Политехник» Волгоград

2004

УДК 681.3.07

Р е ц е н з е н т ы:

кафедра сервиса компьютерной и микропроцессорной техники ВФ МГУС, зав. кафедрой, доцент, канд. техн. наук В. Я. Данилин;

зав. кафедрой автоматизации технологических процессов филиала ГОУВПО МЭИ (ТУ) в г. Волжском, доцент, канд. техн. наук П. В. Шамигулов

Печатается по решению редакционно-издательского совета Волгоградского государственного технического университета

Яковлев А. А.

Программирование и основы алгоритмизации: учеб. пособие / А. А. Яковлев; Волгоград. гос. техн. ун-т. – Волгоград, 2004. – 80 с.

ISBN 5–230–04409–8

Является вводным курсом в теорию и проектирование программного обеспечения. В первой части рассматриваются общесистемные принципы создания программного обеспечения, его жизненный цикл, а также среды и реализации языков программирования. Основное внимание при изложении парадигм программирования уделяется методологиям структурного и объектно-ориентированного программирования. Их практическая реализация рассмотрена на примере одного из диалектов Паскаля – Object Pascal, поддерживаемого популярной средой программирования Delphi. Заключительная часть пособия посвящена вопросам тестирования, отладки и оптимизации программного обеспечения, а также вопросам построения и анализа алгоритмов.

Предназначено для студентов, обучающихся по специальности 657900 «Автоматизированные технологии и производства».

Ил. 7. Табл. 1. Библиогр.: 7 назв.

 

 

ISBN 5–230–04409–8

©

Волгоградский государственный

 

 

технический университет, 2004

 

©

А. А. Яковлев, 2004

2

 

 

ОГЛАВЛЕНИЕ

 

Введение . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5

Г л а в а 1.

ОСНОВНЫЕ ПОНЯТИЯ . . . . . . . . . . . . . . . . . . . . . . . . . . . .

6

 

1.1.

Классификация программного обеспечения . . . . . . . . . .

6

 

1.2.

Цикл жизни программного обеспечения . . . . . . . . . . . . .

7

 

1.3.

Этапы создания программ . . . . . . . . . . . . . . . . . . . . . . . . .

8

 

1.4.

Документирование программ . . . . . . . . . . . . . . . . . . . . . .

10

 

1.5.

Общесистемные принципы создания программ . . . . . . .

11

 

1.6.

Технологии и парадигмы программирования . . . . . . . . .

12

 

1.7.

Трансляция и интерпретация программ . . . . . . . . . . . . . .

14

 

1.8.

Среды и реализации языков программирования . . . . . . .

17

Г л а в а

2.

СТРУКТУРЫ УПРАВЛЕНИЯ И ПОДПРОГРАММЫ . . . . . .

19

 

2.1.

Теория первичных программ . . . . . . . . . . . . . . . . . . . . . .

19

 

2.2.

Альтернативы. . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . .

21

 

2.3.

Циклы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

22

 

2.4.

Операторы перехода . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

23

 

2.5.

Подпрограммы. Процедуры и функции . . . . . . . . . . . . . .

24

 

2.6.

Передача параметров . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

25

 

2.7.

Рекурсия . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

28

Г л а в а

3.

ТЕХНОЛОГИЯ СТРУКТУРНОГО ПРОГРАММИРОВАНИЯ

31

 

3.1. Понятие структурного программирования . . . . . . . . . . .

31

 

3.2. Принцип утаивания информации . . . . . . . . . . . . . . . . . . .

33

 

3.3. Методы структурного программирования . . . . . . . . . . .

34

 

3.4. Структурная схема программы и средства для ее

 

 

 

изменения . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

35

 

3.5. Критерии оценки качества структурной схемы

 

 

 

программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

37

 

3.6. Модульное программирование . . . . . . . . . . . . . . . . . . . . .

38

 

3.7. Структура модуля в Object Pascal . . . . . . . . . . . . . . . . . .

40

 

 

 

3

Г л а в а

4. ТЕХНОЛОГИЯ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО

 

 

ПРОГРАММИРОВАНИЯ . . . . . . . . . . . . . . . . . . . . . . . . . . .

43

 

4.1. Объектно-ориентированный подход . . . . . . . . . . . . . . . .

43

 

4.2. Основные понятия объектно-ориентированного

 

 

программирования . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

44

 

4.3. Принципы объектно-ориентированного программиро-

 

 

вания: инкапсуляция, наследование и полиморфизм . . .

45

 

4.4. Поля . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

48

 

4.5. Методы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

49

 

4.6. Свойства . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

54

 

4.7. Определение области видимости класса . . . . . . . . . . . . . .

55

 

4.8. Принципы работы объектно-ориентированных

 

 

программ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

56

Г л а в а

5. ТЕСТИРОВАНИЕ, ОТЛАДКА И ОПТИМИЗАЦИЯ

 

 

ПРОГРАММ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

58

 

5.1. Программные ошибки . . . . . . . . . . . . . . . . . . . . . . . . . . . .

58

 

5.2. Тестирование . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

59

 

5.3. Ход тестирования . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

60

 

5.4. Автономное тестирование модулей программы . . . . . . .

61

 

5.5. Методы тестирования . . . . . . . . . . . . . . . . . . . . . . . . . . . .

62

 

5.6. Аксиомы тестирования . . . . . . . . . . . . . . . . . . . . . . . . . . .

63

 

5.7. Классификация тестов . . . . . . . . . . . . . . . . . . . . . . . . . . . .

64

 

5.8. Отладка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

65

 

5.9. Оптимизация . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

66

Г л а в а

6. АЛГОРИТМЫ И ИХ РАЗРАБОТКА . . . . . . . . . . . . . . . . . . .

69

 

6.1. Понятие алгоритма и его свойства . . . . . . . . . . . . . . . . . .

69

 

6.2. Представление алгоритма и псевдокод . . . . . . . . . . . . . .

71

 

6.3. Алгоритм последовательного поиска . . . . . . . . . . . . . . . .

73

 

6.4. Алгоритм двоичного поиска . . . . . . . . . . . . . . . . . . . . . . .

74

 

6.5. Алгоритм сортировки методом вставки . . . . . . . . . . . . .

76

 

6.6. Эффективность алгоритмов . . . . . . . . . . . . . . . . . . . . . . .

77

Список использованной и рекомендуемой литературы . . . . . . . . . . . .

80

4

ВВЕДЕНИЕ

Многие из тех идей, которые кажутся последним словом в компьютерной технике, появились десятки лет тому назад именно в нашей стране. В СССР существовали крупнейшие центры подготовки и переподготовки программистов, о которых до сих пор могут только мечтать Microsoft и IBM.

Отечественное программирование занималось созданием крупных программных систем. Например, автоматизированный космический проект «Луноход» был полностью обеспечен отечественной вычислительной техникой и программами. Советская школа программирования по целому ряду параметров превосходила американскую. В начале 60-х годов ХХ века в нашей стране была создана вычислительная машина БЭСМ-1, которая стала самой производительной в Европе и одной из лучших в мире.

К концу 60-х годов руководство СССР приняло ошибочное решение отказаться от дальнейшего развития машин оригинальной архитектуры БЭСМ и переориентироваться на IBM-360, что послужило причиной постепенного отставания нашей страны в этой области. Единственно возможный выход из тупика, в который зашла Россия – развитие отечественной науки, и, прежде всего по тем направлениям, которые будут определять облик цивилизации в XXI веке: математика, физика, информатика и программирование.

Программирование – та отрасль, которая производит самую передовую в технологическом аспекте продукцию, востребованную современной цивилизацией. Более того, потребность в передовом программном обеспечении в ближайшие годы будет расти.

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

5

Г л а в а 1 .

ОСНОВНЫЕ ПОНЯТИЯ

1.1. КЛАССИФИКАЦИЯ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ

Программирование – в широком смысле представляет собой все технические операции, необходимые для создания программы, включая анализ требований и все стадии разработки и реализации. В узком смысле – это кодирование и тестирование программы в рамках некоторого конкретного проекта.

Программное обеспечение (ПО) (software) – общий термин для обозначения «неосязаемых» (в отличие от физических) составных частей вычислительной системы. В большинстве случаев он относится к программам, выполняемым вычислительной системой, чтобы подчеркнуть их отличие от аппаратных средств той же системы. Этот термин охватывает как программы в символической записи, так и исполняемые формы этих программ. Существующее ПО можно разделить на следующие классы:

системное: операционные системы; драйверы устройств; различные утилиты;

для разработчиков: среды программирования; трансляторы и интерпретаторы; CASE-средства; библиотеки программ;

для конечных пользователей: текстовые процессоры; электронные таблицы; графические редакторы; решатели математических задач; обучающие и контролирующие системы; компьютерные игры; прикладные программы.

Прикладная программа (application program) – любая програм-

ма, способствующая выполнению задачи, возложенной на ЭВМ в пределах данной организации, и вносящая прямой вклад в реализацию этой задачи. Например, там, где на ЭВМ возложена задача контроля финансовой деятельности какой-либо фирмы, прикладной программой будет программа подготовки платежных ведомостей. В противоположность этому операционная система не является

6

прикладной программой, так как не вносит прямого вклада в удовлетворение конечных потребностей пользователя.

Программная система представляет собой набор решений множества различных, но связанных между собой задач (ОС, СУБД). Более узкоспециализированные программы не называют системами (редактор текстов, компилятор и т. п.)

1.2. ЦИКЛ ЖИЗНИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ

Жизненный цикл ПО (software life-cycle) – весь период времени существования системы программного обеспечения, начиная от выработки первоначальной концепции этой системы и кончая ее моральным устареванием.

Жизненный цикл (рис. 1) представляется в виде некоторого числа последовательных фаз, в определенных местах охватываемых обратными связями, когда может возникнуть необходимость повторения какого-либо одного или даже всех этапов разработки системы. Такая модель обеспечивает отражение итеративности* процессов существования ПО.

 

 

Требования к

Инструкция

 

Потребность

программе, цели

 

пользования,

 

в разработке

 

разработки

 

тесты

 

Системный

Внешнее специ-

Проектиро-

 

 

анализ

 

фицирование

 

вание

Н

 

 

 

 

 

 

о

Д

Документированные архитектура и структура программы

в

 

Программа и

 

 

 

ы

е

 

 

Очередная

 

е

фе

Кодирование,

ее описание

Тестирование

версия

Тиражиро-

и

к

сборка

 

 

 

вание

д

т

Эксплуатационная документация, носители

 

е

ы

 

 

 

 

 

 

и

 

Сопровождение Решение

 

 

 

 

 

Прекращение

 

 

 

 

программы

 

эксплуатации

 

 

 

Рис. 1. Жизненный цикл программного обеспечения

* Итерация – повторение численного или нечисленного процесса, когда результаты одного или нескольких шагов являются входной информацией для следующего начального шага этого цикла. Как правило, такая циклическая процедура заканчивается при достижении заданных результатов, или после того, как результаты перестают меняться.

7

Термин «жизненный цикл ПО» используется в том случае, когда предполагается, что программы будут иметь достаточно большой срок действия, в отличие от экспериментального программирования, при котором программы обычно прогоняются несколько раз, а затем аннулируются.

1.3.ЭТАПЫ СОЗДАНИЯ ПРОГРАММ

1.Системный анализ. В рамках этого этапа осуществляется анализ требований, предъявляемых к программной системе. Он проводится на основе первичного исследования всех потоков информации при традиционном проведении работ и осуществляется в следующей последовательности:

а) уточнение видов и последовательности всех работ; б) определение целей, которые должны быть достигнуты разра-

батываемой программой; в) выявление аналогов, обеспечивающих достижение подобных

целей, их достоинств и недостатков.

2.Внешнее специфицирование. Состоит в определении внешних спецификаций, то есть описаний входной и выходной информации, форм их представления и способов обработки информации. Реализуется в следующей последовательности:

а) постановка задачи на разработку новой программы; б) оценка достигаемых целей разрабатываемого программного

изделия.

Далее, при необходимости, этапы 1–2 могут быть повторены до достижения удовлетворительного облика программной системы с описанием выполняемых ею функций и некоторой ясностью реализации ее функционирования.

3.Проектирование программы. На этом этапе проводится комплекс работ по формированию описания программы. Исходными данными для этой фазы являются требования, изложенные в спецификации, разработанной на предыдущем этапе. Принимаются решения, касающиеся способов удовлетворения требований спецификации. Эта фаза разработки программы делится на два этапа:

а) архитектурное проектирование. Представляет собой разработку описания программы в самом общем виде. Это описание содержит сведения о возможных вариантах структурного построения

8

программного изделия (либо в виде нескольких программ, либо в виде нескольких частей одной программы), а также об основных алгоритмах, и структурах данных. Результатом этой работы являются окончательный вариант архитектуры программной системы, требования к структуре отдельных программных компонент и организации файлов для межпрограммного обмена данными;

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

4.Кодирование и тестирование. Эти виды деятельности осу-

ществляются для отдельных модулей и совокупности готовых модулей до получения готовой программы.

5.Комплексное тестирование.

6.Разработка эксплуатационной документации.

7.Приемо-сдаточные и другие виды испытаний.

8.Корректировка программ. Проводится по результатам предшествующих испытаний.

9.Сдача заказчику. Осуществляется окончательная сдача программного изделия заказчику.

10.Тиражирование.

11.Сопровождение программы. В понятие «сопровождение» входят все технические операции, необходимые для использования данной программы в рабочем режиме. Сюда входит не только исправление ошибок. На этом этапе также осуществляется модификация программы, внесение исправлений в рабочую документацию, усовершенствование программы и др. Вследствие широких масштабов подобных операций сопровождение является итеративным процессом, который желательно осуществлять не столько после, сколько до выпуска программного изделия для широкого использования. Работы по сопровождению часто поглощают более половины затрат, приходящихся на весь жизненный цикл программной системы в стоимостном выражении.

Современные технологии проектирования программного обеспечения направлены на частичную автоматизацию описанных выше этапов и на совмещение их во времени с целью сокращения сроков выполнения проектов.

9

1.4. ДОКУМЕНТИРОВАНИЕ ПРОГРАММ

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

Программная спецификация (program specification) – точное описание того результата, которого нужно достичь с помощью программы. Это описание должно точно устанавливать, что должна делать программа, не указывая, как она должна это делать.

Для программ, заканчивающих свою работу каким-то результатом, обычно составляются спецификации ввода-вывода, в которых описывают желаемое отображение множества входных величин во множество выходных величин.

Для циклических программ (в которых нельзя указать точку завершения), разрабатывают спецификации, где основное внимание сосредоточивается на отдельных функциях, реализуемых программой в ходе циклических операций.

Существует большое число различных систем обозначений, используемых в программных спецификациях – от естественного языка с использованием математических уравнений и таблиц до формализованных описаний, основанных на исчислении предикатов* первого порядка.

Разработку программных систем начинают с составления первичных спецификаций. В ходе выполнения проекта первичные спецификации последовательно претерпевают изменения до про- граммных документов стадий и вплоть до документации, которая необходима для эксплуатации и сопровождения программы. Первичные спецификации обычно составляют в терминах решаемой задачи, а не программы. Первичная спецификация описывает:

объекты, участвующие в задаче (что делает программа и что делает человек, работающий с этой программой);

процессы и действия (проектные процедуры и действия человека, алгоритмы решения задачи в машине, порядок обработки ин-

* Предикат – функция, определяемая на некоторой предметной области переменных и принимающая значения в области истинностных значений.

10