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

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

Содержание:

Введение

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

Первый машинный язык был придуман в 1941 году Конрадом Цузе, который является изобретателем аналогической машины, Позднее в 1943 году Говард Эйкен создал машину “Марк-1”, которая способна считывать инструкцию на уровне машинного кода.

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

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

  1. Аспектно-ориентированные (основная идея – разделение функциональности для увеличения эффективности программных модулей);
  2. Структурные (в основе лежит идея создания иерархической структуры отдельных блоков программы);
  3. Логические (в основе лежит теория аппарата математической логики и правил революции);
  4. Объектно-ориентированный (в таком программировании используются уже не алгоритмы, а объекты, которые принадлежат определенному классу);
  5. Мультипарадигмальные (они сочетают в себе несколько парадигм, и программист сам решает, каким языком воспользоваться в той или иной ситуации);
  6. Функциональные (в качестве основных элементов выступают функции, которые меняют значения в зависимости от результатов вычислений исходных данных). [12]

Классификация данных типов указана в приложении 1.

Языки программирования подразделяются на три группы:

  1. языки высокого уровня;
  2. языки среднего уровня;
  3. языки низкого уровня.

Данные языки различаются по характеристикам.

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

Достоинства:

  • Абстракции делают сложные задачи простыми;
  • Все просто и интуитивно, даже при внесении изменений.

Недостатки:

  • Надстройки для реализации абстракций снижают производительность;
  • Из-за скрытых деталей сложно выяснить причины возникновения проблем, когда они появляются.

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

Достоинства:

  • Управлять памятью необязательно, но при желании это можно делать самостоятельно;
  • Богатые стандартные библиотеки;
  • Компилируется в байт-код, упрощающий взаимодействие с другими языками.

Недостатки:

  • Байт-код требует установленной среды выполнения;
  • Многие абстракции отпугивают новичка в освоении концепций.

К языкам низкого уровня можно отнести языки ассемблера. В языке ассемблера используются команды, которые обозначаются символами. Они легко воспринимаются и быстро запоминаются. Вместо последовательности двоичных кодов команд записываются их символьные обозначения, а вместо двоичных адресов данных, программы, которые выбрал программист. Языки низкого уровня Ассемблер и Forth.

Достоинства:

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

Недостатки:

  • Дополнительный контроль прибавляет дополнительные сложности, которые могут сделать простые задачи трудными в реализации;
  • Требуется предварительная оптимизация. [3]

В данной работе будут подробно рассмотрены такие языки как Си, С++ и Java.

Глава 1 Язык программирования СИ

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

Язык Си был разработан американцем Деннисом Ритчи в исследовательском центре Computer Science Research Center of bell Laboratories корпорации AT&T в 1972 году. Первоначально реализация Си была выполнена на ЭВМ PDP11 фирмы Dec для создания ОС UNIX. Позже он был перенесен в среду многих операционных систем и существует независимо от любой из них. Программы, которые написаны на языке Си, можно перенести в любую другую операционную систему или на другой компьютер с минимальными изменениями, либо вовсе без них.

Язык Си оказал существенное влияние на развитие индустрии программного обеспечения, а его синтаксис стал фундаментом для таких языков как С++, Java, PHP и др.

1.1 Особенности

Си (C) является языком функций, типов данных, операторов присваивания и управления последовательностью вычислений. Программируя на Си (C), осуществляется обращение к функциям, и большинство функций возвращают некоторые значения. Значение, возвращаемое функцией, будь то значение переменной или константа, может использоваться в операторе присваивания, который изменяет значение другой переменной дополнительными операторами управления последовательностью вычислений (while, for, do, switch), Си (C) превращается в язык высокого уровня, способствующий хорошему стилю программирования. Си (C) имеет небольшой набор типов данных: целые числа, числа с плавающей запятой, битовые поля и перечислимый тип. В языке Си (C) можно описать переменную типа указатель, который связывается с объектом, принадлежащим к любому типу данных. Адресная арифметика языка Си (C) является чувствительной к типу данных того объекта, с которым связан используемый указатель. Разрешены также указатели к функциям. Можно расширить список типов данных путем создания структур с иерархической зависимостью, входящих в него типов данных. Каждый тип данных может принадлежать либо к основному типу, либо к ранее описанному структурному типу. Объединения напоминают структуры, но определяют различные виды иерархических зависимостей, в которых данные разных типов располагаются в памяти.

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

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

