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

История возникновения и развития языка программирования C++ и Java (Происхождение языка Java)

Содержание:

Введение

В наши дни значение информационных технологий приняло колоссальные размеры. Представить повседневную жизнь без компьютера и интернета на сегодняшний момент весьма сложно. Но все гаджеты, которые помогают нам дома и на работе, используют программы, для создания которых необходимы языки программирования. В современном мире программист является очень важной и востребованной профессией. Роль ее растет и будет расти в ближайшие годы очень динамично. Этим обусловлена актуальность темы работы. Прогресс компьютерных технологий заставлял людей придумывать и разрабатывать новые системы для записи более продвинутых алгоритмов. Эти системы и есть языки программирования. У языка программирования две цели: дать программисту аппарат для того, чтобы задать определенные для выполнения действия, и сформировать концепции, которые программист будет использовать для выполнения этих действий. Для того, чтобы объединить обе этих цели в себе, язык программирования должен быть одновременно «близким к машине» и «близким к решаемой задаче», чтобы программист легко использовал все основные машинные аспекты и чтобы концепция решения задачи могла быть выражена доступной для понимания. Java и C++ можно рассматривать как два языка-потомка C, разработанных из различных соображений и пошедших, вследствие этого, по разным путям. Отличия языков привели к ожесточенным спорам между сторонниками двух языков о том, какой из них лучше. Но в целом большинство программистов считают, что C++ и Java не являются конкурентами, так как применяются в разных областях. При этом языки очень похожи друг на друга настолько, что если вы изучаете один из них, то вы автоматически усваиваете 90% другого.

Цель работы:

Изучить историю возникновения и развития языка программирования C++ и Java.

Чтобы достичь указанную цель, необходимо следующее:

  • изучить источники информации по указанной теме;
  • узнать историю языков C++ и Java;
  • рассмотреть развитие языков C++ и Java/

Объект исследования:

Языки программирования C++ и Java.

Предмет исследования:

История, структура, польза, потенциал C++ и Java

Глава 1. История возникновения и развитие языка Java.

1.1 Происхождение языка Java

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

1.2 Начало зарождения современного языка программирования: язык С

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

между простотой использования и предоставляемыми возможностями;

между безопасностью и эффективностью;

между устойчивостью и расширяемостью.

До появления языка С программистам, как правило, приходилось выбирать между языками, которые позволяли оптимизировать тот или иной набор характеристик. Например, хотя FORTRAN можно было использовать при написании достаточно эффективных программ для научных приложений, он не очень подходил для создания системного кода. Аналогично, в то время как язык BASIC был очень прост в изучении, он предоставлял не очень много функциональных возможностей, а его недостаточная структурированность ставила под сомнение его полезность при создании крупных программ. Язык ассемблера можно использовать для создания очень эффективных программ, но его трудно изучать и эффективно использовать, не говоря уже о том, что отладка ассемблерного кода часто оказывается весьма сложной задачей. Также свою роль сыграло то, что ранние языки программирования, такие как BASIC, COBOL и FORTRAN, были спроектированы без учета принципов структурирования. Основными средствами управления программой в них были операторы безусловного перехода GOTO. В результате программы, созданные с применением этих языков, тяготели к созданию так называемого “макаронного кода” — множества запутанных переходов и условных ветвей, которые делали программу буквально недоступной для понимания. Хотя такие языки как Pascal и структурированы, они не были предназначены для создания максимально эффективных программ и были лишены многих важных функций, необходимых для применения этих языков к написанию широкого круга программ. (В частности, учитывая существование нескольких стандартных диалектов Pascal, было нецелесообразно применять этот язык для создания кода системного уровня.)

