Файл: История возникновения и развития языка программирования Си (С++) и Java (ИСТОРИЯ РАЗВИТИЯ ЯЗЫКА C).pdf

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

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

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

Добавлен: 13.03.2024

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

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

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

Содержание:

ВВЕДЕНИЕ

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

Язык программирования - это система обозначений, служащая для точного описания программ или алгоритмов для электронно-вычислительных и вычислительных машин. Условно языки программирования разделяют на уровни: языки низкого уровня (машинные языки) и языки высокого уровня (языки, ориентированные на особенности мышления человека). К низкоуровневым языкам можно отнести язык программирования Ассемблер. К высокоуровневым языкам можно отнести язык программирования C#. Помимо этого, существует язык, который считают языком среднего уровня – язык программирования C (Си).

ИСТОРИЯ РАЗВИТИЯ ЯЗЫКА C

    1. История создания и развития языка программирования СИ

Язык программирования Си – это процедурный язык общего назначения, полученный во время создания операционной системы UNIX. Разработан язык в 1963-1973 годах сотрудником Bell Labs Деннисом Ритчи как развитие интерпретируемого языка программирования Би.

Как и остальные операционные системы того времени, UNIX был написан на ассемблере. Отладка программ на ассемблере являлась крайней тяжелой задачей, и UNIX не был исключением. Кен Томпсон, который совместно с Д. Ритчи разрабатывал UNIX систему решил, что для дальнейшей разработки ОС необходим язык высокого уровня и придумал небольшой язык B (Би). За основу Томпсон взял язык BCPL, язык для системного программирования.

Ритчи вскоре присоединился к проекту UNIX и начал писать на B. В 1970 Bell Labs приобрела для проекта PDP-11. Так как B был готов к работе на PDP-11, Томпсон переписал часть UNIX на B. В 1971 стало ясно, что B не совсем подходит для PDP-11, поэтому Ритчи начал создавать расширенную версию B. Сначала он назвал её NB (New B), но, когда язык стал сильно отличаться от B, название сменили на C. Язык к 1973 стал достаточно стабилен для того, чтобы на нём можно было переписать UNIX. Переход на C обеспечил важное преимущество - переносимость.


Развитие языка Си продолжилось в 70-х годах. В 1978 году Брайан Керниган и Деннис Ритчи опубликовали первую редакцию книги «Язык программирования Си». Эта книга, известная среди программистов как «K&R», служила многие годы неформальной спецификацией языка. При отсутствии официального стандарта эта книга – известная также как K&R, или "Белая Книга"– фактически стала стандартом. K&R ввел такие особенности языка, как структуры (struct), оператор «+=», а также такие типы данных, как длинное целое (long int) и целое без знака (unsigned int).

Чуть позднее в язык были добавлены следующие возможности:

  • Функции, не возвращающие значений, и указатели, не имеющие типа;
  • Функции, возвращающие объединения и структуры;
  • Присваивания структур;
  • Имена полей данных структур в разных пространствах имён для каждой структуры;
  • Спецификатор констант;
  • Перечислимый тип;
  • Дробное число одинарной точности.

В конце 70-х Си вытесняет Бейсик и становится ведущим языком программирования микрокомпьютеров. В 1980-х годах Си был адаптирован для использования в IBM PC, что послужило толчком к резкому росту популярности языка. Также в 80-х годах началась работа по добавлению в Си возможностей объектно-ориентированного программирования. Конечным продуктом данной работой является язык С++.

В 1983 году ANSI (Американский национальный институт стандартов) сформировал комитет X3J11 для создания спецификаций стандарта языка Си. В 1989 году стандарт был завершен и утвержден как ANSI X3.159-1989 «Язык программирования C». Эту версию принято называть «ANSI C», или «C89».

В 1990 году версия С90 была принята организацией ISO (Международная организация по стандартизации). Новейшим стандартом языка Си является С11, принятый в 2011 году. Основными изменениями С11 являются:

  • Поддержка многопоточности;
  • Улучшенная поддержка Юникода;
  • Статичные утверждения;
  • Обобщенные макросы;
  • Анонимные структуры и объединения;
  • Управление выравниваем объектов;
  • Удаления опасной функции gets;
  • Новый режим эксклюзивного открытия файла.
    1. Преимущества и недостатки языка программирования СИ

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

  • Простую языковую базу, из которой вынесены в библиотеки многие существенные возможности;
  • Ориентацию на процедурное программирование;
  • Систему типов;
  • Использование препроцессора;
  • Доступ к памяти компьютера через использование указателей;
  • Передачу параметров в функцию по значению;
  • Указатели на функции и статистические переменные;
  • Области действия имен.

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

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

