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

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

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

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

Добавлен: 12.03.2024

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

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

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

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

В конце 1992 года, приложив, по словам тогдашнего инженера проекта Патрика Нотона, «огромные усилия по доработке дуба и других компонентов», команда Green project выпустила «*7 «- устройство типа КПК, названное Гослингом»ручным пультом дистанционного управления».

«За полтора года мы сделали столько же, сколько другие крупные команды Sun сделали за три года», - с гордостью отмечает Нотон. - Операционная система GreenOS, язык, инструменты, пользовательский интерфейс, новая аппаратная платформа, три пользовательских чипа... и каждый этап был связан с риском, потому что мы использовали совершенно новые технологии.»

До прихода в команду Green 30-летний Нотон возглавлял проект Sun по разработке пользовательской среды OpenWindow.

Небольшие размеры устройства *7 выставляли в выгодном свете компактность и эффективность кода, составлявшего ядро технологии. Этот продукт широко демонстрировался на солнце, он смог произвести впечатление на таких важных людей, как Скотт Макнили и Билл Джой, но что с ним случилось потом, остается неизвестным.

Гослинг считал, что браузер-это компонент, который «создает рынок» для всех инструментов, серверов и сред разработки. И именно язык Java играет центральную, доминирующую роль во всех этих инструментах. Прежде чем Ява, веб-страница на самом деле была бумажка. С появлением Java браузер задает структуру и резко расширяет возможности контент-провайдеров.

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


Если у нас есть такие инструменты, как Java и Web, мы можем получить изначально организованную систему, - подчеркивает Гомслинг. «Если вы создаете клиентскую часть приложения на Java, то для ее запуска достаточно перейти на соответствующую страницу. Установка проста-достаточно разместить необходимое программное обеспечение на веб-сервере. И проблем с миграцией не будет, благодаря тому, что существует только одна версия приложения». Многие компании, по словам Гослинга, уже организуют базы данных в виде веб - страниц с использованием Common Gateway Interface (CGI) - специфического стандарта для запуска внешних программ на HTTP-сервере.

Программы Java переводятся в байт-код, который выполняется виртуальной машиной Java (JVM), программой, которая обрабатывает байт-код, а затем передает инструкции аппаратному обеспечению в качестве интерпретатора.

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

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

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

- использование технологии перевода байт-кода в машинный код непосредственно во время работы программы (JIT-технология) при сохранении версий классов в машинном коде;

- широкое использование платформенно-ориентированного кода (нативного кода) в стандартных библиотеках;

- аппаратное обеспечение, обеспечивающее ускоренную обработку байт-кода (например, технология Jazelle, которая поддерживается некоторыми процессорами ARM).

По данным сайта shootout.alioth.debian.org, для 7 различных задач время выполнения в Java в среднем в 1,5-2 раза больше, чем для C / C++, а в некоторых случаях Java даже быстрее, а в некоторых случаях в 7 раз медленнее. С другой стороны, для большинства из них потребление памяти Java-машиной было в 10-30 раз больше, чем у программы C/C++. Также заслуживает внимания исследование, проведенное компанией Google, согласно которому в тестовых случаях на Java наблюдается значительно более низкая производительность и более высокое потребление памяти по сравнению с аналогичными программами на C++.


Идеи, лежащие в основе концепции и различных реализаций среды виртуальной машины Java, вдохновили многих энтузиастов расширить список языков, которые могут быть использованы для создания программ, работающих на виртуальной машине. Эти идеи были также выражены в спецификации common language infrastructure CLI, которая является основой платформы.NET от Microsoft.

Принципиальная возможность:

- автоматическое управление памятью;

- расширенные возможности обработки исключений;

- богатый набор инструментов фильтрации ввода-вывода;

- набор стандартных коллекций, таких как массив, список, стек и т. д.

- простые инструменты для создания сетевых приложений (в том числе с использованием протокола RMI);

- наличие классов, позволяющих выполнять HTTP-запросы и обрабатывать ответы;

- встроенные языковые средства для создания многопоточных приложений;

- единый доступ к базам данных:

- на уровне отдельных SQL-запросов-на основе JDBC, SQLJ;

- на уровне концепции объектов, которые имеют возможность храниться в базе данных - на основе Java Data Objects и Java Persistence API;

- поддержка шаблонов (начиная с версии 1.5);

- параллельное выполнение программ.

2.2. Краткая история возникновения языка программирования Java

Рождению языка Java предшествовала довольно интересная история. В 1990 году разработчик программного обеспечения Sun Microsystems Патрик Нотон понял, что устал поддерживать сотни различных программных интерфейсов, используемых в компании, и сообщил исполнительному директору Sun Microsystems и своему другу Скотту Макнили о своем намерении перейти в NeXT. Макнили, в свою очередь, попросил Нотона составить список причин его недовольства и предложить решение проблем, как будто он был Богом и мог сделать все, что угодно.

