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

История возникновения и развития языка программирования Си (С++) и Java (История возникновения и развития языка программирования c++ 5)

Содержание:

ВВЕДЕНИЕ

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

Язык Си в настоящее время является стандартным базовым языком. С него начинают знакомство с программирование студенты первых курсов вузов. И к тому же, синтаксис многих современных языков, берет свое начало, именно в языке Си, например, Java, C++. Язык программирования С++, же, был создан для того чтобы улучшить язык Си – поддержать абстракцию и обеспечить объектно-ориентированное программирование (ООП). Язык Java – так же язык чистого объектно-ориентированного программирования (ООП), который сегодня часто используют при создании сайтов, клиент-серверных приложений.

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

Актуальность данной курсовой работы заключается в том, что объектно-ориентированное программирование (ООП) на сегодня является доминирующей методологией программирования. Рост такой популярности обеспечили: создание языка С++, популярность использования графических интерфейсов пользователя. На сегодняшних день наиболее успешным коммерческим языком объектно-ориентированного программирования (ООП) можно назвать Java, который демонстрирует превосходство ООП. Поэтому, я считаю необходимым изучить историю возникновения и развития данных языков С++ и Java.

Цель данной работы: Изучить историю возникновения, структуру и развития языков программирования Си (C++) и Java. 

Для достижения данной цели, мною были поставлены следующие задачи:

- Изучить литературу по поставленной теме;

- Узнать и разобраться в истории языков Си (С++) и Java;

- Рассмотреть структуру и развитие языков программирования Си(С++) и Java.

Объект данного исследования: Языки программирования Си (C++) и Java. 

Предмет данного исследования: История, структура, развитие, эффективность языков программирования Си (C++) и Java. 

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

ГЛАВА 1. ИСТОРИЯ ВОЗНИКНОВЕНИЯ И РАЗВИТИЯ ЯЗЫКА ПРОГРАММИРОВАНИЯ C++

1.1 Возникновение и эволюция языка C+ + 

Первые версии языка программирования С++ (тогда он назывался "Си с классами") были разработаны в начале 80-х годов Бьерном Страуструпом, сотрудником знаменитой AT&T Bell Labs, где ранее были разработаны такие шедевры программирования, как операционная система UNIX и язык программирования Си. Он получил звание магистра математики и вычислительной техники в университете г. Аарус (Дания), а докторское звание по вычислительной технике в университете Кембридж (Англия). Он специализируется в области распределенных систем, операционных систем, моделирования и программирования. Вместе с М. А. Эллис он является автором полного руководства по языку С++ - «Руководство по С++ с примечаниями» [10].

Безусловно С++ многим обязан языку Си [16], который сохраняется как его подмножество. Сохранены и все свойственные Си средства низкого уровня, предназначенные для решения самых насущных задач системного программирования. Си, в свою очередь, многим обязан своему предшественнику языку BCPL [14]. Комментарий языка BCPL был восстановлен в С++. Еще одним источником вдохновения был язык SIMULA-67 []; именно из него была заимствована концепция классов (вместе c производными классами и виртуальными функциями). Возможность в С++ перегрузки операций и свобода размещения описаний всюду, где может встречаться оператор, напоминают язык Алгол-68 [10].

Как это принято в AT&T, описание нового языка не было опубликовано сразу. Первыми его пользователями стали сами сотрудники Bell Labs. В 1993 впервые была реализована коммерческий транслятор, и сам язык был назван «С++», что можно (имея в виду операцию инкрементирования языка Си) трактовать как увеличенный или расширенный язык Си.

Первым транслятором языка был препроцессор cfront, транслирующий программу на С++ в эквивалентную программу на Си. И только в конце 80-х годов были реализованы прямые трансляторы, не использующие Си в качестве промежуточного языка. Если не считать документацию к транслятору cfront, первой книгой с описанием языка стала «The C++ Programming Language» (Addison-Wesley, 1985), переведенная на русский язык и изданная в 1991 году (Страуструп Б. Язык программирования С++. М.: Радио и Связь, 1991) [19].

С этого момента началось его бурное распространение и создание многочисленных реализаций.

Модель реализации ООП была частично позаимствована из языка программирования Simula67 и ориентировалась в основном на возможность эффективной реализации на вычислительных машинах со стандартной архитектурой. Некоторые возможности языка Simula67 были отклонены, так как, по мнению автора С++, подталкивали разработчика к плохому стилю программирования. Так, в первых версиях С++ полностью отсутствовала возможность динамической идентификации типа объекта (run-time type identification, rtti). Основные концепции поддержки ООП в С++ были изложены Страуструпом в статье «What is Object Oriented Programming» [16].

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

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

