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

История возникновения и развития языка программирования С++ и java

Содержание:

Введение

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

Зачем нужны программы? Современная цивилизация основана на компьютерных программах. Не зная, как работают эти программы, вы будете вынуждены верить в «волшебство», и многие интересные, выгодные и социально полезные сферы деятельности останутся для вас закрытыми. [7, с.25]

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

Цель работы:

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

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

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

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

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

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

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

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

1.1 История возникновения языка Java

Несмотря на все разговоры о Java как языке интернет-программирования, Java в действительности является полноценным языком программирования, способным решить практически все задачи, решаемые на других языках. [12, с. 69]

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

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

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

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

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

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

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

Ключевой проблемой процедурного программирования является то, что программные модули не вполне адекватно отражают сущности реального мира и потому не особенно пригодны для многократного использования. [3, c.67]

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

Язык C++ развился из C, который в свою очередь был создан на основе двух предшествующих языков – BCPL и B. Язык BCPL был создан в 1967 году Мартином Ричардом как язык для написания компиляторов и программного обеспечения операционных систем. Кен Томпсон предусмотрел много возможностей в своем языке B – дубликате BCPL и использовал B для создания ранних версий операционной системы Unix в Bell Laboratories в 1970 году на компьютере DEC PDP-7. И BCPL, и B были «нетипичными» языками – каждый элемент данных занимал одно «слово» в памяти и бремя обработки элемента данных, например, как целого или действительного числа падало на плечи программиста. [7, с.61]

Основным достоинством языка Си по сравнению с языками BCPL и Би является введение в него типов данных. В течение долгих лет фактическим стандартом языка С была его версия, которая поставлялась с операционной системой UNIX. Язык С был формально стандартизован в декабре 1989 г., когда Национальный институт стандартизации США (American National Standards Institute — ANSI) принял стандарт С.

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

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

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

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

Первым языком программирования, который получил широкое распространение, был, конечно же, FORTRAN.

FORTRAN был первым высокоуровневым языком программирования (термин высокоуровневый означает, что язык состоит не из машинных команд, а из инструкций, понятных человеку и близких к естественному языку). Долгое время FORTRAN был единственным языком, применяемым для научных вычислений. [2, c.26]

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

С точки зрения функциональных возможностей на языке С можно решать все задачи, решаемые на FORTRAN, Java и других современных языках программирования. Различие между ними не в возможностях, а в удобстве и простоте работы с большими программами. В этом отношении Java значительно превосходит С. [2, c.26]

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

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

Язык Java был задуман в 1991 году сотрудниками компании Sun Microsystems Джеймсом Гослингом (James Gosling), Патриком Нотоном (Patrick Naughton), Крисом Вартом (Chris Warth), Эдом Франком (Ed Frank) и Майком Шериданом (Mike Sheridan). Первоначально он назывался Oak, но в 1995 году, когда за его продвижение на рынке взялись маркетологи, он был переименован в Java. Как это ни удивительно, на первых порах сами разработчики языка не ставили перед собой задач разработки интернет-приложений. Их целью было создание платформенно-независимого языка, на котором можно было бы писать встраиваемое программное обеспечение для различной бытовой аппаратуры с микропроцессорным управлением, в том числе тостеров, микроволновых печей и пультов дистанционного управления. Как правило, в устройствах подобного типа применялись контроллеры на базе микропроцессоров различной архитектуры, а исполняемый код, генерируемый компиляторами большинства существовавших в то время языков программирования, был ориентирован на определенные типы процессоров. Характерным тому примером может служить язык C++.[11, c.27]

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

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

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

Технология Java развивается очень быстро. Со времени выхода первого издания Java прочно утвердилась на Web-серверах , проникла в сотовые телефоны и другие мобильные устройства. Теперь Java – обязательная часть Web – программирования. [9, c.18] 

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

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

Хотя язык Java пригодится и при построении автономных приложений, самым важным его применением было и остается программирование для сети World Wide Web. [12, c.62]

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

Главный девиз Java –«Написано раз, работает везде». Это делает Java языком, идеальным для распространения кода через интернет. [2, c.26] 

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

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

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

1.2 Эволюция языка программирования Java

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

Вероятно, наиболее наглядным примером влияния языка Java на программирование служит язык С#.

2002 год: компания Microsoft объявила о создании языка C#. Многие средства С# взяты из Java, в результате чего внешне они почти не отличаются один от другого. Однако дальнейшее развитие этих двух конкурентов пошло разными путями. Microsoft добавила и продолжает добавлять в C# огромное количество новых модных средств, утверждая, что их наличие является преимуществом по сравнению с Java.Но в результате этого поднять со стола учебник по С# теперь может только студент атлетического телосложения. [2, c.27]

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

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

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

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

