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

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 28.03.2023

Просмотров: 309

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

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

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

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

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

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

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

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

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


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

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

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

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

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

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


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

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

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

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


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

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

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

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

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

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


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

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

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

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

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

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