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

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

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

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

Добавлен: 13.03.2024

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

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

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

Таблица 2 – Доступ челна базового класса

Режим наследования

Private-член

Protected-член

Public-член

Private-наследование

Недоступен

Private

Private

Protected-наследование

Недоступен

Protected

Protected

Public-наследование

Недоступен

Protected

Public

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

  • Аргументы по умолчанию функции;
  • Перегрузка функции;
  • Механизм шаблонов.

Динамический полиморфизм представлен виртуальными методами и иерархией наследования.

Инкапсуляция позволяет предохранять данные от нежелательного доступа. В языке программирования С++ инкапсуляция представлена через указание уровня доступа (private, protected, public). Проверка уровня доступа происходит во время компиляции программы: Если член класса недоступен, то вызовется ошибка компиляции.

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

Алфавит языка программирования С++ ничем не отличается от алфавита языка программирования С (СИ): все символы латинского алфавита, цифры и специальные символы.

К лексемам языка С++ относятся:

  • Идентификаторы (identifier);
  • Ключевые (зарезервированные) слова (keyword);
  • Знаки операций (operator);
  • Константы – литералы (literal);
  • Разделители (знаки пунктуации – punctuator).

Знаки операции в языке программирования С++ такие же, как и в языке Си. В Рисунке 2 приведены операции языка С++ их приоритеты (ранги) и ассоциативность.

Рисунок 2 – Операции языка программирования С++

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

В Таблице 3 и 4 даны краткие описания стандартных операций языка программирования С++.

Таблица 3 – Стандартные унарные операции языка С++

Унарные операции

Форма

& - операция получения адреса некоторого объекта программы

& lvalue

(lvalue – имя объекта программы)

* - разыменование, доступ по адресу к значению объекта

* a

( а – указатель на объект)

– - унарный минус

– выражение

+ - унарный плюс

+ выражение

! – логическое отрицание (НЕ)

false – если операнд истинный и true – если операнд ложный

!выражение

!1 ==0, !(-5)==0(ложь)

!0 == 1 (истина)

++ - инкремент, увеличение значения операнда на 1

- префиксная форма – до использования его значения;

- постфиксная форма – после использования его значения;

++ lvalue

lvalue ++

-- - декремент, уменьшение значения операнда на 1

- префиксная форма;

- постфиксная форма

-- lvalue

lvalue --

sizeof – размер в байтах внутреннего

представления объекта

sizeof выражение

sizeof (тип )

new – динамическое выделение памяти

new имя_типа

new имя_типа инициализатор

delete – освобождение динамически выделенной памяти

delete указатель

delete [] указатель

() - явное преобразование типа

(тип) выражение

() - функциональная форма преобразования типа

тип (выражение)

тип имеет простое имя

typeid – операция определения типа операнда

typeid (выражение) typeid(имя_типа)

dynamic_cast – операция приведения типа с проверкой допустимости при выполнении программы

dynamic_cast <целевой тип> (выражение)

static_cast – операция приведения типов с проверкой допустимости приведения во время компиляции

static_cast <целевой тип> (выражение)

reinterpret_cast – операция приведения типов без проверки допустимости приведения

reinterpret_cast <целевой тип> (выражение)

const_cast – операция приведения типов, которая аннулирует действие модификатора const

const_cast <целевой тип> (выражение)

:: - операция доступа из тела функции к внешнему объекту

:: имя_объекта


Таблица 4 - Стандартные бинарные операции языка С++

Бинарные операции

Форма

1

2

+ - сложение арифметических операндов, или сложение указателя с целочисленным операндом

выражение + выражение

– - вычитание арифметических операндов или указателей

выражение – выражение

* -умножение арифметических операндов

выражение * выражение

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

выражение / выражение 20/6 равно 3, -20/6 равно -3, 20/(-6) равно -3

% -получение остатка от целочисленного деления

выражение % выражение 13%4 равно 1, (-13)%4 равно -1 13%(-4) равно 1,(-13)%(-4) равно -1

<< - сдвиг влево битового представления левого целочисленного операнда на количество разрядов, равное значению правого операнда

lvalue << выражение

>> - сдвиг вправо битового представления левого целочисленного операнда на количество разрядов, равное значению правого операнда

