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

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

Содержание:

Введение

Если задаться вопросом, с каким языком связано начало современной эпохи программирования, ответ будет прост – с языком С. Данный язык разработал Д.Ритч в 70х прошлого столетия для компьютера PDP 11 компании DEC (Digital Equipment Corporation), где применялась ОС UNIX. В то время именно язык С, несмотря на присутствие развитых определенных языков программирования, определил направление всего будущего программирования.

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

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

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

Цель данной работы – ознакомиться с историей возникновения и развития языков программирования С и С++ и Java.

В ходе поставленной цели будут решены следующие задачи:

- изучено программирование на С и С++: дано понятие языков программирования С и С++ их краткая история развития и базовые понятия;

- изучено программирование Java: дано понятие языка программирования Java, 11 история и базовые понятия.

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

Глава 1 Программирование на С и С++

1.1 Краткая история развития языков С и С++

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

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

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

С++ возник в начале 1980-х годов. Бьёрн Страуструп, сотрудник фирмы Bell Laboratories, усовершенствовал язык С под свои нужды. То есть, изначально создание нового языка он не планировал. Но в конце 70-х годов программист начал работать над задачами теории очередей (в моделировании телефонных вызовов), он обнаружил, что попытки применения действующих тогда языков моделирования, таких, как Симула и BCPL, оказываются неэффективными, а применение высокоэффективных машинных языков слишком сложно. Так, язык Симула имеет полезные для разработки большого программного обеспечения возможности, но все работает чересчур медленно, а язык BCPL достаточно быстр, но сильно близок к низкоуровневым языкам, он не подходит для разработки больших программ.

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

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

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

Нововведениями C++ в сравнении с C являются:

- поддержка объектно-ориентированного программирования;

- поддержка обобщённого программирования;

- новые типы данных;

- исключения - реакции программы на ошибки;

- пространства имён (хранилища для группировки уникальных идентификаторов);

- встраиваемые функции;

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

- перегрузка имён функций;

- ссылки и операторы управления свободно распределяемой памятью;

- дополнения к стандартной библиотеке.

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

Дальнейшее развитие языка будет идти путем дополнения в существующие стандартные библиотеки. Планом развития С++ на будущее является расширение обобщенного программирования.

1.2 Базовые понятия языка

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

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

Алфавит языка (п. 3.1.1)

Алфавит языка C++ составляют символы включенные в 7-битную кодировку ISO 646/ECMA-6:

space, !, ", %, &, (, ), *, +, -, ., /, 0..9, :, ;, <, =, >, ?, A..Z, _, a..z.
Тем не менее, часть символов, используемых в алфавите C++, не входит в кодовую базу этой кодировки: {, }, [, ], #, \, ^, |, ~.

Лексема

Символы алфавита образуют лексемы. Лексема (token) – это минимальная единица языка, имеющая самостоятельный смысл. Лексемы – формируют базовый словарь языка, понятный компилятору. Всего существует пять видов лексем:

  • Ключевые слова (keywords)
  • Идентификаторы (identifiers)
  • Литералы (literals)
  • Операции (operators)
  • Знаки пунктуации (разделители, punctuators)

Лексемы (как и слова в естественном языке) разделяются непечатаемыми (пробельными) символами (пробел, символы табуляции, перевода строки, возврат каретки, перевода страницы) и знаками пунктуации: [, ], (, ), {, }, *, ,, :, =, ;, ..., #.

Ключевые слова

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

Идентификаторы

Идентификатор – это имя программного объекта: переменной, константы, массива, функции, класса и т. п. В идентификаторах могут использоваться латинские буквы, цифры и знак нижнего подчеркивания ( _ ). В C++ различаются строчные и прописные буквы (т. е. имена регистро-зависимы), так: Name, name и NAME – это разные идентификаторы. Правила использования идентификаторов:

  1. можно использовать латинские символы: A..Z, a..z;
  2. можно использовать арабские цифры: 0..9 и символ нижнего подчеркивания, но не в начале;
  3. пробелы в имени не допускаются;
  4. не рекомендуется начинать с нижнего подчеркивания или с двух нижних подчеркиваний и заглавной буквы, например: _S (такие идентификаторы имеют специальное назначение);
  5. двойное подчеркивание используется только для служебных целей to__boo
  6. не допускается использования ключевых слов;
  7. необходимо воздерживаться от использования ключевых слов, как части имени, например: for_and_if (за исключением наименования типов)

