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

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

Содержание:

Введение

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

В настоящее время интерес к созданию новых языков программирования снизился (и в мире, и в России), а круг используемых языков стабилизировался. Наступил момент для анализа использования современных языков программирования. 

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

Цель работы – изучить современные языки программирования.

Достижение указанной цели определило постановку и решение следующих задач:

  • исследовать понятие и виды языков программирования;
  • просмотреть историю создания языков программирования;
  • провести сравнение языков программирования Java и C++.

Предметом исследования можно назвать два языка программирования: C++ и Java.

Объектом исследования являются языки программирования Java и C++.

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

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

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

Глава 1. Теоретические основы языков программирования

1.1. Содержание понятия и классификация языков программирования

Сегодня практически все программы создаются с помощью языков программирования. Теоретически программу можно написать и на естественном языке (говорят: программирование на метаязыке), но из-за неоднозначности естественного языка автоматически перевести такую программу в машинный код пока невозможно[1].

Языки программирования — это формальные искусственные языки. Как и естественные языки, они имеют алфавит, словарный запас, грамматику и синтаксис, а также семантику[2].

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

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

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

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

Языки программирования, ориентированные на команды процессора и учитывающие его особенности, называют языками низкого уровня. «Низкий уровень» не означает неразвитый, имеется в виду, что операторы этого языка близки к машинному коду и ориентированы на конкретные команды процессора[3].

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

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

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

Среднеуровневые языки часто используются для первых шагов в «мир программирования», так как они довольно несложны в изучении, но уже могут использоваться для каких-либо реальных проектов. К среднеуровневым языкам относятся язык JAVA, С#.

Плюсы:

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

Минусы:

  • Требуется дополнительно установленная среда для выполнения байт-кода (Java Runtime Environment для Java); сложно для освоения новичку, так как надо понимать, как устроена память, сборка мусора;
  • Абстракций стало ненамного меньше.

Языки программирования, имитирующие естественные, обладающие укрупненными командами, ориентированные «на человека», называют языками высокого уровня. Чем выше уровень языка, тем
ближе структуры данных и конструкции, использующиеся в программе, к понятиям исходной задачи[6]. Особенности конкретных компьютерных архитектур в них не учитываются, поэтому исходные тексты программ легко переносимы на другие платформы, имеющие
трансляторы этого языка. Разрабатывать программы на языках высокого уровня с помощью понятных и мощных команд значительно проще, число ошибок, допускаемых в процессе программирования,
намного меньше. В настоящее время насчитывается несколько сотен таких языков (без учета их диалектов). Самыми известными являются PHP, Python, Ruby, Javascript.

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

Минусы: Сравнительно низкая производительность; Страдает архитектура (изменения могут вноситься в любом месте кода, а не там, где это действительно нужно).

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

Языки программирования могут быть реализованы как компилируемые и интерпретируемые[8].

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

К примеру, код, выводящий на экран фразу “Hello, world!”, написанный на Java:

public class HelloWorld {

public static void main(String[] args) {

System.out.println("Hello, world!");

}

}

 И то же самое на машинном коде для процессора архитектуры х86:

BB 11 01 B9 0D 00 B4 0E 8A 07 43 CD 10 E2 F9 CD 20 48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21

Исходный код, вместо компиляции в машинный код, исполняется специальной программой интерпретатором.

Главными плюсами таких языков являются кроссплатформенность (один и тот же код будет работать на разных операционных системах) и динамическая типизация (переменная связывается с типом – число, строка, указатель - в момент присваивания данных, а не в момент ее объявления)

Рис. 2. Программа написанная с использованием интерпретируемых языков

Также программы, написанные с использованием интерпретируемых языков, можно запускать сразу же после изменений в коде, что облегчает разработку. К таким языкам относятся Python, Ruby, Perl, PHP[9].

1.2. История создания языков программирования

На первый взгляд это может показаться странным, но программирование старше, чем языки программирования[10].

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

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