1.2 Написание простых программ

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

Рисунок 1. Структура простой программы

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

1.3 История

Язык Си был создан в начале 70-х годов, в то время когда Кен Томпсон и Дэннис Ритчи из Bell Labs разрабатывали операционную систему UNDC. Сначала они сделали часть компилятора С, потом использовали ее для компиляции остальной части компилятора Си и, в конечном итоге , применили получившийся в результате компилятор для компиляции UNIX. Операционная система UNIX изначально распространялась в исходных кодах на Си среди университетов и лабораторий, а получатель мог откомпилировать исходный код на Си в машинный код с помощью подходящего компилятора Си.

Распространение исходного кода сделало операционную систему UNIX необыкновенной; программист мог менять операционную систему, а исходный код мог быть перенесен с одной аппаратной платформы на другую. На данный момент стандарт POSIX определяет стандартный набор системных вызовов UNIX, доступных в Си, которые должны быть реализованы в версиях UNIX, являющихся POSIX-совместимыми. 

По сравнению с более ранним языком — BCPL, Си улучшили путем добавления типов данных определенной длины. Например, тип данных int мог применяться при создании переменной с определенным числом битов (обычно 16), на тот момент как тип данных long использовался для создания целой переменной с большим числом битов (обычно 32). В отличие от других языков высокого уровня, Си мог работать с адресами памяти напрямую с помощью указателей и ссылок. Поскольку Си сохранил способность прямого доступа к аппаратному обеспечению, его часто относят к языкам среднего уровня или называют "мобильным языком ассемблера".

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

Широко язык Си распространялся на различных типах компьютеров (иногда называемых аппаратными платформами). Это привело, к сожалению, ко многим вариациям языка. Они были похожи, но несовместимы друг с другом. Это было значительной проблемой для разработчиков программ, которые нуждались в написании совместимых программ, которые можно было бы выполнять на нескольких платформах. Стало ясно, что необходима стандартная версия Cи. В 1983г. ANSI (Американский Национальный Комитет Стандартов) сформировал технический комитет X3J11 для создания стандарта языка Cи (чтобы "обеспечить недвусмысленное и машинно-независимое определение языка"). В 1989 году стандарт был утвержден. ANSI скооперировался с ISO (Международной Организацией Стандартов), чтобы стандартизовать Cи  в международном масштабе; совместный стандарт был опубликован в 1990 году и назван ANSI/ISO 9899:1990. Данный стандарт улучшается до сих пор и имеет поддержку большинства фирм разработчиков компиляторов.

Бьерн Страуструп высвободил объектно-ориентированный потенциал Си, путем перенесения возможностей классов Simula 67 в С. Изначально новый язык назывался "Си с классами" и только потом стал называться С++, который представлен в следующей главе. [8]

Глава 2 Язык программирования С++

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

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

Опять же, точно так же как и Си не является в чистом виде языком программирования высокого уровня (из за того, что позволяет выполнить слишком много возможностей), C++, строго говоря, не является объектно ориентированным языком программирования. Мешают этому такие его особенности, как наличие виртуальных функций (потому что при разговоре о полиморфизме никто никогда не оговаривает того, что некоторые методы будут участвовать в нем, а некоторые — нет), присутствие до сих пор функции main() и т.п. Кроме того, в C++ нет таких сущностей, как, например, метаклассы (хотя они, наверное, не так уж сильно и нужны) и интерфейсы (вместо них используется множественное наследование). Тем не менее, C++ на текущий момент один из самых популярных (если не самый популярный) язык программирования. Не смотря на все его недостатки, он позволяет в итоге написать программу с использованием объектно ориентированных подходов (а программы, которые этого требуют, обычно очень большие) и при этом достаточно «быструю». Этому способствует именно наличие виртуальных функций (т.е., то, что программист сам разделяет еще во время проектирования, где ему понадобится полиморфизм, а где будет достаточно объединить некоторые функции в группу по некоторому признаку), обязательное наличие оптимизатора и прочее. Все это позволяет при грамотном использовании написать работающую программу. Правда, достаточно часто встречаются примеры неграмотного использования, в результате чего выбор C++ для реализации проекта превращается в пытку для программистов и руководства.