Добиться безопасности и переносимости программ по сети позволяет генерируемый компилятором Java код, не являющийся исполняемым. Такой код называется байт-кодом. Это оптимизированный набор команд, предназначенных для выполнения в исполняющей системе Java, называемой виртуальной машиной Java (Java Virtual Machine - JVM). Виртуальная машина Java, по существу, представляет собой интерпретатор байт-кода. Такой подход может показаться не совсем обычным, поскольку для повышения производительности компиляторы большинства современных языков генерируют исполняемый код. Но выполнение программы под управлением виртуальной машины позволяет разрешить многие затруднения, возникающие в работе веб-приложений. [11, с.30]

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

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

Как правило, интерпретируемая программа выполняется медленнее, чем скомпилированная в машинный код. Но для кода Java отличия в быстродействии не очень существенны. Ведь байт-код оптимизирован, и поэтому программа выполняется под управлением виртуальной машины значительно быстрее, чем следовало ожидать. [11, c.31]

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

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

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

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

При программировании на Java у вас нет выбора: язык вынуждает вас работать только с объектами , как и должно быть в современном объектно-ориентированном мире компьютерных программ. [2, с.30]

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

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

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

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

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

динамический характер - программы 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.3 Современное состояние языка программирования Java

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

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

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

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

2007 год: компания Google утверждает Java в качестве основного языка программирования для мобильных устройств на базе Android. [2, c.27]

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++

Язык Simula был разработан в первой половине 1960-х годов Кристеном Нюгордом (Kristen Nygaard) и Оле-Йоханом Далем (Ole-Johan Dahl) в Норвежском вычислительном центре (Norwegian Computing Center) и университете Осло (Oslo University). Язык Simula несомненно принадлежит семейству языков Algol. Фактически язык Simula является практически полным надмножеством языка Algol-60. Однако мы уделили особое внимание языку Simula, потому что он является источником большинства фундаментальных идей, которые сегодня называют объектно-ориентированным программированием. Он был первым языком, в котором реализованы наследование и виртуальные функции. Слова class для пользовательского типа и virtual для функции, которую можно заместить и вызвать с помощью интерфейса базового класса, пришли в С++ из языка Simula. [7, с.833]

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

Чтобы узнать одну из основных причин актуальности C++, можно обратиться к книге Г.Шилдта «С++: Базовый курс».

Если на вашем компьютере установлена система Windows, и ваша цель – создание Windows-ориентированных программ, вы сделали правильный выбор, решив изучать C++, поскольку C++ - это родной язык для Windows. [10, c.18]

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

Название С++ было придумано Риком Маскитти летом 1983г. Это название отражает эволюционный характер изменений языка С. Обозначение ++ относится к операции наращивания С. Чуть более короткое имя С+ является синтаксической ошибкой. Кроме того, оно уже было использовано как название совсем другого языка. Знатоки семантики С находят, что С++ хуже, чем ++С. Язык не получил название D, поскольку он является расширением С, и в нем не делается попыток решить какие-либо проблемы за счет отказа от возможностей С. [6, c.14]

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

Наиболее значительным событием в истории языка C++ спустя десять лет после его появления стала стандартная библиотека контейнеров и алгоритмов – STL. [7, c.841]

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

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

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

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

Непосредственный предшественник C++ - язык C с классами – появился в 1979 году, а в 1997 году был принят международный стандарт C++, который фактически подвел итоги его 20-летнего развития. Принятие стандарта обеспечило единообразие всех реализаций языка C++. [8, c.13]

В 1998 году стандарт языка ISO/IEC 14882:1998 (известный как C++98) был опубликован.

Работы над «Стандартом» велись в течение нескольких лет, и его промежуточные варианты были постоянно доступны для пользователей языка и для авторов компиляторов. Это привело к замечательному результату: не произошло задержки между утверждением «Стандарта» и его практическим внедрением. Современные версии компиляторов реализуют практически все возможности, заложенные в язык C++. К счастью для программистов, «Стандарт» и компиляторы обеспечили и преемственность средств языка. Программы, написанные до официального утверждения «Стандарта», сохраняют работоспособность и при тех требованиях, которые предъявил к текстам программ на С++ утвержденный «Стандарт». [4, c.3]

Фирма Inprice, подразделением которой стала фирма Borland, сосредоточила свое внимание на разработке инструментария для работы с базами данных. Выпущенный ею продукт C++ Builder 4 ориентирован на проектирование клиентских и серверных компонентов распределенных программ, основанных на объектных архитектурах COM(Component Object Model) и CORBA(Common Object Request Broker Architeсture ). [5, c.2]

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

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

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

В пересмотренном стандарте С++ ISO/IEC 14882:2011 (C++11) библиотека STL была дополнена рядом новых возможностей. [1, c.5]

Именно в С++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 входит в стек технологий Java, которые, стремительно развиваясь, заняли много ниш на рынке.

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

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

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