Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

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

Содержание:

ВВЕДЕНИЕ

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

Язык программирования - это система обозначений, служащая для точного описания программ или алгоритмов для электронно-вычислительных и вычислительных машин. Условно языки программирования разделяют на уровни: языки низкого уровня (машинные языки) и языки высокого уровня (языки, ориентированные на особенности мышления человека). К низкоуровневым языкам можно отнести язык программирования Ассемблер. К высокоуровневым языкам можно отнести язык программирования 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 представлен доступ члена базового класса.

Таблица 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, тогда как использование & повлечёт в любом случае.

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

Java не является процедурным языком: любая функция может существовать только внутри класса. Это подчёркивает терминология языка Java, где есть только понятие метод. В методы превратились и стандартные функции. Например, в Java нет функции sin(), а есть метод Math.sin() класса Math.

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

Деструкторов в Java не существует, а метод finalize() ни в коем случае нельзя считать аналогом деструктора.

В языке программирования Java, как и в любом объектно-ориентированном языке присутствует такая парадигма как абстрактность. Абстрактным методом в Java является тот метод, для которого заданы параметры, но не задано тело. Объекты в абстрактном классе создавать нельзя. Зато это можно делать в классах-наследниках.

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

Помимо этого, в Java имеются интерфейсы, не содержащие методов для реализации. Такие интерфейсы называются маркерными. Ниже приведены данные интерфейсы, которые специальным образом обрабатываются JVM (виртуальная машина Java):

  • java.lang.Cloneable;
  • java.io.Serializable;
  • java.util.RandomAccess;
  • java.rmi.Remote.

ЗАКЛЮЧЕНИЕ

На просторах интернета существует множество литературы по изучению любого языка программирования. Языки, история которых была рассмотрена в данной работе, включены в список основных изучаемых языков программирования в ВУЗах и колледжах.

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

Си и С++ - расширяемые языки. В наши дни язык программирования С (Си) не так популярен, как С++. Но несмотря на это, Си стал прародителем для таких языков программирования, как С++, D, Java, Objective C, C#, PHP, perl, Nemerle, scala и многих других.

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

СПИСОК ЛИТЕРАТУРЫ

  1. Страуструп Б. Язык программирования С++. – М.: Невский Диалект – БИНОМ, 1999 - 991 с.
  2. Подбельский В.В. Стандартный Си++: учебное пособие – М.: Финансы и статистика, 2008, 688 с.
  3. Подбельский В.В. Язык Си++. – М.: Финансы и статистика, 2000, 560 с.
  4. Климова Л.М. Основы практического программирования на языке С++. – М.: Приор, 2000. - 454 с.
  5. Страуструп Б. Дизайн и эволюция языка С++. - М.:ДМК Пресс, 2000 - 488 с.
  6. Подбельский В.В Программирование на языке СИ: учебное пособие – М.: Финансы и статистика, 2003, 600 с.
  7. Романов Е.Л. Практикум по программированию на языке С++: учебное пособие – СПб.: Петербург, 2004.- 432 с.
  8. Горнаков С.Г. Программирование мобильных телефонов на С++ и Java - М.: ДМК Пресс, 2008. - 448 с.
  9. Керниган Б. Язык программирования Си – Вильямс, 2016. – 288 с.
  10. Эккель Б. Философия C++. Введение в стандартный C++ - Питер, 2004. – 572 с.
  11. Прата С. Язык программирования C++ - Вильямс, 2017. – 1248 с.
  12. Подбельский В.В., Фомин С.С. Программирование на языке Си. - М .: ФиС, 1999. - 600 с.
  13. Топп У., Форд У. Структуры данных в Си++ - М .: ЗАО БИНОМ, 1999. - 800 с.
  14. Климова Л.М. Основы практического программирования на языке Си. - М.: Издательство ПРИОР, 1999. - 464 с.
  15. Романов E.Л. Язык Си. Типы данных и управление памятью. - Новосибирск, Изд-во НГТУ, 2000. -62 с.
  16. Подбельский В.В. Язык Си++: Учеб.пособие. -М.:Финансы и статистика, 1995. -560 с.
  17. Герберт Ш. Java 2 v5.0 (Tiger). Новые возможности - СПб: БХВ-Петербург, 2005. - 208 c.
  18. Нотон П. Java. Справочное руководство. Все, что необходимо для программирования на Java - М.: Бином, 1996. - 448 c.
  19. Ноултон, П.; Шилдт, Г. Java 2 в подлиннике - СПб: BHV, 2001. - 606 c.
  20. Васильев А.Н. Java: Объектно-ориентировочное программирование. – Питер, 2011. – 400 с.
  21. Гарнаев А.Ю. Web-программирование на Java и JavaScript. - СПб.: БХВ-Петербург, 2005. - 1040с.
  22. Хабибуллин И. Разработка Web-служб средствами Java. - СПб.: БХВ-Петербург, 2003. - 388 с.
  23. Кубенский А. Создание и обработка структур данных в примерах на Java. - СПб.: БХВ-Петербург, 2001. - 321 с.