Переменные

A,b,c:Целочисленный_тип;

d,x1,x2:Вещественный_тип;

Начало

Написать(‘Введите a,b,c’);

Прочитать(a,b,c);

D:=b2-4*a*c;

Если D<0 Делать

Написать(‘Корней нет’)

Иначе

Если D=0 Делать

Начало

x1:=-b/2*a;

Написать(‘Корень квадратного уравнения ’ + x1)

Конец

Иначе

Начало

x1:=-b+Корень(D)/2*a;

x2:=-b-Корень(D)/2*a;

Написать(‘Корни квадратного уравнения ’+x1:5:2+’ и ’x2:5:2);

Конец;

Конец.

 

6 шаг – Нахождение синтаксических и логических ошибок

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

 

Дома:

1. Написать алгоритм программы умножения, деления, сложения и вычитания двух чисел

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

6.6. Языки программировании

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

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

опи­сывается понятием «1», а его отсутствие — понятием «О». Комадаы, обрабатываемые процессором, можно интерпретировать как ряд че­редующихся определенным образом единиц и нулей. То есть любаякоманда преобразуется в двоичное число. Таким образом, процессор исполняет программы, представляющие собой последовательность
чисел и называемые машинным кодом. • ' :

Писать программы в машинных кодах очень сложно, причем с ростом размера программы эта задача усложняется. В компьютерах первого поколения использовались программы, написанные в ма­шинных кодах, причем для каждого компьютера существовал свой собственный машинный код. Числовая кодировка команд, адресов ячеек и обрабатываемых данных, зависимость вида программы от ее места в памяти не давали возможность следить за смыслом програм­мы. Это во многом ограничивало область применения компьютеров первого поколения. В тот период (начало 50-х гг.) средства програм­мирования и программное обеспечение только зарождались и были еще не развиты. Для того чтобы сделать программу читабельной и иметь возможность следить за ее смысловой структурой, придумали символический язык ассемблер, близкий к машинному (конец 50-х — начало 60-х гг.), в котором появилось понятие переменной. Ассемб­лер стал первым полноценным языком программирования. Благода­ря этому заметно уменьшилось время разработки и возросла надеж­ность программ. Для записи кодов операций и обрабатываемой информации в ассемблере используются стандартные обозначения,. позволяющие записывать числа и текст в общепринятом виде, для кодов команд приняты мнемонические обозначения. Для обозначе­ния величин, размещаемых в памяти, можно применять имена. После ввода программы ассемблер сам заменяет символические имена на адреса памяти, а символические коды команд на числовые. Исполь­зование ассемблера сделало процесс программирование более нагляд­ным. Дальнейшее развитие этой идеи привело к созданию языков

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

6,6,1. Понятие «язык программирования»

Сегодня практически все программы создаются с помощью язы­ков программирования. Теоретически программу можно написать и на естественном языке (говорят: программирование на метаязыке), но из-за неоднозначности естественного языка автоматически пере­вести такую программу в машинный код пока невозможно.

Языки программирования — это формальные искусственные язы­ки. Как и естественные языки, они имеют алфавит, словарный запас, грамматику и синтаксис, а также семантику.

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

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

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

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

Языки программирования, ориентированные на команды про­цессора и учитывающие его особенности, называют языками низко­го уровня. «Низкий уровень» не означает неразвитый, имеется в виду, что операторы этого языка близки к машинному коду и ориентиро­ваны на конкретные команды процессора.

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

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

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

6.6.2. Компиляторы и интерпретаторы

С помощью языка программирования создается текст програм­мы, описывающий разработанный алгоритм. Чтобы программа была выполнена, надо либо весь ее текст перевести в машинный код (это действие и выполняет программа — компилятор) и затем передать на исполнение процессору, либо сразу выполнять команды языка, пе­реводя на машинный язык и исполняя каждую команду поочередно (этим занимаются программы — интерпретаторы).

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

