Файл: История возникновения и развития языка программирования Си (С++) и Java.pdf

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

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

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

Добавлен: 25.04.2023

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

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

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

Введение

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

Первый машинный язык был придуман в 1941 году Конрадом Цузе, который является изобретателем аналогической машины, Позднее в 1943 году Говард Эйкен создал машину “Марк-1”, которая способна считывать инструкцию на уровне машинного кода.

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

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

  1. Аспектно-ориентированные (основная идея – разделение функциональности для увеличения эффективности программных модулей);
  2. Структурные (в основе лежит идея создания иерархической структуры отдельных блоков программы);
  3. Логические (в основе лежит теория аппарата математической логики и правил революции);
  4. Объектно-ориентированный (в таком программировании используются уже не алгоритмы, а объекты, которые принадлежат определенному классу);
  5. Мультипарадигмальные (они сочетают в себе несколько парадигм, и программист сам решает, каким языком воспользоваться в той или иной ситуации);
  6. Функциональные (в качестве основных элементов выступают функции, которые меняют значения в зависимости от результатов вычислений исходных данных). [12]

Классификация данных типов указана в приложении 1.

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

  1. языки высокого уровня;
  2. языки среднего уровня;
  3. языки низкого уровня.

Данные языки различаются по характеристикам.

Языки высокого уровня написаны так, что они будут понятны человеку. Это независимые языки и программистам не нужно иметь первоначальных знаний об оборудовании, в котором будет использована программа. Языки высокого уровня С++ и Python.


Достоинства:

  • Абстракции делают сложные задачи простыми;
  • Все просто и интуитивно, даже при внесении изменений.

Недостатки:

  • Надстройки для реализации абстракций снижают производительность;
  • Из-за скрытых деталей сложно выяснить причины возникновения проблем, когда они появляются.

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

Достоинства:

  • Управлять памятью необязательно, но при желании это можно делать самостоятельно;
  • Богатые стандартные библиотеки;
  • Компилируется в байт-код, упрощающий взаимодействие с другими языками.

Недостатки:

  • Байт-код требует установленной среды выполнения;
  • Многие абстракции отпугивают новичка в освоении концепций.

К языкам низкого уровня можно отнести языки ассемблера. В языке ассемблера используются команды, которые обозначаются символами. Они легко воспринимаются и быстро запоминаются. Вместо последовательности двоичных кодов команд записываются их символьные обозначения, а вместо двоичных адресов данных, программы, которые выбрал программист. Языки низкого уровня Ассемблер и Forth.

Достоинства:

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

Недостатки:

  • Дополнительный контроль прибавляет дополнительные сложности, которые могут сделать простые задачи трудными в реализации;
  • Требуется предварительная оптимизация. [3]

В данной работе будут подробно рассмотрены такие языки как Си, С++ и Java.

Глава 1 Язык программирования СИ

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

Язык Си был разработан американцем Деннисом Ритчи в исследовательском центре Computer Science Research Center of bell Laboratories корпорации AT&T в 1972 году. Первоначально реализация Си была выполнена на ЭВМ PDP11 фирмы Dec для создания ОС UNIX. Позже он был перенесен в среду многих операционных систем и существует независимо от любой из них. Программы, которые написаны на языке Си, можно перенести в любую другую операционную систему или на другой компьютер с минимальными изменениями, либо вовсе без них.


Язык Си оказал существенное влияние на развитие индустрии программного обеспечения, а его синтаксис стал фундаментом для таких языков как С++, Java, PHP и др.

1.1 Особенности

Си (C) является языком функций, типов данных, операторов присваивания и управления последовательностью вычислений. Программируя на Си (C), осуществляется обращение к функциям, и большинство функций возвращают некоторые значения. Значение, возвращаемое функцией, будь то значение переменной или константа, может использоваться в операторе присваивания, который изменяет значение другой переменной дополнительными операторами управления последовательностью вычислений (while, for, do, switch), Си (C) превращается в язык высокого уровня, способствующий хорошему стилю программирования. Си (C) имеет небольшой набор типов данных: целые числа, числа с плавающей запятой, битовые поля и перечислимый тип. В языке Си (C) можно описать переменную типа указатель, который связывается с объектом, принадлежащим к любому типу данных. Адресная арифметика языка Си (C) является чувствительной к типу данных того объекта, с которым связан используемый указатель. Разрешены также указатели к функциям. Можно расширить список типов данных путем создания структур с иерархической зависимостью, входящих в него типов данных. Каждый тип данных может принадлежать либо к основному типу, либо к ранее описанному структурному типу. Объединения напоминают структуры, но определяют различные виды иерархических зависимостей, в которых данные разных типов располагаются в памяти.

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

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