Примерно в 1987 г. стало очевидно, что работа по стандартизации С++ неизбежна и что следует незамедлительно приступить к созданию основы для нее [14]. Инициатором стандартизации выступил не автор языка. Более того, Страуструп всегда довольно прохладно относился к попытке его полной стандартизации и выступал за реализации, в которых базовые возможности языка расширялись бы средствами и библиотеками, характерными только для данной реализации.

Объединенный ANSI-ISO комитет начал функционировать в конце 1989 года. Целью его работы являлось создание единого стандарта для языка С++ и его библиотечных средств. Работа по стандартизации С++ осложнялась тем, что язык долгое время был открыт для расширений.

В 1998 году был выпущен первый ратифицирован международный стандарт языка C++: ISO/IEC 14882:1998 «Standard for the C++ Programming Language» [11].

В 2003 году был опубликован стандарт языка ISO/IEC 14882:2003, где были исправлены выявленные ошибки и недочёты предыдущей версии стандарта. А в 2005 выпустили отчёт Library Technical Report 1 (TR1). Не являясь официально частью стандарта, отчёт описывал расширения стандартной библиотеки, которые должны быть включены в следующую версию языка C++ [19].

В 2011 году вышел нового стандарта – C++11 или ISO/IEC 14882:2011; новый стандарт включил дополнения в ядре языка и расширение стандартной библиотеки, в том числе большую часть TR1. В 2014 году ознаменовался выходом стандарта C++14 («International Standard ISO/IEC 14882:2014(E) Programming Language C++»); C++14 можно рассматривать как небольшое расширение над C++11, содержащее в основном исправления ошибок и небольшие улучшения [19].

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

1.2 Структура и эффективность C++ 

C++ был развит из языка программирования Cи и за очень немногими исключениями сохраняет Cи как подмножество. Базовый язык, Cи подмножество C++, спроектирован так, что имеется очень близкое соответствие между его типами, операциями и операторами и компьютерными объектами, с которыми непосредственно приходится иметь дело: числами, символами и адресами. За исключением операций свободной памяти new и delete, отдельные выражения и операторы C++ обычно не нуждаются в скрытой поддержке во время выполнения или подпрограммах [1]. 

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

Одним из первоначальных предназначений Cи было применение его вместо программирования на ассемблере в самых насущных задачах системного программирования. Когда проектировался C++, были приняты меры, чтобы не ставить под угрозу успехи в этой области. Различие между Cи и C++ состоит в первую очередь в степени внимания, уделяемого типам и структурам. Cи выразителен и снисходителен. C++ еще более выразителен, но, чтобы достичь этой выразительности, программист должен уделить больше внимания типам объектов. Когда известны типы объектов, компилятор может правильно обрабатывать выражения, тогда как в противном случае программисту пришлось бы задавать действия с мучительными подробностями. Знание типов объектов также позволяет компилятору обнаруживать ошибки, которые в противном случае остались бы до тестирования. Заметьте, что использование системы типов для того, чтобы получить проверку параметров функций, защитить данные от случайного искажения, задать новые операции и т.д., само по себе не увеличивает расходов по времени выполнения и памяти [4].

Особое внимание, уделенное при разработке C++ структуре, отразилось на возрастании масштаба программ, написанных со времени разработки Cи. Маленькую программу (меньше 1000 строк) вы можете заставить работать с помощью грубой силы, даже нарушая все правила хорошего стиля. Для программ больших размеров это не совсем так. Если программа в 10 000 строк имеет плохую структуру, то вы обнаружите, что новые ошибки появляются так же быстро, как удаляются старые [6].

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

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

В начале могут появиться подозрение, что спецификация программы с помощью более подробной системы типов приведет к увеличению исходных текстов программы. В C++ это не так; C++ программа, описывающая типы параметров функций, использующая классы и т.д., обычно немного короче эквивалентной Cи программы, в которой эти средства не используются [8].

Выводы по первой главе:

В первой главе я изучил литературу по истории и развитию языка С++. Как мы узнали, данный язык программирования был разработан еще в начале восьмидесятых годов. И прародителем языка С++ является язык программирования Си. Первое руководство по языку программирования было переведено на русский язык в 1991 году. И с этого момента началось бурное развитие Си++. Многие нововведения в языке Си++ появились благодаря опыту программирования на этом языке, нежели заимствований из других языков. В 1998 году был издан первый международный стандарт языка программирования С++. И вплоть до 2017 года выходили измененный стандарты языка, которые включали в себя нововведения, и изменения в языке.

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

ГЛАВА 2. ИСТОРИЯ ВОЗНИКНОВЕНИЯ И РАЗВИТИЯ ЯЗЫКА ПРОГРАММИРОВАНИЯ JAVA

2.1. Предпосылки и возникновение языка программирования Java

Язык Java близко связан с языком C++, который, в свою очередь, является истинным наследником языка Си. Многие особенности языка Java наследованы от обоих этих языков. От Си язык Java унаследовал свой синтаксис, а многие его объектно-ориентированные свойства были перенесены из C++ [5].

Другими словами, ряд определяющих характеристик Java был заимствован — или разработан в ответ на появившиеся потребности — из его предшественников. Более того, организация языка Java своими корнями уходит глубоко в процесс улучшения и адаптации, который происходит в языках компьютерного программирования на протяжении нескольких десятилетий. К концу 80-х, началу 90-х годов объектно-ориентированное программирование с использованием языка C++ стало основным методом программирования [13].

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

Все же, как и в прошлом, уже зрели факторы, которые должны были, в который раз, стимулировать развитие компьютерных языков. Пройдет еще немного лет, и World Wide Web и Интернет дойдут до критической массы. Это приведет к еще одной революции в программировании.

Начало разработки языка Java было положено в 1991 г. Джеймсом Гослингом (James Gosling), Патриком Нотоном (Patrick Naughton), Крисом Вартом (Chris Warth), Эдом Франком (Ed Frank) и Майком Шериданом (Mike Sheridan), работавшими в компании Sun Microsystems, Inc [13].

Разработка первостепенной работающей версии заняла 18 месяцев. Первоначально язык получил название «Oak» («Дуб»), но в 1995 г.  был переименован в «Java». Между первой реализацией языка Oak в конце 1992 г. и публичным объявлением о создании Java весной 1995 г. множество других людей приняли участие в проектировании и формировании этого языка. Билл Джой (Bill Joy), Артур ван Хофф (Arthur van Hoff), Джонатан Пэйн (Jonathan Payne), Франк Иеллин (Frank Yellin) и Тим Линдхольм (Tim Lindholm) внесли важнейший вклад в развитие исходного прообраза [13]. 

Как ни странно, начальной побудительной причиной создания языка Java послужил совсем не интернет. Главная причина — потребность в независящем от платформы (т.е. архитектурно нейтральном) языке, который можно было бы применить для создания программного обеспечения, встраиваемого в разнообразные бытовые электронные устройства, такие как микроволновки и устройства дистанционного управления. Как не сложно догадаться, в качестве контроллеров используется масса различных типов процессоров [7].

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

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

Примерно в то же время, когда определялись основные характеристики языка Java, на сцену выступил второй, несомненно, более важный фактор, который должен был сыграть решающую роль в судьбе этого языка. Конечно же, этим вторым фактором была World Wide Web [20]. Если бы формирование веб не происходило почти одновременно с реализацией Java, этот язык мог бы остаться полезным, но незамеченным языком программирования бытовых электронных устройств. Но с появлением World Wide Web язык Java вышел на передний рубеж проектирования компьютерных языков, поскольку веб также нуждался в переносимых программах [9].  

Еще на заре своей карьеры большинство программистов твердо усвоили, что переносимые программы столь же недостижимы, сколько и желанны. В то время как потребность в создании эффективных, переносимых (не зависящих от платформы) программ была почти столь же стара, как и сама отрасль программирования, она отодвигалась на задний план другими, более насущными, проблемами. Тем не менее с появлением Интернета и веб старая проблема переносимости снова возникла с еще большей актуальностью. То, что в начале было неприятной, но не слишком насущной проблемой, превратилось в потребность первостепенной важности [20]. 

К 1993 г. членам группы проектирования Java стало очевидно, что проблемы переносимости, часто возникающие при создании кода, предназначенного для встраивания в контроллеры, возникают также и при попытках создания кода для Интернета. Фактически та же проблема, для решения которой в малом масштабе предназначался язык Java, в большем масштабе была актуальна и в среде Интернета [9]. Понимание этого обстоятельства вынудило разработчиков языка Java перенести свое внимание с бытовой электроники на программирование для Интернета. Таким образом, хотя потребность в архитектурно нейтральном языке программирования послужила своего рода “начальной искрой”, Интернет обеспечил крупномасштабный успех Java. 