Компиляторы полностью обрабатывают весь текст программы (его называют исходным кодом или зоигсе соёе). Они осуществляют поиск синтаксических ошибок, выполняют семантический анализ и только затем, если текст программы в точности соответствует пра­вилам языка, его автоматически переводят (транслируют) на машин­ный язык (говорят: генерируют объектный код или оЪ}есг сойе). Не­редко при этом выполняется оптимизация с помощью набора методов, позволяющих повысить быстродействие программы. Сгене­рированный объектный код обрабатывается специальной программой - сборщиком или редактором связей, который производит связыва­ние объектного и машинного кодов. Текст программы преобразует­ся в готовый к исполнению ЕХЕ-файл (исполнимый код), его можно сохранить в памяти компьютера или на диске. Этот файл имеет са­мостоятельное значение и может работать под управлением опера­ционной системы. Его можно перенести на другие компьютеры с процессором, поддерживающим соответствующий машинный код.

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

С помощью интерпретатора, наоборот, для исследования содер­жимого памяти допустимо в любой момент прервать работу програм­мы, организовать диалог с пользователем, выполнить любые слож-

II. Информатика

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

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

6.6.3. Системы программирования

Процесс создания программы включает:

• Составление исходного кода программы (рис. 6.21) на языке про­граммирования.

• Этап трансляции, необходимый для создания объектного кода программы.

• Построение загрузочного модуля, готового к исполнению.

Все перечисленные выше действия требуют наличия специаль­ных программных средств.