Хотя к этому времени (40-е годы XX столетия) уже была известна модель хранимой программы фон Неймана, элементная база еще не позволяла создавать оперативные запоминающие устройства достаточного объема для хранения кодов инструкций, их едва хватало для хранения данных (память размером в 1000 машинных слов считалась огромной и стоила астрономическую сумму). Поэтому между теорией и практическим ее воплощением прошло несколько лет, пока, наконец, не появились действительно универсальные цифровые ЭВМ, позволяющие быстро менять программы путем загрузки их в оперативную память. Громоздкие коммутационные панели, опутанные клубками проводов, исчезли, их заменили массивы кодов инструкций, загружаемых с различных устройств хранения информации: перфолент и перфокарт, магнитных лент, барабанов.

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

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

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

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

  • формирование кода команды;
  • вычисление физических адресов ячеек с данными;
  • вычисление смещений для команд условного и безусловного ветвлений.

Для первой проблемы было найдено следующее решение: для каждой машинной команды были подобраны краткие мнемоники, отражающие ее суть. Например, для команды пересылки данных - MOV, для команды сложения - ADD и т.п. Такие мнемоники намного легче запомнить, чем двоичные, восьмеричные или шестнадцатеричные коды команды; кроме того, их не в пример легче читать, а это тоже немаловажно при отладке программы или ее изменении.

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

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

- языками ассемблера, или, кратко, тоже ассемблерами.

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

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

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

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

FORTRAN был первым успешно реализованным языком программирования высокого уровня. Разрабатывался он во времена жесточайшего дефицита оперативной памяти, который ставил под сомнение саму возможность практической реализации компилятора какого-либо из языков высокого уровня (ЯВУ).

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

Несмотря на отсутствие опыта (откуда же ему было взяться у разработчиков первого компилятора, когда даже теория компиляции еще не была разработана), эта задача была решена разработчиками блестяще: компилятор FORTRAN I для мэйнфреймов IBM удерживал рекорд по степени оптимизации кода в течение 20 лет! Хотя этому меньше удивляешься, узнав, что во главе разработки стоял гениальный Джон Бэкус, а в его команду входили Ш. Бест, Х. Геррик, П. Шеридан, Р. Натт, Р. Нельсон, И. Зиллер, Р. Голдберг, Л. Хейбт и Д. Сейр. Немалую роль сыграла и поддержка коллектива руководством IBM, даже несмотря на то, что проект потребовал куда больше ресурсов, чем первоначально планировалось.

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

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

Наконец, в 1961 г. был выпущен FORTRAN IV, который представлял собой рафинированный вариант FORTRAN II, лишенный некоторых аномалий и машинно-зависимых особенностей. Именно эта версия получила наибольшее распространение среди ученых и инженеров и служила им верой и правдой более 30 лет, будучи реализованной практически на всех мэйнфреймах, мини-ЭВМ и персональных компьютерах, с которыми мне когда-либо доводилось иметь дело.

С мая 1962 г. началась работа по стандартизации языка, результатом которой стал FORTRAN 66 - первый в мире стандарт на ЯВУ. Язык заслуженно получил очередной титул "первый".

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

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

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

На этом эволюция языка-долгожителя не остановилась, и в 1990 г. увидел свет очередной стандарт, FORTRAN 90. Впрочем, он слишком опоздал со своим появлением, дав приличную фору по времени своим конкурентам, главным из которых явился, безусловно, C++. Несмотря на очевидные усовершенствования языка, FORTRAN 90 не получил такого ошеломляющего успеха, как его знаменитые предшественники, и удовольствовался весьма скромной нишей. Не прибавило ему популярности и появление следующего стандарта, FORTRAN 95. Новое поколение программистов ориентировано на C++, Java и C#, и старому доброму FORTRANу, увы, нечего им противопоставить.