Как уже упоминалось, язык Java наследует многие из своих характеристик от языков С и C++ [2]. Это сделано намеренно. Разработчики Java знали, что использование знакомого синтаксиса Си и повторение объектно-ориентированных свойств C++ должно было сделать их язык привлекательным для миллионов опытных программистов на С / C++. Помимо внешнего сходства, язык Java использует ряд других атрибутов, которые способствовали успеху языков Си и Cи++. Во-первых, язык Java был спроектирован, проверен и усовершенствован настоящими работающими программистами [5]. Этот язык построен с учетом потребностей и опыта людей, которые его создали. Таким образом, Java — это язык программистов. Во-вторых, Java целостен и логически непротиворечив. В-третьих, если не учитывать ограничения, накладываемые средой Интернета, Java предоставляет программисту полный контроль над программой. Если программирование выполняется правильно, это непосредственно отражается в программах. В равной степени справедливо и обратное. Иначе говоря, Java – это язык профессиональных программистов.

Из-за сходства характеристик языков Java и Си, некоторые склонны считать Java просто «версией языка C++ для Интернета». Однако это серьезное заблуждение. Языкy Java присущи значительные практические и концептуальные отличия [9]. Хотя и верно, что язык C++ оказал влияние на характеристики языка Java, но последний не является усовершенствованной версией C++. Например, Java не обладает совместимостью с C++. Конечно, сходство с языком C++ значительно, и в программе Java программист C++ будет чувствовать себя как дома. Вместе с тем, Java не предназначен служить заменой C++. Язык Java предназначен для решения одного набора проблем, а C++ — для решения другого. Еще длительное время оба эти языка неизбежно будут сосуществовать [2]. 

Развитие компьютерных языков обусловлено двумя причинами: необходимостью адаптации к изменениям в среде и необходимостью реализации новых идей в области программирования. Изменением среды, которое обусловило потребность в языке, подобном Java, была потребность в независящих от платформы программах, предназначенных для распространения в Интернете. Однако Java изменяет также подход к написанию программ. В частности, Java углубил и усовершенствовал объектно-ориентированный подход, использованный в C++, добавил в него поддержку многопоточной обработки и предоставил библиотеку, которая упростила доступ к Интернету. Однако столь поразительный успех Java обусловлен не теми или иными его отдельными особенностями, а их совокупностью как языка в целом. Он явился прекрасным ответом на потребности в то время лишь зарождающейся среды в высшей степени распределенных компьютерных систем. В области разработки программ для Интернета язык Java стал тем, чем язык Си был для системного программирования: революционной силой, которая изменила мир [7]. 

2.2 Особенности и эволюция языка программирования Java

Интернет способствовал выдвижению языка Java на передовые рубежи программирования, а язык Java, в свою очередь, оказал сильнейшее влияние на Интернет. Кроме того, что язык Java упростил создание программ для Интернета в целом, он привел к появлению нового типа предназначенных для работы в сетях программ, получивших название аплетов, которые изменили понятие содержимого для сетевой среды [21]. Кроме того, язык Java позволил решить две наиболее острые проблемы программирования, связанные с Интернетом, — переносимость и безопасность.

Аплет — это особый вид программы Java, предназначенный для передачи по Интернету и автоматического выполнения совместимым с Java веб-браузером [20]. Более того, аплет загружается по требованию, без необходимости дальнейшего взаимодействия с пользователем. Аплеты создаются в виде небольших программ. Как правило, они используются для отображения данных, предоставляемых сервером, обработки действий пользователя или выполнения простых функций, которые выполняются локально, а не на сервере. По сути, аплет позволяет перенести ряд функций с сервера на клиент [21]. 

Появление аплетов изменило программирование приложений Интернета, поскольку они расширили совокупность объектов, которые можно свободно перемещать по киберпространству. Такая программа является активным агентом на клиентском компьютере, хотя она и инициируется сервером [13]. 