lvalue >> выражение

& поразрядная конъюнкция (И) битовых представлений целочисленных операндов

выражение& выражение

поразрядная дизъюнкция (ИЛИ) битовых представлений целочисленных операндов

выражение | выражение

^ - поразрядное исключающее ИЛИ битовых представлений целочисленных операндов

выражение ^ выражение

< - меньше

выражение < выражение

< = - меньше или равно

выражение <= выражение

> - больше

выражение > выражение

> = - больше или равно

выражение >= выражение

= = - равно

выражение = = выражение

! = - не равно

выражение != выражение

&& - конъюнкция (логическое И) скалярных операндов и отношений

выражение && выражение

|| - дизъюнкция (логическое ИЛИ) скалярных операндов и отношений

выражение || выражение

= простое присваивание левому операнду значения выражения - операнда из правой части

lvalue = выражение

операция = - составное присваивание левому операнду результат операции между левым и правым операндом; операциb * / % + - << >> & | ^

lvalue операция = выражение эквивалентно

lvalue = lvalue операция (выражение)

. (точка) – прямой доступ к

компоненту

имя_объекта.имя_компонента

–> косвенный доступ к компоненту структурированного объекта, адресуемого указателем

указатель_на_объект–>имя_компонента

.*- прямое обращение к компоненту класса по имени объекта и указателю на компонент

имя_объекта .* указатель_на_компонент

–>* косвенное обращение к компоненту класса через указатель на объект и указатель на компонент

указатель_на_объект –>* указатель_на_компонент

:: - бинарная операция расширения области видимости

имя_класса :: имя_компонента имя_пространства_имен :: имя

( ) – операция круглые скобки – операция вызова функции

имя_функции (список_аргументов)

[ ] - операция квадратные скобки - индексация элементов массивов

имя_массива [индекс]

? : - условная (тернарная) операция

выражение_1 ? выражение_2 : выражение_3

если выражение_1 истинно, то значением операции является значение выражения_2, если выражение_1 ложно, то значением операции является значение выражения_3

, - операция запятая – это несколько выражений, разделенных запятыми, вычисляются последовательно слева направо;

результатом операции является результат самого правого выражения

(список_выражений)


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

К основным преимуществам языка программирования С++ является высокая совместимость с языком Си: код на Си может быть скомпилирован компилятором С++, библиотеки Си могут вызываться из С++. Также язык спроектирован таким образом, чтобы разработчик имел максимальный контроль над всеми аспектами структуры и порядка исполнения программы. Автоматический вызов деструкторов упрощает и повышает надежность управления памятью и другими ресурсами. Перегрузка операторов позволяет кратко и ёмко записывать выражения над пользовательскими типами в естественной алгебраической форме.

Язык программирования С++ поддерживает разные стили программирования: традиционное императивное программирование (структурное, объектно-ориентированное), обобщённое программирование, функциональное программирование, порождающее метапрограммирование.

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

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

История языка программирования Java начинается в декабре 1990. На тот момент фирма Sun Microsystems занимала значительную долю рынка серверов и высокопроизводительных станций. Однако по мнению многих сотрудников и независимых экспертов фирма не могла предложить ничего интересного для обычных пользователей ПК - для них компьютеры от Sun представлялись слишком сложными, очень некрасивыми и чересчур тупыми устройствами. Поэтому Скотт МакНили, член совета директоров, президент и исполнительный директор корпорации Sun, не был удивлен, когда 25-летний хорошо зарекомендовавший себя программист Патрик Нотон, проработав всего 3 года, объявил о своем желании перейти в компанию NeXT. Нотон считал, что в NeXT делают все правильно. МакНили попросил Патрика Нотона перед уходом описать все то, что в Sun делается неправильно. Патрик Нотон выполнил просьбу. Он безжалостно раскритиковал новую программную архитектуру NeWS, над которой фирма работала в то время, а также высоко оценил только что объявленную операционную систему NeXTstep. Нотон предложил привлечь профессиональных художников-дизайнеров, чтобы сделать пользовательские интерфейсы Sun более привлекательными; выбрать одно средство разработки и сконцентрировать усилия на одной оконной технологии, а не на нескольких сразу; наконец, уволить почти всех сотрудников из Window Systems Group.