1.2 Написание простых программ

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

Рисунок 1. Структура простой программы

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

1.3 История

Язык Си был создан в начале 70-х годов, в то время когда Кен Томпсон и Дэннис Ритчи из Bell Labs разрабатывали операционную систему UNDC. Сначала они сделали часть компилятора С, потом использовали ее для компиляции остальной части компилятора Си и, в конечном итоге , применили получившийся в результате компилятор для компиляции UNIX. Операционная система UNIX изначально распространялась в исходных кодах на Си среди университетов и лабораторий, а получатель мог откомпилировать исходный код на Си в машинный код с помощью подходящего компилятора Си.

Распространение исходного кода сделало операционную систему UNIX необыкновенной; программист мог менять операционную систему, а исходный код мог быть перенесен с одной аппаратной платформы на другую. На данный момент стандарт POSIX определяет стандартный набор системных вызовов UNIX, доступных в Си, которые должны быть реализованы в версиях UNIX, являющихся POSIX-совместимыми. 

По сравнению с более ранним языком — BCPL, Си улучшили путем добавления типов данных определенной длины. Например, тип данных int мог применяться при создании переменной с определенным числом битов (обычно 16), на тот момент как тип данных long использовался для создания целой переменной с большим числом битов (обычно 32). В отличие от других языков высокого уровня, Си мог работать с адресами памяти напрямую с помощью указателей и ссылок. Поскольку Си сохранил способность прямого доступа к аппаратному обеспечению, его часто относят к языкам среднего уровня или называют "мобильным языком ассемблера".


Что касается грамматики и синтаксиса, то Си является структурным языком программирования. В то время как многие современные программисты мыслят в категориях классов и объектов, программисты на Си думают в категориях процедур и функций. В Си возможно определить собственные абстрактные типы данных, если использовать для этого ключевое слово struct. Таким же методом можно описывать собственные целые типы (перечисления) и давать другие названия существующим типам данных при помощи ключевого слова typedef. В этом плане Си является структурным языком с объектно-ориентированным программированием.

Широко язык Си распространялся на различных типах компьютеров (иногда называемых аппаратными платформами). Это привело, к сожалению, ко многим вариациям языка. Они были похожи, но несовместимы друг с другом. Это было значительной проблемой для разработчиков программ, которые нуждались в написании совместимых программ, которые можно было бы выполнять на нескольких платформах. Стало ясно, что необходима стандартная версия Cи. В 1983г. ANSI (Американский Национальный Комитет Стандартов) сформировал технический комитет X3J11 для создания стандарта языка Cи (чтобы "обеспечить недвусмысленное и машинно-независимое определение языка"). В 1989 году стандарт был утвержден. ANSI скооперировался с ISO (Международной Организацией Стандартов), чтобы стандартизовать Cи  в международном масштабе; совместный стандарт был опубликован в 1990 году и назван ANSI/ISO 9899:1990. Данный стандарт улучшается до сих пор и имеет поддержку большинства фирм разработчиков компиляторов.

Бьерн Страуструп высвободил объектно-ориентированный потенциал Си, путем перенесения возможностей классов Simula 67 в С. Изначально новый язык назывался "Си с классами" и только потом стал называться С++, который представлен в следующей главе. [8]

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

Язык программирования C++ — это Cи, который расширен введением классов, inline функций, перегруженных операций, перегруженных имен функций, константных типов, ссылок, операций управления свободной памятью, проверки параметров функций.

С самого начала подчеркивалось то, что C++ — развитие языка Си, возможно, некоторый его диалект. Об этом говорит тот факт, что первым компилятором (существующим до сих пор) являлся cfront, который занимался тем, что переводил исходный текст на C++ в исходный текст на Си. Это мнение бытует по сей день и, надо сказать, до сих пор оно является небезосновательным; тем не менее, Си и C++ — разные языки программирования. [5]