Не ожидая, что кто-то обратит внимание на его письмо, Нотон изложил свои претензии, безжалостно критикуя недостатки SunMicrosystems, в частности, разрабатываемую в то время программную архитектуру. К удивлению Нотона, его письмо увенчалось успехом: оно было разослано всем ведущим инженерам SunMicrosystems, которые немедленно откликнулись и выразили свою горячую поддержку коллеге и одобрение его взглядов на ситуацию в SunMicrosystems. Обращение было одобрено высшим руководством компании, а именно Биллом Джоем, основателем SunMicrosystems, и Джеймсом Гослингом, боссом Нотона.


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

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

Команда приступила к разработке нового объектно-ориентированного языка программирования, получившего название Oak, в честь дерева, которое росло под окном Гослинга.

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

Нотон предложил использовать Oak для создания интернет-приложений. Так Oak стал самостоятельным продуктом, и вскоре были написаны Oak compiler и Oak browser «WebRunner». В 1995 году SunMicrosystems решила анонсировать новый продукт, переименовав его в Java (единственное разумное объяснение названия-любовь программистов к кофе). Когда Java попала в руки интернета, возникла необходимость запускать Java-апплеты-небольшие программы, загружаемые через Интернет. Webrunner был переименован в HotJava, а Netscape начал поддерживать Java-продукты.

2.3. Сравнение языков программирования С++ и Java

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


Начнем с основы java. Java — чистый объектно-ориентированный язык программирования; следовательно, в Java все является объектом (однокорневая иерархия, поскольку всё исходит от java.lang.Object).

В то время как в C++ не существует подобной корневой иерархии. C++ поддерживает как процедурное, так и объектно-ориентированное программирование; поэтому он называется гибридным. Ниже в таблице приведены основные характеристики этих языков и их отличия.

Таблица 1

Сравнение С++ и Java

Java

C++

Java не поддерживает указатели (pointers), шаблоны (templates), объединения (unions), перегрузку операторов (operator overloading), структур и т.д. Изначально было заявлено, что в языке Java нет никаких указателей, но многим программистам было непонятно, как можно работать без указателей, и тогда стали говорить, что их ограниченное количество. Java поддерживает так называемые «ссылки» (“references”). Ссылки имеют во многом схожую с указателями в С++ функцию, но на указателях в Java невозможно совершать арифметические действия. У ссылок есть типы, и они типобезопасны (type-safe). Их нельзя интерпретировать как адрес raw, а небезопасная конверсия запрещена.

C++ поддерживает структуры, объединения (unions), шаблоны (templates), перегрузку операторов (operator overloading), указатели (pointers) и адресную арифметику указателей (pointer aritdmetic).

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

C++ поддерживает деструкторы. Эта функция автоматически активируется при уничтожении объекта.

Java не поддерживает условную компиляцию и включение.

Условное включение (#ifdef #ifndef type) – одна из основных функций C++.

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

C++ не имеет встроенной поддержки потоков. Для этих целей используются нестандартизированные библиотеки третьих сторон.

Java не поддерживает параметры по умолчанию. В Java нет оператора разрешения контекста (::). Определения метода должны происходить внутри класса, поэтому нет нужды в разрешении конфликта.

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

В Java нет оператора перехода «goto». Сохраняются ключевые слова «const» and «goto» несмотря на то, что они не используются.

C++ обладает оператором перехода «goto». Однако, использование оператора перехода «goto» не приветствуется.

Java не предоставляет множественное наследование, по крайней мере, не так, как C++.

C++ поддерживает множественное наследование. Для устранения неоднозначности в случае её возникновения во время множественного наследования используется ключевое слово «virtual».

Обработка исключений «exceptions» в Java отличается, поскольку деструкторы отсутствуют. К тому же в Java команды «try/catch» должны определяться в том случае, если функция указывает, что может сгенерировать исключения «exception».

В то время, как в C++ может не включать команды «try/catch» несмотря на то, что эта функция генерирует исключения.

В Java есть метод перегрузки «metdod overloading», но отсутствует перегрузка операторов «operator overloading». Класс «Stringclass» не использует операторы + и += для соединения строк «strings», а строковые выражения «Stringexpressions» используют автоматическое преобразование типов, но это особенная встроенная опция (built-in case).

C++ поддерживает как перегрузку метода, так и перегрузку оператора.

Java имеет встроенную поддержку комментариев к документации (/** ... */); поэтому исходные файлы Java могут содержать собственную документацию, которая читается отдельным инструментом, обычно Javadoc, и переформатироваться в HTML. Это упрощает ведение документации.

C++ не поддерживает комментарии к документации.

Java, по большей мере, интерпретируется, поэтому не зависит от платформы.

C++ генерирует объектный код; тот же код может не запускаться на разных платформах.