При составлении имен желательно придерживаться какого-либо стиля, например, стиля CamelCase: имена пишутся слитно, каждое слово, описывающее назначение идентификатора, пишется с заглавной буквы. Этот стиль используется в двух вариантах: UpperCamelCase и lowerCamelCase. Первый используется для именования классов, второй для прочего: переменных, методов и т.п.

Литералы

Литералы, иначе константы – это неизменяемые величины. Примеры различных констант:

Целые

0, -1, 10000
По умолчанию целочисленные лексемы имеют тип int.
Представление целых литералов в различных системах счисления:
Двоичной: 0b1010, 0B111100111
Восьмеричной: 01, 020, 07155
Шестнадцатеричной: 0xA, 0x1B8, 0X00FF

Действительные

С фиксированной точкой: 5.7, .001, -35., 0.0
С плавающей точкой (экспоненциальный): -0.2E6, .11e-3, 5E10, 2.e-10
По умолчанию они имеют тип double.

Примечание: стандарт C++14 ввёл использование апострофа для произвольного разделения разрядов в числовых литералах:
0b0100’1100’0110, 0.000’015’3

Символьные

Один или два символа заключенные в апострофы: 'S', 'щ', '\t', '\012', '\x07\x07', 'db'

Примечание: к символьным константам относятся специальные управляющие символы (escape-последовательности).

Escape-последовательности

Escape-последовательности (или управляющие последовательности) используются для описания определённых специальных символов внутри строковых литералов, то есть внутри ограничителей "". Полный список приведен в методичке . Вот некоторые из них:
\n – новая строка
\t – горизонтальная табуляция
\v – вертикальная табуляция
\0 – нулевой символ
Например: "Ветер на море гуляет\nИ кораблик подгоняет;\nОн бежит себе в волнах\nНа раздутых парусах."

Строковые

Последовательность символов, заключенные в кавычки:
"Hello world!", "Здесь был Вася :-))"
В стандарте C++17 символьные литералы представлены в единой кодировке UTF-8.

Примечание: к строковому литералу автоматически добавляется признак конца строки ('\0').

Прочие

Булевские (логические): false, true
и другие, с которыми мы познакомимся позднее.
В заключение добавим, что целые, действительные и строковые литералы используют специальные суффиксы, приказывающие компилятору изменить представление типов данных (используемых по умолчанию), примеры использования суффиксов мы покажем во время более близкого знакомства с типами данных.

Комментарии

Комментарии служат для описания и документирования исходного кода. В C++ применяются два вида комментариев: многострочный и однострочный. Например:

/* Многострочный комментарий часто используется

для заголовков в описании исходного кода */

// Однострочный комментарий используется в пределах одной строки

// но также может быть использован для описания алгоритма

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

Типы данных (п. 3.1.2)

Описание фундаментальных (уч. – простых) типов см. в методичке (Таблицы 6, 7 и 8).

Структура программы на языке C++

Для составления программы необходимо создать текстовый файл с именем main.cpp (он создается автоматически, если вы создаете проект в интегрированной среде программирования Code::Blocks). Минимальное содержимое этого файла должно быть следующим:
Программа 8.1.1

1

2

3

int main() {

    // Это пустая программа

}

Примечание. Алгоритм создания проекта в среде Code::Blocks изложен в методичке здесь.

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

1

2

3

4

5

6

7

#include <iostream>

using namespace std;

int main() {

    cout << "Здравствуй, мир!" << endl;

    return 0;

}