Таким образом, непосредственно перед изобретением языка С, несмотря на затраченные усилия, ни одному существующему на тот момент языку не удалось решить существующие конфликты. Вместе с тем потребность в таком языке становилась все более насущной. В начале 70-х гг. началась компьютерная революция, и потребность в программном обеспечении быстро превысила возможности программистов по его созданию. В академических кругах большие усилия были приложены к созданию более совершенного языка программирования. Но появился и еще один важдный фактор: компьютеры, наконец, получили достаточно широкое распространение, чтобы была достигнута “критическая масса”. Благодаря тому, что компьютеры больше не находились за закрытыми дверьми, программисты получили практически неограниченный доступ к ним, что позволило экспериментировать вволю. Накануне создания языка С произошел качественный скачок в области компьютерных языков.

Язык C был изобретен и впервые реализован Деннисом Ритчи в 1972 году на компьютере DEC PDP-11, работающем под управлением операционной системы UNIX. Язык С явился результатом процесса разработки, начавшегося с предшествующего языка BCPL, разработанного Мартином Ричардсом. BCPL повлиял на язык, получивший название В, который был изобретен Кеном Томпсоном и в начале 70-х гг. привел к появлению языка С. Основным достоинством языка Си по сравнению с языками BCPL и Би является введение в него типов данных. В течение долгих лет фактическим стандартом языка С была его версия, которая поставлялась с операционной системой UNIX. Язык С был формально стандартизован в декабре 1989 г., когда Национальный институт стандартизации США (American National Standards Institute — ANSI) принял стандарт С.

Многие считают, что создание языка С – это начало современного этапа развития компьютерных языков. Он успешно объединил конфликтующие компоненты, которые доставляли столько неприятностей в предшествующих языках. Результатом явился мощный, гибкий, структурированный язык, изучение которого было сравнительно простым. Кроме того, ему была присуща еще одна, почти непостижимая особенность: он был языком программиста. До появления С языки программирования проектировались в основном либо в качестве академических упражнений, либо бюрократическими организациями. Но язык C был совсем из другой категории. Он был спроектирован, реализован и разработан действительно работающими программистами и отражал их подход к программированию. Его функции были отлажены, проверены и многократно переработаны людьми, которые действительно использовали этот язык. Поэтому язык C по-настоящему нравился программистам в использовании. Он быстро приобрел много приверженцев, которые не могли поверить своему счастью. Поэтому язык С получил быстрое и широкое признание в программистском сообществе. Если говорить коротко: язык C был разработан программистами для программистов. Эту особенность унаследовал и Java.

1.3 Следующая ступень: C++

В конце 70-х-начале 80-х гг. язык С стал превалирующим компьютерным языком программирования, и он продолжает широко применяться и в настоящее время. Но несмотря на все достоинства C, он не мог решить проблему, которая нарастала все больше. На протяжении всей истории развития программирования всевозрастающая сложность программ порождала потребность в более совершенных способах преодоления этой сложности. Язык C++ явился ответом на эту потребность. Чтобы лучше понять, почему потребность преодоления сложности программ является главной побудительной причиной создания языка C++, рассмотрим следующие факторы.

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

Первым языком программирования, который получил широкое распространение, был, конечно же, FORTRAN. Хотя этот язык и явился первым впечатляющим шагом, его вряд ли можно считать языком, который способствует созданию четких и легких для понимания программ. 60-е гг. знаменовались рождением структурного программирования. Этот метод программирования наиболее ярко проявился в таких языках, как С. Использование структурированных языков впервые предоставило программистам возможность достаточно легко создавать программы средней сложности. Однако даже при использовании методов структурного программирования по достижении проектом определенного размера его сложность начинала превышать ту, с которой программист мог справиться. К началу 80-х гг. сложность многих проектов начала превышать ту, с которой можно было справиться с использованием структурного подхода. Для решения этой проблемы был изобретен новый способ программирования, получивший название объектно-ориентированного программирования (ООП). Объектно-ориентированное программирование подробно рассматривается в последующих главах этой книги, но мы все же приведем краткое определение: ООП — это методология программирования, которая помогает организовывать сложные программы за счет использования наследования, инкапсуляции и полиморфизма. 

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

1.4 Предпосылки создания языка Java

