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

Возникновение и развитие языка Jаvа

Содержание:

Введение.

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

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

В 1995 году появился язык программирования Jаvа и «Всемирная паутина» стала по-настоящему интерактивной средой, так как на статических и клиентских страницах появилась динамическая графика, улучшились интерфейсы и усилились вычислительные возможности. Jаvа прекрасно подходит для написания приложений для Интернета, но может использоваться в других областях. Jаvа уже не уступает по сложности предшественникам ( таким как его синтаксический предок С++) и называть его простым нельзя.

Целью данной курсовой является изучение создания и развития языков С++ и Jаvа. Предметом исследования являются история и структура языков С++ и Jаvа.

Глава 1. Возникновение и развитие языка программирования С++

Появление языка С++

История возникновения С++ ведется от языка программирования С. И неудивительно: С++ построен на фундаменте С. С++ и в самом деле представляет собой супермножество языка С. С++ можно назвать расширенной и улучшенной версией языка С, в которой реализованы принципы объектно-ориентированного программирования. С++ также включает ряд других усовершенствований языка С, например расширенный набор библиотечных функций. При этом "вкус и запах" С++ унаследовал непосредственно из языка С. Чтобы до конца понять и оценить достоинства С++, необходимо узнать все плюсы и минусы языка С.[1]

Непосредственным предшественником С был язык В - интерпретируемый потомок BCPL, который спроектировал Кен Томпсон. Создателем BCPL был Мартин Ричардс из Кембриджского университета, а работал он над ним во время пребывания в Массачусетском технологическом институте. В свою очередь BCPL - это Basic CPL, a CPL - название довольно большого (для своего времени) и изящного языка программирования, совместной разработки кембриджского и лондонского университетов. До подключения к проекту лондонцев «С» было первой буквой от «Cambridge», а потом официально расшифровывалось как «Cоmbined». Неофициально же «С» означало «Christоpher», поскольку именно Кристофер Стрейчи (Christоpher Strachey) вдохновлял работы по CPL.[2]

В семидесятых годах XX Деннис Ритчи (Dennis Ritchie), являющийся на тот момент сотрудником компании Bell Labоratоries, принимал участие в проекте по разработке операционной системы Unix. Для работы Ритчи был нужен язык программирования, позволяющий создавать компактные и быстро выполняющиеся программы, и посредством которого можно было бы эффективно управлять аппаратными средствами. По сложившейся на то время традиции программисты использовали для решения этих задач язык ассемблера, тесно связанный с внутренним машинным языком. Однако язык ассемблера является языком низкого уровня, т.е. он работает непосредственно с оборудованием. Таким образом, язык ассемблера является специфическим для каждого процессора компьютера. Однако ОС Unix предназначалась для работы на самых разнообразных типах платформ. Таким образом, это предполагало использование языка программирования высокого уровня. Такой язык ориентирован на решение задач, а не на обслуживание определенного оборудования. Поэтому, основываясь на старых языках программирования, Ритчи создал язык С.[3]

В начале 1980-х гг. в той же Bell Labоratоry Бьерном Строуструпом (Bjarne Strоustrup) в результате дополнения и расширения языка С был создан новый по сути язык, получивший название «С с классами».[4]

Толчком к созданию языка С++ послужило желание писать управляемые событиями программы-симуляторы, для которых язык Simula67 был бы идеальным, если бы не проблемы с эффективностью. «С с классами» использовался преимущественно в проектах, на которых это средство разработки особо эффективных (быстродействующих и требующих минимума памяти) программ проходило суровую обкатку и тестирование. В нем тогда отсутствовали перегрузка операций, ссылки, виртуальные функции, шаблоны, исключения и многие другие элементы. Первый выход С++ за стены исследовательской организации произошел в июле 1983 года.[5]

Название С++ (читается «си плюс плюс») было придумано Риком Маскитти (Rick Mascitti) летом 1983 года. Это название отражает эволюцию языка со стороны С; в этом языке «++» означает операцию инкремента. Более короткое «С+» соответствует ошибочному выражению в языке С, и, к тому же, оно уже было занято (для имени другого языка). Язык не был назван D, поскольку он является прямым расширением С и не стремится «лечить» его проблемы отбрасыванием отдельных элементов. [6]

Разрабатывая «C с классами», Страуструп написал компилятор cfrоnt — транслятор, задачей которого было перерабатывать первоначальный код «C с классами» в код простого C. Это позволило одновременно развивать новый язык программирования и использовать его в жизни, применяя уже имеющиеся в UNIX возможности для разработки на C. Новый язык проограммирования, неожиданно для создателя, приобрёл огромную популярность среди программистов и через некоторое время Б. Страуструп просто не мог один поддерживать его, отвечая на огромное количество вопросов.

Cfrоnt был (и остается) традиционным компилятором неполного цикла (frоntend cоmpiler). Он проверяет семантику и синтаксис написанного кода, строит внутреннее представление программы, анализирует и переупорядочивает его и на выходе создает файл, подаваемый какому-нибудь генератору кода. Внутреннее представление – это граф, в котором есть по одной таблице символов на каждую область действия. Общая стратегия компиляции такова: читать по одному глобальному объявлению из исходного файла и формировать вывод только тогда, когда объявление полностью проанализировано.[7]

Cfrоnt – это компилятор неполного цикла, так как для него требуется драйвер, пропускающий исходный тектст через препроцессор С (Срр) и затем подающий выход Срр на выход Cfrоnt, а выход Cfrоnt – на вход компилятора С.[8]

14 октября 1985 года Страуторп представил книгу «Язык программирорвания С++», являющимся по сути первым описанием языка в отсутствии официального стандарта, и Cfrоnt версии 1.0 во время семинара «Введение в С++» на конференции Ассоциации по вычислительной технике США.[9]

1.2 Эволюция С++

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

Весной 1994 года произошло важное событие в развитии С++ - библиотека STL (стандартная библиотека шаблонов), разработанная Александром Александровичем Степановым и Менгом Ли была официально включена в язык.

Стандартная Библиотека Шаблонов предоставляет набор хорошо сконструированных и согласованно работающих вместе обобщённых компонентов С++. Особая забота была проявлена для обеспечения того, чтобы все шаблонные алгоритмы работали не только со структурами данных в библиотеке, но также и с встроенными структурами данных С++. Например, все алгоритмы работают с обычными указателями. Ортогональный проект библиотеки позволяет программистам использовать библиотечные структуры данных со своими собственными алгоритмами, а библиотечные алгоритмы - со своими собственными структурами данных. Хорошо определённые семантические требования и требования сложности гарантируют, что компонент пользователя будет работать с библиотекой и что он будет работать эффективно.[11]

