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

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

Содержание:

Введение

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

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

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

Ответом на первую цель является язык, который настолько «близкий к машине», что все основные машинные аспекты могут легко и просто быть использованы для программиста очевидным образом. Для ответа на вторую цель идеальным является язык, который настолько «близкий к решаемой задаче», чтобы её концепция решения может быть выражена коротко и прямо.

В настоящее время C++ считают господствующим языком, который используют для того, чтобы разработать коммерческие программные продукты. За последние годы данное господство поколебалось, так как были аналогичные претензии от такого языка как Java, но при этом общественное мнение качнулось в другую сторону, и множество из программистов, которые бросили C++ ради Jаvа, за последнее время вернулись к своей прежней привязанности. При этом оба языка являются похожими, что, если вы изучаете один из них, то автоматически усваиваете 90% другого.

Целью настоящей курсовой работы является изучение истории возникновения и развития языка программирования Си (C++) и Java.

Поставленная цель потребовала постановку следующих задач:

1. Изучить истории программирования в целом.

2. Изучение истории языка программирования Си (C++).

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

4. Сравнение языков С++ и Java.

Объект исследования в данной работе являются языки программирования Си (C++) и Java. Предмет исследования является - история таких языков программирования, как Си (C++) и Java.

1 История развития программирования

Под программированием понимается процедура разработки программ для компьютера.

Никлаус Вирт, один из основателей языков программирования, говорил, что программы состоят из структуры данных и алгоритмов [1].

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

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

В 1206 году Аль-Джазари сконструировал программируемый автомат-гуманоид. Одна система, которая была задействована в этих устройствах, использовала кулачки и зажимы, помещённые в деревянный ящик в определённых местах. Эти зажимы и кулачки поочередно задействовали рычаги, которые управляли ударными инструментами[3].

В 1804 году Жозефом Мари Жаккаром был построен жаккардовый ткацкий станок. Этот станок произвёл революцию в ткацкой промышленности, так как с помощью его стало возможным с помощью перфокарт программировать узоры на тканях. Такой жаккардовый ткацкий станок некоторые считают самым первым программируемым устройством [3].

19 июля 1843 года Чарлзом Бэббиджем была спроектирована «Аналитическая машина», которая так и не была им построена. «Аналитическая машина» — это первое программируемое вычислительное устройство[2].

Ада Августа Лавлейс, графиня, дочь великого английского поэта Джорджа Байрона 19 июля 1843 года создала первую в истории человечества программу для Аналитической машины, спроектированной Чарлзом Бэббиджем. Эта программа умела решать уравнение Бернулли, которые выражали закон сохранения энергии движущейся жидкости.

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

В трудах Лавлейс и Бэббиджа были определены следующие понятия:

- подпрограмма;

- библиотека подпрограмм;

- модификация команд;

- индексный регистр.

Эти понятия начали употребляться лишь в 1950-х годах[2].

Не смотря на все вышесказанное, ни одна из программ, которая была написана Адой Лавлейс, никогда так и не была запущена[2].

1.1 Развитие программирования в СССР

Выпущенная в начале 1956 года книга «Электронные цифровые машины», написанная Анатолием Ивановичем Китовым, является первой открытой книгой по электронным вычислительным машинам и программированию в СССР[5]. Заключительная часть указанной выше книги раскрывает неарифметическое использование ЭВМ, то есть применение компьютеров в целях управления производственными процессами, решению задач искусственного интеллекта, экономики, машинного перевода и тому подобное. Книга Анатолия Ивановича Китова была переведена на различные иностранные языки и опубликована в таких странах как Китай, США, Польша, Чехословакия и в ряде других стран[5].

Президент Академии наук Советского Союза Г. И. Марчук писал об этой книге следующее:

«Вышедшая в 1956 году книга А. И. Китова «Электронные цифровые машины» фактически перевернула сознание многих исследователей».

В. М. Глушаков – выдающийся учёный современности писал:

«А. И. Китов — признанный пионер кибернетики, который заложил основы отечественной школы программирования и применения ЭВМ для решения народнохозяйственных и военных задач. Я сам, как и десятки тысяч иных специалистов, получил свои начальные компьютерные знания из его книги «Электронные цифровые машины» — первой отечественной книги по программированию и ЭВМ» [7].