Для вывода строки нам потребуется включить (с помощью директивы #include) библиотечный класс iostream, содержащий функции ввода/вывода. Исторически так сложилось, что библиотечный класс ввода/вывода автоматически не включается в программу. Для вывода символьной строки необходимо использовать объект потока cout и операцию вставки “<<” (два символа “меньше”, следующих друг за другом, без пробела). Символьная строка должна быть заключена в двойные кавычки. Завершает вывод данных манипулятор endl (end line – конец строки). Заканчивается программа инструкцией return (возврат значения). Инструкция return является необязательной (поскольку программа, в случае её отсутствия, будет возвращать значения операционной системе не явно). Но мы возьмем за хороший навык всегда использовать эту инструкцию в конце программы. Возвращаемое значение – 0 (признак успешного завершения). Обратите внимание, что любая инструкция (предложение языка) в C++ должно заканчиваться точкой с запятой.
Объявление

using namespace std;

говорит о том, что мы будем использовать пространство имен стандартной библиотеки (STD). Это позволит сделать код более лаконичным. В противном случае, строка 5 выглядела бы следующим образом:

std::cout << "Здравствуй, мир!" << std::endl;

Операция присваивания (п. 3.4.1)

Для операции присваивания в C++ используется символ '='

Глава 2 Программирование Java

2.1 Понятие языка программирования Java

Java - язык программирования, который был разработан в компании SunMicrosystems. Приложения Java обычно компилируются в специальный байт-код, вследствие чего они имеют возможность работать на любой виртуальной Java-машине (JVM) независимо от самой компьютерной архитектуры. Дата официального выпуска языка -23 мая 1995 года. Сегодня технология Java предоставляет средства для превращения статических Web-страниц в интерактивные динамические документы, а также возможности создания распределенных (не зависящих от платформы) приложений [12].

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

Гослинг, в возрасте 40 с небольшим лет перешел в компанию Sun в 1984 г. из исследовательского отдела IBM. Первая его задача, проект, - интересный с технической точки зрения, но не имевший коммерческого успеха оконный интерфейс NeWS. Он также написал GOSMACS - первую реализацию текстового редактора EMACS на языке С.

Благодаря деятельности в сфере бытовой электроники (в последствии она будет называться проектом "Green") появилась возможность увидеть Гослингу и его коллегам, какую ценность имеют для потребителя показатели - надежность, стоимость, соответствие стандартам и простота. Если у пользователей рабочих станций есть интерес к большой мощности и они достаточно терпимы к высоким ценам, необходимости длительного обучения и присутствию различных ошибок, то обычным потребителям нужны дешевые, простые в своем применении и надежные устройства. Для того, чтобы иметь возможность успешной конкуренции на рынке бытовой электроники, фирмы должны воспринимать процессоры в роли обычного товара, который в любую минуту можно заменить другим, более дешевым, и предоставить возможность обеспечить обратную совместимость и соблюдение стандартов, которые установлены на устройства длительного использования, будь то тостер, или телевизор.

Беря во внимание произношение в русском языке, мы видим, что образовались две разные нормы данного языка - заимствованная англоязычная джава» и традиционно - национальная «ява», которая соответствует принятому произношению названия острова Ява. Компания Sun придерживается первого варианта - англоязычного произношения везде. Иногда в обычной жизни применяют и жаргонное слово «Жаба» (например, изображение жабы есть на календариках группы российских пользователей Java (JavaUsersGroup) [4].

Java – это название не только самого языка, но и платформы для создания и исполнения приложений на основе данного языка.

Изначально язык назывался Oak («дуб») и разрабатывался, как было отмечено выше, Джеймсом Гослингом для программирования бытовых электронных устройств. Затем он был переименован в Java и стал применяться для написания клиентских приложений и серверного ПО. Название было дано в честь марки кофе Java, который так любили некоторые программисты, поэтому на официальной эмблеме языка и изображена чашка с дымящимся кофе. Существует, конечно, и другая версия происхождения названия Java, а именно – Java — это сленговое обозначение кофе (по имени одноименного острова, где производится популярный кофе) с аллюзией на кофе-машину, как пример бытового устройства, для программирования чего и изначально язык создавался [5].

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Основные возможности:

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

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

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

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

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

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

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

- унифицированный доступ к базам данных:

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

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

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

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

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

История Java восходит к 1991 году, когда группа инженеров из компании Sun Microsystems под руководством Патрика Нотона (Patrick Naughton) и члена совета директоров (и разностороннего специалиста) Джеймса Гослинга (James Gosling) занялась разработкой языка, который можно было бы использовать для программирования бытовых устройств, например, контроллеров для переключения каналов кабельного телевидения. Подобные устройства не обладают большими вычислительными мощностями и объемом оперативной памяти, и поэтому новый язык должен был быть простым и способным генерировать очень компактный код. Кроме того, разные производители могут выбирать разные процессоры для контроллеров, и поэтому было очень важно не привязываться к конкретной их архитектуре. Проект создания нового языка получил кодовое название "Green".

Стремясь получить компактный и независимый от платформы код, разработчики нового языка возродили модель, использовавшуюся при реализации первых версий языка Pascal на заре эры персональных компьютеров. Никлаус Вирт, создатель языка Pascal, в свое время разработал переносимый язык, генерирующий промежуточный код для некоей гипотетической машины. Такие машины называются виртуальными, отсюда термин — виртуальная машина ]ava (JVM). Этот промежуточный код можно выполнять на любой машине, имеющей соответствующий интерпретатор. Инженеры, работавшие над проектом "Green", также использовали виртуальную машину, что решило основную проблему переносимости кода.

Большинство сотрудников компании Sun Microsystems имели опыт работы с операционной системой Unix, поэтому в основу разрабатываемого ими языка был положен язык C++, а не Pascal. В частности, они сделали язык объектно-, а не процедурно-ориентированным. Как сказал Гослинг в своем интервью: "Язык — это всегда средство, а не цель". Сначала Гослинг решил назвать его Oak (Дуб). (Возможно потому, что он любил смотреть на дуб, росший прямо под окнами его рабочего кабинета в компании Sim Microsystems.) Затем сотрудники компании узнали, что слово "Oak" уже используется в качестве имени ранее созданного языка программирования, и изменили название на Java. Этот выбор был сделан по наитию.

В 1992 г. в рамках проекта "Green" была выпущена первая продукция под названием "*7". Это было устройство интеллектуального дистанционного управления. (Умещаясь в корпусе 6x4x4 дюйма, оно имело мощность рабочей станции SPARC.) К сожалению, ни одна из компаний-производителей электронной техники не заинтересовалась этой разработкой. Затем группа стала заниматься созданием устройства для кабельного телевидения, которое могло бы осуществлять новые виды услуг, например, включать видеосистему по требованию. И снова они не получили ни одного контракта. Примечательно, что одной из компаний, согласившихся все-таки с ними сотрудничать, руководил Джим Кларк (Jim Clark) — основатель компании Netscape, впоследствии сделавшей очень много для развития языка Java.

Весь 1993 год и половину 1994 года продолжались безрезультатные поиски покупателей продукции, разработанной в рамках проекта "Green", получившего новое название — "First Person, Inc.". Патрик Нотой, один из основателей группы, в основном занимавшийся маркетингом, налетал в общей сложности более 300 тысяч миль, пытаясь продать разработанную технологию. Работа над проектом "First Person, Inc." была прекращена в 1994 г.

Тем временем в рамках Интернета начала развиваться система под названием World Wide Web (Всемирная паутина). Ключевым элементом этой системы является браузер, превращающий гипертекстовые данные в изображение на экране. В 1994 году большинство пользователей применяли некоммерческий веб-браузер Mosaic, разработанный в суперкомпьютерном центре университета штата Иллинойс в 1993 г. Частично этот браузер был написан Марком Андреессеном (Mark Andreessen), подрядившимся работать за 6,85 доллара в час. В то время Марк заканчивал университет, и браузер был его дипломной работой. (Затем он достиг известности и успеха как один из основателей и ведущих специалистов компании Netscape.)

В своем интервью журналу Sun World Гослинг сказал, что в середине 1994 г. разработчики нового языка поняли: "Нам нужно создать высококачественный браузер. Такой браузер должен представлять собой приложение, соответствующее технологии "клиент-сервер", в которой жизненно важным является именно то, что мы сделали: архитектурная независимость, выполнение в реальном времени, надежность, безопасность — вопросы, которые были не так уж важны для рабочих станций. И мы создали такой браузер".

Сам браузер был разработан Патриком Йотоном и Джонатаном Пэйном (Johnatan Payne). Позднее он был доработан и получил имя Hotjava. Чтобы продемонстрировать все возможности Java, браузер был написан на этом языке. Но разработчики не забывали о таких средствах, которые теперь называются аплетами, наделив свой продукт способностью выполнять код на веб-страницах. Программный продукт, подтверждавший действенность новой технологии, был представлен 23 мая 1995 года на выставке SunWorld '95 и вызвал всеобщий интерес к Java, сохраняющийся и по сей день.

Компания Sun Microsystems выпустила первую версию Java в начале 1996 г. Пользователи быстро поняли, что версия Java 1.0 не подходит для разработки серьезных приложений. Конечно, эту версию можно применять для реализации визуальных эффектов на веб-страницах, например, написать аплет, выводящий на страницу случайно "прыгающий" текст, но версия Java 1.0 была еще сырой. В ней даже отсутствовали средства вывода на печать. Грубо говоря, версия Java 1.0 еще не была готова. В следующей версии, Java 1.1, были устранены наиболее очевидные недостатки, улучшены средства рефлексии и реализована новая модель событий для программирования ГПИ. Но несмотря на это, ее возможности были все еще ограничены.

Выпуск версии Java 1.2 стал основной новостью на конференции JavaOne в 1998 г. В новой версии слабые средства для создания графического пользовательского интерфейса и графических приложений были заменены мощным инструментарием. Это был шаг вперед, к реализации лозунга "Write Once, Run Anywhere" ("Однажды написано — везде выполняется"), выдвинутого при разработке предыдущих версий. В декабре 1998 года через три дня (!) после выхода в свет название новой версии было изменено на громоздкое Java 2 Standard Edition Software Development Kit Version 1.2 (Стандартная редакция набора инструментальных средств для разработки программного обеспечения на Java 2, версия 1.2).

Кроме Standard Edition, были предложены еще два варианта: Micro Edition ("микроредакция") для портативных устройств, например для мобильных телефонов, и Enterprise Edition (редакция для корпоративных приложений).

Версии 1.3 и 1.4 набора инструментальных средств Standard Edition являются результатами поэтапного усовершенствования первоначально выпущенной версии Java 2. Они обладают новыми возможностями, повышенной производительностью и, разумеется, содержат много меньше ошибок. В процессе развития Java многие взгляды на аплеты и клиентские приложения были пересмотрены. В частности, оказалось, что на Java удобно разрабатывать высококачественные серверные приложения.

В версии 5.0 язык Java подвергся наиболее существенной модификации с момента выпуска версии 1.1. (Первоначально версия 5.0 имела номер 1.5, но на конференции JavaOne в 2004 г. была принята новая нумерация версий.) После многолетних исследований были добавлены обобщенные типы (которые приблизительно соответствуют шаблонам C++), хотя при этом не были выдвинуты требования модификации виртуальной машины. Ряд других языковых элементов, например, циклы в стиле for each, автоупаковка и метаданные, были явно "навеяны" языком С#.

Версия 6 (без суффикса .0) была выпущена в конце 2006 г. Опять же сам язык не претерпел существенных изменений, но были внесены усовершенствования, связанные с производительностью, а также произведены расширения библиотек.

По мере того как в центрах обработки данных все чаще стали применяться аппаратные средства широкого потребления вместо специализированных серверов, для компании Sun Microsystems наступили тяжелые времена, и в конечном итоге она была приобретена компанией Oracle в 2009 г. Разработка последующих версий Java приостановилась на долгое время. И только в 2011 году компания Oracle выпустила новую версию Java 7 с простыми усовершенствованиями. А более серьезные изменения было решено отложить до версии Java 8, выпуск которой ожидается в 2013 г.

В табл. 1 сведены данные об этапах развития языка и библиотек Java. Как видите, размеры прикладного программного интерфейса API значительно увеличились.

Таблица 1. Этапы развития языка Java

Версия

Год выпуска

Новые языковые средства

Количество классов и интерфейсов

1.0

1996

Выпуск самого языка

211

1.1

1997

Внутренние классы

477

1.2

1998

Отсутствуют

1524

1.3

2000

Отсутствуют

1840

1.4

2002

Утверждения

2723

5.0

2004

Обобщенные классы, цикл в стиле for each, автоупаковка, аргументы переменной длины, метаданные, перечисления, статический импорт

3279

6

2006

Отсутствуют

3793

7

2011

Оператор switch со строковыми метками ветвей, ромбовидный оператор, двоичные литералы, усовершенствованная обработка исключений

4024

8

2014

Лямбда-выражения, библиотеки потоков и даты/времени, интерфейсы с методами по умолчанию

4240

9

2017

Литералы в коллекциях, оператор Элвиса, Class Optional, Streams, IO, Regrexp, обработка процессов ProcessHandle

более 4500

В 2018 году коренным образом изменилась парадигма разработки и выпуска релизов Java. О

2.3 Базовые понятия языка

Алфавит языка Java состоит из букв, десятичных цифр и специальных символов. Буквами считаются латинские буквы (кодируются в стандарте ASCII), буквы национальных алфавитов (кодируются в стандарте Unicode, кодировка UTF-16), а также соответствующие им символы, кодируемые управляющими последовательностями

Буквы и цифры можно использовать в качестве идентификаторов (т.е. имен) переменных, методов и других элементов языкапрограммирования. Правда, при использовании в идентификаторах национальных алфавитов в ряде случаев могут возникнуть проблемы – эти символы будут показываться в виде вопросительных знаков.

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

Латинские буквы ASCII

  • ABCD...XYZ - заглавные (прописные) ,
  • abcd...xyz – строчные

Дополнительные "буквы" ASCII

  • _ - знак подчеркивания,
  • $ - знак доллара.

Национальные буквы на примере русского алфавита

  • АБВГ…ЭЮЯ - заглавные (прописные),
  • абвг…эюя – строчные
  • Десятичные цифры0 1 2 3 4 5 6 7 8 9

Десятичные и шестнадцатеричные цифры и целые числа

Целые числовые константы в исходном коде Java (так называемые литерные константы) могут быть десятичными или шестнадцатеричными. Они записываются либо символами ASCII, или символами Unicode следующим образом.

Десятичные константы записываются как обычно. Например, -137.

Шестнадцатеричная константа начинается с символов 0x или 0X (цифра 0, после которой следует латинская буква X), а затем идет само число в шестнадцатеричной нотации. Например, 0x10 соответствует 10_{16}=16 ; 0x2F соответствует 2F_{16}=47, и т.д. О шестнадцатеричной нотации рассказано чуть ниже.

Ранее иногда применялись восьмеричные числа, и в языках C/C++, а также старых версиях Java можно было их записывать в виде числа, начинающегося с цифры 0. То есть 010 означало 10_8=8. В настоящее время в программировании восьмеричные числа практически никогда не применяются, а неадекватное использование ведущего нуля может приводить к логическим ошибкам в программе.

Целая константа в обычной записи имеет тип int. Если после константы добавить букву L (или l, что хуже видно в тексте, хотя в среде разработки выделяется цветом), она будет иметь тип long, обладающий более широким диапазоном значений, чем тип int.

Поясним теперь, что такое шестнадцатеричная нотация записи чисел и зачем она нужна.

Информация представляется в компьютере в двоичном виде – как последовательность бит. Бит – это минимальная порция информации, он может быть представлен в виде ячейки, в которой хранится или ноль, или единица. Но бит – слишком мелкая единица, поэтому в компьютерах информация хранится, кодируется и передается байтами - порциями по 8 бит.

Под "ячейкой памяти" будет пониматься непрерывная область памяти (с последовательно идущими адресами), выделенная программой для хранения данных. На рисунках мы будем изображать ячейку прямоугольником, внутри которого находятся хранящиеся в ячейке данные. Если у ячейки имеется имя, оно будет писаться рядом с этим прямоугольником.

Мы привыкли работать с числами, записанными в так называемой десятичной системе счисления. В ней имеется 10 цифр (от 0 до 9), а в числе имеются десятичные разряды. Каждый разряд слева имеет вес 10 по сравнению с предыдущим, то есть для получения значения числа, соответствующего цифре в каком-то разряде, стоящую в нем цифру надо умножать на 10 в соответствующей степени. То есть 52=5 \times 10+2, 137=1 \times 10^2+3 \times 10^1+7, и т.п.

В программировании десятичной системой счисления пользоваться не всегда удобно, так как в компьютерах информация организована в виде бит, байт и более крупных порций. Человеку неудобно оперировать данными в виде длинных последовательностей нулей и единиц. В настоящее время в программировании стандартной является шестнадцатеричная система записи чисел. Например, с ее помощью естественным образом кодируется цвет, устанавливаются значения отдельных бит числа, осуществляется шифрование и дешифрование информации, и так далее. В этой системе счисления все очень похоже на десятичную, но только не 10, а 16 цифр, и вес разряда не 10, а 16. В качестве первых 10 цифр используются обычные десятичные цифры, а в качестве недостающих цифр, больших 9, используются заглавные латинские буквы A, B, C, D, E, F:

  • 0 1 2 3 4 5 6 7 8 9 A B C D E F

То есть A=10, B=11, C=12, D=13, E=14, F=15.

Заметим, что в шестнадцатеричной системе счисления числа от 0 до 9 записываются одинаково, а превышающие 9 отличаются. Для чисел от 10 до 15 в шестнадцатеричной системе счисления используются буквы от A до F, после чего происходит использование следующего шестнадцатеричного разряда. Десятичное число 16 в шестнадцатеричной системе счисления записывается как 10. Для того, чтобы не путать числа, записанные в разных системах счисления, около них справа пишут индекс с указанием основания системы счисления. Для десятичной системы счисления это 10, для шестнадцатеричной 16. Для десятичной системы основание обычно не указывают, если это не приводит к путанице. Точно так же в технической литературе часто не указывают основание для чисел, записанных в шестнадцатеричной системе счисления, если в записи числа встречаются не только "обычные" цифры от 0 до 9, но и "буквенные" цифры от A до F. Обычно используют заглавные буквы, но можно применять и строчные.

Рассмотрим примеры.

  • 0x10 = 10_{16} =16 ;
  • 0x100 = 100_{16} =16 \times 16=256;
  • 0x1000 = 1000_{16} =(16)^3=4096;
  • 0x20 = 20_{16} =2 \times 16 =32;
  • 0x21 = 21_{16} =2 \times 16 +1=33;
  • 0xF = F_{16} =15 ;
  • 0x1F = 1F_{16} =1 \times 16 +15=31 ;
  • 0x2F = 2F_{16} =2 \times 16 +15=47 ;
  • 0xFF = FF_{16} =15 \times 16+15=255;

Зарезервированные слова языка Java

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

Таблица 2

Слова, зарезервированные для синтаксических конструкций языка

abstract

boolean

break

byte

case

catch

char

class

const

continue

default

do

double

else

enum

extends

false

final

finally

float

for

goto

if

implements

import

instanceof

int

interface

long

native

new

null

package

private

protected

public

return

short

static

super

switch

synchronized

this

throw

throws

transient

true

try

void

volatile

while

Их нельзя использовать в качестве идентификаторов (имен переменных, подпрограмм и т.п.), но можно использовать в строковых выражениях.

В языке Java только 8 примитивных (скалярных, простых) типов: boolean, byte, char, short, int, long, float, double.

Длины и диапазоны значений примитивных типов определяются стандартом, а не реализацией и приведены в таблице. Тип char сделали двухбайтовым для удобства локализации (один из идеологических принципов Java): когда складывался стандарт, уже существовал Unicode-16, но не Unicode-32. Поскольку в результате не осталось однобайтового типа, добавили новый тип byte, причем в Java, в отличие от других языков, он не является беззнаковым. Типы float и double могут иметь специальные значения, и «не число» (NaN). Для типа double они обозначаются Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY, Double.NaN; для типа float- так же, но с приставкой Float вместо Double. Минимальные положительные значения, принимаемые типами float и double, тоже стандартизованы.

Тип

Длина (в байтах)

Диапазон или набор значений

boolean

не определено

true, false

byte

1

?128..127

char

2

0..216?1, или 0..65535

short

2

?215..215?1, или ?32768..32767

int

4

?231..231?1, или ?2147483648..2147483647

long

8

?263..263?1, или примерно ?9.2·1018..9.2·1018

float

4

-(2-2?23)·2127..(2-2?23)·2127, или примерно ?3.4·1038..3.4·1038, а также , , NaN

double

8

-(2-2?52)·21023..(2-2?52)·21023, или примерно ?1.8·10308..1.8·10308, а также , , NaN

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

Преобразования при математических операциях

В языке Java действуют следующие правила:

1. Если один операнд имеет тип double, другой тоже преобразуется к типу double.

2. Иначе, если один операнд имеет тип float, другой тоже преобразуется к типу float.

3. Иначе, если один операнд имеет тип long, другой тоже преобразуется к типу long.

4. Иначе оба операнда преобразуются к типу int.

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

Заключение

Язык программирования — формальный язык, предназначенный для записи компьютерных программ. Язык программирования определяет набор лексических, синтаксических и семантических правил, определяющих внешний вид программы и действия, которые выполнит исполнитель (обычно — ЭВМ) под её управлением.

Программой называют алгоритм, составленный на языке исполнителя. Далее под исполнителем мы будем понимать ЭВМ.

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

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

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

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

Свойства языка Java:

- язык программирования объектно-ориентирован, оснащён богатой библиотекой классов и одновременно довольно прост для освоения;

- цикл разработки приложений сокращен при помощи того, что система построена на основе интерпретатора;

- приложение получается автоматически переносимым между множеством платформ и ОС;

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

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

- в приложения встроена система безопасности, не допускающая незаконного доступа и проникновения вирусов.

Список использованной литературы

1. Campbell Parallel Programming with Microsoft® Visual C++® / Campbell. - Москва: Гостехиздат, 2011. - 784 c.

2. Альфред, В. Ахо Компиляторы. Принципы, технологии и инструментарий / Альфред В. Ахо и др. - Москва: Высшая школа, 2015. - 882 c.

3. Балена, Франческо Современная практика программирования на Microsoft Visual Basic и Visual C# / Франческо Балена , Джузеппе Димауро. - М.: Русская Редакция, 2015. - 640 c.

4. Боровский, А. C++ и Pascal в Kylix 3. Разработка интернет-приложений и СУБД / А. Боровский. - М.: БХВ-Петербург, 2015. - 544 c.

5. Давыдов, В. Visual C++. Разработка Windows-приложений с помощью MFC и API-функций / В. Давыдов. - М.: БХВ-Петербург, 2014. - 576 c.

6. Довбуш, Галина Visual C++ на примерах / Галина Довбуш , Анатолий Хомоненко. - М.: БХВ-Петербург, 2012. - 528 c.

7. Зиборов, В. MS Visual C++ 2010 в среде .NET / В. Зиборов. - М.: Питер, 2012. - 320 c.

8. Кетков, Юлий Практика программирования: Visual Basic, C++ Builder, Delphi. Самоучитель (+ дискета) / Юлий Кетков , Александр Кетков. - М.: БХВ-Петербург, 2012. - 464 c.

9. Мешков, А. Visual C++ и MFC / А. Мешков, Ю. Тихомиров. - М.: БХВ-Петербург, 2013. - 546 c.

10. Неформальное введение в C++ и Turbo Vision. - Москва: ИЛ, 2010. - 384 c.

11. Панюкова, Т. А. Языки и методы программирования. Создание простых GUI-приложений с помощью Visual С++. Учебное пособие / Т.А. Панюкова, А.В. Панюков. - Москва: Мир, 2015. - 144 c.

12. Пахомов, Б. C/C++ и MS Visual C++ 2010 для начинающих / Б. Пахомов. - М.: БХВ-Петербург, 2011. - 736 c.

13. Пахомов, Борис C/C++ и MS Visual C++ 2012 для начинающих / Борис Пахомов. - Москва: СИНТЕГ, 2015. - 518 c.

14. Пахомов, Борис С/С++ и MS Visual C++ 2012 для начинающих / Борис Пахомов. - М.: "БХВ-Петербург", 2013. - 502 c.

15. Полубенцева, М. C/C++. Процедурное программирование / М. Полубенцева. - М.: БХВ-Петербург, 2014. - 448 c.

16. Поляков, А. Методы и алгоритмы компьютерной графики в примерах на Visual C++ / А. Поляков, В. Брусенцев. - М.: БХВ-Петербург, 2011. - 560 c.

17. Понамарев, В. Программирование на C++/C# в Visual Studio .NET 2003 / В. Понамарев. - М.: БХВ-Петербург, 2015. - 917 c.

18. Роберт, С. Сикорд Безопасное программирование на C и C++ / Роберт С. Сикорд. - Москва: РГГУ, 2014. - 496 c.

19. Секунов, Н. Программирование на C++ в Linux / Н. Секунов. - М.: БХВ-Петербург, 2016. - 425 c.

20. Сидорина, Татьяна Самоучитель Microsoft Visual Studio C++ и MFC / Татьяна Сидорина. - М.: "БХВ-Петербург", 2014. - 848 c.