Также источником опасных ситуаций может служит механизм указателей. Указатель может ссылаться на любой объект в памяти, включая исполняемый код. Еще одна распространенная проблема – память не может быть использована, если программист не освободил ее при помощи функции free().

    1. Синтаксис языка программирования СИ

В состав алфавита языка программирования Си входят все символы латинского алфавита, цифры и специальные символы. Помимо к лексемам языка относятся идентификаторы, предопределенные константы и ключевые слова.

Как известно, операция – это некоторая функция, которая выполняется над операндами. В языке Си каждой операции соответствует свой знак. Операции различают по количеству задействованных операнд:

  • Унарные операции – функции, которые содержат один операнд. К унарным операциям относят: унарный плюс, унарный минус, логическое отрицание, взятие адреса, операция разыменовывания указателя, взятие обратного кода и операция определения занимаемого объектом объёма памяти.
  • Бинарные операции – функции, которые содержат два операнда, между которыми находится знак операции. К бинарным операциям относят: сложение, вычитание, умножение, деление, взятие остатка от деления, поразрядное И, поразрядное ИЛИ, поразрядное исключающее ИЛИ, логическое И, логическое ИЛИ, а также операции, представляющие собой присваивание (+=, -=, *=, /=).
  • Тернарные операции – условная операция, которая имеет три операнда (условие; выражение, значение которого возвращается, если условие истинно; выражение, значение которого возвращается, если условие ложно).

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


    1. Хранение данных в памяти

В языке программирования Си есть три способа выделения памяти для объектов:

  • Статическое выделение памяти – память выделяется в сегменте данных программы в момент компиляции;
  • Автоматическое выделение памяти – объекты хранятся в стеке;
  • Динамическое выделение памяти – блоки памяти определяются во время выполнения программы.

Ниже приведена сравнительная таблица всех трех способов выделения памяти (Таблица 1).

Таблица 1 – Способы выделения памяти в языке Си

Критерий

Статическое выделение

Автоматическое выделение

Динамическое выделение

Объявление

Имеет внутреннее или внешнее связывание или объявлен с квалификатором static

Объект без связывания и без static

Выделен с помощью функции malloc

Время существования

Всё время выполнения программы

Блок, в котором объявлен объект

От вызова функции malloc до вызова функции освобождения памяти free

Инициализация

Происходит один раз до запуска программы

Отсутствует в случае отсутствия явной инициализации

Частично в случае использования функции calloc. В этом случае все объекты имеют имеют нулевое значение кроме чисел с плавающей запятой и указателей

Размер

Фиксированный, неизменяемый

Фиксированный, неизменяемый

Изменяемый

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

    1. Преимущества и недостатки языка программирования СИ

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

ИСТОРИЯ РАЗВИТИЯ ЯЗЫКА C++

    1. История появления и развития языка С++

Как известно из истории возникновения и развития языка Си, язык программирования С++ возник во время работы Бьёрн Страуструп по внедрению в Си возможностей объектно-ориентированного программирования.


В первую очередь были добавлены классы с инкапсуляцией, наследование классов, строгая проверка типов, inline-функции и аргументы по умолчанию. В 1980 году ранняя версия языка именовалась как «Си с классами». Также Б. Страуструп написал cfront — транслятор, переводящий исходный код Си с классами в исходный код простого Cи. Это позволило работать с новым языком, при этом работая с уже имеющейся UNIX систему.

В 1983 году добавлены следующие возможности:

  • Виртуальные функции;
  • Перегрузка функций и операторов;
  • Ссылки;
  • Константы;
  • Пользовательский контроль над управлением свободной памятью;
  • Улучшенная проверка типов;
  • Новый стиль комментариев.

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

В 1985 году вышла первая книга «Язык программирования С++», автором которой стал сам Бьёрн Страуструп. И поскольку официального стандарта еще не было, выпуск этой книги с первыми описаниями языка было чрезвычайно важно.

В 1989 году вышла версия С++ 2.0, которая включала в себя множественное наследование, абстрактные классы, статические функции-члены, функции-константы и защищённые члены.

    1. Отличия языка программирования С++ от Си

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

Язык программирования С++ поддерживает все операторы своего прародителя – языка Си, а типы данных практически полностью повторятся. Обобщенная структура языка программирования С++ представлена в Рисунке 1.

Рисунок 1 – Обобщенная структура языка С++

С++ добавляет к языку Си возможности объектно-ориентированного программирования. Три основных свойства объектно-ориентированного программирования – это наследование, инкапсуляция и полиморфизм.

Наследование позволяет создавать новые классы из старых и наследовать данные и методы от классов – родителей. В языке программирования С++ предусмотрено множественное наследование классов, которое может быть публичным, защищенным или закрытым. В Таблице 2 представлен доступ члена базового класса.