Вскоре все сотрудники корпорации Sun откликнулись на заявление Нотона. Поддержка Билла Джоя (один из основателей и вице-президент Sun, а также участник проекта по созданию операционной системы UNIX) и Джеймса Гослинга (ведущий разработчик, а также автор первой реализации текстового редактора EMACS на C) оказалась решительной.


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

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

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

Результатом проекта Green стало устройство Star7 с 5" цветным (16 бит) сенсорным экраном, без единой кнопки. Весь интерфейс был построен как мультик.

В апреле 1993 года, когда Star7 и язык OaK потеряли свою славу, появляется первый браузер Mosaic 1.0. Вскоре Джой, Гослинг и Нотон поняли, что что функциональность тех сетевых приложений, для которых создавался OaK, очень близка к WWW (World Wide Web).

Несмотря на то, что к середине 1994 года WWW достиг невиданных размеров (конечно, по меркам того времени), web-страницы по-прежнему были скорее похожи на обычные бумажные издания, чем на интерактивные приложения. Для выхода OaK не хватало браузера, который поддерживал бы эту технологию. Браузер, который разработал Нотон, назвали WebRunner. Во время демонстрации проекта многие подумали, что WebRunner просто клон Mosaic. Однако Гослинг провел мышкой над сложной трехмерной моделью химической молекулы. Следуя за курсором, модель поворачивалась по всем направлениям.


В начале 1995 года маркетологи провели исследования, в результате которых OaK был переименован в Java, а WebRunner стал называться HotJava. Согласно плану, спецификация Java и реализация платформы HotJava должны были свободно распространяться через Internet. 23 мая 1995 года технологии Java и HotJava были официально объявлены Sun и тогда же представители компании сообщили, что новая версия самого популярного браузера Netscape Navigator 2.0 будет поддерживать новую технологию. По сути, это означало, что отныне Java становится такой же неотъемлемой частью WWW, как и HTML.

    1. Основные принципы языка программирования Java

Язык программирования Java является сильно типизированным объектно-ориентированным языком программирования. В нем используются 8 примитивных типов: boolean, byte, char, short, int, long, float, double. Также существует девятый – void, предназначенный для описания класса. Длины и диапазоны значений примитивных типов определяются стандартом, а не реализацией. Стандартизация необходима для реализации главной задачи языка – кроссплатформенность.

В Java действуют следующие правила преобразования при математических операциях:

  • Если один операнд имеет тип double, другой тоже преобразуется к типу double.
  • Иначе, если один операнд имеет тип float, другой тоже преобразуется к типу float.
  • Иначе, если один операнд имеет тип long, другой тоже преобразуется к типу long.
  • Иначе оба операнда преобразуются к типу int.

Такой способ неявного преобразования встроенных типов полностью совпадает с преобразованием типов в С++.

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

Объектными являются переменные любого типа, кроме примитивного. Явных указателей в Java нет. В отличие от указателей C, C++ и других языков программирования, ссылки в Java в высокой степени безопасны благодаря жёстким ограничениям на их использование, в частности:

  • Нельзя преобразовывать объект типа int или любого другого примитивного типа в указатель или ссылку и наоборот;
  • Над ссылками запрещено выполнять операции ++, −−, +, − или любые другие арифметические операции;
  • Преобразование типов между ссылками жёстко регламентировано. За исключением ссылок на массивы, разрешено преобразовывать ссылки только между наследуемым типом и его наследником, причём преобразование наследуемого типа в наследующий должно быть явно задано и во время выполнения производится проверка его осмысленности. Преобразования ссылок на массивы разрешены лишь тогда, когда разрешены преобразования их базовых типов, а также нет конфликтов размерности;
  • В Java нет операций взятия адреса (&) или взятия объекта по адресу (*). Амперсанд (&) означает всего лишь «побитовое и» (двойной амперсанд — «логическое и»). Однако для булевых типов одиночный амперсанд означает «логическое и», отличающееся от двойного тем, что цепь проверок не прекращается при получении в выражении значения false[36] (напр. a == b && foo() == bar() не повлечёт вызовов foo() и bar() в случае, если a != b, тогда как использование & повлечёт в любом случае.