Джон Карр, профессор Мичиганского университета, в своем научном труде «Лекции по программированию», написанном в 1958 году в США, писал о том, что, когда он проанализировал по рассматриваемой им тематике около 150 книг, выпущенных в мире на тот момент времени, вопросы как автоматического, так и ручного программирования были лучше всего рассмотрены в книге Анатолия Ивановича Китова.

Через пол года в том же году вышла в свет еще одна книга под редакцией А. И. Китова «Элементы программирования» (для электронных вычислительных машин). Соавторами А. И. Китова при написании это книги были Н. А. Криницкий и П. Н. Комолов.

Данная книга состояла из трёхсот страниц и стала второй общедоступной компьютерной монографией в Советском Союзе.

В заключении этой книги написано: «Широкое использование электронно-вычислительных машин поднимет на новый небывало высокий уровень все виды производства в нашей стране, позволит резко увеличить материальное благосостояние нашего народа и значительно укрепить обороноспособность нашей Родины» [7].

Указанные выше две книги, покрыли огромный дефицит литературы по программированию и электронно-вычислительным машинам, который существовал на тот момент в СССР.

Книга «Электронные цифровые машины и программирование» Китова А. И. и Криницкого Н. А., написанная в 1959 году, явилась первым официальным учебником по программированию и электронно-вычислительным машинам в Советском Союзе, который был официально допущен Министерством образования СССР для обучения в высших учебных заведениях того времени.

Г. И. Марчук Президент Академии наук СССР писал об этой книге следующее: «В 1959 году появился другой фундаментальный труд А. И. Китова, написанный вместе с Н. А. Криницким — «Электронные цифровые машины и программирование». Это была фактически энциклопедия науки об электронно-вычислительных машинах. Многие поколения студентов в университетах и вузах страны с помощью этой замечательной книги получили фундаментальное образование и стали первоклассными учеными во многих областях знаний. Книги А. И. Китова, написанные в начале эры электронно-вычислительных машин в нашей стране, не должны быть забыты».

Данная книга издавалась в Венгрии, Румынии, ГДР и некоторых других странах. В 1961 году вышло в свет второе стереотипное издание книги «Электронные цифровые машины и программирование». Свыше 130 000 экземпляров составил общий тираж двух советских и иностранных изданий.

Об этом учебнике-энциклопедии в своих воспоминаниях ветеран кафедры вычислительной техники МЭИ (первая кафедра электронно-вычислительных машин в стране), д.т.н., профессор А. К. Поляков написал так: «По-моему мнению, учебник А. И. Китова и Н. А. Криницкого «Электронные цифровые машины и программирование», написанный в 1959 году, в то время был лучшим в мире».

2 История создания языка программирования C++ и С

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

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

Под компилятором понимается техническое средство или программа, которая выполняет компиляцию[8].

Под компиляцией понимается трансляция программы, которая составлена на исходном языке высокого уровня, в эквивалентную программу на низкоуровневом языке, близком машинному коду (абсолютный код, объектный модуль, иногда на язык ассемблера)[9].

Исходным кодом для компилятора является описание алгоритма или программа на предметно-ориентированном языке, а на выходе компилятора получается объектный код [9].

Распространение входного кода способствовало уникальности операционной системы UNIX. Уникальность заключалась в том, что программист мог изменить операционную систему, при этом исходный код мог быть перенесен с одной аппаратной платформы на другую.

На сегодняшний день стандарт POSIX указывает стандартный набор системных вызовов UNIX, которые доступны в С. Этот стандартный набор системных вызовов должен быть реализован в версиях UNIX, которые являются совместимыми с POSIX.

Томсоном и Ритчи в процессе создания UNIX, до С было создано еще два языка программирования: А и В.

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

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

Язык С является, касаемо синтаксиса и грамматики, структурным языком программирования[10].

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

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

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

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

В 1983 году Американским Национальным Комитетом Стандартов (ANSI) был сформирован технический комитет X3J11. Задачей данного комитета явилось создание стандарта языка C. Это было сделано, чтобы обеспечить машинно-независимое и недвусмысленное определение языка C.

В 1989 году такой стандарт был создан и утвержден. Американский Национальный Комитет Стандартов был объединен с Международной Организацией Стандартов (ISO) для того, чтобы в международном масштабе стандартизовать язык C. Совместно созданный стандарт получил название ANSI/ISO 9899:1990 и был опубликован в 1990 году. Стандарт ANSI/ISO 9899:1990 модернизируется до сих пор и его использует большинство фирм разработчиков компиляторов[11].

