Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Informatika.pdf
Скачиваний:
240
Добавлен:
26.03.2015
Размер:
6.48 Mб
Скачать

Если программа небольшая, то некоторые пункты не являются актуальными и их можно опустить, но большой программный проект требует проработки всех упомянутых пунктов.

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

Проектирование программы это разработка структуры программной системы на уровне модулей методом декомпозиции. Декомпозиция используется для разбиения про- граммы на компоненты, которые затем могут быть объединены.

При разработке моделей программы используются два метода: дедуктивный и индук- тивный. Дедуктивный метод подразумевает, что модель разрабатываемой программы явля- ется частным случаем имеющейся более общей модели. Тогда общую модель можно приспо- собить к данному частному случаю. Индуктивный метод предполагает итеративное уточне- ние создаваемой модели путем предположений, анализа, моделирования.

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

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

Каждому конечному программному продукту необходимо документированное сопро- вождение в виде помощи (help) и файлового текста (readme.txt).

6.4.Обзор языков программирования

6.4.1.Системы программирования. Писать все программы в машинных кодах очень сложно и трудоёмко. Поэтому сегодня практически все программы создаются с помощью языков программирования искусственных языков. От естественных они отличаются огра- ниченным числом слов, значение которых понятно транслятору, и очень строгими правила- ми записи команд. Совокупность требований к правилам записи команд называется синтак- сисом языка программирования, а смысл каждой команды определяется семантикой языка. Процесс поиска ошибок в программе называется тестированием, а процесс устранения ошибок отладкой.

С помощью языка программирования создаётся не готовая программа, а только её текст, описывающий ранее разработанный алгоритм. Этот текст надо перевести в машинный код, для этого служат программы-компиляторы или программы-интерпретаторы.

Интерпретатор берёт очередной оператор языка из текста программы, анализирует его структуру и затем сразу исполняет. Только после того, как текущий оператор выполнен, ин- терпретатор переходит к следующему. При этом, если один и тот же оператор выполняется в программе многократно, интерпретатор всякий раз будет выполнять его так, как будто встре- тил впервые. Вследствие этого программы выполняются медленно.

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

244

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

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

В самом общем случае для создания программы на выбранном языке программирова- ния нужно иметь следующие компоненты:

qтекстовый редактор. Подобные редакторы созданы для всех популярных

языков и могут автоматически проверять правильность синтаксиса программы непосредственно о время её вода;

qпрограмма-компилятор, переводящая текст в машинный код и отслеживающая синтаксические ошибки. Компилятор выдаёт так называемый объектный код;

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

установлена операционная система, для которой эта программа создавалась. Итак, для создания программы нужно:

текстовый редактор;

компилятор;

редактор связей;

библиотека функций.

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

Впоследнее время в программировании наметился так называемый визуальный под- ход. Этот процесс автоматизирован в средах быстрого проектирования (Rapid Application Development, RAD – среды). Все необходимые элементы оформления и управления создают- ся и обслуживаются не путём ручного программирования, а с помощью готовых визуальных компонентов, которые мышью перетаскиваются в проектируемое окно. Их свойства затем настраиваются с помощью простых редакторов. При этом исходный текст программы гене- рируется RAD – средой автоматически, что позволяет сосредоточиться только на логике ре- шаемой задачи. Подобный подход называется визуальным программированием.

Из универсальных языков программирования сегодня наиболее популярны следую-

щие:

Бейсик (Basic);

Паскаль (Pascal);

Си++, Ява.

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

6.4.2. Уровни и история развития языков программирования. Разные типы про-

цессоров имеют разные наборы команд, например, Pentium II – около тысячи команд. Если язык программирования ориентирован на конкретный тип процессора и учитывает его осо-

бенности, то он называется языком программирования низкого уровня.

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

245

лере, нужно очень хорошо понимать устройство компьютера. На этих языках пишутся сис- темные библиотеки, драйверы, небольшие системные приложения.

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

зываются языками высокого уровня (ЯВУ).

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

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

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

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

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

Языки высокого уровня обладают следующими достоинствами:

их алфавит значительно шире машинного, что повышает выразительность, на- глядность и понятность текста;

набор допустимых операций не зависит от набора машинных и выбирается из соображений удобства пользователя;

конструкции команд задаются в удобном для человека виде;

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

первое поколение язык ассемблер, созданный в начале 50-х годов XX века (первый вариант);

второе поколение появилось в конце 50-х начале 60-х годов. Это был симво- лический ассемблер первый полноценный язык программирования;

третье поколение универсальные языки высокого уровня. Простота и незави- симость от конкретного компьютера позволили резко повысить производи- тельность труда программистов. Подавляющее большинство языков этого по- коления успешно применяется и сегодня;

с начала 70-х годов XX – века и по настоящее время продолжается период язы- ков четвёртого поколения. Они ориентированы на специализированные облас- ти применения;

наконец, в середине 90-х годов появились языки пятого поколения. Это систе-

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

средств разработки.

Ещё в 20-х годах XIX столетия Ч. Бэббидж высказал мысль о предварительной записи порядка действий машины для последующей автоматической реализации вычислений про- грамме. Бэббидж предложил использовать запись программы на перфокартах, которые в ту пору уже применялись для управления ткацкими станками. Современница Бэббиджа Ада Ловлейс теоретически разработала некоторые приёмы управления последовательностью вы- числений и описала одну из важнейших конструкций любого современного языка програм- мирования цикл.

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

246

дила в машинный код. Эта система была по существу одним из первых примитивных интер- претаторов.