Как, вероятно, известно, каждая загрузка “обычной” программы сопряжена с риском, поскольку загружаемый код может содержать вирус, “троянского коня” или вредоносный код. Корень проблемы в том, что вредоносный код может выполнить свое “черное” дело, поскольку получает несанкционированный доступ к системным ресурсам. Например, просматривая содержимое локальной файловой системы компьютера, программа вируса может собирать конфиденциальную информацию, такую как номера кредитных карточек, сведения о состоянии банковских счетов и пароли. Для обеспечения безопасности загрузки и выполнения аплетов Java на компьютере клиента было необходимо воспрепятствовать аплетам предпринимать подобные атаки [3]. 

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

Основная особенность, которая позволяет языку Java решать проблемы обеспечения безопасности и переносимости программ, состоит в том, что вывод компилятора Java не является исполняемым кодом. Скорее, он представляет собой так называемый код виртуальной машины. Код виртуальной машины (bytecode) — это в высшей степени оптимизированный набор инструкций, предназначенных для исполнения системой времени выполнения Java, называемой виртуальной машиной Java (Java Virtual Machine — JVM) [12]. Собственно говоря, первоначальная версия JVM разрабатывалась в качестве интерпретатора кода виртуальной машины.

Однако то, что программа Java интерпретируется машиной JVM, помогает решать основные проблемы, связанные с программами, предназначенными для web.

Трансляция программы Java в код виртуальной машины значительно упрощает ее выполнение в широком множестве сред, поскольку на каждой платформе необходимо реализовать только JVM. Как только в данной системе появляется пакет времени выполнения, в ней можно исполнять любую программу Java [13]. 

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

Как ни полезны аплеты, они — всего лишь половина системы «клиент/сервер». Вскоре после появления языка Java стало очевидно, что он может пригодиться и на серверах. В результате появились сервлеты (servlet). Сервлет — это небольшая программа, выполняемая на сервере [18]. Подобно тому как аплеты динамически расширяют функциональные возможности веб-браузера, сервлеты динамически расширяют функциональные возможности веб-сервера. Таким образом, с появлением сервлетов язык Java распространился на оба конца соединения «клиент/сервер». Сервлеты служат для создания динамически генерируемого содержимого, которое затем обслуживает клиента.

Поскольку сервлеты (подобно всем программам Java) компилируются в код виртуальной машины и выполняются машиной JVM, они в высшей степени переносимы. Следовательно, один и тот же сервлет может применяться в различных серверных средах. Единственные необходимые условия для этого — поддержка сервером машины JVM и контейнера сервлета [18].

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

В отличие от большинства других систем программирования, совершенствование которых происходило небольшими, последовательными шагами, язык Java продолжает стремительно развиваться. Уже вскоре после выпуска версии Java 1.0 разработчики создали версию Java 1.1. Добавленные в эту версию функциональные возможности значительно превосходили те, которые можно было ожидать, судя по изменению младшего номера версии. Разработчики добавили много новых библиотечных элементов, переопределили способ обработки событий и изменили конфигурацию многих свойств библиотеки версии 1.0. Кроме того, они отказались от нескольких свойств (признанных устаревшими), которые первоначально были определены в Java 1.0. Таким образом, в версии Java 1.1 были как добавлены новые атрибуты, так и удалены некоторые, определенные в первоначальной спецификации [21]. 

Следующей базовой версией Java стала версия Java 2, где «2» означает «второе поколение». Создание Java 2 явилось знаменательным событием, означавшим начало «современной эры» Java. Первой версии Java 2 был присвоен номер 1.2. Это может казаться несколько странным. Дело в том, что вначале номер относился к внутреннему номеру версии библиотек Java, но затем он был распространен на всю версию в целом. С появлением версии Java 2 компания Sun начала выпускать программное обеспечение Java в виде пакета J2SE (Java 2 Platform Standard Edition — Стандартная версия платформы Java 2), и теперь номера версий применяются к этому продукту [21].  Версия J2SE 1.3 была первой серьезной модернизацией первоначальной версии Java J2SE. В основном, модернизация заключалась в расширении существующих функциональных возможностей и “уплотнении” среды разработки.  Версия J2SE 1.4 продолжила совершенствование языка Java. Эта версия содержала несколько важных модернизаций, усовершенствований и добавлений.