Бьерн Страуструп высвободил объектно-ориентированный потенциал С путем перенесения возможностей классов Simula 67 в С.

Изначально обновленный язык назывался «С с классами», а затем получил название C++. На сегодняшнее время язык C++ уже не такой популярный как ранее. Язык C++ наследует от языка С как преимущества, так и недостатки.

Бьерн Страуструп писал о языке C++:

"Я придумал C++, записал его первоначальное определение и выполнил первую реализацию. Я выбрал и сформулировал критерии проектирования C++, разработал его основные возможности и отвечал за судьбу предложений по расширению языка в комитете по стандартизации C++", - пишет автор одного из самых популярных языков программирования. - "Язык C++ во многом обязан языку C, и язык C остается подмножеством языка C++, но в C++ устранены несколько серьезных ошибок системы типов C. Я также сохранил средства C, являющиеся достаточно низкоуровневыми, чтобы справляться с самыми критическими системными задачами. Язык C, в свой черед во многом обязан своему предшественнику, BCPL, в месте с тем, стиль комментариев // был взят в C++ именно из BCPL. Иным базовым источником вдохновения был язык программирования Simula67. Концепция производных классов и виртуальных функций была позаимствована из этого языка программирования[9]. Средства перегрузки операторов и возможность помещения объявлений в любом месте, где может быть записана инструкция, напоминает Algol68. "

Название C++ предложил Рик Масситти. Выбранное название обозначает эволюционную природу перехода к нему от C. Символы «++» означают операцию приращения в C. Если использовать один «+» вместо двух, то это будет являться синтаксической ошибкой; помимо этого, данное название уже было использовано как имя совсем иного языка программирования. Знатоки семантики C считают, что C++ намного хуже, чем обозначение ++C. Имя D этот язык не получил, так как он является расширением C и в нем не делается попыток исцеляться от проблем путем выбрасывания различных особенностей.

Вначале язык программирования C++ был разработан для того, чтобы автору данного языка и его друзьям не приходилось программировать на ассемблере, C или других языках высокого уровня. Основной целью было достичь того, чтобы сделать написание хороших программ более простым и приятным для отдельного программиста. Плана разработки языка C++ на бумаге никогда не было; документация, проект и реализация двигались одновременно[9].

Естественно, внешний интерфейс C++ был написан на C++. Никогда не существовало "Проекта C++" и "Комитета по разработке C++". Поэтому C++ развивался во всех направлениях, чтобы справляться со сложностями, с которыми сталкиваются пользователи, а также в процессе дискуссий автора с его друзьями и коллегами[10].

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

Инкапсуляция в С++ сохраняется с помощью создания пользовательских типов данных, которые называются классами.

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

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

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

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

В этом разделе курсовой работы кратко описывается история языка Java. В основу этого раздела положены различные опубликованные материалы (в основном, интервью с создателями языка Java в июльском выпуске электронного журнала SunWorld за 1995 год)[12].

История Java восходит к 1991 году, когда группа инженеров из компании Sun под руководством Патрика Нотона (Patrick Naughton) и члена Совета директоров (и разностороннего компьютерного волшебника) Джеймса Гослинга (James Gosling) занялась разработкой небольшого языка, который можно было бы использовать для программирования бытовых устройств, например, контроллеров для переключения каналов кабельного телевидения (cable TV switchboxes).

Поскольку такие устройства не потребляют много энергии и не имеют больших микросхем памяти, Java должен был быть маленьким и генерировать очень компактные программы. Кроме того, поскольку разные производители могут выбирать разные центральные процессоры (Central Processor Unit— CPU), было важно не завязнуть в какой-то одной архитектуре компьютеров. Проект получил кодовое название "Green"[11].

Центральный процессор - электронный блок либо интегральная схема (микропроцессор), исполняющая машинные инструкции (код программ), главная часть аппаратного обеспечения компьютера или программируемого логического контроллера. Иногда называют микропроцессором или просто процессором[5].

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

