- •Основы алгоритмизации и языков программирования
- •0. Введение
- •1. Понятие алгоритма и программы. Свойства алгоритма.
- •3. Этапы разработки программы
- •4.1 Язык записи конечного алгоритма и язык разработки алгоритма
- •5. Классификация языков программирования
- •Краткая история языков программирования
- •6.1. Восходящий подход
- •6.3 Объектно-ориентированный подход
- •7. Данные
- •7.2 Понятие типа объекта в программе. Концепция типа данных
3. Этапы разработки программы
Как осуществляется программирование, какие процессы происходят при этом?
Решение любой сложной задачи состоит из четырех этапов:
1) Осознание и формулирование задачи, когда решающий задачу определяет, что дано и какова цель (что требуется получить в итоге);
2) Разработка плана, в котором раскрывается стратегия решения (стратегия достижения цели);
3) Выполнение (реализация) плана. При этом любой сложный план преобразуется в определенную последовательность достаточно простых (по сравнению с исходной задачей) действий;
4) Проверка правильности решения;
5) Документирование;
6) Сдача решения потребителю.
Эти этапы применительно к программированию называют соответственно так:
определение требований к ПО и целей проектирования ПО (постановка задачи, ее формализация и разработка ТЗ);
проектирование ПО (разработка метода решения, структуры программы и алгоритмов);
кодирование (написанием собственно программы на выбранном языке программирования) и отладка программы;
тестирование программы, в том числе и на стороне Заказчика (по ПМИ);
выпуск документации (руководство программиста, руководство системного программиста и т.п.);
выпуск программного продукта для передачи потребителю (Заказчику).
По ГОСТ 19.102-77 «Стадии разработки» определены следующие этапы разработки ПО:
разработка ТЗ (ему соответствует названный выше этап «Постановка задачи и ее формализация»)
разработка
ЭП (им соответствует названный выше
этап «разработка метода решения,разработка ТП структуры программы и алгоритмов»)
разработка РП (он включает названные выше этапы «Кодирование и отладка», «Тестирование» и «Документирование».
внедрение (ему соответствует названный выше этап «Выпуск программного продукта для передачи потребителю (Заказчику)»).
Более подробно о некоторых этапах (или подэтапах) разработки ПО.
Постановка задачи
Выполняется на языке предметной области, т.е. с использованием используемой в предметной области технической терминологии (антенна, телевизор, резистор ...). На этом этапе:
указываются (выбираются из предметной области) исходные объекты (объекты предметной области, относительно которых поставлена задача), их типы (структура, организация) а так же отношения между ними (исходными объектами);
формулируется цель (разработки), состоящая или в получении нового объекта, или в обработке характеристик исходных объектов (с целью нахождения какой-то статистики, например);
выбираются, согласовываются и фиксируются ограничения (на исходные данные и метод решения).
После исходной (первоначальной) постановки задачи выполняется формальная или математическая постановка задачи. Слово математическая понимается в том смысле, что мы переопределяем поставленную задачу в терминах моделей объектов (абстракций) и отношений между ними (обычно в виде математических формул). Этот этап часто называется формализацией.
В процессе формализации проводится углубленный анализ задачи и переход от нечеткого словесного описания задачи к описанию в знаковой форме с использованием какого-либо искусственного языка с фиксированными значениями (изображениями) каждого термина. Формализация обеспечивает однозначную постановку задачи. В качестве формализмов часто используются:
теория графов;
теория вероятностей;
теория массового обслуживания;
теория множеств
и т.д.
При формализации используется аппарат абстрагирования. Абстрагирование – это метод научного познания, заключающийся в переходе от реальных объектов к их абстракциям. При этом происходит мысленное отвлечение от тех свойств реальных объектов и связей между ними, которые в данной постановке задачи (с точки зрения решаемой задачи) представляются несущественными. В результате абстрагирования получается модель (абстакция), т.е. некий искусственный объект, сохраняющий (при определенных допущениях) (в рамках сделанной постановки) основные свойство объекта-оригинала (напомнить про Вольтметр и Секундомер для измерения высоты). Далее задача решается уже в математической простановке.
Хорошая математическая постановка задачи часто позволяет сразу увидеть способ решения.
Поиск метода решения задачи (на этапе проектирования)
Очевидно, что невозможно точно и в нужном порядке описать действия по решению задачи (т.е. алгоритм решения) не зная метода ее решения. Поэтому разработка алгоритма всегда связана с необходимостью вначале отыскать такой метод. Под методом решения задачи понимается указание последовательности, в которой необходимо решить некоторые известные задачи, чтобы получить требуемый результат. Известные задачи – это:
те, которые уже ранее встречались, и решение их уже известно;
те, для которых известна постановка, и решение их не представляет (для программиста) труда.
Таким образом, метод решения определяет замену исходной задачи на некоторую эквивалентную ей последовательность известных задач.
Откуда эти известные задачи появляются в поле зрения разработчика, зависит от выбранного им подхода к разработке программ (алгоритмов) - восходящий или нисходящий.
Замечание: Кроме названных двух подходов к разработке алгоритмов (программ) обычно выделяют следующие методологии (парадигмы) программирования :
процедурная (включает восходящий и нисходящий подходы) - только здесь в обязательном порядке требуется разработка алгоритмов;
объектно-ориентированная (по сути тоже восходящий подход, но не процедурный);
логическая (логико-ориентированная);
функциональная.
Мы об этих парадигмах поговорим чуть позже.
Кодирование проходит обычно следующие шаги:
1).Перевод алгоритма на один из языков программирования, в результате чего получается (вначале на бумаге) рукописный (исходный) текст программы.
2).Подготовка программы для ПЭВМ, т.е. перенос рукописного текста программы с бумаги на машинный носитель информации. Для этого используется текстовый редактор.
3).Компиляция текста программы в машинный код с помощью программы, называемой компилятором.
ЭВМ
Компилятор
Программа на ЯВУ
Машинный код
(понятен ЭВМ)
Замечание: фраза, что программа – это алгоритм, составленный на языке, понятном ЭВМ, означает, что при наличии посредника-компилятора текст, написанный на ЯВУ, уже считается понятным ЭВМ. Этот посредник-компилятор занимается переводом текста программы с ЯВУ на машинный язык.
Замечание: Кроме компиляторов есть еще интерпретаторы. Они разбирают каждую инструкцию текста программы и немедленно ее исполняют (инструкцию за инструкцией). При этом файл на машинном языке не создается. Работают интерпретаторы гораздо медленнее, чем компиляторы. Зато с их помощью проще отлаживать программы (искать в них ошибки)
Успешное завершение компиляции (перевода) возможно при полной синтаксической правильности программы. Поэтому на данном этапе может потребоваться несколько попыток компиляции с целью устранения всех синтаксических ошибок из текста программы.
Результатом компиляции обычно является программа в машинных кодах, называемая объектным модулем (*.obj). Однако она не может быть непосредственно выполнена, т.к. не содержит код так называемых стандартных подпрограмм (они выполняют действия по, например, вводу и выводу). Кроме того, компилятором часто допускается компиляция программы по частям, т.е. результатом компиляции может оказаться машинный код лишь части программы. Поэтому после компиляции надо выполнить компоновку.
4).Компоновка (линковка) программы: т.е. объединение отдельных частей программы, добавление стандартных подпрограмм и установление необходимых связей между частями программы. Эти действия выполняются программой, называемой линкером (компоновщиком).
На этапе компиляции все обращения (адреса обращений) из программы к чужим (внешним, не реализованным в данной программе) функциям заменяются нуль-кодами, т.к. реальные адреса загрузки функций в память в момент компиляции неизвестны. На этапе компоновки эти места корректируют с учетом реального размещения программы и функций в разных частях программы. Эта работа выполняется компоновщиком (линковщиком). В результате получается исполняемая программа (загрузочный модуль), т.е *.exe.
Замечание: компилятор Турбо-Паскаля (и Free Pascal) производит компиляцию сразу в исполняемый код (отдельный этап линковки не требуется).
Все адресные ссылки в загрузочном модуле - относительны (относительно начала загрузочного модуля). Перед передачей программе управления надо настроить все адресные ссылки на начальный адрес размещения программы в оперативной памяти. Эту функцию выполняет Загрузчик.
Отладка и Тестирование: После получения готового к выполнению кода программы начинается этап ее отладки и тестирования - поиск ошибок в программе (debugging), например, ошибок при работе с данными, логических ошибок и т.п.
Правильность выполнения программы здесь проверяют при использовании специально подготовленных исходных данных (тестовых данных), для каждого из которых определяется: а) цель теста (что нужно найти) б) исходные данные (что нужно задать) в) ожидаемые результаты при заданных исходных данных. В случае ошибочных результатов при прохождении какого-то конкретного теста можно определить ошибку в конкретной функции программы или в конкретной ветви программы.
Различают методы тестирования: а) белого ящика (структурное тестирование) и б) черного ящика (функциональное тестирование - может начинаться сразу после получения ТЗ).
Различают виды тестирования: а) альфа-тестирование (проводит сам программист) б) бета-тестирование (проводится у Заказчика или потенциального Потребителя).
По завершении (успешном) тестирования программа готова к передаче ее заказчику.
Замечание:
Все перечисленные выше программы (редактор, компилятор, линковщик, отладчи и т.д.) могут быть запущены и использованы по отдельности (в описанном порядке), но в Турбо-Паскале они объединяются в так называемую интегрированную среду разработки (IDE), позволяющею создавать, отлаживать и запускать программы не выходя из среды с помощью системы меню.
4. Средства записи и классификация алгоритмов.