Основное отличие C++, когда он только зарождался, была явная поддержка объектно ориентированного подхода к программированию. Надо понимать, что программировать с использованием ООП и ООА можно где угодно, даже если инструментарий явно его не поддерживает; в качестве примера можно взять библиотеку пользовательского интерфейса GTK+, которая написана на «чистом» Си и использованием принципов объектно- ориентированного «дизайна». Введение в язык программирования средств для поддержки ООП означает то, что на стадии компиляции (а не на стадии выполнения программы) будет производиться проверка совместимости типов, наличия методов и т.п. Это достаточно удобно.

Важной вехой в развитии программирования явилось создание и широкое распространение языка С++. Этот язык, сохранив средства ставшего общепризнанным стандартом для написания системных и прикладных программ языка Си (процедурно ориентированный язык), ввел в практику программирования возможности нового технологического подхода к разработке программного обеспечения, получившего название «объектно ориентированное программирование». [4]

2.1 Структура языка С++

Структура языка С++ показана на рисунке 2.

Рисунок 2. Структура языка С++

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

В следующей части рисунка представлены средства языка – операторы, предназначенные для:

  • Для обработки данных путем, например, получения новых значений объектов программы в операторе присваивания;
  • Для организации процесса обработки данных, например, организации повторяющейся обработки или организация разветвления процесса обработки.

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

В следующей части рисунка представлены средства и механизмы объектно-ориентированного программирования. Представлен новый тип данных, объединяющий данные и функции их обрабатывающие в единое целое – объект.

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

2.2 Достоинства и недостатки

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

  1. Поддержка различных стилей и технологий программирования, включая традиционное директивное программирование, ООП, обобщённое программирование, метапрограммирование (шаблоны, макросы);
  2. Пользовательские функции-операторы, позволяющие кратко и емко записывать выражения над пользовательскими типами в естественной алгебраической форме;
  3. Используя шаблоны, возможно создание обобщённых контейнеров и алгоритмов для разных типов данных, а также специализировать и вычислять на этапе компиляции;
  4. Автоматический вызов деструкторов объектов при их уничтожении, причём в порядке, обратном вызову конструкторов. Это упрощает (достаточно объявить переменную) и делает более надёжным освобождение ресурсов (память, файлы, семафоры и т. п.), а также позволяет гарантированно выполнять переходы состояний программы, не обязательно связанные с освобождением ресурсов (например, запись в журнал);
  5. Высокая совместимость с языком Си, позволяющая использовать весь существующий Си-код (код на Си может быть с минимальными переделками скомпилирован компилятором C++; библиотеки, написанные на Си, обычно могут быть вызваны из C++ непосредственно без каких-либо дополнительных затрат, в том числе и на уровне функций обратного вызова, позволяя библиотекам, написанным на Си, вызывать код, написанный на С++);
  6. Возможность работы на низком уровне с памятью, адресами.

Часть недостатков C++ достались по наследству от его предка – Си. Возможно, они вызваны из-за большей совместимости Си. Это такие недостатки как:

  1. Операции присваивания (=), инкрементации (++), декрементации (--) и другие возвращения значений. В сочетании с обилием операций это позволяет, хотя и не обязывает, создавать трудночитаемые выражения. Наличие этих операций в Си было вызвано желанием получить инструмент ручной оптимизации кода, но в настоящее время оптимизирующие компиляторы обычно генерируют оптимальный код и на традиционных выражениях. С другой стороны, один из основных принципов языков Си и C++ — позволять программисту писать в любом стиле, а не навязывать «хороший» стиль;
  2. Синтаксис, провоцирующий ошибки;
  3. Препроцессор, унаследованный от Си, очень примитивен. Это приводит с одной стороны к тому, что с его помощью нельзя (или тяжело) осуществлять некоторые задачи метапрограммирования, а с другой, вследствие своей примитивности, он часто приводит к ошибкам и требует много действий по обходу потенциальных проблем. Некоторые языки программирования (например, Scheme и Nemerle) имеют намного более мощные и более безопасные системы метапрограммирования (также называемые макросами, но мало напоминающие макросы Си/C++);
  4. C++ позволяет пропускать break в ветви оператора switch с целью последовательного выполнения нескольких ветвей. Такой же подход принят в языке Java. Есть мнение, что это затрудняет понимание кода. Например, в языке C# необходимо всегда писать либо break, либо использовать goto case N для явного указания порядка выполнения.