Никлаус Вирт, создатель языка Pascal, в свое время разработал машинонезависимый язык, генерирующий промежуточный код для некоей гипотетической машины. Этот язык стал коммерческим продуктом под названием UCSD Pascal. (Такие гипотетические машины часто называются виртуальными — например, виртуальная машина языка Java, или JVM.)

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

Интерпретатор — программа (разновидность транслятора), выполняющая интерпретацию[5].

Интерпретация — построчный анализ, обработка и выполнение исходного кода программы или запроса (в отличие от компиляции, где весь текст программы, перед запуском, анализируется и транслируется в машинный или байт-код, без её выполнения) [5].

Однако большинство сотрудников компании Sun имели опыт работы с операционной системой UNIX, поэтому в основу разрабатываемого ими языка был положен язык C++, а не Pascal. В частности, они сделали язык объектно-, а не процедурно-ориентированным.

Как сказал Гослинг в своем интервью: "Язык — это всегда средство, а не цель".

Сначала Гослинг решил назвать его "Oak" ("Дуб"). (Возможно потому, что он любил смотреть на дуб, растущий прямо под окнами его офиса в компании Sun.) Потом сотрудники компании Sun узнали, что слово Oak уже используется в качестве имени ранее созданного языка программирования, и изменили название Java[13].

В 1992 году в рамках проекта Green была выпущена первая продукция, названная "*7". Это было средство для чрезвычайно интеллектуального дистанционного управления. (Оно имело мощность рабочей станции SPARK, помещаясь в коробочке размером 6x4x4 дюйма.) К сожалению, ни одна из компаний— производителей электронной техники не заинтересовалась этим изобретением.

Затем группа стала заниматься разработкой устройства для кабельного телевидения, которое могло бы осуществлять новые виды услуг, например, включать видеосистему по требованию. И снова они не получили ни одного контракта. Забавно, что одной из компаний, отказавшихся подписать с ними контракт, руководил Джим Кларк (Jim Clark) — основатель компании Netscape, впоследствии сделавшей очень много для успеха языка Java[14].

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

Тем временем в рамках Интернет разрасталась сеть World Wide Web. Ключом к этой сети является браузер, превращающий гипертекст в изображение на экране.

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

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

На самом деле браузер был разработан Патриком Нотоном и Джонатаном Пэйном (Johnatan Payne). Позднее он превратился в современный браузер HotJava. Этот браузер был написан на языке Java, чтобы продемонстрировать всю его мощь. Однако разработчики не забывали о мощных средствах, которые теперь называются апплетами, наделив свой браузер способностью выполнять код внутри Web-страниц[14].

"Демонстрация технологии" была представлена на выставке Sun World '95 23 мая 1995 года и вызвала всеобщее помешательство на почве языка Java, продолжающееся и поныне.

Компания Sun выпустила первую версию языка Java в начале 1996 года. Через несколько месяцев после нее появилась версия Java 1.02. Люди быстро поняли, что версия Java 1.02 не подходит для разработки серьезных приложений. Конечно, эту версию можно применять для разработки Web-страниц с пляшущими человечками, однако в версии Java 1.02 ничего нельзя даже напечатать.

Честно говоря, версия Java 1.02 была еще сырой. Ее преемница, версия Java 1.1, заполнила большинство провалов, намного улучшив возможность отражения и добавив новую модель событий для программирования графического пользовательского интерфейса. Несмотря на это, она все еще была довольно ограниченной.

Выпуск версии Java 1.2 стал основной новостью конференции JavaOne в 1998 году.

В новой версии слабые средства для создания графического пользовательского интерфейса и графических приложений были заменены сложным и масштабным инструментарием. Это был шаг вперед, к реализации лозунга "Write Once, Run Anywhere" ("Один раз напиши— и везде выполняй"), выдвинутого при разработке предыдущих версий.

В декабре 1998 года через три дня после выхода в свет название новой версии было изменено на громоздкое словосочетание Java 2 Standart Edition Software Development Kit Version 1.2. Стандартное издание пакета инструментальных средств для разработки программного обеспечения на языке Java 2, версия 1.2.

Кроме стандартного издания пакета ("Standart Edition") были предложены еще два варианта: "микроиздание" ("Micro Edition") для портативных устройств, например, для мобильных телефонов, и "промышленное издание" ("Enterprise Edition") для создания серверных приложений[14].

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

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

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