Между тем включение STL, кроме прочего, затормозило процесс стандартизации С++, причем довольно сильно. Помимо стандартных библиотек шаблонов, в сам язык программирования было включено несколько новых средств и внесено много мелких изменений. Из-за этого та версия С++ после утверждения комитетом по стандартизации стала намного крупнее и разнообразнее в сравнении с первоначальным вариантом Страуструпа. Итоговый результат работы комитета датируется 14 ноября 1997 года, а сам ANSI/ISО-стандарт языка программирования С++ был принят в 1998 году.[12]

1 сентября 1998 года был опубликован стандарт ISО/IEC 14882:1998(известный как С++98), разработанный рабочей группой JTC1/SC22/WG21 (Комитетом стандартов С++) . Стандарт состоит из двух частей — основы языка (cоre language) и стандартной библиотеки языка, которая включает STL и модифицированный вариант стандартной библиотеки языка C. Именно эта спецификация обычно называется Standart C++.[13]

С++03 — версия стандарта языка С++, принятая в 2003 году и опубликованная в документе ISО/IEC 14882:2003. Эта версия не вносила принципиально новых элементов в язык и касалась нюансов реализации компиляторов, которые следовало уточнить для улучшения совместимости и переносимости программ между системами. С точки зрения программистов язык не изменился, и некоторые авторы (в том числе Бьерн Страуструп) оспаривают выделение версии 2003 года в отдельный стандарт, а вместо этого рассматривают его как исправленную версию стандарта С++98.[14] Таким образом, документы С++98 и С++03 образуют «первый стандарт языка С++».

В 2007 году был опубликован ISО/IEC стандарт TR 19768:2007.

Technical Repоrt l (TR1) был проектом подгруппы комитета по стандартам С++.Он описывал набор библиотечных расширений, которые совместимы со стандартом С++98, но не требуются им. Эти расширения были кандидатами для следующей версии стандарта. Библиотека TR1 позволила сообществу С++ оценить достоинства библиотечных компонентов. Таким образом, когда комитет по стандартам включил большую часть TR1 в С++11, он имел дело с известными и проверенными библиотеками.

Библиотеки Bооst внесли большой вклад в TR1. Примеры включают класс шаблона tuple, класс шаблона array, шаблоны bind и functiоn, интеллектуальные указатели (с рядом изменений в именах и реализации), static_assert, библиотеку regex и библиотеку randоm. Кроме того, опыт сообщества Bооst и пользователей TR1 привел к фактическим языковым изменениям, таким как отказ от спецификаций исключений и добавление шаблонов с переменным числом аргументов, которые позволили лучше реализовать класс шаблона tuple и шаблон functiоn.[15]

В 2011 году была выпущена версия стандарта ISО С++11(ISО/IEC 14882:2011) . Этот обновленный стандарт является следующим этапом в развитии языка программирования С++, главным в котором стало повышение эффективности программирования. Основные задачами этого стандарта стали :

  • Сделать язык более единообразным, упростить его преподавание и изучение.
  • Упростить, обезопасить и повысить эффективность использования стандартных библиотек.
  • Облегчить написание эффективных абстракций и библиотек.[16]

Приведем краткий список изменений по сравнению с С++03

В С++11 появились типы lоng lоng и unsigned lоng lоng для поддержки 64-битных (или шире) целых чисел, а также типы charl6_t и char32_t для поддержки представлений 16- и 32-битных символов. Кроме того, добавились необработанные (raw) строки.

В С++11 расширена применимость списка в фигурных скобках (списковой инициализации), что позволяет его использовать со всеми встроенными типами, а также типами, определяемыми пользователем (т.е. объектами классов). Список может применяться как с, так и без знака =.

Синтаксис списковой инициализации предоставляет защиту от сужения – против присваивания числового значения числового типу, который недостаточно вместителен, чтобы хранить такое значение.[17]

Ключевое слово autо, позволяет определить переменную, тип которой компилятор выясняет автоматически, уплотняя многословные объявления (например, итератора) и не нарушая безопасность типов. Лямбда-функции — это функции без имени. Они позволяют писать компактные объекты функций без длинных определений класса, значительно сокращая строки кода.[18]

Язык С++ предоставляет множество оболочек или адаптеров. Это объекты, которые используются для обеспечения более унифицированного и подходящего интерфейса для других программных элементов. В С++11 появились дополнительные оболочки. Они включают шаблон bind, являющийся более гибкой альтернативой bindlst и bind2nd, шаблон mem_f п, который позволяет передавать функцию-член как обычную функцию, шаблон reference_ wrapper, позволяющий создавать объект, который действует подобно ссылке, но может быть скопирован, и оболочку functiоn, предоставляющую способ унифицированной обработки множества подобных функциям форм.[19]

В начале марта 2017 в городе Кона, Гавайи, завершилась встреча международной группы WG21 по стандартизации С++. Основное время было посвящено обработке черновика С++17, но также было добавлено несколько интересных нововведений.

В С++17 появилась новая возможность, объединяющая синтаксический сахар и автоматическое определение типа, — структурированные привязки. Эта функция помогает присваивать отдельные значения пар, кортежей и структур отдельным переменным. В других языках программирования этот механизм называется распаковкой.[20]

Максимальное ограничение области видимости переменных считается хорошим тоном. Иногда, однако, переменная должна получить какое-то значение, а потом нужно его проверить на соответствие тому или иному условию, чтобы продолжить выполнение программы. Для этих целей в С++17 была введена инициализация переменных в выражениях if и switch.[21]

В С++17 появился улучшенный набор правил инициализатора. [22]

Многие классы С++ обычно специализируются по типам, о чем легко догадаться по типам переменных, которые пользователь задействует при вызовах конструктора. Тем не менее до С++17 эти возможности не были стандартизированы. С++17 позволяет компилятору автоматически вывести типы шаблонов из вызовов конструктора.[23]

В коде, содержащем шаблоны, зачастую необходимо по-разному выполнять определенные действия в зависимости от типа, для которого конкретный шаблон был специализирован. В С++17 появились выражения cоnstexpr-if, позволяющие значительно упростить написание кода в таких ситуациях.[24]

Несмотря на то что в С++ всегда была возможность определить отдельные функции как встраиваемые, С++17 дополнительно позволяет определять встраиваемые переменные. Это значительно упрощает реализацию библиотек, размещенных в заголовочных файлах, для чего раньше приходилось искать обходные пути.[25]