Собственными недостатками языка С++ являются:

  1. Метапрограммирование на основе шаблонов C++ сложно и при этом ограничено в возможностях. Оно состоит в реализации средствами шаблонов C++ интерпретатора примитивного функционального языка программирования, выполняющегося во время компиляции. Сама по себе данная возможность весьма привлекательна, но такой код весьма трудно воспринимать и отлаживать. Менее распространённые языки Lisp/Scheme, Nemerle имеют более мощные и одновременно более простые для восприятия подсистемы метапрограммирования. Кроме того, в языке D реализована сравнимая по мощности, но значительно более простая в применении подсистема шаблонного метапрограммирования;
  2. Явная поддержка функционального программирования присутствует только в будущем стандарте c++0x. Данный пробел устраняется различными библиотеками (Loki, Boost), использующими средства метапрограммирования для расширения языка функциональными конструкциями (например, поддержкой лямбд/анонимных методов), но качество подобных решений значительно уступает качеству встроенных в функциональные языки решений. Такие возможности функциональных языков, как сопоставление с образцом, вообще крайне сложно эмулировать средствами метапрограммирования. [9]

2.3 История, развитие и особенности

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

Название 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 имеет меньше ресурсов, но предоставляет свободу выбора сторонних библиотек.

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

Глава 3 Язык программирования Java

Достоинствами языка Java можно назвать не только то, что программы на нем можно размещать на Web-страницах. Кроме этого, Java просто мощный и легкий в изучении объектно-ориентированный язык. С его помощью можно решить многие из повседневных сложных задач, которые встречаются программистам, разрабатывающим устойчивые, хорошо работающие приложения. Java при помощи класса thread обеспечивает многопотоковость приложений, а также самостоятельно, в фоновом режиме, производит сборку мусора (garbage collection), освобождая ненужные области памяти. Интерфейс прикладного программирования Java (API), входящий в состав комплекта разработчика Java Developers Kit, созданного фирмой Sun, дает программисту независимый от операционной среды доступ к необходимым для создания сложных приложений Интернет средствам, таким как сетевые сокеты и графическая оконная система. [2]

Java - это мощный современный язык программирования, который разработан фирмой Sun Microsystems. Сначала его планировали применять в системах интерактивного телевидения, однако когда Sun выпустила HotJava, браузер World Wide Web, который позволял "прокручивать" внутри себя небольшие программы, иначе называемые апплетами (от англ. applet, "приложеньице"), вызываемые из Web-страниц, Java серьезно заинтересовал сообщество глобальной компьютерной сети Интернет. Вскоре после этого возможность работы с апплетами была добавлена в самый распространенный Web-браузер - Netscape Navigator 2.0. На сегодняшний день встроенные в Web-страницы апплеты на языке Java стали обязательным атрибутом каждого Web-сервера, претендующего на применение "высокой технологии".

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

Апплеты и программы на Java можно разрабатывать на любом компьютере, оборудованном компилятором Java. Фирма Sun выпустила JDK для следующих платформ:

    • Microsoft Windows 95 и Windows NT;
    • Sun Solaris 2;
    • Apple Macintosh.

В добавление к этим платформам существуют компиляторы и для других платформ, в основном вариантов UNIX, включая Linux - бесплатную, совместимую с UNIX операционную систему для процессоров Intelx86 и DEC Alpha.

Просматриваются апплеты в широко известном браузере Netscape Navigator 2.0, который доступен для большинства компьютерных платформ. Во время написания книги браузер HotJava, распространявшийся с альфа-версией JDK, был несовместим с современной его версией. Поэтому для разработки апплетов его не использовали. [10]