К концу 80-х-началу 90-х гг. объектно-ориентированное программирование с применением языка C++ стало основным методом программирования. Действительно, в течение некоторого непродолжительного времени казалось, что программисты, наконец, изобрели идеальный язык. Поскольку язык C++ сочетал в себе высокую эффективность и стилистические элементы языка С с объектно- ориентированным подходом, этот язык можно было использовать для создания самого широкого круга программ. Однако, как и в прошлом, уже вызревали факторы, которые должны были, в который раз, стимулировать развитие компьютерных языков. Пройдет еще несколько лет, и World Wide Web и Интернет достигнут критической массы. Это приведет к еще одной революции в программировании.

1.5 Создание языка Java

Начало разработке языка Java было положено в 1991 г. Джеймсом Гослингом (James Gosling), Патриком Нотоном (Patrick Naughton), Крисом Вартом (Chris Warth), Эдом Франком (Ed Frank) и Майком Шериданом (Mike Sheridan), работавшими в компании Sun Microsystems, Inc. Разработка первой работающей версии заняла 18 месяцев. Вначале язык получил название “Oak” (“Дуб”), но в 1995 г. он  был переименован в “Java”. Между первой реализацией языка Oak в конце 1992 г. и публичным объявлением о создании Java весной 1995 г. множество других людей приняли участие в проектировании и развитии этого языка. Билл Джой (Bill Joy), Артур ван Хофф (Arthur van Hoff), Джонатан Пэйн (Jonathan Payne), Франк Иеллин (Frank Yellin) и Тим Линдхольм (Tim Lindholm) внесли основной вклад в развитие исходного прототипа. 

Как ни странно, первоначальной побудительной причиной создания языка Java послужил вовсе не Интернет! Основная причина — потребность в независящем от платформы (т.е. архитектурно нейтральном) языке, который можно было бы использовать для создания программного обеспечения, встраиваемого в различные бытовые электронные устройства, такие как микроволновые печи и устройства дистанционного управления. Как ни трудно догадаться, в качестве контроллеров используется множество различных типов процессоров. Проблема применения языков С и C++ (как и большинства других языков) состоит в том, что написанные на них программы должны компилироваться для конкретной платформы. Хотя программы C++ могут быть скомпилированы практически для любого типа процессора, для этого требуется наличие полного компилятора C++, предназначенного для данного процессора. Проблема в том, что создание компиляторов обходится дорого и требует значительного времени. Поэтому требовалось более простое и экономически выгодное решение. Пытаясь найти такое решение, Гослинг и другие начали работу над переносимым, не зависящим от платформы языком, который можно было бы использовать для создания кода, пригодного для выполнения на различных процессорах в различных средах. Вскоре эти усилия привели к созданию языка Java. 

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

Еще на заре своей карьеры большинство программистов твердо усвоили, что переносимые программы столь же недостижимы, сколь и желанны. В то время как потребность в средстве создания эффективных, переносимых (не зависящих от платформы) программ была почти столь же стара, как и сама отрасль программирования, она отодвигалась на задний план другими, более насущными, проблемами. Более того, поскольку большая часть самого мира компьютеров была разделена на три конкурирующих лагеря Intel, Microsoft и UNIX, большинство программистов оставались запертыми в своих аппаратно-программных “твердынях”, что несколько снижало потребность в переносимом коде. Тем не менее с появлением Интернета и веб старая проблема переносимости снова возникла с еще большей актуальностью. В конце концов, Интернет представляет собой разнообразную и распределенную вселенную, заполненную множеством различных типов компьютеров, операционных систем и процессоров. Несмотря на то что к Интернету подключено множество типов платформ, пользователям желательно, чтобы все они могли выполнять одинаковые программы. То, что в начале было неприятной, но не слишком насущной проблемой, превратилось в потребность первостепенной важности. 

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

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

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

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

1.6 Связь с языком C#

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

