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

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

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

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

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

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

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

Каждому конечному программному продукту необходимо документированное сопро- вождение в виде помощи (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

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