В следующей версии Java, именуемой J2SE 5, был внесен ряд революционных изменений. В отличие от большинства предшествующих модернизаций Java, которые предоставляли важные, но постепенные усовершенствования, J2SE 5 коренным образом расширяет область применения, возможности и диапазон языка [13]. Важность новых функциональных возможностей нашла отражение в примененном номере версии — «5». Если следовать привычной логике, следующим номером версии Java должен был быть 1.5. Однако новые свойства столь значительны, что переход от версии 1.4 к версии 1.5 не отражал бы масштаб внесенных изменений. Поэтому, чтобы подчеркнуть значимость этого события, в компании Sun решили присвоить новой версии номер 5. 

Следующая версия Java получила название SE 6. С выходом этой версии компания Sun решила в очередной раз изменить название платформы Java. В названии была опущена цифра 2. Таким образом, теперь платформа называется Java SE, а официальное название продукта —Java Platform, Standard Edition 6 (Платформа Java, стандартная версия 6). Комплект разработчика Java был назван JDK 6 [12].

Версия Java SE 6 была построена на основе версии J2SE 5 с рядом дальнейших усовершенствований. Она не содержала дополнений к числу основных функций языка Java, но расширяла библиотеки API, добавляя несколько новых пакетов и предоставляя рад усовершенствований времени выполнения. 

Java SE 7, с комплектом разработчика Java JDK 7 и внутренним номером версии 1.7 — первый главный выпуск Java от Sun Microsystems, который был приобретен Oracle (процесс начался в апреле 2009 года и завершился в январе 2010 года). Java SE 7 содержит много новых средств, включая существенные дополнения языка и библиотек API. Усовершенствована система исполнения программ Java, включена также поддержка языков, отличных от Java, но программистам Java больше интересны дополнения в области языка и библиотек [2]. 

На сегодняшний момент разработчики Oracle объявили о выпуске стандарта Java 11 и его реализации JDK (Java Development Kit) с длительным сроком поддержки вплоть до 2026 года. Он полностью совместим с прежними версиями [3]. В обновлении упор сделан на безопасность. В частности, поддерживается протокол TLS 1.3 (RFC 8446), который лишился устаревших криптографических элементов и возможностей. В новом API для разработки HTTP-клиентов поддерживается HTTP/2.0 и WebSockets. Также есть система управления доступом Nestmate. Кроме того, добавлены некоторые экспериментальные функции. Наконец, появилась возможность запуска программ, которые поставляются в виде одного файла с исходным кодом [9].

Прошлая, промежуточная версия стандарта и JDK 10 вышли в марте 2018 года. Набор инструментов для разработки получил три новых варианта виртуальных машин Java, совместное использование классов приложения и поддержку экспериментального JiT-компилятора на Linux / x64 [21].

Выводы по второй главе:

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

Данный язык программирования тесно связан с языком Си++. Java так же базируется на принципах объектно-ориентированного программирования, используют синтаксис языка Си, однако это те языки, которые создавались для решения разного рода задач. Таким образом язык программирования Java изначально решал вопросы написания программ, независимых от платформы, для работы со встраиваемым программным обеспечением для бытовой техники (т.е. обеспечивал переносимость программ). С появлением сети Интернет, язык Java лишь укрепил свои позиции, так как Интернет, также нуждался в написании независимых от платформ программ.

На сегодняшний день язык программирования Java упростил создание программ для сети Интернет, так как данные программы обладают переносимостью и отвечают требованиям безопасности. Были созданы такие программы как аплеты (для работы с клиентом) и сервлеты (для работы с серверами). Так же безопасность и увеличение производительности обеспечивает JVM.

В 2018 году, 25 сентября был выпущен последний, на данный момент, стандарт Java SE 11, который будет иметь поддержку вплоть до 2026 года.

ЗАКЛЮЧЕНИЕ

Изучение специальной литературы по истории возникновения и развития языка программирования Си (С++) и Java позволило нам сделать вывод о значимости данных языков для истории программирования, их достоинствах и недостатках.

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

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

Язык С++ развивался постепенно (примерно с начала 80-х годов), и это развитие основывалось на опыте программирование, с использованием данного языка. Язык долгое время существовал и развивался без стандартизации. Однако, избежать этого ему все же не удалось. И в 1998 году был выпущен первый стандарт С++, и последний стандарт, на данный момент был выпущен в 2017 году, который называется С++17. Если говорить про язык Java, то он же развивался стремительно, вбирая лучшее от языка С++. Начало его разработки было положено в 1991 году, и первый рабочий прототип был готов через 18 месяцев (под названием «Oak», а в 1995 – переименован в «Java»). Первый стандарт Java 1.0, был выпущен уже в 1996 году, последний же стандарт на сегодняшний день Java SE 11, вышел в 2018 году и имеет продолжительную поддержку до 2026 года.