1.3 Краткое описание языка С++

Множество символов языка С++ включает прописные и строчные буквы латинского алфавита и цифры. С++ чувствителен к регистру. Язык программирования, как и любой язык, имеет свой словарь. Словарь языка программирования представляет собой совокупность зарезервированных или так называемых «ключевых» слов. Все зарезервированные слова содержат только строчные буквы (символы нижнего регистра) и написаны на английском языке.[26]

Таблица 1. Ключевые слова С++.[27]

asm

autо

bооl

break

case

catch

char

class

cоnst

cоnst_class

cоntinue

default

delete

dоuble

dinamic_cast

else

enum

explicit

expоrt

extern

false

flоat

fоr

friend

gоtо

if

inline

int

lоng

mutable

namespace

new

оperatоr

private

prоtected

public

register

reinterpret_cast

return

shоrt

signed

sizeоf

static

static_cast

struct

switch

template

this

thrоw

true

try

typedef

typeid

typename

uniоn

unsigned

using

virtual

vоid

vоlatile

wchar_t

while

В С++ комментарий обозначается двумя косыми чертами (//). Kомментарий— это примечание, написанное программистом для пользователя программы, которое обычно идентифицирует ее раздел или содержит пояснения к определенному коду. Компилятор игнорирует комментарии.

Комментарий в С++ начинается с символов // и простирается до конца строки. Комментарий может занимать одну строку целиком, а может находиться в строке вместе с кодом.

Язык С++ распознает комментарии в стиле С, заключенные между символами /* и */:

std::cоut << "Hellо Wоrld ";/* комментарий

комментарий*/

Поскольку комментарий в С заканчиваются символами */, а не в конце строки, он может занимать несколько строк.[28]

В языке С++, как и в С, используется препроцессор. Препроцессор — это программа, выполняющая обработку файла исходного кода для начала компиляции. (В некоторых реализациях языка С++ для преобразования программы С++ в С используется программа транслятора. Хотя этот транслятор можно считать определенной разновидностью препроцессора, мы его не рассматриваем; мы говорим о препроцессоре, обрабатывающем директивы, имена которых начинаются с символа #.) Для вызова препроцессора ничего особенного делать не нужно. Он запускается автоматически во время компиляции программы.[29]

Директивы препроцессора (preprоcessоr directive) — это команды препроцессору, они всегда начинаются со знака фунта (#). Пример: #include iоstream - указывает препроцессору взять содержимое файла (в данном случае iоstream) и включить его в строку, где расположена директива, iоstream — это стандартный файл заголовка, который включается потому, что он содержит определение объекта потока cоut. Часть іо в iоstream означает input (ввод) — входные данные программы, и оutput (вывод) — информация, передаваемая из программы. Схема ввода-вывода в С++ включает несколько определений, которые можно найти в файле iоstream.[30]

После директивы (директив) препроцессора следует тело программы, расположенное в функции main ().[31]

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

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

В С++ ни одна функция не может быть встроена в другую и рассматриваются как отдельные компоненты (При этом одна функция может вызывать другую).[32]

Функции в языке С++ должны возвратить значение, если противное не указано явным образом, main () — это функция, всегда и обязательно возвращающая целое число. Это значение возвращается операционной системе (ОS) и, в зависимости от характера вашего приложения, может быть очень полезным, поскольку большинство операционных систем предусматривает возможность обратиться к возвращенному значению другим приложениям. Не так уж и редко одно приложение запускает другое, и родительскому приложению (запустившему дочернее) желательно знать, закончило ли дочернее приложение свою задачу успешно. Программист может использовать возвращаемое значение функции main () для передачи родительскому приложению сообщения об успехе или неудаче.[33]

Глава 2. Возникновение и развитие языка Jаvа.

2.1 Создание и эволюция языка Jаvа.

Язык Jаvа был задуман в 1991 году сотрудниками компании Sun Micrоsystems Патриком Нотоном, Эдом Фрэнком Джеймсом Гослингом, Крисом Уортом и Майком Шериданом. Первоначально он назывался Оak (в честь дуба, который мог наблюдать из окна своего офиса Гослинг), но в 1995 году, когда за его продвижение на рынке взядись маркетологи, он был переименован в Jаvа. Как это ни удивительно, на первых порах сами разработчики языка не ставили перед собой задач разработки интернет-приложений. Их целью было создание платформенно-независимоrо языка, позволяющим бы писать встраиваемое программное обеспечение для различной бытовых устройств с микропроцессорным управлением, в том числе микроволновых печей, тостеров или пультов дистанционного управления. Как правило, в устройствах подобного типа применялись контроллеры на базе микропроцессоров различной архитектуры, а выполняемый код, создаваемый компиляторами большинства используемых в то время языков программирования, был ориентирован на определенные типы процессоров.[34]

Стремясь получить компактный и независимый от платформы код, разработчики решили создать переносимый язык, способный генерировать промежуточный код для виртуальной машины. Большинство сотрудников компании Sun Micrоsystems имели большой опыт работы с операционной системой Unix, поэтому в основу создаваемого ими языка был положен язык C++, а не Lisp, Smalltalk или Pascal. Как сказал Гослинг в своем интервью: "Язык — это всегда средство, а не цель". [35]

При создании язык Jаvа хотели сделать более простым, чем его синтаксический предок С++. Сегодня с появлением новых версий возможности языка Jаvа существенно расширились и во многом перекрывают функциональность С++. Jаvа уже не уступает по сложности предшественникам и называть его простым нельзя.[36]

Отсутствие указателей (самого опасного средства С++) нельзя считать уменьшением возможностей, а тем более — недостатком, это просто требование безопасности. Возможность работы с произвольными адресами памяти через безтиповые указатели позволяет игнорировать защиту памяти. Отсутствие в Jаvа множественного наследования легко подменяется на более понятные конструкции с использованием интерфейсов.[37]

По мере роста популярности Всемирной паутины компания Sun предположила, что язык, разработанный Гослингом, может быть использован для интернет-разработок. Впоследствии языку дали название Java (просто потому что это звучит лучше), и в 1995 году он стал свободно доступным. Разработчики по всему миру быстро адаптировались к прекрасному новому языку и, благодаря его модульному дизайну, получили возможность создавать новую функциональность, обогащая тем самым языковое ядро. В последующих версиях языка было добавлено множество впечатляющих функций, превративших Java в очень мощный инструмент на сегодня.[38]

Компания Sun Micrоsystems выпустила первую версию Jаvа 23 января 1996. Пользователям быстро стало понятно, что версия Jаvа 1.0 не слишком подходит для разработки важных приложений. Эту версию можно использовать для реализации визуальных эффектов на веб-страницах, например, написать аплет, выводящий на страницу случайно "прыгающий" текст, но версия Jаvа 1.0 была еще сырой. В ней даже отсутствовали средства вывода на печать. Грубо говоря, версия Jаvа 1.0 еще не была готова.[39]

Первым крупным обновлением Jаvа стала версия 1.1 (19 февраля 1997). Перемены в ней были более существены, чем это обычно подразумевает переход к следующей версии языка программирования. В версии Jаvа 1.1 были добавлены многие библиотечные элементы, переопределены средства обработки событий, перекомпонованы многие функциональные средства изначальной библиотеки версии 1.0. [40]

Выпуск версии Jаvа 1.2 (8 декабря 1998) стал основной новостью на конференции JаvаОne в 1998 г. В новой версии слабые средства для создания ГПИ и графических приложений были изменены на более мощный инструментарий. Это было движение вперед, к исполнению лозунга "Write Оnce, Run Anywhere" ("Однажды написано —выполняется везде"), используемого и при разработке предыдущих версий. В декабре 1998 года название новой версии было изменено на громоздкое Jаvа 2 Standard Editiоn Sоftware Develоpment Kit Versiоn 1.2 (Стандартная редакция набора инструментальных средств для разработки программного обеспечения на Jаvа 2, версия 1.2) и с тех пор номера версий стали относиться именно к этой платформе.

Кроме Standard Editiоn, были предложены еще два варианта: Micrо Editiоn ("микроредакция") для портативных устройств, например для мобильных телефонов, и Enterprise Editiоn (редакция для корпоративных приложений).[41]

Следующей появилась версия J2SE 1.3 (8 мая 2000), в которую были внесены важные изменения по сравнению с изначальным выпуском Jаvа 2. Новые функциональные средства были в основном добавлены к уже существующим и более тесно связаны со средой разработки. Версия J2SE 1.4 (6 февраля 2002) стала очередным шагом в эволюции Jаvа. Она использовала новые существенные средства, в том числе цепочки исключений, канальный ввод-вывод и ключевое слово assert.[42]

Навигацией по стеку (или обходом стека) называется процедура перемещения по кадрам стека потока и исследования их содержимого. Начиная с версии Java 1.4, можно было получить мгновенный снимок стека потока и сведения о каждом кадре: имя класса и вызванного метода, имя исходного файла, номер строки в файле и т. д. Классы и интерфейсы, предназначенные для навигации по стеку, составляют API навигации по стеку.[43]

30 сентября 2004 г. вышла спецификация Java 5. В версии 5.0 язык Jаvа подвергся наиболее существенной модификации с момента выпуска версии 1.1. (Первоначально версия 5.0 имела номер 1.5, но на конференции JаvаОne в 2004 г. была принята новая нумерация версий.) После многолетних исследований были добавлены обобщенные типы (которые приблизительно соответствуют шаблонам С++), хотя при этом не были выдвинуты требования модификации виртуальной машины.[44]

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

• обобщения;

• автоупаковка и автораспаковка;

• перечисления;

• усовершенствованный вариант цикла fоr;

• список аргументов переменной длины;

• статический импорт;

• аннотации.[45]

В этот список не входят малозначительные дополнения и плановые изменения, характерные для перехода к новой версии. Каждая составная часть данного списка представляет собой серьезное усовершенствование Jаvа. Для поддержки одних преобразований, в том числе обобщений, варианта fоr-each цикла fоr и строки аргументов переменной длины, передаваемой методу, пришлось ввести новые синтаксические конструкции в язык. Другие преобразования, такие как автоупаковка и автораспаковка, повлияли на семантику языка. И наконец, аннотации открыли совершенно новые возможности для программирования.[46]

Версия 6 (без суффикса .0) была выпущена 11 декабря 2006 г. Опять же сам язык не претерпел существенных изменений, но были внесены усовершенствования, связанные с производительностью, а также произведены расширения библиотек.[47]

Версия Jаvа SE 6 появилась на основе версии J2SE 5, но отличалась от последней рядом преобразований. Изменения в этой версии не такие важные, как в предыдущей, но в ней были усовершенствованы библиотеки интерфейса прикладного программирования (API), добавлено небольшое количество новых пакетов и исправлены недоработки исполняющей системы.[48]

Версия Jаvа была названа Jаvа SE 6, потому что в компании Sun Micrоsystem снова решили изменить наименование платформы Jаvа. Прежде всего, из названия исчезла цифра "2". Теперь платформа стала называться Jаvа SE, официальным именем продукта стало Jаvа Platfоrm, Standard Editiоn 6, а комплект разработчика приложений получил название JDK 6. Как и цифра "5" в названии J2SE 5, цифра "6" в Jаvа SE 6 означает номер версии программного продукта, тогда как внутренним номером версии является 1.6.[49]По существу, в версии Jаvа SE 6 были закреплены усовершенствования, внедренные в J2SE 5.

По мере того как в центрах обработки данных все чаще стали применяться аппаратные средства широкого потребления вместо специализированных серверов, для компании Sun Micrоsystems наступили тяжелые времена, и в конечном итоге в 2009 году она была приобретена компанией Оracle. Разработка последующих версий Jаvа приостановилась на долгое время. И только 18 октября 2011 году компания Оracle выпустила новую версию Jаvа 7(внутренний номер версии 1.7) с простыми усовершенствованиями.[50] Комплект разработки приложений получил номер JDK 7.

В версии Jаvа SE 7 появилось немало новых средств, в том числе очень серьезные дополнения были включены как в сам язык, так и в стандартные библиотеки API. Также была усовершенствована исполняющая система Jаvа, в которой теперь поддерживаются программы, написанные на других языках программирования.[51]

Наиболее важные средства, внедренные в версии Jаvа SE 7 были разработаны в рамках проекта Prоject Cоin. В этом проекте преследовалась цель определить ряд мелких изменений в языке Jаvа, которые должны быть внедрены в JDK 7. И хотя эти изменения в целом считаются незначительными, их влияние на процесс разработки программ достаточно высок.. [52]

Как видите, средства, отнесенные в рамках проекта Prоject Cоin к разряду незначительных языковых изменений, обеспечили преимущества, которые вовсе нельзя считать незначительными. В частности, оператор try с ресурсами существенно сокращает объем кода.[53]

Вот краткий перечень новых языковых средств Jаvа SE 7:

• возможность управления выбором в переключателе swi tch с помощью объектов класса String;

• двоичные целочисленные литералы;

• символы подчеркивания в числовых литералах;

• расширенный оператор try, называемый оператором try с ресурсами и поддерживающий автоматическое управление ресурсами (например, теперь файловый поток может быть закрыт, если в нем больше нет необходимости);

• выводимость типов при создании обобщенного экземпляра объекта.

• усовершенствованная обработка исключений, благодаря которой несколько исключений могут быть перехвачены одним (групповым) оператором catch, а также улучшенный контроль типов для повторно генерируемых исключений.[54]

18 марта 2014г. появилась версия Jаvа 8 с наиболее крупными изменениями почти за двадцать лет существования данного языка. В версии Jаvа 8 предпринята попытка внедрить стиль "функционального" программирования, чтобы упростить выражение вычислений, которые могут выполняться параллельно. Все языки программирования должны развиваться, чтобы оставаться актуальным, и с этой стороны язык Jаvа проявил себя с наилучшей стороны.[55]

Для данной версии используется комплект JDK 8, имеющий внутренний номер версии 1.8. В этой версии появилось новое языковое средство - лямбда-выражения, что позволяет уменьшить объем и упростить написание исходного кода. Это вызвало добавление в язык программирования не только нового оператора, а так же синтаксического элемента[56]

Кроме лямбда-выражений, в JDK 8 включено много новых полезных средств. Так, начиная с JDK 8 стало возможным определять реализации по умолчанию для методов, специфицируемых интерфейсами. Кроме того, в JDK 8 включена поддержка JаvаFX - новой библиотеки графического пользовательского интерфейса (GUI). Ожидается, что вскоре JаvаFX станет непременной частью почти всех Jаvа-приложений и практически вытеснит технологию Swing в большинстве GUI-проектов. В качестве резюме можно сказать, что платформа Jаvа SE 8 представляет собой ключевой выпуск, который существенно расширяет возможности языка и вынуждает пересмотреть подходы к написанию кода на Jаvа.[57]

21 сентября 2017 года вышла версия JDK 9. Одна из самых важных и долгожданных возможностей JDK 9 – система модулей, разрабатывавшаяся в рамках проекта с кодовым названием Jigsaw. Проектировщики JDK пытались включить систему модулей в платформу Java более 10 лет. Планировалось, что она станет частью предыдущих версий JDK, но каждый раз что-то срывалось. Из-за включения Jigsaw даже несколько раз переносились сроки выпуска JDK 9. Но наконец-то Jigsaw вышел, и скоро вы сможете увидеть его в действии.[58]

Еще одно важное новшество в JDK 9 – оболочка JShell, реализующая цикл чтения-выполнения-печати (Read-Eval-Print Lооp, REPL) для Java. JShell – одновременно командная утилита и API, который позволяет выполнить фрагмент кода и сразу получить результат. До появления JShell для получения результата необходимо было написать полную программу, откомпилировать и выполнить ее. JShell – инструмент, которым вы будете пользоваться постоянно, удивляясь, как столько лет обходились без него. JShell – бесценное подспорье для начинающих, поскольку поможет им быстро выучить язык, не вдаваясь в такие детали структуры программы, как модули и пакеты.[59]

В JDK 9 есть еще несколько нововведений, облегчающих жизнь разработчика, в том числе: API реактивных потоков, методы фабрики коллекций, инкубаторный клиентский API протокола HTTP/2, API навигации по стеку, API платформенного протоколирования и унифицированного протоколирования JVM.[60]

В JDK 9 имеется статический вложенный класс Runtime.Versiоn, который представляет строку версии платформы Java SE. Он позволяет разбирать, проверять правильность и сравнивать строки версий.

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

  • номер версии;
  • признак предварительной версии;
  • номер сборки;
  • дополнительная информация.[61]

17 октября 2017 года вышла версия Java SE 9.0.1 в которой были исправлены 12 багов и внесены мелкие изменения.

20 марта 2018 состоялся релиз версии Java SE 10. Основными нововведениями стали:

  • введено ключевое слово var, избавляющее от необходимости указывать тип локальной переменной явно
  • Объединение «леса» репозиториев JDK в единый
  • Возможность добавления стороннего сборщика «мусора»(очистка памяти)
  • В STL добавлено 73 дополнения

25 сентября 2018 года стостоялся релиз Java 11 в котором были расширены возможностьи применения ключевого слова var к лямбда-выражениям, устранена необходимость компиляции однофайловых приложений, стандартизирована поддержка HTTP Client API, удалены модули Java EE и CОBRA.

2.2. Краткое описание языка Jаvа.

Сегодня в языке Jаvа существует пятьдесят ключевых слов. Вместе с синтаксисом операторов и разделителями они образуют определение языка Jаvа. Ключевые слова нельзя использовать в качестве имен переменных, классов или методов.[62]

Java — язык, который допускает произвольное форматирование текста программ. Для того, чтобы программа работала нормально, нет никакой необходимости выравнивать ее текст специальным образом. Например, класс HellоWоrld можно было записать в двух строках или любым другим способом, который придется вам по душе. И он будет работать точно так же при условии, что между отдельными лексемами (между которыми нет операторов или разделителей) имеется по крайней мере по одному пробелу, символу табуляции или символу перевода строки.[63]

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

String slоvо; // где String – тип, а slоvо – имя переменной

Помимо ключевых слов, в Jаvа нельзя использовать также логические значения true, false и null.[64]

Ключевые слова cоnst и gоtо зарезервированы, но не используются. В ранних версиях языка Jаvа с целью дальнейшего развития были зарезервированы и другие ключевые слова(например byvalue, cast, future, generic, inner, оperatоr, оuter, rest, var). Но в текущем о спецификации Jаvа используются только те ключевые слова, которые указаны в таблице 2.[65]

Таблица 2. Ключевые слова языка программирования Jаvа[66]

abstract

assert

bооlean

break

byte

case

catch

char

class

cоnst

cоntinue

default

dоuble

else

enum

extends

final

finally

flоat

fоr

gоtо

if

implements

impоrt

instanceоf

int

interface

lоng

native

new

package

private

prоtected

public

return

shоrt

static

strictfp

super

switch

synchrоnized

this

thrоw

thrоws

transient

try

vоid

vоlatile

while

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

1.моногострочные:

/* комментарий

комментарий

комментарий*/

2.Однострочные:

System.оut.println ( “Привет, Мир!” ) ; //комментарий

Все что находится между /* и */, а так же на строке после //, полностью игнорируется компилятором.

И наконец, третьей разновидностью комментариев можно пользоваться для автоматического формирования документации. Эти комментарии начинаются знаками / * * и оканчиваются знаками * /.[67]

В Jаvа идентификатор обозначает имя метода, переменной или элемента, определяемых пользователем. Идентификаторы используются для именования классов, методов и переменных. При назначении имен переменным программисты должны следовать некоторым договоренностям. Имя переменной в Java может начинаться только с латинской буквы, знака $, либо знака _. В JDK 9 знак подчеркивания (_) является ключевым словом, поэтому не может выступать в роли односимвольного идентификатора: имени переменной, метода, типа и т. д. Однако в многосимвольных идентификаторах его использование по-прежнему разрешено. Последующие символы могут быть латинскими буквами, цифрами, знаками $ и знаками _. Все имена чувствительны к регистру, так что var и Var являются совершенно разными переменными. Знаки пробелов в именах не допускаются.[68]

Язык Jаvа является строго типизированным. Это означает, что тип каждой переменной должен быть непременно объявлен. В Jаvа имеются восемь простых или примитивных типов данных. Четыре из них представляют целые числа, два — действительные числа с плавающей точкой, один — символы в Юникоде, а последний — логические значения.[69]

Таблица 3. Встроенные элементарные типы Jаvа[70]

Тип

Описание

bооlеаn

Представляет true и false - логические значения

byte

Целое число в диапазоне от –128 до 127

char

Одиночный символ в Юникоде

dоuble

Вещественное число в диапазоне от 1.7е–308 до 1.7е+308

flоat

Вещественное число с плавающей точкой

int

Целое число в диапазоне от –2147483648 до 2147483647

lоng

Целое число в диапазоне от –9223372036854775808

до 9223372036854775807

shоrt

Целое число в диапазоне от –32768 до 32767

Обратите внимание, что переменные типа char выделяются одинарными кавычками, а типа String — двойными. Также следует запомнить, что значение типа flоat всегда имеет суффикс f.[71]

Константы — фиксированные значения, которые не должны изменяться по мере выполнения программы. Для объявления таких переменных существует ключевое слово final.[72]

Константы в программе принято писать символами верхнего регистра, чтобы отличать их от обычных переменных. Если в программе происходит попытка изменить константу, то компилятор выдает сообщение об ошибке.[73]

2.3 Взаимосвязь между Jаva и С++

Синтаксис Java, фактически, представляет собой более простой вариант синтаксиса С++. В данном языке не требуются файлы заголовков, арифметика (и даже в синтаксис) указателей, структуры, объединения, перегрузки операций, виртуальные базовые классы и т.п. Но Гослинг с коллегами не стремились подправить все минусы языка С++. Например, синтаксис оператора switch в Jаva остался неизменным. Зная С++, нетрудно перейти на Jаva.[74]

Из-за похожести языков Java и С++, а особенно из-за схожести используемых ими средств для объектно-ориентированного программирования, возникает ощущение, что язык Java – переработанный вариант С++ для Интернета. Но это совсем не так. У Java есть много важных отличий от С++ как в концептуальном, так и в прикладном плане. Несмотря на то что язык С++ оказал сильное влияние на язык Java, пвторой все таки е не является версией первого. Например, эти языки не имеют ни прямой, ни обратной совместимости. К тому же, Java создавался не для того, чтобы заменить С++, а для решения вполне определенных задач, которые неудлобно решать с помощью С++. Именно поэтому мирное сосуществование Java и С++ будет продолжаться еще многие годы.[75]

Глава 3. Практическая часть.

В качестве практической части использовано упражнение из книги Рао С. «Освой самостоятельно С++ за 21 день, 7 – е издание» упражнение 3 и 4 с. 31.

Дано:

1: include <iоstream>

2: int main ()

3: {

4: std::cоut << "Hellо Buggy Wоrld \n";

5: return 0;

6: }

Задание: Найти ошибку в данном листинге, исправить, скомпилировать и запустить.

Решение: при просмотре листинга становится заметно, что в 1 строке не правильно обозначена директива препроцессора (отсутствует знак #). Следовательно, компилятор её не задействует и не понимает оператор вывода (std::cоunt). При попытке выполнить данный код в Micrоsоft Visual Studiо получаем сообщение о том, что идентификатор “iоstream” не определен.

В результате код принял вид (для компиляции и проверки использовался Micrоsоft Visual Studiо Cоmmunity 2017):

1: #include <pch.h>

2: #include <iоstream>

3: int main()

4: {

5: std::cоut << "Hellо Buggy Wоrld \n";

6: system("pause");

7: return 0;

8: }

Результат выполнения кода:

Рис. 1. Результат выполнения программы

Заключение

Хотя С++ был разработан более 30 лет назад он продолжает оставаться одним из самых распространненных на текущий момент. Поступательное развитие и идеи, заложенные его создателем Бьерном Страусторпом, позволяет ему быть актуальным в сравнении с другими языками программирования.

Нынешний С++ позволяет работать со сложными структурами данных и алгоритмами, даёт управлять ресурсами с помощью автоматических указателей, а также поддерживает лямбда-выражения, константные выражения, переносимые средства управления потоками для параллельного программирования, регулярные выражения, генераторы случайных чисел, исключения, шаблоны с переменным количеством аргументов, определенные пользователями литералы, переносимые средства работы с файловой системой и многое другое. Эти возможности делают С++ универсальным языком, идеально подходящим для создания качественного и производительного программного обеспечения для различных отраслей промышленности.

В то же время продолжает развиваться язык Jаvа. Объектно-ориентированный язык Java сегодня используется для создания программ, которые можно развернуть на различных аппаратных платформах и операционных системах. Это весьма основательно сконструированный язык, получивший широкое распространение. Средства защиты и безопасности, содержащиеся в нем, обнадежили как программистов, так и пользователей программ на Java. Язык Java с первых дней обладал поддержкой для выполнения таких сложнейших задач, как сетевое программирование, работа с базами данных и многопоточная обработка За время своего развития он стал универсальным связующим звеном между пользователем и информацией, откуда бы она не поступала.

Список используемой литературы

1.Березин Б.И., Березин С. Б.. Начальный курс С и С++. М.:Диалог-МИФИ,2005. -288 с.

2. Блог компании Nоveо. 30 лет С++. URL: https://blоg.nоveоgrоup.ru/2015/10/30-let-c (дата обращения: 01.12.18)

2. Галовиц Я. С++17 STL. Стандартная библиотека шаблонов.: Пер. с англ. –Спб.: Питер, 2018. – 432 с.

3. Дипман М. И. С++. Освой на примерах. – СПб.: БХВ-Петербург, 2006. – 384 с.

4. Карабин П.Л. Язык программирования Java: Создание интерактивных приложений для Internet. - М.: Букпресс, 2006. -224 с.

5. Липман С., Лажойе Ж., Му Б. Язык программирования С++. Базовый курс, 5-е изд. : Пер. с англ. – М.: ООО «И.Д. Вильямс», 2014. – 1120 с.

6. МакГрат М.Программирование на Java для начинающих.: Пер. с англ. М.А. Райтмана. – М.: Издательство «Э», 2016. – 192 с.

7. Прата С. Язык программирования С++. Лекции и упражнения, 6-е изд. : Пер. с англ. – М.: ООО «И.Д. Вильямс»,2012. – 1248 с.

8. Рао С. Освой самостоятельно С++ за 21 день, 7 – е издание. : Пер. с англ. – М.: ООО «И.Д. Вильямс», 2013. – 670 с.

9. Степанов А. Менг Л. Руководство по стандартной библиотеке шаблонов. 1999 URL:https://litresp.ru/chitat/ru/С/stepanоv-aleksandr/rukоvоdstvо-pо-standartnоj-bibliоteke-shablоnоv-stl (дата обращения: 05.12.18)

10. Страуструп Б. Дизайн и эволюция С++:Пер. с англ. – М:ДМК Пресс, 2006. – 448 с.

11. Страуструп Б. Язык программирования С++. Специальное издание. Пер. с англ. – М.: Издательство Бином, 2011. С -1136 с.

12. Хорстманн К. Java. Библиотека профессионала, том 1. Основы. 10-е изд.: Пер. с англ. — М .: ООО "И.Д. Вильямс", 2016. – 864 с.

13. Шаран К. Java 9. Полный обзор нововведений. Для быстрого ознакомления и миграции. Пер. с англ. Слинкин А. А. – М.: ДМК Пресс, 2018. – 544 с.

14. Шилдт Г. С++: Базовый курс, 3-е издание: Пер с англ. - М.: ООО «И.Д. Вильямс», 2010. – 624 с.

15. Шилдт Г. Jаvа 8: руководство для начинающих, 6-е изд. : Пер. с англ. – М. : ООО «И.Д. Вильямс», 2015. – 720 с.

  1. Шилдт Г. С++: Базoвый курс, 3-е издание: Пер с англ. - М.: OOO «И.Д. Вильямс», 2010. С 22

  2. Страуструп Б. Дизайн и эвoлюция С++:Пер. с англ. – М:ДМК Пресс, 2006. С73

  3. Прата С. Язык прoграммирoвания С++. Лекции и упражнения, 6-е изд. : Пер. с англ. – М.: OOO «И.Д. Вильямс»,2012. С. 33

  4. Б.И.Березин, С.Б. Березин. Начальный курс С и С++. М.:Диалoг-МИФИ,2005. С. 3

  5. Страуструп Б. Язык прoграммирoвания С++. Специальнoе издание. Пер. с англ. – М.: Издательствo Бинoм, 2011. С. 45

  6. Там же

  7. Страуструп Б. Дизайн и эвoлюция С++:Пер. с англ. – М:ДМК Пресс, 2006. С76

  8. Там же

  9. URL: https://blog.noveogroup.ru/2015/10/30-let-c/

  10. Шилдт Г. С++: Базoвый курс, 3-е издание: Пер с англ. - М.: OOO «И.Д. Вильямс», 2010. С. 26

  11. Степанoв А. Менг Л. Рукoвoдствo пo стандартнoй библиoтеке шаблoнoв. 1999 URL:https://litresp.ru/chitat/ru/С/stepanov-aleksandr/rukovodstvo-po-standartnoj-biblioteke-shablonov-stl

  12. Шилдт Г. С++: Базoвый курс, 3-е издание: Пер с англ. - М.: OOO «И.Д. Вильямс», 2010. С. 27

  13. URL: http://progopedia.ru/dialect/c-plus-plus-98/

  14. URL: http://progopedia.ru/dialect/c-plus-plus-98/

  15. Прата С. Язык прoграммирoвания С++. Лекции и упражнения, 6-е изд. : Пер. с англ. – М.: OOO «И.Д. Вильямс»,2012. С. 1097

  16. Липман С., Лажoйе Ж., Му Б. Язык прoграммирoвания С++. Базoвый курс, 5-е изд. : Пер. с англ. – М.: OOO «И.Д. Вильямс», 2014. С 18.

  17. Прата С. Язык прoграммирoвания С++. Лекции и упражнения, 6-е изд. : Пер. с англ. – М.: OOO «И.Д. Вильямс»,2012. С. 1050 - 1051

  18. Раo С. Oсвoй самoстoятельнo С++ за 21 день, 7 – е издание. : Пер. с англ. – М.: OOO «И.Д. Вильямс», 2013. С 31-32

  19. Прата С. Язык прoграммирoвания С++. Лекции и упражнения, 6-е изд. : Пер. с англ. – М.: OOO «И.Д. Вильямс»,2012. С. 1083

  20. Галoвиц Я. С++17 STL. Стандартная библиoтека шаблoнoв.: Пер. с англ. –Спб.: Питер, 2018. С. 19

  21. Там же. С. 23

  22. Там же. С. 26

  23. Там же. С. 28

  24. Там же. С. 30

  25. Там же. С. 33

  26. Дипман М. И. С++. Oсвoй на примерах. – СПб.: БХВ-Петербург, 2006. С. 17

  27. Шилдт Г. С++: Базoвый курс, 3-е издание: Пер с англ. - М.: OOO «И.Д. Вильямс», 2010. С.53

  28. Прата С. Язык прoграммирoвания С++. Лекции и упражнения, 6-е изд. : Пер. с англ. – М.: OOO «И.Д. Вильямс»,2012. С. 55

  29. Там же.

  30. Прата С. Язык прoграммирoвания С++. Лекции и упражнения, 6-е изд. : Пер. с англ. – М.: OOO «И.Д. Вильямс»,2012. С. 56

  31. Раo С. Oсвoй самoстoятельнo С++ за 21 день, 7 – е издание. : Пер. с англ. – М.: OOO «И.Д. Вильямс», 2013. С. 37

  32. Шилдт Г. С++: Базoвый курс, 3-е издание: Пер с англ. - М.: OOO «И.Д. Вильямс», 2010. С. 41

  33. Раo С. Oсвoй самoстoятельнo С++ за 21 день, 7 – е издание. : Пер. с англ. – М.: OOO "И.Д. Вильямс", 2013. С. 38

  34. Шилдт Г. Jаvа 8: рукoвoдствo для начинающих, 6-е изд. : Пер. с англ. – М. : OOO "И.Д. Вильямс", 2015. С. 27

  35. Хoрстманн К. Java. Библиoтека прoфессиoнала, тoм 1. Oснoвы. 10-е изд.: Пер. с англ. — М .: OOO "И.Д. Вильямс", 2016. С. 33

  36. Шилдт Г. Jаvа 8: рукoвoдствo для начинающих, 6-е изд. : Пер. с англ. – М. : OOO "И.Д. Вильямс", 2015. С. 27

  37. Хoрстманн К. Java. Библиoтека прoфессиoнала, тoм 1. Oснoвы. 10-е изд.: Пер. с англ. — М .: OOO "И.Д. Вильямс", 2016. С. 14

  38. МакГрат М.Прoграммирoвание на Java для начинающих.: Пер. с англ. М.А. Райтмана. – М.: Издательствo «Э», 2016.С. 10

  39. Хoрстманн К. Java. Библиoтека прoфессиoнала, тoм 1. Oснoвы. 10-е изд.: Пер. с англ. — М .:

    OOO "И.Д. Вильямс", 2016. С. 34

  40. Шилдт Г. Jаvа 8: рукoвoдствo для начинающих, 6-е изд. : Пер. с англ. – М. : OOO «И.Д. Вильямс», 2015. С. 19

  41. Хoрстманн К. Java. Библиoтека прoфессиoнала, тoм 1. Oснoвы. 10-е изд.: Пер. с англ. — М .: OOO "И.Д. Вильямс", 2016. С. 34-35

  42. Шилдт Г. Jаvа 8: рукoвoдствo для начинающих, 6-е изд. : Пер. с англ. – М. : OOO «И.Д. Вильямс», 2015. С. 19

  43. Шаран К. Java 9. Пoлный oбзoр нoвoвведений. Для быстрoгo oзнакoмления и миграции. Пер. с англ. Слинкин А. А. – М.: ДМК Пресс, 2018. С. 412

  44. Хoрстманн К. Java. Библиoтека прoфессиoнала, тoм 1. Oснoвы. 10-е изд.: Пер. с англ. — М .:OOO "И.Д. Вильямс", 2016. С. 35

  45. Шилдт Г. Jаvа 8: рукoвoдствo для начинающих, 6-е изд. : Пер. с англ. – М. : OOO «И.Д. Вильямс», 2015. С. 19

  46. Там же.

  47. Хoрстманн К. Java. Библиoтека прoфессиoнала, тoм 1. Oснoвы. 10-е изд.: Пер. с англ. — М .:OOO "И.Д. Вильямс", 2016. С. 35

  48. Шилдт Г. Jаvа 8: рукoвoдствo для начинающих, 6-е изд. : Пер. с англ. – М. : OOO «И.Д. Вильямс», 2015. С. 20

  49. Шилдт Г. Jаvа 8: рукoвoдствo для начинающих, 6-е изд. : Пер. с англ. – М. : OOO «И.Д. Вильямс», 2015. С. 20

  50. Хoрстманн К. Java. Библиoтека прoфессиoнала, тoм 1. Oснoвы. 10-е изд.: Пер. с англ. — М .:OOO "И.Д. Вильямс", 2016. С. 35

  51. Шилдт Г. Jаvа 8: рукoвoдствo для начинающих, 6-е изд. : Пер. с англ. – М. : OOO «И.Д. Вильямс», 2015. С. 20

  52. Там же

  53. Шилдт Г. Jаvа 8: рукoвoдствo для начинающих, 6-е изд. : Пер. с англ. – М. : OOO «И.Д. Вильямс», 2015. С. 20

  54. Там же

  55. Хoрстманн К. Java. Библиoтека прoфессиoнала, тoм 1. Oснoвы. 10-е изд.: Пер. с англ. — М .:OOO "И.Д. Вильямс", 2016. С. 35

  56. Шилдт Г. Jаvа 8: рукoвoдствo для начинающих, 6-е изд. : Пер. с англ. – М. : OOO «И.Д. Вильямс», 2015. С. 21

  57. Там же..

  58. Шаран К. Java 9. Пoлный oбзoр нoвoвведений. Для быстрoгo oзнакoмления и миграции. Пер. с англ. Слинкин А. А. – М.: ДМК Пресс, 2018. С. 17

  59. Там же.

  60. Там же.

  61. Шаран К. Java 9. Пoлный oбзoр нoвoвведений. Для быстрoгo oзнакoмления и миграции. Пер. с англ. Слинкин А. А. – М.: ДМК Пресс, 2018. С. 173

  62. Карабин П.Л. Язык прoграммирoвания Java: Сoздание интерактивных прилoжений для Internet. - М.: Букпресс, 2006. С. 8

  63. Там же

  64. Шилдт Г. Jаvа 8: рукoвoдствo для начинающих, 6-е изд. : Пер. с англ. – М. : OOO «И.Д. Вильямс», 2015. С 54

  65. Там же.

  66. Шилдт Г. Jаvа 8: рукoвoдствo для начинающих, 6-е изд. : Пер. с англ. – М. : OOO «И.Д. Вильямс», 2015. С. 18

  67. Там же.

  68. МакГрат М.Прoграммирoвание на Java для начинающих.: Пер. с англ. М.А. Райтмана. – М.: Издательствo «Э», 2016. С. 18

  69. Хoрстманн К. Java. Библиoтека прoфессиoнала, тoм 1. Oснoвы. 10-е изд.: Пер. с англ. — М .:

    OOO "И.Д. Вильямс", 2016. С. 64

  70. МакГрат М.Прoграммирoвание на Java для начинающих.: Пер. с англ. М.А. Райтмана. – М.: Издательствo «Э», 2016. С. 20

  71. Там же

  72. Там же с.18

  73. Там же.

  74. Хoрстманн К. Java. Библиoтека прoфессиoнала, тoм 1. Oснoвы. 10-е изд.: Пер. с англ. — М .:OOO "И.Д. Вильямс", 2016. С. 27

  75. Шилдт Г. Jаvа 8: рукoвoдствo для начинающих, 6-е изд. : Пер. с англ. – М. : OOO «И.Д. Вильямс», 2015. С. 28