Вероятно, наиболее наглядным примером влияния языка Java на программирование служит язык С#. Созданный в компании Microsoft для поддержки инфраструктуры .NET Framework, язык C# тесно связан с Java. Например, оба эти языка используют одинаковый общий синтаксис, поддерживают распределенное программирование и работают с одной и той же объектной моделью. Конечно, между Java и C# существует рад различий, но в целом эти языки “выглядят” очень похожими. На сегодняшний день это “перекрестное опыление” между Java и C# — наилучшее доказательство того, что язык Java коренным образом изменил представление о компьютерных языках и их применении. 

1.7 Создание языка Java

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

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

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

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

1.8 Магия Java: код виртуальной машины

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

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

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

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

Хотя язык Java был задуман в качестве интерпретируемого языка, ничто не препятствует ему выполнять компиляцию кода виртуальной машины в машинозависимый код “на лету” для повышения производительности. Поэтому вскоре после выпуска Java появилась технология HotSpot. Эта технология предоставляет оперативный компилятор (Justin-Time — JIT) кода виртуальной машины. Когда JIT- компилятор является составной частью машины JVM, избранные фрагменты кода виртуальной машины один за другим компилируются в исполняемый код в реальном времени, по соответствующим запросам. Важно понимать, что одновременная компиляция всей программы Java в исполняемый код нецелесообразна, посколькуJava выполняет различные проверки, которые могут быть осуществлены только во время выполнения. Вместо этого во время работы JIT-компилятор компилирует код по мере необходимости. Более того, компилируются не все фрагменты кода виртуальной машины, а только те, которым компиляция принесет выгоду. Остальной код просто интерпретируется. Однако подход JIT-компиляции все же обеспечивает значительное повышение производительности. Даже в случае применения к коду виртуальной машины динамической компиляции, характеристики переносимости и безопасности сохраняются, поскольку машина JVM по-прежнему отвечает за целостность среды исполнения.

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

простота - язык java был задуман в качестве простого в изучении и эффективного в использовании профессиональными программистами языка.;

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

устойчивость - многоплатформенная среда веб предъявляет к программам повышенные требования, поскольку они должны надежно выполняться в разнообразных системах. Так что одним из главных приоритетов при проектировании Java была способность создавать устойчивые программы;

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

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

интерпретируемость и высокая производительность - как уже говорилось, выполняя компиляцию программ в промежуточное представление, называемое кодом виртуальной машины, Java позволяет создавать многоплатформенные программы;

распределенный характер - язык Java предназначен для распределенной среды Интернет, поскольку он поддерживает протоколы семейства TCP/IP;

динамический характер - программы Java несут много информации во время выполнения для проверки правильности обращения к объектам во время выполнения. Это свойство позволяет динамически безопасно связать код. .

1.9 Эволюция языка Java

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

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

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

В Java 2 была добавлена поддержка ряда новых средств, таких как Swing и Collections Framework. Кроме того, были усовершенствованы виртуальная машина Java и различные средства программирования. Из Java 2 был исключен также ряд свойств. Наибольшие изменения претерпел класс потока Thread, в котором методы suspend()resume() и stop() были представлены как устаревшие. 

Версия J2SE 1.3 была первой серьезной модернизацией первоначальной версии Java J2SE. В основном, модернизация заключалась в расширении существующих функциональных возможностей и “уплотнении” среды разработки. В общем случае программы, написанные для версий 1.2 и 1.3, совместимы по исходному коду. Хотя версия 1.3 содержала меньший набор изменений, чем три предшествующие базовые версии, это не делало ее менее важной. 

Версия J2SE 1.4 продолжила совершенствование языка Java. Эта версия содержала несколько важных модернизаций, усовершенствований и добавлений. 4 8 Часть I. Язык Java Например, в нее было добавлено новое ключевое слово assert , цепочки исключений и подсистема ввода-вывода на основе каналов. Изменения были внесены и в инфраструктуру Collections Framework, и сетевые классы. Эта версия содержала также множество небольших изменений. Несмотря на значительное количество новых функциональных возможностей, версия 1.4 сохранила почти стопроцентную совместимость по исходному коду с предшествующими версиями. 

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

обобщения;