Третье поколение языков программирования представляет Algol 60. Algol разрабатывался комитетом, специально созданным для разработки языка высокого уровня общего назначения, пригодного для научных вычислений (хотя в промышленности в то время царила эйфория, навеянная успехом FORTRAN'а, в академической среде находились люди, способные заглянуть дальше и видящие, в какой тупик со временем неизбежно заведет FORTRAN).

Как и в большинстве других языков программирования, программа на Algolе состоит из главной программы и набора подпрограмм. При их построении используются блоки - наборы описаний и последовательности операторов, ограниченные "скобками" begin и end. Структуры данных, созданные внутри блока, локальны в его пределах и при выходе из блока уничтожаются. Таким образом можно управлять временем жизни данных и областью видимости их идентификаторов.

Четвертое поколение представлено языками поддержки сложных структур данных. Ярким примером можно назвать язык SQL.

Язык SQL был разработан в конце 70-х годов в компании IBM и был впервые реализован в реляционной СУБД IBM System R. В дальнейшем, благодаря своей элегантности, независимости от специфики компьютера и поддержке лидерами в области технологии реляционных баз данных, SQL стал и в обозримом будущем останется стандартом "де-факто" для всех реляционных систем обработки данных.

Первый международный стандарт языка SQL был принят в 1989 году ANSI. Этот стандарт называют SQL/89. Подавляющее большинство СУБД поддерживают этот стандарт полностью. В связи с развитием информационных технологий через некоторое время возникла необходимость расширения стандарта. В 1992 году был принят новый стандарт SQL/92. Затем в 1999 году был принят стандарт SQL/99 и, наконец, самый последний стандарт языка SQL был принят в 2003 году и носит название SQL/2003. Стоит, правда, сказать о том, что не все СУБД ограничиваются полной поддержкой стандарта и часто добавляют в язык SQL какие-то специфичные возможности с целью повышения конкурентоспособности СУБД.

Следующее поколение – это языки искусственного интеллекта.

Когда-то в 60-х годах очень бурно развивалась теория автоматического доказательства теорем и Робинсоном был предложен алгоритм резолюций, который позволял доказать любую верную теорему (вывести из аксиом) за конечное время (за какое не известно). Как оказалось позже, это наилучшее решение общей задачи, невозможно доказать теорему за ограниченное число операций. Простыми словами, алгоритм представляет собой обход (в общем случае бесконечного) графа в ширину, естественно, что предсказуемость работы алгоритма практически равно 0, соответственно для Языка Программирования — это абсолютно не подходит. И в этот момент Кальмэроу нашел блестящее сужение задачи, благодаря которому доказательство некоторых теорем выглядело как процедурное исполнение программы. Стоит отметить, что класс доказуемых теорем достаточно широк и очень хорошо применим для класса программируемых задач. Вот так в 1972 году появился Prolog.

В 1977 году в Эдинбурге Уоррен и Перейра создали очень эффективный компилятор языка Пролог для ЭВМ DEC–10, который послужил прототипом для многих последующих реализаций Пролога. Что интересно, компилятор был написан на самом Прологе. Эта реализация Пролога, известная как "эдинбургская версия", фактически стала первым и единственным стандартом языка. Алгоритм, использованный при его реализации, послужил прототипом для многих последующих реализаций языка. Как правило, если современная Пролог-система и не поддерживает эдинбургский Пролог, то в ее состав входит подсистема, переводящая прологовскую программу в "эдинбургский" вид. Имеется, конечно, стандарт ISO/IEC 13211– 1:1995, но его поддерживают далеко не все Прологсистемы.

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

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

На сегодня существует довольно много реализаций Пролога. Наиболее известные из них следующие: BinProlog, AMZI-Prolog, Arity Prolog, CProlog, Micro Prolog, МПролог, Prolog-2, Quintus Prolog, SICTUS Prolog, Silogic Knowledge Workbench, Strawberry Prolog, SWI Prolog, UNSW Prolog и т. д.

В нашей стране были разработаны такие версии Пролога как Пролог-Д (Сергей Григорьев), Акторный Пролог (Алексей Морозов), а также Флэнг (А Манцивода, Вячеслав Петухин).

Следующее поколение – это языки нейронных сетей (самообучающиеся языки). Исследовательские работы в этой области

Глава 2. Обзор и сравнение языков Java и C++

2.1.История и краткая характеристика языков Java и C++

 JAVA- это название языка программирования, который активно используется с 90-х годов прошлого столетия. Несмотря на то, что этот язык является открытым, т.е. его может свободно использовать каждый, на данный момент им владеет и его поддерживает компания Oracle Corporation. Java разрабатывался как язык программирования, который будет использоваться на любых устройствах, в результате на данном языке пишутся программы для компьютеров, смартфонов и даже телевизоров с технологией СМАРТ-ТВ[12].

История Java восходит к 1991 году, когда группа инженеров из компании Sun под руководством Патрика Нотона (Patrick Naughton) и члена Совета директоров (разностороннего компьютерного волшебника) Джеймса Гослинга (James Gosling) занялась разработкой небольшого языка, который можно было бы использовать для программирования бытовых устройств, на- пример, контроллеров для переключения каналов кабельного телевидения (cable TV switchboxes).Поскольку такие устройства не потребляют много энергии и не имеют больших микро- схем памяти, я должен был быть маленьким и генерировать очень компактные программы. Кроме того, поскольку разные производители могут выбирать разные центральные процессоры (Central Processor Unit— CPU), было важно не завязнуть в какой-то одной архитектуре компьютеров. Проект получил кодовое название "Green"[13].

Стремясь изобрести небольшой, компактный и машинно-независимый код, разработчики возродили модель, использованную при реализации первых версий языка Pascal, заре эры персональных компьютеров. Никлаус Вирт, создатель языка Pascal, в свое время разработал машиннонезависимый язык, генерирующий промежуточный код для некоей гипотетической машины. Этот язык стал коммерческим продуктом под названием UCSD Pascal. Этот промежуточный код можно выполнять на любой машине, имеющей соответствующий интерпретатор. Инженеры, работавшие над проектом "Green", также использовали виртуальную машину, что решило их основную проблему[14].

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

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

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

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

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

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

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

Главная их особенность – это обеспечение, несмотря на платформу, большого спектра модулей с системными интерфейсами. Стоит также отметить, что такая платформа обладает отличной безопасностью, потому подходит для любого сетевого окружения. У нее нейтральная архитектура, и это особо привлекательно для создания разных сетевых модулей. Итак, с использованием интерпретируемого и динамичного языка Java пользователь получает: Интерпретируемую среду, в которой с легкостью и быстротой создаются прототипы, не используя обычную сборку и перекомпиляцию. Среду, которую можно динамически расширить, ведь подгруздка классов проходит, когда это особо нужно и практически моментально. Отсутствие проблем с «хрупким базовым классом» ведь элементы встраиваются в память при загрузке, а не при компиляции[18].

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

Большое количество популярных приложений на платформе Android, такие как Angry Birds, Temple Run и Candy Crush Saga, написаны на языке Java. Тоже самое, касается и большей части платного софта написанного для авиакомпаний, государственных и банковских учреждений[20].

Большое количество людей из сообщества программистов считают язык C, «дедушкой» всех современных языков программирования. Для такой точки зрения существует две причины. Во-первых, язык C был разработан в 70-х годах прошлого столетия, когда компьютеры могли занимать целые комнаты. Во-вторых, большое количество современных языков, таких как Java, C++ и Python, создавалось под влиянием языка C[21]. Однако, не смотря на свой почтенный возраст, языком C продолжают активно пользоваться, и пройдет еще немало времени, прежде чем этот язык начнет терять свою популярность.

Язык C применяет методику, которая позволяет снизить использование оперативной памяти настолько, насколько это возможно.

Большинство хороших программистов знают множество языков программирования. Если вы также не хотите останавливаться на одном языке, начать свое изучение с языка C – это хорошая идея. Как и со всеми стоящими вещами, поначалу изучение C будет даваться большинству с огромным трудом. Однако, это не должно служить сдерживающим фактором, так как после C, все остальные современные языки, такие как Objective C, C++, PHP и многие другие, будут даваться вам в изучении намного легче[22].

C – это очень мощный язык программирования. Благодаря своей силе, C просто идеален, когда вам нужно получить полный контроль над создаваемой программой. Именно поэтому, большинство современных популярных операционных систем, таких как Windows, OSX и Linux, написаны именно на языке C. Почти все компьютеризированные устройства, полностью или частично, используют в своей работе язык C. От микроволновок, пультов дистанционного управления и калькуляторов до баз данных и управляющих механизмов Шаттлов — язык C настолько универсален, что используется почти повсеместно[23].

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

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

Для больших проектов наподобие разработки веб-браузера, создания драйвера видеокарты или написания алгоритма для финансовых торгов, язык C++ является самым лучшим вариантом. Этот язык обладает таким качеством, как объектно-ориентированное программирование, что в C поддерживается с огромным трудом. Благодаря этому, для некоторых задач C++ является более подходящим нежели C, так как поможет решить одну и ту же задачу за меньшее количеств времени[24].

Движки большинства популярных сегодня компьютерных игр, таких как Call of Duty, Halo и FIFA написаны на языке С++. Также, большие анимационные студии наподобие Pixar, Disney и DreamWorks используют C++ в той или иной степени в своем анимационном софте. Благодаря своей надежности и скорости, язык C++ применяется также при разработке частных высокочастотных торговых алгоритмов, позволяющих фирмам с Wall Street продавать тысячи акций за доли секунды.

2.2. Пример использования языков программирования Java и C++

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

В языке Java отсутствует возможность работы непосредственно с указателями. Это считается одним из сильнейших качеств языка C++. Это увеличивает сложность изучения, добавляет немало ошибок в случае больших кодов либо невнимательности. Однако, это позволяет свободно работать с памятью. Данный пункт отличает коды в рамках изучения структур данных: двусвязные списки, бинарные деревья поиска (BST – binary search tree), красно-чёрные деревья (RBT – red-black trees).

Рассмотрим в качестве примера красно-чёрные деревья. Одним из первых отличий в реализации RBT на языках программирования Java и C++ является описание структуры узла. Посредством языка C++ её можно описать способом, представленным в листинге 1.

Листинг 1.

Описание структуры узла на языке C++

struct Node {

int key;

node *left;

node *right;

node *parent;

char color; };

Описание посредством класса имеет аналогичный синтаксис.

В Java же всё обстоит немного иначе (листинг 2): структуры представляются в концепции классов. Узел в красно-чёрном дереве представляется с помощью класса Node, а знак указателя (*) отсутствует:

Листинг 2.

Описание структуры узла на языке Java

public class Node {

int key;

Node left;

Node right;

Node parent;

char color; }

В связи с этим в Java используется прямая адресация (листинг 4), в C++ – косвенная (листинг 3). В C++ возможна и прямая адресация, но в других случаях. Рассмотрим на примере инициализации полей узла. При создании класса красно-чёрного дерева в его конструктор добавляется описание инициализации узла nil – листа в дереве, особенностью которого является окрашивание в чёрный цвет.

Листинг 3.

Фрагмент описания класса на языке C++

class RedBlackTree {

private:

Node *nil;

Node *root; // корень дерева public:

RedBlackTree() {

nil = new Node;

nil->parent = nil;

nil->right = nil;

nil->left = nil;

nil->color = 'b';

root = nil; } …

Листинг 4.

Фрагмент описания класса на языке Java

public class RedBlackTree {

public static Node root; // корень дерева public Node nil = new Node();

public RedBlackTree() {

nil.parent = nil;

nil.right = nil;

nil.left = nil;

nil.color = 'b';

root = nil; } …

Так как используется динамическая память при написании структур данных, в языке C++ необходимо самостоятельно определить деструктор. В Java поддерживается автоматическое управление освобождением динамической памяти. Наличие заголовочных файлов также отличает оба языка. Посредством C++ возможно создание нескольких файлов, один или несколько из которых обычно заголовочные, с расширением .h (header file), и в них помещается описание структуры узла, класса дерева, подключаемых библиотек и многое другое. Из других файлов можно использовать эти данные после включения заголовочного файла. В Java отсутствуют заголовочные файлы.

Описание и видимость данных и методов класса помещаются в файле с расширением .class. Модификаторы доступа определяют доступ к переменным класса извне. В вышеприведённом коде в классе RedBlackTree создается корень дерева типа Node, а также узел nil, который далее в конструкторе инициализируется. В языке C++ используются указатели (листинг 3).

В языке Java корень дерева объявляется как статическое поле (static) для того, чтобы можно было получить к нему доступ за пределами класса RedBlackTree без создания экземпляра данного класса (листинг 4). В последующем это необходимо, например, для вызова функции print() (листинг 5), которая центрировано выводит все узлы в RBT, а также их цвет. Данная функция получает единственный аргумент – корень дерева (листинг 6).

Листинг 5.

Функция print() на языке Java

public void print (Node x) {

if (x != nil) {

print(x.left);

System.out.println(x.key + ": " + x.color);

print(x.right); } }

Листинг 6.

Фрагмент главной функции на языке Java

public class Main {

public static void main (String[] args) {

RedBlackTree rbt = new RedBlackTree();

rbt.print(RedBlackTree.root); // вызов print() } …

В языке C++ метод print() находится внутри описания класса RedBlackTree, что позволяет работать со скрытыми данными, а именно с корнем дерева. Использование метода в других файлах возможно после включения в них заголовочного файла с описанием класса. Определения всех остальных методов различаются только тем, что в C++ присутствует оператор разрешения доступа (::), а в Java – модификаторы доступа (листинг 7).

Листинг 7.

Объявления методов на языках C++ и Java

void RedBlackTree::insert(int value) { … } // C++

public void insert(int value) { … } // Java

Заключение

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

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

Языков программирования в наше время великое множество. Мы рассмотрели лишь самые популярные из них.

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

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

«10 языков программирования, которые могут перевернуть мир IT» // Компьютерные вести [Электронный ресурс]. URL: http://www.kv.by/content/325498-10- yazykovprogrammirovaniya-kotorye-mogut-perevernut-mir-it (дата обращения: 21.06.2018).

10 лучших языков программирования для изучения в 2018 году // proglib. URL: https://proglib.io/p/10-languages-2018/.

Java навсегда! 12 причин длительного доминирования Java [Электронный ресурс]. Режим доступа: https://habrahabr.ru/post/201612/. Дата обращения: 21.06.2018.

Афонин В.В., Никулин В.В. Методы моделирования и оптимизации с параметрами на языке С/С++ и MATLAB: в 2 ч. Саранск: Изд-во Мордов. ун-та, 2015. 184 с.

Белов В. Н., Ковалёв А. И., Новиков С. А. Реализация элемента пользовательского интерфейса Slider с помощью JavaScript // Современные наукоемкие технологии. 2016. № 10–2. С. 224–228.

Взгляд изнутри. Виртуальная машина Java [Электронный ресурс]. Режим доступа: http://learn.javajoy.net/jvm-inside. Дата обращения: 21.06.2018.

Герберт Шилдт Java 8 // Полное руководство. – М.: «Вильямс», 2015. – С. 1376.

Дейтел, П. Android для программистов: создаём приложения / П. Дейтел, Х. Дейтел, Э. Дейтел, М. Моргано. – СПб.: Питер, 2013. – 560 с.

Достова, А. А. Анализ нововведений в объектно-ориентированном языке программирования Java / А. А. Достова, В. В. Тынченко // Актуальные проблемы авиации и космонавтики. – 2014. – № 10. – URL: http://cyberleninka.ru/article/n/analiz-novovvedeniy-v-obektnoorientirovannom-yazyke-programmirovaniya-java (дата обращения: 15.06.2018).

Классификация языков программирования [Электронный ресурс]. URL: http://bourabai.ru/alg/classification.htm(дата обращения: 21.06.2018)

Крупнейший в Европе ресурс для IT-специалистов. [Электронный ресурс]. Режим доступа: https://habrahabr.ru/company/hh/blog/318450/ (дата обращения: 07.06.2018).

Лекция 1: Общие представления о языке Java [Электронный ресурс]. – URL: http://www.intuit.ru/studies/courses/569/425/lecture/9665 (дата обращения: 23.06.2018).

Магамедова А.З, Дадаев А.М. Применение базовых алгоритмов обработки массивов в задачах по программированию на С++ // Информатизация образования и науки. 2016. № 1(29). С. 156.

Отличия Java от C++ [Электронный ресурс] // Справочник CodeNet – все для программиста. – URL: http://www.codenet.ru/ webmast/java/02.php (дата обращения: 22.06.2018).

Поляков К. Ю., Еремин Е. А. Информатика 7–9 классы. Методическое пособие. М.: БИНОМ. Лаборатория знаний, 2016.

Пять поколений языков программирования [Электронный ресурс]. URL: http://lifeprog.ru/view_zam2.php?id=194&cat=5&page=11(дата обращения: 21.06.2018)

  1. Развитие языков программирования. Эволюция вычислительных систем [Электронный ресурс]. URL: http://referatwork.ru (дата обращения: 21.06.2018).

Свободная энциклопедия. Java. [Электронный ресурс]. Режим доступа: https://ru.wikipedia.org/wiki/Java. Дата обращения: 21.06.2018.

Сравнение с языком Java [Электронный ресурс] // C++. – URL: https://sites.google.com/site/programme666/home/istoria-cozdania/ filosofia-c/sravnenie-s-azykom-java (дата обращения: 22.06.2018).

Угринович Н. Д., Самылкина Н. Н. Информатика 7–9 классы. Примерная рабочая программа. М.: БИНОМ. Лаборатория знаний, 2016.

Хорстманн, К. С. Java. Библиотека профессионала, том 1. Основы: пер. с англ. // Кей С. Хорстманн, Гари Корнелл. – Т. 1. – 9-е изд. – М.: ООО «И.Д. Вильямс», 2014. – 684 с.

  1. Школа программирования Coding Craft: [Электронный ресурс]. Режим доступа: http://codingcraft.ru/php.php/ (дата обращения: 08.06.2018).

Язык программирования Java [Электронный ресурс]. – URL: http:// www.codenet.ru/webmast/java/02.php (дата обращения: 20.06.2018).

  1. Крупнейший в Европе ресурс для IT-специалистов. [Электронный ресурс]. Режим доступа: https://habrahabr.ru/company/hh/blog/318450/ (дата обращения: 07.06.2018).

  2. Школа программирования Coding Craft: [Электронный ресурс]. Режим доступа: http://codingcraft.ru/php.php/ (дата обращения: 08.06.2018).

  3. «10 языков программирования, которые могут перевернуть мир IT» // Компьютерные вести [Электронный ресурс]. URL: http://www.kv.by/content/325498-10- yazykovprogrammirovaniya-kotorye-mogut-perevernut-mir-it (дата обращения: 21.06.2018).

  4. Развитие языков программирования. Эволюция вычислительных систем [Электронный ресурс]. URL: http://referatwork.ru (дата обращения: 21.06.2018).

  5. Классификация языков программирования [Электронный ресурс]. URL: http://bourabai.ru/alg/classification.htm(дата обращения: 21.06.2018)

  6. Неклюдова С.А., Балса А.Р. Парадигмы программирования как инструменты разработчика программных систем // Информационные технологии и системы : межвузовский сборник научных трудов. Выпуск 1 (12). – СПб., 2014.

  7. Пять поколений языков программирования [Электронный ресурс]. URL: http://lifeprog.ru/view_zam2.php?id=194&cat=5&page=11(дата обращения: 21.06.2018)

  8. Неклюдова С.А., Балса А.Р. Парадигмы программирования как инструменты разработчика программных систем. Межвузовский сборник научных трудов: Информационные технологии и системы. Выпуск 1(12). Санкт-Петербург, 2014 год.

  9. 10 лучших языков программирования для изучения в 2018 году // proglib. URL: https://proglib.io/p/10-languages-2018/.

  10. Поляков К. Ю., Еремин Е. А. Информатика 7–9 классы. Методическое пособие. М.: БИНОМ. Лаборатория знаний, 2016.

  11. Угринович Н. Д., Самылкина Н. Н. Информатика 7–9 классы. Примерная рабочая программа. М.: БИНОМ. Лаборатория знаний, 2016.

  12. Достова, А. А. Анализ нововведений в объектно-ориентированном языке программирования Java / А. А. Достова, В. В. Тынченко // Актуальные проблемы авиации и космонавтики. – 2014. – № 10. – URL: http://cyberleninka.ru/article/n/analiz-novovvedeniy-v-obektnoorientirovannom-yazyke-programmirovaniya-java (дата обращения: 15.06.2018).

  13. Дейтел, П. Android для программистов: создаём приложения / П. Дейтел, Х. Дейтел, Э. Дейтел, М. Моргано. – СПб.: Питер, 2013. – 560 с.

  14. Язык программирования Java [Электронный ресурс]. – URL: http:// www.codenet.ru/webmast/java/02.php (дата обращения: 20.06.2018).

  15. Лекция 1: Общие представления о языке Java [Электронный ресурс]. – URL: http://www.intuit.ru/studies/courses/569/425/lecture/9665 (дата обращения: 23.06.2018).

  16. Хорстманн, К. С. Java. Библиотека профессионала, том 1. Основы: пер. с англ. // Кей С. Хорстманн, Гари Корнелл. – Т. 1. – 9-е изд. – М.: ООО «И.Д. Вильямс», 2014. – 684 с.

  17. Герберт Шилдт Java 8 // Полное руководство. – М.: «Вильямс», 2015. – С. 1376.

  18. Взгляд изнутри. Виртуальная машина Java [Электронный ресурс]. Режим доступа: http://learn.javajoy.net/jvm-inside. Дата обращения: 21.06.2018.

  19. Свободная энциклопедия. Java. [Электронный ресурс]. Режим доступа: https://ru.wikipedia.org/wiki/Java. Дата обращения: 21.06.2018.

  20. Java навсегда! 12 причин длительного доминирования Java [Электронный ресурс]. Режим доступа: https://habrahabr.ru/post/201612/. Дата обращения: 21.06.2018.

  21. Сравнение с языком Java [Электронный ресурс] // C++. – URL: https://sites.google.com/site/programme666/home/istoria-cozdania/ filosofia-c/sravnenie-s-azykom-java (дата обращения: 22.06.2018).

  22. Магамедова А.З, Дадаев А.М. Применение базовых алгоритмов обработки массивов в задачах по программированию на С++ // Информатизация образования и науки. 2016. № 1(29). С. 156.

  23. Отличия Java от C++ [Электронный ресурс] // Справочник CodeNet – все для программиста. – URL: http://www.codenet.ru/ webmast/java/02.php (дата обращения: 22.06.2018).

  24. Белов В. Н., Ковалёв А. И., Новиков С. А. Реализация элемента пользовательского интерфейса Slider с помощью JavaScript // Современные наукоемкие технологии. 2016. № 10–2. С. 224–228.