Компанией Microsoft позже был предложен язык C#, который представлял собой очередную переработку C++ в том же направлении, что и Java. Затем появился язык Nemerle, в котором к средствам C# добавлены средства функционального программирования. Ещё позже появилась попытка объединения эффективности C++ с безопасностью и скоростью разработки Java и C# — был предложен язык D, который до сих пор не получил широкого признания.

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

4.1 Синтаксис

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

4.2 Исполнение программы

Java-код компилируется в промежуточный код, который в дальнейшем интерпретируется или компилируется, а C++ изначально ориентирован на компиляцию в машинный код заданной платформы (хотя, теоретически, можно создавать для C++ трансляторы в промежуточный код).

Все это определяет сферу применения данных языков, например, на Java не напишешь низкоуровневые системные утилиты или драйверы для устройств[11].

Механизм исполнения Java делает программы, даже откомпилированные полностью переносимыми. Стандартное окружение и среда исполнения делают программы на Java на любой аппаратной платформе и в любой операционной системе, без изменений, усилия по переносу программ минимальны (при соблюдении рекомендаций по созданию переносимых программ — и вовсе нулевые). Ценой переносимости становится потеря эффективности — работа среды исполнения приводит к дополнительным накладным расходам[12].

4.3 Управление ресурсами

C++ позволяет использовать принцип «захват ресурсов путём инициализации» (RAII), при котором ресурсы ассоциированы с объектом и автоматически освобождаются при разрушении объекта (например, std::vector и std::ifstream). Также возможен подход, когда программист, выделяя ресурсы, обязан явно позаботиться о своевременном их освобождении[12].

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

4.4 Стандартизация окружения

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

4.5 Указатели

В C++ есть возможность работы с низкоуровневыми указателями. В Java же указателей нет.

Применение указателей зачастую является причиной труднообнаруживаемых ошибок, что является необходимым для низкоуровневого программирования[14].

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

4.6 Парадигма программирования

В отличие от С++, язык программирования Java является чисто объектно-ориентированным языком, без возможности процедурного программирования. Для объявления свободных функций или глобальных переменных в Java необходимо создавать фиктивные классы, содержащие только static члены.[13] Для задания главной функции даже самой простой программы на Java необходимо поместить её в класс.[12]

4.7 Динамическая информация о типах

в C++ RTTI ограничена возможностью сравнивать типы объектов между собой и с буквальными значениями типов. В системе Java доступна более подробная информация о типах. Эту возможность можно было бы реализовать в C++, имея полную информацию о типах во время компиляции CTTI.

4.8 Препроцессор

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

Есть мнение, что этот механизм небезопасен, так как имена макросов препроцессора глобальны, а сами макросы почти никак не связаны с конструкциями языка. Это может приводить к сложным конфликтам имён.

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

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

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

Далеко не все программисты являются сторонниками одного из языков. По мнению большинства программистов, Java и C++ не являются конкурентами, потому что обладают различными областями применимости. Другие считают, что выбор языка для многих задач является вопросом личного вкуса.

Заключение

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

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

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

В ходе работы поставленная цель была достигнута, задачи были решены.

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

1. Себеста, Р. У. Основные концепции языков программирования / Пер. с англ. — 5-е изд. — М.: Вильямс, 2001. — 672 с.

2. Кнут, Д. Искусство программирования. В четырёх томах / Пер. с англ. — М.: Вильямс, 2001 − 2013.

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

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

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

6. Макки, А. Введение .Net 4.0 и Visual Studio 2010 для профессионалов. — Москва: ООО "И.Д. Вильямс", 2010. — 416 с.

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

8. Гарнаев, А. WEB-программирование на Java и JavaScript / А. Гарнаев , С. Гарнаев. - Москва: СПб. [и др.] : Питер, 2017. - 718 c.

9. Сухов, С. А. Основы программирования на Java [Текст]: учебное пособие - Ульяновск: УлГТУ, 2006. - 88 с.

10. Чен, М.С. Программирование на JAVA.1001 совет. Наиболее полное руководство по Java и Visual J++ : Пер. с англ./Чен М.С., Грифис С.В., Изи Э.Ф. - Минск: Попурри, 1997.- 640 с.

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

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

13. Шилдт Герберт Искусство программирования на Java / Шилдт Герберт, Холмс Джеймс. – М.: «Вильямс», 2005. – 336 с.

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