аннотации;

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

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

усовершенствованный, поддерживающий стиль for - each , цикл for;

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

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

форматированный ввод-вывод;

утилиты параллельной обработки.

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

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

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

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

1.10 Java сегодня

Мир стоит на пороге четвёртой промышленной революции. Индустрия 4.0. ознаменуется массовым внедрением искусственного интеллекта в нашу жизнь. Человеческий труд уступит место машинному: по прогнозам в ближайшие 20 лет более 40 % рабочих мест будет автоматизировано. Но появятся и новые специальности, связанные с обслуживанием работы машин. Наступает эра IT, где владение языками программирования — гарантия стабильности. Какой язык выбрать? Эксперты уверены: Java будет востребован ещё не одно десятилетие. 

Семь перспективных направлений, в которых без Java не обойтись:

1. Android-приложения

Хотите писать под Android? Учите Java.

2. Финансовые услуги

Мировые инвестиционные банки используют Java для обработки данных, написания серверных приложений, создания фронтэнда и бэкенда.

Так же поступают трейдеры. Например, на этом языке написано популярное приложение «Murex».

3. Веб-приложения

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

4. Программные средства

Такие приложения, как Eclipse, IntelliJ Idea, Netbeans IDE воплощены в жизнь благодаря Java.

5. Встраиваемые системы

Эта сфера — «родина» Java. Язык разрабатывался для встраиваемых систем под лозунгом: «пиши один раз, запускай где угодно». Люди стремятся упрощать жизнь, и Java делает это возможным. Сфера применения широка: от мобильных телефонов и бытовой техники до систем управления предприятиями. Директор по маркетингу компании Microtec уверен: Java только набирает обороты на рынке встраиваемых систем и вскоре получит широкое распространение.

6. Большие данные

Пока Java не доминирует в этой области, но у него есть все шансы вырваться вперёд. Это случится, если Hadoop или ElasticSearch расширятся.

7. Наука

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

Дальше — больше: идут работы над нейроинтерфейсами для «управления мыслями» и передачи ощущений на расстояние. Это возможно благодаря дополненной реальности. Чтобы попасть в неё, достаточно смартфона и специальных очков. Пока такое общение напоминает компьютерную игру, внутри которой вы находитесь. Но это только начало.

Для достижения целей потребуются разные языки программирования: кроме Java, эксперты делают ставку на R, Erlang, Go и Swift. Вероятно, появятся и новые языки, но они ещё долго будут играть вспомогательную роль. История Java началась ещё в 1990 году и всё это время язык совершенствовался. Сегодня Java — самый востребованный язык программирования в мире.

Глава 2. Происхождение и развитие языка C++

2.1 Происхождение языка C++

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

Язык C++ был изобретен Бьярне Страуструпом в 1979 г. во время его работы в компании Bell Laboratories в городе Мюррей-Хилл, шт. Нью-Джерси. Вначале Страуструп назвал новый язык “С with Classes” (“С с классами”). Однако в 1983 г. это название было изменено на C++. Поскольку язык C++ построен на основе С, он поддерживает все его возможности, атрибуты и преимущества. Это обстоятельство явилось главной причиной успешного распространения C++ в качестве языка программирования. Само изобретения языка C++ было задумано не как появление нового языка, а как усовершенствование уже существующего. Название же языка можно трактовать как увеличенный или расширенный язык C (имея ввиду операцию инкрементирования языка C).

Язык C по мнению Страуструпа являлся лучшей основой для создания нового языка программирования, так как он универсален, прост, переносим, быстр и функционален в исполнении многих задач, стыкуется со средой программирования UNIX. Страуструп добавил к С возможность работы с типами данных (классами) и объектами. Благодаря быстродействию С практические задачи моделирования оказались доступными для решения по времени разработки и вычислений. В первую очередь в C были добавлены типы данных, их наследование, проверка типов и аргументы по умолчанию. Первые версии языка, изначально называвшегося Си с классами, стали доступны с 1980 года. Затем Страуструп создал компилятор cfront, который перерабатывал код С++ в код простого С, что позволило сразу применять его на практике.

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