[[Исходный!! Трансляция [[объектный!! Редактор код код

связей

Загрузочный модуль

Рис. 6.21. Процесс создания программы, готовой к исполнению

Совокупность этих программных средств входит в состав систе­мы программирования:

Текстовый редактор (необходимый для создания и редактирова­ния исходного кода программы на языке программирования).

• Компилятор.

• Редактор связей.

• Отладчик.

322 • Библиотеки функций.

• Справочная система.

6.6.4. Клоссисрикаиио и обзор «ЗыкоВ программирования

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

языки

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

Процедурные (императивные)

Объектно-ориентированные

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

Операцией -ные   Структурные  
Объектные   Визуальные  
Функцио­нальные   Логические
               

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

ПроиеЗурное программирование

Процедурное или императивное (от лат. 1трегаи\ш — повелитель­ный) программирование есть отражение фон Неймановской архитек­туры компьютера. Программа, написанная на этом языке, представ­ляет собой последовательность команд, определяющих алгоритм решения задачи. Основной командой является команда присвоения, предназначенная для определения и изменения содержимого памя­ти компьютера. Фундаментальная идея процедурного программиро­вания - использование памяти компьютера для хранения данных. Функционирование программы сводится к последовательному вы­полнению команд с целью преобразования исходного состояния памяти, т.е. программа производит пошаговое преобразование содер­жимого памяти, изменяя его от исходного состояния к результиру­ющему.

Одним из первых процедурных языков программирования высоко-

323 го уровня стал Фортран (ЮКгп\Аа 2ЖЛМ1а1юп), созданный в начале 50-х гг. в США фирмой 1ВМ. Первая публикация о нем появилась в 1954 г. Основное назначение языка — программирование научно-тех­нических задач. Объектами языка являются целые и вещественные числа и числовые переменные. Выражения в нем формируются с помощью четырех арифметических действий: возведения в степень, логических операций И, ИЛИ, НЕ, операций отношения и круглых скобок. Основные операторы Фортрана - ввод, вывод, присваива­ние, условный и безусловный переход, цикл, вызов подпрограмм. Долгие годы он был одним из самых распространенных языков в мире. За это время накоплена огромная библиотека программ, на­писанных на Фортране. И сейчас ведутся работы над очередным стандартом Фортрана. В 2000 г. была реализована версия Фортран Р2к, имеется стандартная версия НРР (НщЬ РегГогтапсе РоПгап) для параллельных суперкомпьютеров. Многие средства Фортрана исполь­зованы в языках РЬ-1 и Бейсик.

Кобол (СОттоп .йиктезз Опетеё 1,ап§иа§е — общепринятый де­ловой язык) — язык программирования, ориентированный на реше­ние задач обработки данных. Широко используется для решения учетно-экономических и управленческих задач. Разработан в США в 1958—1960 гг. Программа на Коболе имеет вид ряда предложении на английском языке и напоминает обычный текст. Группы после­довательно записанных операторов объединяются в предложения, предложения — в параграфы, параграфы — в секции. Программист присваивает параграфам и секциям имена (метки), что облегчает непосредственное обращение к нужному участку программы. В СССР был принят русский вариант языка. В Коболе были реализованы мощные средства работы с большими объемами данных, хранящи­мися на различных внешних носителях. На этом языке создано много приложений, некоторые из них активно эксплуатируются и сейчас. Достаточно сказать, что одной из высокооплачиваемых категорией граждан в США являются программисты на Коболе.

Алгол (АЮОпйитс Х,апёиа§е) разработан группой зарубежных специалистов в 1960 г., явился результатом международного сотруд­ничества конца 50-х гг. (Алгол-60). Алгол предназначался для запи­си алгоритмов, построенных в виде последовательности процедур, применяемых при решении поставленных задач. Специалисты-прак­тики воспринимали этот язык неоднозначно, но тем не менее он как

324 го уровня стал Фортран (ЮКгп\Аа 2ЖЛМ1а1юп), созданный в начале 50-х гг. в США фирмой 1ВМ. Первая публикация о нем появилась в 1954 г. Основное назначение языка — программирование научно-тех­нических задач. Объектами языка являются целые и вещественные числа и числовые переменные. Выражения в нем формируются с помощью четырех арифметических действий: возведения в степень, логических операций И, ИЛИ, НЕ, операций отношения и круглых скобок. Основные операторы Фортрана - ввод, вывод, присваива­ние, условный и безусловный переход, цикл, вызов подпрограмм. Долгие годы он был одним из самых распространенных языков в мире. За это время накоплена огромная библиотека программ, на­писанных на Фортране. И сейчас ведутся работы над очередным стандартом Фортрана. В 2000 г. была реализована версия Фортран Р2к, имеется стандартная версия НРР (НщЬ РегГогтапсе РоПгап) для параллельных суперкомпьютеров. Многие средства Фортрана исполь­зованы в языках РЬ-1 и Бейсик.

Кобол (СОттоп .йиктезз Опетеё 1,ап§иа§е — общепринятый де­ловой язык) — язык программирования, ориентированный на реше­ние задач обработки данных. Широко используется для решения учетно-экономических и управленческих задач. Разработан в США в 1958—1960 гг. Программа на Коболе имеет вид ряда предложении на английском языке и напоминает обычный текст. Группы после­довательно записанных операторов объединяются в предложения, предложения — в параграфы, параграфы — в секции. Программист присваивает параграфам и секциям имена (метки), что облегчает непосредственное обращение к нужному участку программы. В СССР был принят русский вариант языка. В Коболе были реализованы мощные средства работы с большими объемами данных, хранящи­мися на различных внешних носителях. На этом языке создано много приложений, некоторые из них активно эксплуатируются и сейчас. Достаточно сказать, что одной из высокооплачиваемых категорией граждан в США являются программисты на Коболе.

Алгол (АЮОпйитс Х,апёиа§е) разработан группой зарубежных специалистов в 1960 г., явился результатом международного сотруд­ничества конца 50-х гг. (Алгол-60). Алгол предназначался для запи­си алгоритмов, построенных в виде последовательности процедур, применяемых при решении поставленных задач. Специалисты-прак­тики воспринимали этот язык неоднозначно, но тем не менее он как

324 признанный международный язык сыграл большую роль в станов­лении основных понятий программирования и для обучения про­граммистов. В нем впервые введены понятия «блочная структура программы», «динамическое распределение памяти». Внутри блока в Алголе можно вводить локальные обозначения, которые не зависят от остальной части программы. Несмотря на свое интернациональ­ное происхождение, Алгол-60 получил меньшее распространение, чем Фортран. Например, не на всех зарубежных ЭВМ имелись трансля­торы с Алгола-60. В 1968 г. в результате дальнейшего развития и усо­вершенствования Алгола-60 была создана версия Алгол-68. Это мно­гоцелевой универсальный расширенный язык программирования. Последнее свойство позволяло с помощью одной и той же програм­мы транслятора осуществлять трансляцию с различных расширенных версий языка без дополнительных затрат на приспособление этого языка к различным категориям пользователей, на получение про­блемно-ориентированных диалектов языка. По своим возможностям Алгол-68 и сегодня опережает многие языки программирования, од­нако из-за отсутствия эффективных компьютеров для него не уда­лось своевременно создать хорошие компиляторы. В нашей стране в те годы под руководством академика Андрея Петровича Ершова был создан транслятор Альфа, который представлял достаточно удачную русифицированную версию Алгола.

В середине 60-х гг. сотрудники математического факультета Дар-тмутского колледжа Томас Курц и Джон Кемени создали специали­зированный язык программирования, который состоял из простых английских слов. Новый язык назвали универсальным символическим кодом для начинающих (/?е§тпегз Л11-ригро5е 5утЪоИс /шйисИоп Соёе) или сокращенно ВА51С (Бейсик). 1964 г. считают годом рождения этого языка. Он получил самое широкое распространение при рабо­те на персональных компьютерах в режиме интерактивного диалога. Популярность Бейсика объясняется как простотой его освоения, так и наличием достаточно мощных универсальных средств, пригодных для решения научных, технических и экономических задач, а также задач бытового характера, игровых и т.д. Согласно концепциям, за­ложенным в Бейсике, в нем широко распространены различные пра­вила умолчания, что считается-плохим тоном в большинстве языков программирования подобного типа. Возникло множество версий язы­ка, зачастую мало совместимых друг с другом. Однако, зная одну из

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

В начале 60-х гг. каждый из существующих языков программи­рования бьщ ориентирован на разные классы задач, но в той или иной мере привязан к конкретной архитектуре ЭВМ. Были предпри­няты попытки преодолеть этот недостаток путем создания универ­сального языка программирования. ПЛ/1 (РЬ/1 — Рто^таттт^, /,ап§иаёе Опе) - первый многоцелевой универсальный язык, разра­ботан в США фирмой 1ВМ в 1963-1966 гг. Это один из наиболее рас­пространенных универсальных языков, он хорошо приспособлен для решения задач в области вычислительной техники: исследования и планирования вычислительных процессов, моделирования, решения логических задач и исследования логических схем, разработки сис­тем математического обеспечения. При разработке РЬ/1 были ши­роко использованы основные понятия и средства языков Фортран, Алгол-60, Кобол. РЬ/1 — богатый и гибкий язык, дает возможность производить вставки, исправлять текст программы в процессе ее от­ладки. Язык получил широкое распространение, трансляторы с него имеются для многих типов компьютеров. Компания 1ВМ и сегодня продолжает поддерживать этот язык.

Паскаль (Разса!) является одним из наиболее популярных про­цедурных языков программирования, особенно для персональных компьютеров. Созданный как учебный язык программирования в 1968—1971 гг. Никлаусом Виртом в Высшей технической школе (ЕТН) в Цюрихе (Швейцария), он был назван в честь французского ма­тематика и философа Блеза Паскаля (1623—1662). Задачей Н. Вирта было создание языка, базирующегося на простом синтаксисе и не­большом количестве базовых конструкций, переводимого в машин­ный код простым компилятором.

В основе языковой концепции Паскаля лежит системный под­ход, предполагающий переход от общей задачи к частным (более простым и меньшим по объему). К основным принципам Паскаля следует отнести: • Структурное программирование. Его методология основана на

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

326объединяющих связанные между собой совокупности данных. Подпрограммы позволяют заменять в тексте программ упорядо­ченные блоки команд, отчего программный код становится бо­лее компактным. Структурный подход обеспечивает создание более понятных и легко читаемых программ, упрощает их тес­тирование и отладку.

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

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

Период с конца 60-х до начала 80-х гг. характеризуется бурным ростом числа различных языков программирования, сопровождав­шим, как это ни парадоксально, кризис программного обеспечения. Этот кризис особенно остро переживало военное ведомство США. В январе 1975 г. Пентагон решил навести порядок среди бесчисленного множества трансляторов и создал комитет для разработки одного уни­версального языка. На конкурсной основе комитет рассмотрел сотни проектов и выяснил, что ни один из существующих языков не может удовлетворить их требованиям, для-окончательного рассмотрения было оставлено два проекта. В мае 1979 г. был объявлен победитель - группа ученых во главе с Жаном Ихбиа. Победивший язык назва­ли АДА, в честь Ады Лавлейс, дочери великого поэта Байрона. Она в юности была увлечена идеями Чарльза Бэббиджа и помогала ему со­ставлять описание машины, а в начале 40-х гг. XIX в. разработала пер­вую в мире программу для вычислительной машины. Язык АДА -прямой наследник Паскаля. Он предназначен для создания и длитель­ного сопровождения больших программных систем, управления про­цессами в реальном масштабе времени. В языке четко выражена мо­дульность его конструкций, причем обеспечивается удобство организации разнообразных связей между модулями. Важным его до­стоинством является возможность параллельного программирования

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

Язык программирования С (Си) был разработан в лаборатории Ве11 для реализации операционной системы 17МХ в начале 70-х гг. и не рассматривался как массовый. Он планировался для замены Ассемблера, чтобы иметь возможность создавать столь же эффектив­ные и компактные программы, и в то же время не зависеть от конк­ретного типа процессора. По набору управляющих конструкций и структур данных С имеет возможности, присущие высокоуровневым языкам, и вместе с тем он располагает средствами прямого обраще­ния к функциональным узлам компьютера. Синтаксис языка С по­зволяет создавать лаконичный программный код. Одна из существен­ных особенностей С, приближающая его к функциональным языкам, состоит в том, .что различия между выражениями и операторами сгла­живаются. Например, выражения, являющиеся операторами про­граммы, могут выполнять дополнительно операции присваивания. Использование подпрограмм основано на понятии функции, которая может также сочетать в себе возможности процедуры. Понятие про­цедуры в языке С отсутствует. Синтаксис языка затрудняет читаемость программы. Отсутствие строгой типизации данных, возможность в одном выражении сочетать несколько действий делает этот язык при­влекательным для программистов, предоставляя им дополнительные возможности, но не способствует надежности создаваемых программ. Язык С популярен и широко используется профессиональными про­граммистами. В настоящее время он реализован для большинства компьютерных платформ.

Функциональное программирование

Суть функционального (аппликативного) программирования опре­делена А.П. Ершовым как «способ составления программ, в которых единственным действием является вызов функции, единственным спо­собом расчленения программы на части является введение имени фун­кции, а единственным правилом композиции оператор суперпозиции функций. Никаких ячеек памяти, ни операторов присва­ивания, ни циклов, ни, тем более, блок-схем, ни передачи управления».

Ключевым понятием в функциональных языках является выра­жение. К ним относятся константы, структурированные объекты,

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

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

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

Первым таким языком стал Лисп (Ы8Р, Ы81Ргосезйпё — обра­ботка списков), созданный в 1959 г. Джоном Маккарти. Этот язык ориентирован на структуру данных в форме списка и позволяет орга­низовать эффективную обработку больших объемов текстовой ин­формации. Существенная черта языка — единообразие программных структур и структур данных: все выражения записываются в виде списков.

Логическое лрогроммироВоние

Создание языка искусственного интеллекта Пролог (РКОШС, РЛО§гаттт§ т ШСк — программирование в терминах логики) в 1973 г. французским ученым Аланом Кольмероэ открыло новую об­ласть - логическое или реляционное программирование.

Концепция логического программирования базируется на поня­тии отношение. Логическая программа — это совокупность аксиом и правил, определяющих отношения между объектами и целью. Выпол­нение программы представляет собой попытку доказательства ло­гического утверждения, построенного из программы по правилам, определенным семантикой используемого языка. Результатом вычис­лений является вывод следствий из аксиом. Алгоритм логической программы предполагает определение и перечень специфических свойств объектов и отношений между ними, а не определение по­рядка выполнения отдельных шагов. Это подтверждает декларатив­ный характер логического языка программирования. Логические про­граммы не отличаются высоким быстродействием, так как процесс их выполнения сводится к построению прямых и обратных цепочек рассуждений разнообразными методами поиска.

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

Объектно-ориентироВанное программирование (ООП)

Пионером данного направления явился язык Смолток (5таШа1к), первоначально предназначенный для реализаций функций машин­ной графики. Работа над языком началась в 1970 г. в исследователь­ской лаборатории ХЕКОХ (США), а закончилась в 1980 г. оконча­тельным вариантом интерпретатора 8та1Ка1К-80. Данный язык оригинален тем, что его синтаксис очень компактен и базируется ис­ключительно на понятии объекта. В нем отсутствуют операторы или данные, все, что входит в Смолток, является объектами, а объекты общаются друг с другом исключительно с помощью сообщений. В настоящее время версия У18иа1А§е иг ЗтаШаИс активно развивает­ся компанией 1ВМ.

Основой объектно-ориентированного программирования (ООП) является понятие объект. Его суть состоит в том, что объект объеди-

330няет в себе структуры данных и характерные только для него проце­дуры (методы) их обработки. Такой подход полностью меняет стиль программирования, он заключается в отображении физических объектов реального мира на программную среду. Работать с объек­тами удобнее и естественнее, чем с традиционными конструкциями процедур преобразования данных. Объединение данных и свойствен­ных им процедур обработки в одном объекте, детальная реализация которых остается скрытой для пользователей, называется инкапсуля­цией и является одним из важнейших принципов ООП.

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

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

Следующими важнейшими принципами ООП являются наследо­вание и полиморфизм. Наследование предусматривает создание новых классов на базе существующих и позволяет классу-потомку иметь (наследовать) все свойства класса-родителя. При работе с объекта­ми иерархии «родители — дети — и т.д.» разрешается задавать одина­ковые имена различным по реализации методам, для обработки объектов разных ступеней иерархии. Это явление называется поли­морфизм. Благодаря полиморфизму в ООП обработка объектов уп­рощается, так как одинаковым действиям объектов соответствуют одноименные методы.

Полиморфизм (от греч. «многоликость») означает, что рожденные объекты обладают информацией о том, какие методы они должны использовать в зависимости от того, в каком месте цепочки насле­дования они находятся. Другим основополагающим принципом ООП является модульность, — объекты заключают в себе полное опреде­ление их характеристик, никакие определения методов и свойств

331объекта не должны располагаться вне его, это делает возможным свободное копирование и внедрение одного объекта в другие.

К наиболее распространенным современным языкам программи-' рования относятся С++ и Зауа.

Язык С++ был разработан в начале 80-х гг. Бьярном Страустру-пом в лаборатории Ве11 корпорации АТ&Т. Им была создана компак­тная компилирующая система, в основе которой лежал язык С, до­полненный элементами языков ВСРЬ, Зйтш1а-67 и Алгол-68. Более ранние версии языка были известны как «С с классами». В июле 1983 г. С++ был впервые использован за пределами исследовательской груп­пы автора, однако тогда еще многие особенности языка не были придуманы. К 1990 г. была выпущена третья версия языка С++, стан­дартизированная американским государственным комитетом стан­дартов АЫ51. В 1990 г. сотрудник корпорации 8ип Д. Гослинг на ос­нове расширения С++ разработал объектно-ориентированный язык Оак, основным достоинством которого было обеспечение сетевого взаимодействия различных по типу устройств. Новая интегрируемая в 1п1егпе1 версия языка получила название 1а\а. С января 1995 г. .Гауа получает распространение в 1п(егпе1.

По определению автора, ]а\а является простым объектно-ори­ентированным и архитектурно-нейтральным языком интерпретиру­ющего типа, обеспечивающим надежность, безопасность и перено­симость, обладает высокой производительностью, многопоточностью и динамичностью.

Синтаксис языков С++ и 1ауа практически полностью совпада­ет. Принципиальным различием является то, что язык С++ компи­лируемый в машинный код, а 1а\а — в платформо-независимый байт^ код (каждая команда занимает один байт), этот байт-код может выполняться с помощью интерпретатора — виртуальной 1ауа-маши-ны (За\а У1г1иа1 МасЫпе), версии которой созданы сегодня для лю­бых платформ. С точки зрения возможностей объектно-ориентируе­мых средств, 1а\а имеет ряд преимуществ перед С++. Язык 1а\а имеет более гибкую и мощную систему инкапсуляции информации. Механизм наследования, реализованный в 1ауа, обязывает к более строгому подходу к программированию, что способствует надежнос­ти и читабельности кода. Язык С++ обладает сложной неадекватной и трудной для понимания системой наследования. Возможности ди­намического связывания объектов одинаково хорошо представлены

 

в обоих языках, но синтаксическая избыточность С++ и здесь при­нуждает к выбору языка За\а. Сегодня 1а\а по популярности зани­мает второе место в мире после Бейсика.

Идеи ООП проникли во многие процедурные языки. Например, в состав интегрированной системы программирования Паскаль (кор­порации Войапй 1п1егпа1юпа1), начиная с версии 5.5, входит специ­альная библиотека ООП ТигЬо У1з1оп.

С середины 90-х гг. многие объектно-ориентированные языки реализуются как системы визуального программирования. Такие систе­мы имеют интерфейс, позволяющий при составлении текста про­граммы видеть те графические объекты, для которых она пишется. Отличительной особенностью этих систем является наличие в них среды разработки программ из готовых «строительных блоков», по­зволяющих создавать интерфейсную часть программного продукта в диалоговом режиме, практически без написания программных опе­раций. Система берет на себя значительную часть работы по управ­лению компьютером, что делает возможным в простых случаях об­ходиться без особых знаний о деталях ее работы. Она сама пишет значительную часть текста программы: описания объектов, заголов­ки процедур и многое другое. Программисту остается только вписать необходимые строчки, определяющие индивидуальное поведение программы, которые система не в состоянии предвидеть. Но даже в этих случаях система сама указывает место для размещения таких строк. К объектно-ориентированным системам визуального проек­тирования относятся: У15иа1 Вазю, Ое1рЫ, С++ ВшШег, У1зиа1 С++. Это системы программирования самого высокого уровня.

УВА (У15иа1 Вайс Гог АррИсаНоп) является общей языковой плат­формой для приложений М1сго8ой ОШсе (Ехсе1, \Уогс1, Ро^ег Рот* и др.). УВА соблюдает основной синтаксис и правила программирова­ния языков Бейсик-диалектов. УВА помогает довольно сильно рас­ширить возможности приложений за счет написания макросов — программ, предназначенных для автоматизации ^выполнения многих операций. УВА позволяет создавать объекты управления графичес­кого интерфейса пользователя, задавать и изменять свойства объек­тов, подключать к ним необходимый для конкретного случая про­граммный код. С помощью УВА можно производить интеграцию между различными программными продуктами. Программы на язы­ке УВА для приложений создаются двумя способами: в автоматичес-

333ком режиме как результат построения клавишной макрокоманды или путем написания программного кода.

Языки программирования баз Заннык

Эти языки отличаются от алгоритмических прежде всего своим функциональным назначением. При работе с базами данных (БД) наиболее часто выполняются следующие операции: создание, преоб­разование, удаление таблиц в БД; поиск, отбор, сортировка по зап­росам пользователя; добавление новых записей или модификация существующих; удаление записей и др. Для обработки больших мас­сивов информации и выборки записей по определенным признакам был создан структурированный язык запросов 8рЬ (51гасШгеё Риегу Ьап§иа§е). Он был впервые создан фирмой ШМ в начале 70-х гг., назывался 81шсШге(1 Еп§Изп О.иегу Ьапёиа^е (ЗЕриЕЬ) и предназна­чался для управления прототипом реляционной базы данных 1ВМ -Зуйет К.. В дальнейшем 8ОД, стал стандартом языка работы с реля­ционными базами данных, что зафиксировано американским наци­ональным комитетом стандартов АК81 в 1986 г.

Практически в каждой СУБД имеется свой универсальный язык, ориентированный на ее особенности. Сегодня в мире ведущие про­изводители СУБД: Мюгозой (80Ь Зегуег), 1ВМ (ОВ2), Огас1е, Зойвдге АО (Ас1аЬа8), 1пГогтк и 8уЬа$е. Их продукты предназначены для со­вместной параллельной работы тысяч пользователей в сети, а базы данных могут храниться в распределенном виде на нескольких сер­верах. В Огас1е имеется встроенный язык РЬ/ЗрЬ, в 1п:Гсггшх -ШРОЯМ1Х 4ОЬ, в АёаЪаз - №Шга1 и т.д.

Языки программирования Эля компьютерным сетей

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

334НТМЬ (Нурег Тех! Маг1шр Ьащ;иа§е) — универсальный язык раз­метки гипертекста, используемый для подготовки \УеЪ-документов для сети 1п1егпе1. Язык представляет собой набор элементарных ко­манд форматирования текста, добавления графических объектов (ри­сунков), задания шрифтов и цвета, организации ссылок и таблиц. В соответствии с командами НТМЬ броузер отображает содержимое документа, команды языка не отображаются. В основе языка НТМЬ лежит механизм гипертекстовых ссылок, обеспечивающий связь од­ного документа с другим. В НТМЬ текст кодируется в А8СИ и по­этому может быть создан и отредактирован в любом текстовом ре­дакторе. Все ^еЪ-страницы написаны на НТМЬ или используют его расширение.

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

Тс1/Лс. В конце 80-х гг. Джон Аустираут придумал скрипт-язык Тс1 и библиотеку Тк. Тс1 — это попытка создания идеального скрипт-языка. Он ориентирован на автоматизацию рутинных операций и со­стоит из мощных команд, выполняющих обработку нетипизирован­ных объектов.

УКМЬ. В 1994 г. был создан язык УКМЬ для организации вирту­альных трехмерных интерфейсов в Интернете. Он ориентирован на описание разнообразных трехмерных образов, цвето-теневого осве­щения в текстовом виде и позволяет создавать различные сценарии миров, путешествовать по ним, «облетать» с разных сторон, вращать­ся в любых направлениях, масштабировать, управлять освещеннос­тью и многое другое.

Языки моЭелироВаний

При моделировании систем применяются формальные способы их описания — формальные нотации, с помощью которых можно представить объекты и взаимосвязи между ними в системе. Такие системы называют СА8Е-системами.

3356.7. Этапы подготовки и решения ЗаЭач на компьютере

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

1. Постановка задачи — формулируется цель решения задачи, под­робно описывается ее содержание; проводится анализ условий, при которых решается поставленная задача, выявляется область определения входных параметров задачи.

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

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

4. Выбор и обоснование метода решения — модель решения задачи реализуется на основе конкретных приемов и методов решения. В большинстве случаев математическое описание задачи трудно перевести на машинный язык. Выбор и использование метода решения позволяет свести решение задачи к конкретному набо­ру машинных команд. При обосновании метода решения рас­сматриваются вопросы влияния различных факторов и условий на конечный результат, в том числе на точность вычислений, время решения задачи на компьютере, требуемый объем памяти и др.

5. Построение алгоритма — на данном этапе составляется алгоритм решения задачи, в соответствии с выбранным методом решения. Процесс обработки данных разбивается на отдельные относи­тельно самостоятельные блоки, определяется последовательность выполнения этих блоков.

3366. Составление программы — алгоритм решения переводится на кон­кретный язык программирования.

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

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

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

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

НТМЬ (Нурег Тех1 Магкир Ьап§иа§е) — универсальный язык раз­метки гипертекста, используемый для подготовки \\ЬЪ-документов для сети 1п1егпе1. Язык представляет собой набор элементарных ко­манд форматирования текста, добавления графических объектов (ри­сунков), задания шрифтов и цвета, организации ссылок и таблиц. В соответствии с командами НТМЬ броузер отображает содержимое документа, команды языка не отображаются. В основе языка НТМЬ лежит механизм гипертекстовых ссылок, обеспечивающий связь од­ного документа с другим. В НТМЬ текст кодируется в А5СИ и по­этому может быть создан и отредактирован в любом текстовом ре­дакторе. Все >ЛёЪ-страницы написаны на НТМЬ или используют его расширение.

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

Тс1/Лс. В конце 80-х гг. Джон Аустираут придумал скрипт-язык Тс1 и библиотеку Тк. Тс1 — это попытка создания идеального скрипт-языка. Он ориентирован на автоматизацию рутинных операций и со­стоит из мощных команд, выполняющих обработку нетипизирован­ных объектов.

УКМЬ. В 1994 г. был создан язык УКМЬ для организации вирту­альных трехмерных интерфейсов в Интернете. Он ориентирован на описание разнообразных трехмерных образов, цвето-теневого осве­щения в текстовом виде и позволяет создавать различные сценарии миров, путешествовать по ним, «облетать» с разных сторон, вращать­ся в любых направлениях, масштабировать, управлять освещеннос­тью и многое другое.

языку моделирования

При моделировании систем применяются формальные способы их описания — формальные нотации, с помощью которых можно представить объекты и взаимосвязи между ними в системе. Такие системы называют СА8Е-системами.

 








Дата добавления: 2015-02-19; просмотров: 1013;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.061 сек.