Файл: Обзор языков программирования высокого уровня.pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 22.04.2023

Просмотров: 75

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Распространение графических интерфейсов привело к появлению визуальных сред разработки.

2. Язык программирования С++

2.1 Основные понятия о С++

С момента своего создания язык программирования C ++ потерпел три значительных совершенствования, то есть каждый раз он как дополнялся новыми средствами, так и в чем-то менялся.

Первой ревизии язык C ++ был подвергнут в 1985 г., а второй он получил в 1990 г. Третья ревизия состоялась в процессе его стандартизации которая активизировалась в начале 1990-х. Специально для этого был сформирован объединенный ANSI/ISO-комитет, который 25 января 1994 принял первый проект предложенного на рассмотрение стандарта. В этот проект были внесены все средства, впервые определенные Б. Страуструпом, и добавлены новые. Но в целом он отражал состояние языка программирования C++ на тот момент времени.

Вскоре после завершения работы над первым проектом стандарта языка программирования C++, произошло событие, которое заставило значительно расширить имеющийся стандарт. Речь идет о создании Стандартной Библиотеки Шаблонов (Standard Template Library - библиотека STL). Библиотека STL - набор обобщенных функций, которые можно использовать для обработки данных. Комитет ANSI/ISO проголосовал за внесение библиотеки STL в спецификацию языка программирования C++. Добавление библиотеки расширило сферу применения средств языка C++ далеко за пределами первоначального его определения.

Необходимо отметить, что стандартная библиотека языка программирования C++ содержит стандартную библиотеку языка С с небольшими изменениями, которые делают ее более соответствующим языку C++. Другая большая часть библиотеки C++ базируется на библиотеке STL. Она предоставляет такие важные инструменты, как контейнеры (например, векторы и списки) и итераторы (обобщенные указатели), предоставляющих доступ к этим контейнерам как к массивам.

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

Так же, как и в языке программирования С, возможности библиотек активизируются использованием директивы #include для включения стандартных файлов. Всего в стандарте языка программирования C++ определено 50 таких файлов.


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

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

Различают два типа трансляторов:

- Компиляторы;

- Интерпретаторы.

Компилятор - это программа, предназначенная для перевода в машинные коды программы, написанной на языке высокого уровня. Процесс такого перекладывания называется компиляцией.

Конечным результатом работы компилятора является программа в машинных кодах, которая затем выполняется ЭВМ. Скомпилирован вариант программы можно хранить на диске. Для повторного выполнения программы компилятор уже не нужен. Достаточно загрузить с диска в память компьютера скомпилированный перед этим вариант и выполнить его.

Существует другой способ сочетания процессов трансляции и выполнения программ. Он называется интерпретацией. Интерпретатор - это программа, предназначенная для трансляции и выполнения исходной программы по командам (в отличие от транслятора, который этот процесс выполняет в целом). Такой процесс называется интерпретацией.

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

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


2.2 Методика создания программ на языке высокого уровня С++

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

Однако в целом ее основные этапы остаются неизменными.

- Создание исходного кода.

- Компиляция.

- Редактирование связей.

- Выполнение.

Первый этап - создание текста программы - практически не зависит от компилятора и операционной системы. Для создания и редактирования текста программы можно применять любой доступный текстовый редактор. Однако поскольку этот текст имеет особое назначение, на файл, содержащий исходный код программы, накладываются некоторые ограничения. Во-первых, этот файл должен быть текстовым, то есть должен содержать ASCII-коды. Никакие другие форматы файлов не допускаются. Во-вторых, файл, содержащий исходный код, должен иметь расширение, предусмотрено компилятором (.cpp, .cp или .cxx). Рассмотрим следующий пример:

int main ()

{

 return 0;

}

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

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

В данном случае эта программа после запуска сразу возвращает управление операционной системе с помощью оператора return. Функция main() возвращает целое число, анализируется операционной системой.

Если программисту не важно, как завершена программа, и он не предусматривает определенной реакции операционной системы, перед именем main() следует поставить ключевое слово void. Для того чтобы вернуть управление операционной системе можно или выполнить оператор return, или дождаться, пока поток управления достигнет последней фигурной скобки.

В таком варианте программа может выглядеть так.

void main ()

{

  return; // Возвращение управления

 }

или

void main ()

{

 } // Возвращение управления

Тривиальная программа, рассмотренная выше, конечно, исключение. Каждая реальная программа выполняет, по крайней мере, операции ввода и вывода, а для этого ей нужны стандартные функции, входящие в процедурную систему ввода-вывода языка С, или операторы, которые являются частью объектно-ориентированной системы ввода-вывода языка С++. Чтобы использовать эти функции и операторы, необходимо включить в программу заголовочный файл <stdio.h> или заголовок <iostream>.


Для этого в директиве #include указывается имя соответствующего заголовочного файла, заключенное в угловые скобки.

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

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

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

Препроцессор не выполняет синтаксический анализ текста. Он просто распознает макроподстановки и выполняет их.

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

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

Рассмотрим в качестве примера фрагмент программы, содержащий очень распространенную директиву #include.

#include <iostream>

#include <math.h>

# Include <string.h>

#include <conio.h>

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

Вторую строка правильная, поскольку символ # является отдельной лексемой. Между первой и второй лексемами директивы препроцессора могут располагаться только пробелы и символы горизонтальной табуляции. Любые другие разделители запрещены. Несмотря на то что символ # - отдельная лексема, он является неотъемлемой частью имени директивы.


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

#include <stdio.h>

main ()

{

#include "file1.txt"

#include "С: \ text \ file2.txt"

 return 0;

}

Этот фрагмент иллюстрирует одно интересное свойство директивы #include. С ее помощью можно вставлять в текст программы не только стандартные, но и собственные текстовые файлы. Для этого следует применять лапки, а не угловые скобки. В этом случае поиск файла выполняется в текущем каталоге, а не в каталоге INCLUDE. Если такого файла в текущем каталоге нет, выполняется поиск в каталоге INCLUDE. Регистр букв при наборе имени файла не имеет значения. Кроме того, в директиве #include можно явно указывать путь к файлу. Имена каталогов в системе Windows разделяются обратной косой чертой, а в системе UNIX - косой чертой.

2.3. Использование комментариев в С++

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

Чтобы этого не случилось, программу документируют, вставляя в нее комментарии. В языке С++ есть два вида комментариев - многострочные и однострочные.

Многострочные комментарии, унаследованные от языка С и представляют собой объяснение, заключенные в символы /* и */. Эти комментарии называются многострочными, так как компилятор игнорирует все, что находится между символами /* и */, включая самые ограничители, и следовательно, между ними можно вставлять сколько угодно строк текста.

Однострочный комментарий слева ограничен символами //, а справа - концом строки программы. Итак, комментарии этого вида могут находиться только справа от оператора. Конечно вложенные комментарии не используются, однако, компиляторы, как правило, допускают вложения многострочных комментариев. Вложения однострочных операторов не имеет смысла, поскольку левый ограничитель вложенного комментария при этом ничем не отличается от других символов.

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