- •Лекция 1. Введение в программирование План
- •1. Языки программирования. Общая характеристика
- •2. Краткая история языков программирования Машинные команды
- •Мнемокоды
- •Структурное программирование
- •Современное программирование
- •Некоторые причины и тенденции развития языков программирования
- •3. Парадигмы программирования
- •Процедурная (директивная) парадигма
- •Функциональное и логическое программирование
- •Объектно-ориентированное программирование
- •Объектно-ориентированное программирование
- •4. Особенности и применение разных классов языков программирования
- •Неструктурные языки (широко использовались 40-е годы)
- •Директивные (структурные) языки (появились в 50-е годы)
- •Декларативные (функциональные и логические) языки (зародились в 60-е годы)
- •A) Функциональные языки
- •B) Логические языки
- •Объектно-ориентированные языки
- •Языки сценариев
- •Краткая характеристика некоторых языков программирования
- •5. Этапы разработки программы
- •Этапы разработки программы для компьютера (решения задачи на эвм)
- •Качество программы и ее разработка
- •Тестирование и отладка программ
- •Проектирование программ
- •6. Система программирования
5. Этапы разработки программы
программа |
program |
Полное и точное описание на некотором формальном языке предназначенных к выполнению работ, с учетом всех обстоятельств, общих целей и условий, на основании ранее найденных алгоритмов и имеющихся средств ЭВМ. Текст программы является официальным ее документом. |
прикладная программа |
application |
Программа, способствующая выполнению задачи, возложенной на данную ЭВМ. Прикладными программами могут быть бухгалтерские, финансовые, офисные, научные, инженерные, графические, издательские и т.п. программы. Прикладные программы следует отличать от операционных систем и средств разработки, несущих "общесистемные" функции. |
В процессе создания любой программы, будь то небольшая учебная программа, предназначенная для демонстрации преподавателем, или серьезный проект, над которым работают десятки (а то и сотни) программистов, можно выделить несколько этапов. Затраты труда и времени на их выполнение различны, различаются эти затраты и для разных программ. Некоторые из этапов могут быть опущены или пройдены "незаметно", однако анализ процесса разработки приводит к выводу о том, что почти всегда, явно или неявно, приходится проходить следующие этапы разработки программы:
Этапы разработки программы для компьютера (решения задачи на эвм)
постановка задачи;
формализация (математическая постановка задачи);
выбор метода решения и разработка алгоритма;
программирование;
отладка и тестирование;
вычисление и обработка результата (анализ результатов решения задачи и уточнение математической модели с повторным выполнением этапов 2 - 5 при необходимости);
сопровождение программы.
Рассмотрим подробнее содержание каждого из перечисленных этапов. 1. Постановка задачи: - сбор информации о задаче; - формулировка условия задачи; - определение конечных целей решения задачи; - определение формы выдачи результатов; - описание данных (их типов, диапазонов величин, структуры и т. п.).
Постановка задачи выполняется заказчиком, в качестве которого может выступать внешняя организация, организация, в которой работает программист, начальник программиста, преподаватель, сам программист. На этом этапе задача, которую необходимо решить посредством составления программы для компьютера, формулируется на естественном языке (русском, китайском, языке племени мбвонга-твонга). При этом важно осознать, что решение данной задачи с помощью компьютера – действительно оптимальный способ получения результата. Вряд ли стоит составлять программу для вычисления суммы двух чисел – в этом случае достаточно воспользоваться калькулятором. При решении вычислительной задачи может оказаться, что уравнения, описывающие математическую модель явления, могут быть решены точно, аналитически (так, что решение записывается с помощью элементарных или специальных функций). В этом случае также не нужен компьютер. Если же речь идет о расчете аэродинамических характеристик новой модели самолета, без суперкомпьютера не обойтись!
2. Формализация (Анализ и исследование задачи, модели): - анализ существующих аналогов задачи; - анализ технических и программных средств; - разработка математической модели; - разработка структур данных.
Анализ задачи включает определение входных и выходных данных, выявление возможных ограничений на их значения и обычно завершается формализованным описанием задачи, которое часто предполагает ее математическую формулировку. Если речь идет о моделировании каких-либо явлений или процессов, на этом этапе разрабатывается математическая модель процесса (явления).
Математическая модель - это система математических соотношений - формул, уравнений, неравенств и т. д., отражающих существенные свойства объекта или явления. В этом случае определяются факторы, которые играют основную роль, и отбрасываются те факторы, действие которых незначительно и которыми поэтому можно пренебречь. Так, при моделировании полета снаряда в поле тяготения Земли на небольшой высоте основное значение имеют сила тяжести и сопротивление воздуха, а неоднородности поля тяжести, кривизну поверхности Земли и действие ветра можно не учитывать. 3. Разработка алгоритма: - выбор метода проектирования алгоритма; - выбор формы записи алгоритма (блок-схемы, псевдокод и др.); - выбор тестов и метода тестирования; - проектирование алгоритма.
Выбор или разработка алгоритма и численного метода решения задачи имеют важнейшее значение для успешной работы над программой. Тщательно проработанный алгоритм решения задачи – необходимое условие эффективной работы по составлению программы.
4. Программирование: - выбор языка программирования; - уточнение способов организации данных; - проектирование общей структуры программы; - кодирование алгоритма на выбранном языке программирования.
Проектирование общей структуры программы. На этом этапе происходит "архитектурная" проработка проекта. Определяются те части алгоритма, которые целесообразно оформить в виде подпрограмм, модулей. Определяется и способ хранения информации – в виде набора простых переменных, массивов или других структур.
Кодирование – это запись алгоритма на языке программирования. Если алгоритм решения задачи, структура программы и структура данных тщательно продуманы и аккуратно записаны, затраты времени на кодирование уменьшаются, а вероятность ошибок на этом этапе снижается.
Следует подчеркнуть значение стандартизации.
Если для языка существует стандарт, и если компиляторы его поддерживают, то программы можно переносить с одного компьютера на другой.
Когда вы пишете пакет программ, который должен выполняться на разных компьютерах, вы должны строго придерживаться стандарта. Иначе задача сопровождения чрезвычайно усложнится, потому что придется следить за десятками или сотнями машинно-зависимых вопросов.
Концепция языка программирования неотрывно связана с его реализацией. Для того чтобы компиляция одной и той же программы различными компиляторами всегда давала одинаковый результат, разрабатываются стандарты языков программирования. Существует ряд организаций, целенаправленно занимающихся вопросами стандартизации. Это Американский национальный институт стандартов ANSI (American National Standards Institute), Институт инженеров по электротехнике и электронике IEEE (Institute of Electrical and Electronic Engineers), Организация международных стандартов ISO (International Organization for Standardization).
Как правило, при создании языка выпускается частный стандарт, определяемый разработчиками языка. Если язык получает широкое распространение, то со временем появляются различные версии компиляторов, которые не точно следуют частному стандарту. В большинстве случаев идет расширение зафиксированных первоначально возможностей языка. Для приведения наиболее популярных реализаций языка в соответствие друг с другом разрабатывается согласительный стандарт. Очень важным фактором стандартизации языка программирования является своевременность появления стандарта – до широкого распространения языка и создания множества несовместимых реализаций. В процессе развития языка могут появляться новые стандарты, отражающие современные нововведения. Так, язык FORTRAN первоначально был стандартизирован в 1966 году. В результате был издан стандарт FORTRAN 66. Далее этот стандарт несколько раз пересматривался (в 1977 году был выпущен FORTRAN 77, затем появился и FORTRAN 90).
Язык Java, ставший в последнее время весьма распространенным, постепенно был значительно расширен и модифицирован: новая спецификация получила название Java 2.
5. Тестирование и отладка: - синтаксическая отладка; - отладка семантики и логической структуры; - тестовые расчёты и анализ результатов тестирования; - совершенствование программы.
Процесс разработки программы можно выразить следующей формулой: Разработка программы = изготовление + проверка и исправление. Отладка программы - это процесс поиска и устранения ошибок в программе, производимый по результатам ее прогона на компьютере. Тестирование - это испытание, проверка правильности работы программы в целом либо ее составных частей. Чем отличаются Отладка и тестирование: - при отладке происходит локализация и устранение синтаксических ошибок и явных ошибок кодирования; - в процессе же тестирования проверяется работоспособность программы, не содержащей явных ошибок. Тестирование устанавливает факт наличия ошибок, а отладка выясняет причину неправильной работы программы. Тест = некоторая совокупность исходных данных + точное описание соответствующих этим данным всех результатов работы программы в том виде, в котором эти результаты должны быть выданы.
Отладка и верификация программы представляют собой очень важную часть процесса разработки программы. Отладка заключается в устранении ошибок программирования, ошибок перевода алгоритма на язык программирования. Верификация – это доказательство того, что программа работает "правильно", дает правильный результат. Для этого разрабатывается система тестов, которые могут представлять собой специально подобранные наборы параметров, для которых задача может быть решена точно. Это могут быть, например, какие-нибудь предельные случаи. Если результат, полученный с помощью программы, совпадает (с учетом погрешности машинного счета) с ожидаемым, есть основание полагать, что программа работает корректно. Но это всего лишь основание, а не абсолютная уверенность! Среди начинающих программистов распространено убеждение, что если программа успешно откомпилирована и, будучи запущена на выполнение, выдает на экран ряды цифр, задача решена. На самом же деле программа готова, если разработчик смог доказать заказчику (да и самому себе), что результат работы программы является решением поставленной задачи.
6. Анализ результатов решения задачи и уточнение математической модели с повторным выполнением этапов 2 - 5 (при необходимости).
Получение результата, его интерпретация с возможной последующей модификацией модели.
Вот, наконец, программа проверена, большая часть ошибок устранена и есть обоснованная надежда на то, что, по крайней мере в рамках выбранной модели, она дает правильный результат. Этот результат необходимо проанализировать. Если речь идет о моделировании какого-то природного процесса, следует сравнить полученные с помощью компьютера результаты и результаты наблюдений. Процесс такого анализа мы и называем интерпретацией результатов расчета. Здесь программиста может ожидать разочарование – результат может отличаться от требуемого. В этом случае, возможно, придется изменить саму модель, сделав ее более реалистичной.
Публикация или передача заказчику результата работы – это важнейший момент, момент рождения качественной программы. В научных исследованиях значение имеют результаты моделирования, которые публикуются в научных журналах. В других случаях конечным результатом работы может быть сама программа, которая передается заказчику для дальнейшей эксплуатации или выкладывается на ftp-сервер для свободного распространения и прославления автора программы!
7. Сопровождение программы: - доработка программы для решения конкретных задач; - составление документации к решённой задаче, к математической модели, к алгоритму, к программе, к набору тестов, к использованию программы. Сопровождение программы предполагает консультации заказчику по работе программы, устранение замеченных в процессе ее эксплуатации недостатков (а возможно, и ошибок), обучение пользователей работе с программой. Этот, заключительный этап имеет особое значение для больших и сложных программ.