В 1951 г. Грейс Хоппер создала первый в мире компилятор и ввела сам этот термин. Компилятор Хоппер осуществлял функцию объединения команд, производил организацию подпрограмм, выделял память под программы, преобразовывал команды высокого уровня в машинные команды.

Середина 50-х годов XX столетия характеризуется стремительным прогрессом в об- ласти программирования. Первым языком был ФОРТРАН (FORmula TRANslator – перево- дчик формул), разработанный группой программистов фирмы IBM в 1954 г. В конце 50-х го- дов появился ALGOL (ALGOrithmic Language – алгоритмический язык). Алгол предназначен для записи алгоритмов, которые строятся виде последовательностей процедур. В нашей стране под руководством академика А.П. Ершова была создана удачная русифицированная версия Алгола транслятор Альфа.

В середине 60-х Томас Курц и Джон Кемени создали специализированный язык программирования, который состоял из простых слов английского языка. Новый язык назва-

ли BASIC (Beginners All-Purpose Symbolic Instruction Code), он получил широкое распро-

странение среди пользователей ЭВМ различных категорий во всём мире.

К началу 70-х годов XX века число различных языков высокого уровня достигло трёх тысяч. Подавляющее большинство из них не получила сколько-нибудь широкого распро- странения. В 60-е годы были предприняты попытки преодолеть эту разноголосицупутём создания универсального языка программирования. Первым языком этого направления стал

PL/1 (Program Language One), созданный в 1967 г., затем Алгол-68 (1968 г.). Однако ни одна из таких попыток до сих пор не увенчалась успехом.

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

Развитие идеи Алгола о структуризации разработки алгоритмов нашло развитие при создании в начале 70-х годов XX века языка Паскаль Н. Виртом как учебного языка. В

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

Языки

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

 

Процедурные

 

 

Объектно-

 

 

 

Декларативные

 

 

 

 

ориентированные

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Операцион-

 

Струк-

 

Объект-

 

Визуаль-

 

 

Функцио-

 

Логичес-

ные

 

турные

 

 

ные

 

ные

 

 

нальные

 

кие

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 6.3. Классификация языков программирования

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

Грейс Мюррей Хоппер (1906 - 1992) – американский математик и программист, впоследствии контр-адмирал ВМС США.

Андрей Петрович. Ершов (1931 - 1988) – советский математик, создатель транслятора Альфа.

Томас Курц (р. 1928) – английский математик, создатель языка Basic.

Джон Георг Кемени (19261992) – английский математик, создатель языка Basic.

Никлаус Вирт (р. 1934) – швейцарский математик, создатель языка Pascal.

247

объявлен победитель группа учёных во главе с Жаном Ихбиа . Они создали язык Ада прямой наследник языка Паскаль.

Современное состояние языков программирования можно представить в виде сле- дующей схемы (рис. 6.3).

6.4.3. Примеры языков программирования.

1.Фортран (Fortran). Создан Джоном Бэкусом в 50-е годы XX века. В Фортране впервые был реализован ряд важнейших понятий программирования. Было создано огромное количество библиотек. Сейчас имеется стандартная версия Фортрана (HPF – High Performance Fortran).

2.Кобол (Cobol). Это компилируемый язык для экономистов, разработан в 60-е годы. На этом языке создано очень много приложений, он активно эксплуати- руется и сегодня.

3.Алгол (Algol). Создан в 60-е годы на замену Фортрану. Является более слож- ным. Нацелен на обслуживание научных приложений.

4.Паскаль (Pascal). Создан в 70-х годах Н. Виртом, во многом напоминает Алгол,

но в этом языке имеются возможности его применения при создании очень крупных проектов.

5.Бейсик (Basic) по популярности занимает первое место. Создан в 60-е годы в качестве учебного языка.

6.Си (С). Создан в лаборатории Bell и планировался для замены ассемблера, во многом похож на Паскаль и имеет средства для прямой работы с памятью. На

нём написана операционная система Unix. C++ - расширение Си, создано Бьярном Страуструпом в начале 80-х годов.

7.Ява (Java). Создан компанией Sun начале 90-х годов на основе С++ путём ис- ключения из последнего всех низкоуровневых возможностей. Занимает по по- пулярности второе место в мире после Бейсика. Java интерпретируемый язык, поэтому программы, написанные на нём, обладают невысоким быстродействи- ем.

8.ПЛ/1 (PL/1). Изобретён в середине 60-х годов компанией IBM. В этом языке было реализовано множество уникальных решений. По своим возможностям PL/1 значительно мощнее многих других языков, например, Си, Паскаля. Этот язык и сегодня продолжает поддерживаться компанией IBM.

9.Смолток (Smalltalk). Создан в 70-80-е годы компанией Xerox. Данный язык оригинален тем, что его синтаксис очень компактен и базируется исключи- тельно на понятии объекта.

10.Лисп (Lisp). Изобретён в начале 60-х годов Джоном Маккарти . Ориентиро- ван на структуру данных в форме списка и позволяет организовать эффектив- ную обработку больших объёмов текстовой информации.

11.Пролог (Prolog). Создан в начале 70-х годов Аланом Калмероэ . В его осно-

ву положена математическая модель теории исчисления предикатов и правил вывода этой теории.

12.Ада (Ada). Разработан группой под руководством Жана Ихбиа. Структура язы- ка похожа на Паскаль. В нём имеются средства строгого разграничения досту-

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

Жан Ихбиа (1940 - 2007) – французский математик и программист.Джон Бэкус (1924 – 2007) – американский математик.

Бьярн Страуструп (р. 1950) – датский математик и программист.

Джон Маккарти (р. 1927) – американский математик, создатель языка Lisp.

Алан Калмероэ (р. 1941) – французский математик.

248

Соседние файлы в предмете Информатика