3.1 Особенности

  1. Язык Java ориентирован на программирование для Internet. Но по данному вопросу в Java есть большой компромисс (в принципе как и во всех системных и программных продуктах). С одной стороны, если существует "универсаль­ный" язык программирования, то программы могут быть установлены и будут работать на машинах пользователей незави­симо от характеристик платформы. Поэтому с помощью Java создаются апплеты - программы, которые могут быть загружены из Ин­тернета. Значения не имеет, из-под какой операционной системы происходит подключение к Интернету. Если в ней установлен Java, то она будет работать с апплетами, которые доступны во Всемирной сети. С другой стороны, программы, написанные на Java, работают значи­тельно медленнее, чем программы, которые скомпилированы для конкретной архитектуры (из-за наличия виртуальной машины). В среднем код Java будет работать в 10 раз медленнее чем, например программа, написанная на языке С++. Но по мере того как процессоры становятся все быстрее, а Интернет становится средой распространения про­грамм, недостаток в скорости, за счет которого достигается уни­версальность, выглядит все более приемлемым компромиссом.
  2. Java - это объектно-ориентированный язык программирования. Он придуман для того, чтобы создавать графические при­ложения с управлением событиями (то есть для создания графического пользовательского интерфейса, который поддерживает действия по типу "укажи и щелкни" (point and click). Такие приложения могут быть самостоятельными программами (Application) или апплетами (Applet), за­гружаемыми из Интернета. Java обладает основными синтаксиче­скими особенностями структурированных языков программиро­вания: последовательным (линейным), условным (ветвление) и повторяющимся (циклы) выполнением блоков кода.
  3. Кросс-платформенность – это особенность языка Java, которым объясняются все остальные главные свойства данного языка: с технической точки зрения, Java — это язык, работающий на виртуальной машине. По идее можно создать архитектуру, которая будет непосредственно выполнять код Java, однако в стандартной среде, такой как Windows или UNIX, установка Java на компьютере означает, что установлена виртуальная машина. Когда программы работают, считается, что они функционируют на виртуальной машине. В других языках, таких как С или C++, в результате компиляции получается выполняемый файл, содержащие машинные команды для той архитектуры, для которой был создан компилятор (т.е. откомпилированный код программы привязан к операционной системе). Для языка Java этот процесс также называется компиляцией, но он не является компиляцией в буквальном смысле слова. В результате компиляции кода для Java создается код на языке Byte-code (байт-код), т.е. код, работающий в виртуальной Java-машине (стандарт байт-кода близок к машинным кодам). Байт-код не привязан ни к языку программирования, ни к операционной системе. А сама виртуальная Java-машина ориентирована на определенную ОС.
  4. Java сразу был создан как объектно-ориентированный язык в отличие от языка C++, являющийся объектно-ориентированной эволюцией языка С (в этом преимущество языка Java перед C++). Поэтому Java позволяет создавать графические приложения, которые невозможно написать на таких языках программирования, как С. Кроме того, код, написанный на Java, может быть значительно проще, чем код, который написан на C++, чтобы выполнить ту же задачу. В заключение нужно сказать, что язык С# был создан для той же самой цели, что и язык Java, поэтому С# является его прямым конкурентом, который по своим. характеристикам может быть не хуже или даже способен превосходить Java в некоторых аспектах.
  5. Java не дает возможность написать код, который напрямую обращается к адресам в памяти компьютера, как в некоторых языках, таких как С и C++ (путем использования указателей). Эта характеристика языка Java поддерживает безопасность программ. Программисты знают, что программы, которые напрямую имеют доступ к памяти, могут, преднамеренно или случайно, навредить системе. По этой причине прямой доступ к памяти нежелателен в Java. Когда пользователи запускают программы, они хотят быть уверенными, что эти программы не будут разрушать их системы из-за прямого доступа к памяти.

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

3.2 История

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

Нотон, хотя и не рассчитывал на то, что кто-то обратит внимание на его письмо, все же выдвинул свои претензии, беспощадно раскритиковав недостатки Sun Microsystems, в частности, разрабатываемую в тот момент архитектуру ПО NeWS. К удивлению Нотона, его письмо приобрело успех: оно было разослано всем ведущим инженерам Sun Microsystems, которые незамедлительно откликнулись и высказали горячую поддержку своему коллеге и одобрение его взглядов на ситуацию в Sun Microsystems. Обращение вызвало одобрение и у высшего руководства компании, а именно, у Билла Джоя (Bill Joy), основателя Sun Microsystems, и Джеймса Гослинга (James Gosling), начальника Нотона.

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

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

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

Вскоре компания Sun Microsystems преобразовала команду Green в компанию First Person. Новая компания владела интересной концепцией, но не могла найти ей подходящего применения. После ряда неудач неожиданно ситуация для компании резко изменилась: был анонсирован Mosaic - так родился World Wide Web, с которого началось бурное развитие Internet.

Нотон предложил использовать Oak в создании Internet- приложений. Так Oak стал самостоятельным продуктом. Чуть позже был написан Oak-компилятор и Oak-браузер "WebRunner". В 1995 году компания Sun Microsystems приняла решение объявить о новом продукте, переименовав его в Java (единственное разумное объяснение названию - любовь программистов к кофе). Когда Java оказалась в руках Internet, пришло время запускать Java-аплеты - небольшие программы, загружаемые через Internet. WebRunner был переименован в HotJava и компания Netscape встала на поддержку Java-продуктов. [11]

3.3 Развитие языка 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. Эта версия содержала несколько особых модернизаций, усовершенствований и добавлений. Например, в нее было добавлено новое ключевое слово assert , цепочки исключений и подсистема ввода-вывода на основе каналов. Изменения были внесены и в инфраструктуру Collections Framework, и сетевые классы. Эта версия содержала также много небольших изменений. Несмотря на заметное количество новых функциональных возможностей, версия 1.4 сохранила почти стопроцентную совместимость по исходному коду с предшествующими версиями. 

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

  1. обобщения;
  2. аннотации;
  3. автоупаковка и автораспаковка;
  4. перечисления;
  5. усовершенствованный, поддерживающий стиль for - each , цикл for;
  6. список аргументов переменной длины (varargs);
  7. статический импорт;
  8. форматированный ввод-вывод;
  9. утилиты параллельной обработки.

В этом перечне не указаны незначительные изменения или постепенные усовершенствования. Каждый пункт перечня представлял значительное добавление в языке 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.

Заключение

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

Список использованных источников

1. Беркунський Е.Ю. Объектно-ориентированное программирование на языке Java: Методические указания для студентов направления "Компьютерные науки". - М.: НУК, 2006. - 52 с.

2. Вязовик Н.А.. Программирование на Java. Курс лекций, Интернет-университет информационных технологий, 2003. 592 с.

3. Грэхем Иан. Объектно-ориентированные методы. Принципы и практика. — 3-е изд. — М.: «Вильямс», 2004. 800 с.

4. Дейтел П.Дж., Дейтел Х.М. Как программировать на С++. Введение в объектно-ориентированное проектирование с использованием UML. / Пер. с англ. - М.: Издательство <Бином>, 2009. 1454 с.

5. Либерти Джесс. Освой самостоятельно C++ за 21 день. - Вильямс, г. Москва, 2001. 816 с.

6. Пол Ирэ, "ООП с использованием С++", Киев, "ДиаСофт", 2010. 480 с.

7. Секунов Н. Самоучитель Visual C++ 6. изд. «БХВ-Петербург», Санкт-Петербург, 2003. 925 с.

8. Синтес Антони. Освой самостоятельно объектно-ориентированное программирование за 21 день. — М.: «Вильямс», 2002. 372 с.

9. Страуструп Бьерн. Язык программирования С++. Бином, 2008. 369 с.

10. Хабибуллин И.Ш. Самоучитель Java 2. СПб.: БХВ-Петербург, 2007. 720 с.

11. Шилдт Герберт, Холмс Джеймс, Искусство программирования на Java, 2005. 336 с.

12. Эккель Б. Философия Java. Библиотека программиста. СПб.: Питер, 2001. 640 с.

Приложение 1