2.2 Развитие языка C++

С++ быстро стал невероятно популярен. К 1983 году в него были добавлены различные константы, виртуальные функции, ссылки, перегрузка функций и операторов, контроль пользователя над управлением свободной памятью, улучшенная проверка типов и новый стиль комментариев //. В 1985 году вышло издание Языка программирования C++, это было первое описание языка, что из-за отсутствия официального стандарта было очень важно. В 1989 году состоялся выход второй версии C с новыми возможностями наследования, функциями и классами. В 1998 году был утвержден международный стандарт языка C++. Он является свободным, никто не обладает правом на владение им.

Стандарт C++ состоит из двух основных частей: описание стандартного сборника подпрограмм или объектов, используемых для разработки программ, и описание ядра языка. Кроме того, что в программах на C++ можно использовать многие библиотеки C, существует еще огромное количество нестандартных библиотек C++ .

В 1985 году произошел первый коммерческий выпуск C++ и язык приобрел современное название. А уже в следующем году вышло первое издание книги Страуструпа «The C++ Programming Language»

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

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

В 1989 году вышла новая версия языка C++: 2.0. В нее вошли такие новшества, как множественное наследование, абстрактные классы, статические функции-члены, функции-константы и защищенные члены.

Работа по стандартизации C++, которая началась в конце 1989 году, осложнялась тем, что язык долгое время был открыт для расширений. Формулировки правил ARM были недостаточно конкретны, а потому часто требовали уточнений. В итоге язык стал довольно громоздким, и сейчас ни один человек не может точно запомнить все его детали и тонкости. Также с момента стандартизации сама идеология C++ изменилась. Если изначально возможность использования средств динамического определения типов (rtti) отвергалась самим автором языка, то в текущем проекте стандарта эти средства есть.

Одним из важнейших этапов в развитии языка стала публикация в 1990 году его подробного описания, которое назвали «Комментированное справочное руководство по C++». Сокращенно эту книгу часто называют ARM. Впоследствии она была положена в основу стандарта.

Вместе с самим C++ развивалась и его стандартная библиотека. Сначала к стандартной библиотеке добавили потоки ввода-вывода, которые позволяют получить средства, заменяющие традиционные функции C printf и scanf. А позже в стандартную библиотеку включили Стандартную библиотеку шаблонов, что стало самым значительным этапом в ее развитии.

В 1998 году был опубликован стандарт языка ISO/IEC 14882:1998 (известный как C++98),[8] разработанный комитетом по стандартизации C++ (ISO/IEC JTC1/SC22/WG21 working group). Стандарт C++ не описывает способы именования объектов, некоторые детали обработки исключений и другие возможности, связанные с деталями реализации, что делает несовместимым объектный код, созданный различными компиляторами. Однако для этого третьими лицами создано множество стандартов для конкретных архитектур и операционных систем.

В 2003 году был опубликован стандарт языка ISO/IEC 14882:2003, где были исправлены выявленные ошибки и недочёты предыдущей версии стандарта. 

В 2005 году был выпущен отчёт Library Technical Report 1 (кратко называемый TR1). Данный отчет не является официально частью стандарта, но описывает расширения стандартной библиотеки, которые, как ожидалось авторами, должны быть включены в следующую версию языка C++. На данном этап стала улучшаться степень поддержки TR1 практически во всех поддерживаемых компиляторах языка C++. 

С 2009 года велась работа по обновлению предыдущего стандарта, предварительной версией нового стандарта сперва был C++09, а спустя год C++0x. В итоге в 2011 году вышел новый стандарт C++11, куда были включены дополнения в ядро языка и расширение стандартной библиотеки, в том числе большая часть TR1. 

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