Эти языки имеют свои достоинства и недостатки. Я хочу отразить достоинства каждого из. Так достоинствами языка С++ являются:

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

- Высокая вычислительная производительность (можно работать с памятью на низком уровне).

- Язык С++ поддерживает различные стили программирования (структурное, ООП, обобщенное и т.д.).

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

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

Если говорить про достоинства языка Java, то бесспорно это:

- Наибольшая степень переносимости программ (платформонезависимый язык).

- Огромный выбор стандартных библиотек.

- Поддержка объектно-ориентированного стиля программирования (в Java все является объектом).

- Обеспечение высокой безопасности, производительности.

- Возможность писать многопоточные программы.

- Доступность языка Java (на сегодня у данного языка имеется множество литературы и большое русскоговорящее сообщество).

Таким образом, считаю, что поставленные нами задачи в данной курсовой работе были достигнуты.

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

  1. Аммерааль, Л. STL для программистов на C++ / Л. Аммерааль. – М.: ДМК, 2017. – 239 c.
  2. Атрощенко, Н.А. Преимущественные возможности языка Java для создания веб-проектов // Вестник научных конференции. 2017. N 1-5(17). С. 19-20.
  3. Блох, Д. Java. Эффективное программирование / Д. Блох. – М.: Лори, 2014. – 224 с.
  4. Вандевурд, Д. Шаблоны C++. Справочник разработчика / Д. Вандевурд. – М.: Вильямс, 2019. – 544 c.
  5. Герберт, Ш. Java 2 v5.0 (Tiger). Новые возможности / Ш. Герберт. – М.: СПб: БХВ-Петербург, 2013. – 208 c.
  6. Грегори, К. Использование Visual C++. Специальное издание / К. Грегори. – М.: Издательский дом Вильямс, 2014. – 849 c.
  7. Даконта, М. XML и Java 2 / М. Даконта, А. Саганич. – СПб: Питер, 2016. – 384 c.
  8. Дейтел, Х.М. Как программировать на С++ / Х.М. Дейтел, П.Дж. Дейтел. – М.: Бином; Издание 4-е, 2016. – 653 c.
  9. Достова, А.А. Анализ нововведений в объектно-ориентированном языке программирования Java / А.А. Достова // Актуальные проблемы авиации и космонавтики, раздел Информационные технологии. – 2014. – № 10. – C. 312-313.
  10. Козелл, Е.И. От Си к Си++ / Е.И. Козелл, Л.М. Романовская, Т.В. Русс, и др. – М.: Финансы и статистика, 2017. – 272 c.
  11. Липпман, С. Основы программирования на C++ / С. Липпман. – М.: Вильямс, 2015. – 256 c.
  12. Нотон, П. Java. Справочное руководство. Все, что необходимо для программирования на Java / П. Нотон. – М.: Бином, 2013. – 448 c.
  13. Ноултон, П. Java 2 / П. Ноултон, Г. Шилдт. – М.: СПб: BHV, 2016. – 103 c.
  14. Программирование на языке Си++: учеб. пособие / А.Г. Мурлин, В.А. Мурлина, Н.В. Ефанова, Е.А. Иванова. – Краснодар: КубГАУ, 2016. – 186 с.
  15. Сван, Т. Освоение Borland C++ 5 / Т. Сван. – М.: Диалектика, 2019. – 576 c.
  16. Солдатенко, И.С. Основы программирования на языке Си / И.С. Солдатенко. – Тверь: Тверской государственный университет, 2017. – 159 с.
  17. Халперн, П. Стандартная библиотека С++ / П. Халперн. – М.: Вильямс, 2017. – 336 c.
  18. Холл, М. Сервлеты и JavaServer Pages / М. Холл. – СПб: Питер, 2015. – 496 c.
  19. Шилдт, Г. Полный справочник по C++ / Г. Шилдт. – М.: Вильямс; Издание 4-е, 2016. – 800 c.
  20. Шкарбан, Ф.В. Java – современная среда программирования / Ф.В. Шкарбан // Информационные-компьютерные технологии в экономике, образовании, социальной сфере. – 2017. – № 2(16). – С. 34-38.
  21. Khalid, A. A Programmer’s Guide to Java™ SCJP Certification / A. Khalid. – U.S.: Addison-Wesley, 2014. – 1089 p.