Новшества стандарта C++11.

  • auto: в C++11 auto позволяет не указывать тип переменной явно; компилятор сам определяет тип исходя из типа инициализируемого значения;
  • nullptr: ключевое слово nullptr имеет свой собственный тип std:nullptr_t, что позволяет избежать проблем, которые возникали из-за используемого ранее макроса NULL (который является нулем, т.е. целым типом);
  • новые идентификаторы: override и final, которые позволили избавиться от ошибок, связанные с использованием виртуальных функций и переопределения;
  • strongly-typed enums: новая категория перечислений в C++11 помогла устранить проблемы, которые возникали при экспорте значений перечислений в окружающую область видимости (из-за чего происходил конфликт имен), при преобразовании перечислений в целый тип (т.е. они не могли иметь определенный пользователем тип).
    Новые перечисления определяются ключевым словом enum class. Они больше не экспортируют свои перечисляемые значения в окружающую область видимости, больше не преобразуются неявно в целый тип и могут иметь определенный пользователем тип (эта опция так же добавлена и для «традиционных» перечислений").;
  • интеллектуальные указатели: особенную ценность получили указатели с подсчетом ссылок и автоматическим освобождением памяти;
  • лямбда-выражения;
  • функции begin() и end(), которые работают со всеми контейнерами STL и могут быть расширены для работы с любым типом;
  • static_assert: проверяет утверждение во время компиляции;
  • семантика перемещения: 1 пример: позволяет изменять rvalue(объект, у которого нет имени), что раньше считалось невозможным, 2 пример: конструктор копирования выполняет поразрядное копирование переменных.

2.3 C++ сегодня

В 80-х годах C++ был единственным популярным языком программирования. Со временем C# и Java поглотили корпоративный сектор, а Python, Ruby, PHP заняли web-сектор.

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

После стандарта C++11 появились также C++14 и C++17, которые демонстрируют мощь, производительность, библиотеки и инструменты, необходимые для массовых ферм серверов, а также мобильных приложений с низким уровнем следа.

Заключение

Java и C++ можно рассматривать как два языка-потомка C. Но поскольку разработаны они были из разных соображений и по разным причинам, то и развивались они по разным путям.

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

Язык Java создавался несколько лет и благодаря ему был совершен прорыв в информационных технологиях. Этот типичный объектно-ориентированный язык имеет широкое применение. На нем работают телефоны, медицинские устройства, принтеры, приставки и многое другое.

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

Список литературы

  1. Берд Барри. Java для чайников / Барри Берд. - М.: Диалектика / Вильямс, 2013. - 521 c.
  2. Грэхем Иан. Объектно-ориентированные методы. Принципы и практика. – 3-е изд.- М.: «Вильямс», 2004.800 с.
  3. Дейтел П.Дж., Дейтел Х.М. Как программировать на C++. Введение в объектно-ориентированное проектирование с использованием UML./ Пер. с англ. – М.: Издательство <Бином>, 2009. 1454 с.
  4. Подбельский В.В. Язык C++: Учебное пособие. - Москва: Финансы и статистика, 1995. 560с.
  5. Секунов Н. Самоучитель Visual C++6. изд. «БХВ-Петербург», Санкт-Петербург, 2003. 925 с.
  6. Страуструп Б. Язык программирования С++. Специальное издание. — М.: Издательство «БИНОМ», 2001.
  7. Страуструп Б. Программирование: принципы и практика использования С++.: Пер. с англ. – М. ООО «И.Д.Вильямс», 2011. – 1248 с.
  8. Фридман А.Л. Основы объектно-ориентированного программирования на языке C++: Учебный курс. – М.: Радио и связь, 1999. – 208 с.
  9. Хабибулин И.Ш. Самоучитель Java 2. СПБ.: БХВ-Петербург, 2007.720 с.
  10. Шилдт Г. Самоучитель C++: Пер. с англ. - Санкт-Петербург: BHV-Санкт-Петербург, 1998. 620с.
  11. Шилдт, Г. Java 8. Руководство для начинающих / Герберт Шилдт. - М.: Вильямс, 2015. - 720 c.
  12. Эккель Б. Философия Java. Библиотека программиста. СПБ.: Питер, 2001. 640 с.