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

История возникновения и развития языка программирования Си (С++) и Java (МЕТОДОЛОГИИ ПРОГРАММИРОВАНИЯ)

Содержание:

ВВЕДЕНИЕ

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

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

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

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

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

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

ГЛАВА 1. МЕТОДОЛОГИИ ПРОГРАММИРОВАНИЯ

1.1 Ключевые понятия в области программирования

Программирование – процесс и искусство создания компьютерных программ с помощью языков программирования.

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

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

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

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

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

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

Программа в целом аналогична предложению, описывающему последовательность действий над заданными предметами с целью получения результата. Можно сказать, что компьютерная программа – один из способов реализации понятия алгоритма, а язык программирования – средство описания алгоритмов. Программа–описание на языке программирования структур данных и алгоритма решения задачи, автоматически переводимое, при помощи специальной программы-транслятора (компилятора или интерпретатора), на язык команд компьютера для последующего выполнения. Программа, в отличие от абстрактного алгоритма, имеет данные– собственные элементы, над которыми она совершает действия, и которые являются ее составной частью. Данные (синтаксически) являются аналогом существительных (объектов, над которыми производятся действия), набор операций – аналогом глаголов (выполняемых действий). Алгоритмическая компонента программы – описание последовательности выполняемых действий – обычно состоит из операторов, задающих эту последовательность действий, и базируется на наборе операций над данными (арифметические операции, присваивание, проверка значения переменной и т.п.), соответствующем системе команд процессора данного компьютера. [18]

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

Определение программы дано в формуле: «Программа = данные + алгоритм». В ней данные и алгоритм являются двумя взаимозависимыми элементами. Если данные в какой-то мере обладают свойствами пространства (объем, протяженность), то алгоритм – свойствами времени (эффективность, быстродействие); тезис «проигрывая в пространстве, выигрываем во времени» здесь также уместен: эффективность программ может быть принципиально повышена за счет использования дополнительных структур данных в памяти.

Как правило, под программой на С++ подразумеваютисходный текст, написанный на С++, набранный в текстовом редакторе и сохраненный в текстовом файле (одном или нескольких). Текстовый файл с названием вида имя_файла.cpp (cpp – принятое расширение для программ на С++) – основная программная единица. [18]

1.2 Основные парадигмы программирования

Рассмотрим различные парадигмы программирования.

Объектно-ориентированная парадигма (ООП) представляет программу как набор объектов и их взаимодействий. Основными понятиями ООП являются следующие:

  • объект — элементарная сущность, описываемая определенными свойствами (хранящимися в виде атрибутов объекта) и поведением (реализованным в виде методов);
  • класс описывает структуру свойств и поведения одного типа объектов. Каждый объект программы является экземпляром некоторого класса;
  • классы могут наследовать атрибуты и методы их родительских классов, в то же время добавляя свои собственные. Иерархия классов позволяет моделировать сущности решаемой задачи на нескольких уровнях детализации и в дальнейшем использовать класс, отвечающий уровню детализации, необходимому для решения конкретной подзадачи;
  • инкапсуляция подразумевает, что некоторые детали реализации класса скрыты от взаимодействующих с ним объектов. У каждого класса есть интерфейс, описывающий взаимодействие объектов этого класса с прочими объектами, и реализация, описывающая то, как это взаимодействие отражается на объекте этого класса.

Многие современные языки поддерживают ООП, хотя и в разной степени:

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

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

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

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

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

Декларативная парадигма программирования определяет процесс вычислений посредством описания логики самого вычисления, а не управляющей логики программы. [4]

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

В целом, классификация языков показана на рисунке 1.

D:\studwork\Вариант 11. История возникновения и развития языка программирования Си(С++) и Java\Языки программирования.png

Рисунок 1 — Классификация языков программирования

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

ГЛАВА 2. ОСОБЕННОСТИ ВОЗНИКНОВЕНИЯ И РАЗВИТИЯ ЯЗЫКА C/C++

2.1 Возникновение языка С

Разработка C первоначально не была целью его создателей. Фактически, различные обстоятельства и проблемы создали идеальную ситуацию для ее появления. В 1960-х годах Деннис Ритчи, который был сотрудником Bell Labs (AT&T), вместе с некоторыми из его коллег, работал над разработкой операционной системы, которая могла бы использоваться многими пользователями одновременно. Эта операционная система была известна как Multics, и она должна была позволить многим пользователям совместно использовать общие вычислительные ресурсы. Multics добавляли много преимуществ, но также имели много проблем. Это была большая система, и казалось, с точки зрения выгоды, что затраты перевешивают вложенные усилия и ресурсы. Постепенно Bell Labs отказались от проекта.

Именно тогда Ричи присоединился к Кен Томпсону и Брайану Кернигану в другом проекте. Проект включал разработку новой файловой системы. Томпсон разработал новую файловую систему для суперкомпьютера DEC PDP- 7 на ассемблере. После этого создатели файловой системы сделали много улучшений, что привело к рождению операционная системы UNIX. Даже в имени новой операционной системы UNIX можно найти следы его предшественника Multics. Первоначально это была Unics (Uniplexed Information and Computing Service). Позже Unics изменилась на UNIX. Она была написана на ассемблере, который, хотя и идеален для машин, сложен для работы людьми. Для интерпретации и управления UNIX использовались языки Fortran и B. Именно в этот момент идея появления языка C начала формироваться в сознании ее создателей [8].

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

  • операционные системы;
  • компиляторы языка;
  • текстовые редакторы;
  • сетевые драйверы;
  • базы данных;
  • языковые переводчики.

Язык С составляет подмножества языка С++. Практически более новый язык включает в себя весь С и добавляет ему новые функции, а самое главное — объектно-ориентированную парадигму. [3, 14, 17]

Программа на C может состоять от 3 до миллионов строк и может быть записана в один или несколько текстовых файлов с расширением «.c» ; например, hello.c

Язык B был полезен в контексте проблем, с которыми сталкиваются создатели UNIX в операционной системе. Язык B был взят из BCPL Мартином Ричардсом. Как уже говорилось, UNIX была написана на ассемблере. Чтобы выполнять даже небольшие операции в UNIX, нужно было писать много страниц кода. Язык B решил эту проблему. В отличие от ассемблера требовал значительно меньше строк кода для выполнения каких-то задач в UNIX. Тем не менее, было много того, что B не мог сделать. Гораздо больше ожидалось от B в контексте быстро меняющихся требований. Например, B не распознает типы данных. Даже в языке B типы данных были выражены машинным языком. Он также не поддерживает структуры данных.

Было ясно, что-то должно измениться. Итак, Ритчи и его коллеги приступили к преодолению препятствий, стоящих перед ними. Язык C был разработан в 1971-73 годах. При всех своих ограничениях C обязан своим рождением B, поскольку C сохранил много того, что предложил B, добавив такие новшества, как типы данных и структуры данных. Название C было выбрано потому, что оно шло за B. [3]

В ранние годы C был разработан с учетом UNIX. C использовался для выполнения задач и управления UNIX системой. Сохранив производительность многие компоненты UNIX были переписаны на язык C с языка ассемблер. Например, ядро UNIX было переписано в 1973 году на DEC PDP-11.

Ритчи и Керниган задокументировали их новый язык в виде книги под названием «Язык программирования C». Хотя Керниган утверждал, что не играл роли в создании C, он был автором знаменитой программы «Hello World» и многих других программ UNIX. [14, 16]

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

Первое изменение (даже если немного) произошло, когда Американский национальный институт стандартов (ANSI) сформировал комитет в 1983 году для стандартизации C. После обзора языка они немного изменили его, чтобы он был также совместим с другими программами, которые были до C. Таким образом, новый стандарт ANSI появился в 1989 году и известен как ANSI C или C89. Международная организация по стандартизации (ISO) также способствовали стандартизации C. [3]

Со временем C развился, так как он добавил в свой богатый набор некоторые важные опций, такие как управление памятью, функции, классы и библиотеки. C используется в разработке многих крупнейших проектов в мире. C также повлиял на развитие множества языков, таких как AMPL, AWK, C ++ , C--, C # , Objective-C , Bit C, D, Go, Java, JavaScript , Julia, Limbo, LPC, Perl, PHP, Pike, Processing, Python , Rust, Seed7 и Verilog. [14, 15, 17]

За появление Microsoft Windows нужно поблагодарить язык C, потому что разработан Windows в основном на C. То же самое касается MacOS, Linux, Android, iOS и Windows Phone, потому что почти все современные операционные системы основаны на C. Он также широко используется во встроенных системах, такие как датчики в автомобилях, интеллектуальные мониторы и бесчисленные интернет-устройства (интернет вещей).

Некоторые из проектов, которые разрабатываются на С:

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

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

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

2.2 Развитие языка С++

C++ — это язык объектно-ориентированного программирования общего назначения (OOP), является расширением языка C. Это даёт возможность программировать на C++ в стиле «C» или же в «объектно-ориентированном стиле». В некоторых случаях он может использовать оба варианта, что показывает эффективным примером гибридного языка. [6, 16]

C++ считается языком промежуточного уровня, поскольку он инкапсулирует как языковые функции высокого, так и низкого уровня. Первоначально язык назывался «C с классами», так как он обладал всеми свойствами языка C с дополнительным понятием «классы». Однако в 1983 году он был переименован в C++.

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

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

C++ включает в себя большое количество операторов, таких как:

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

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

К основным концепциям С++ относятся полиморфизм, инкапсуляция и наследование. Они вместе составляют основную концепцию объектно-ориентированного программирования. [17]

C++ является одним из самых популярных языков программирования и работает на самых разных платформах оборудования и операционных систем. В качестве эффективного компилятора для собственного кода он реализует себя в таких областях, как системное программное обеспечение, прикладное программное обеспечение, драйверы устройств, встроенное программное обеспечение, высокопроизводительные серверные и клиентские приложения и развлекательное программное обеспечение, такие как видеоигры. Несколько групп разработчиков предоставляют как бесплатное, так и проприетарное программное обеспечение для компилятора C++, включая GNU Project, LLVM, Microsoft и Intel.

C++ сильно повлиял на многие другие популярные языки программирования, в первую очередь на C # и Java. [3, 16]

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

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

Первый компилятор C с классами был назван Cfront, который был получен из компилятора C под названием CPre. Это была программа, предназначенная для перевода C с кодом Classes на обычный C. Интересным моментом, является то, что Cfront был написан в основном на C с классами, что делает его компилятором для самостоятельной компиляции (компилятор, который может скомпилировать себя). Позднее Cfront будет оставлен в 1993 году после того, как стало сложно интегрировать в него новые функции, а именно исключения C++. Тем не менее, Cfront оказал огромное влияние на реализации будущих компиляторов и операционной системы Unix. [17]

В 1983 году название языка было изменено с C с классами на C++. Оператор ++ на языке C является оператором для увеличения переменной, что дает некоторое представление о том, как Страуструп рассматривал этот язык. В это время было добавлено много новых функций, наиболее заметными из которых являются виртуальные функции, перегрузка функций, ссылки на символ &, ключевое слово const и однострочные комментарии с использованием двух косых черт (что является опцией, взятой из языка BCPL).

В 1985 году труд Страуструпа под названием «Язык программирования C++» был опубликован. В том же году C++ был переведен в ранг коммерческого продукта. Язык еще не был официально стандартизован, что делало книгу очень важным трудом. Язык был обновлен снова в 1989 году, чтобы включить защищенные и статические члены, а также наследование из нескольких классов. [14]

В 1990 году было выпущено справочное руководство Annotated C++. В том же году компилятор Borland Turbo C++ будет выпущен как коммерческий продукт. Turbo C++ добавил множество дополнительных библиотек, которые существенно повлияли на разработку C++. Хотя последний стабильный выпуск Turbo C ++ был в 2006 году, компилятор по-прежнему широко используется. [17]

В 1998 году Комитет по стандартам С++ опубликовал первый международный стандарт для C++ ISO/IEC 14882:1998, который стал неофициально известен под именем C++98. Было упомянуто, что справочное руководство Annotated C++ оказывает большое влияние на разработку стандарта. Также была включена Библиотека стандартных шаблонов, которая начала свою концептуальную разработку в 1979 году. В 2003 году комитет ответил на многочисленные жалобы, о которых сообщалось, со своим стандартом 1998 года, и соответствующим образом пересмотрел его. Измененный язык был назван C++ 03.

В 2005 году комитет по стандартам C++ опубликовал технический отчет (получивший название TR1), в котором подробно описаны различные функции, которые они планировали добавить к последнему стандарту C++. Новый стандарт был неофициально назван C++ 0x, поскольку ожидалось, что он будет выпущен до конца первого десятилетия. Как ни странно, однако, новый стандарт не был выпущен до середины 2011 года. Несколько технических отчетов были выпущены до тех пор, и некоторые компиляторы начали добавлять экспериментальную поддержку для новых функций. [16]

В середине 2011 года был закончен новый стандарт C++ (получивший название C++ 11). Проект библиотеки Boost оказали значительное влияние на новый стандарт, а некоторые из новых модулей были получены непосредственно из соответствующих библиотек Boost. Некоторые из новых функций включают поддержку регулярных выражений, полную библиотеку рандомизации, новую библиотеку для работы со временем C++, поддержку атомизации, стандартную библиотеку потоков (которая до 2011 года отсутствовала как на C, так и на C++), новый синтаксис цикла, обеспечивающий функциональность, подобную циклам foreach в некоторых других языках, ключевое слово auto, новые классы контейнеров, лучшую поддержку объединений и списки инициализации массивов, и вариативные шаблоны. [6]

В 2012 году был основан Фонд стандарта С++, а в 2014 году было выпущено 4-ое издание главной книги о языке С++.

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

Новые возможности библиотеки: std и многие небольшие улучшения в существующих библиотечных средствах, такие как двух диапазонные перегрузки для некоторых алгоритмов, типы псевдонимов, типы признаков типа, определяемые пользователем строки, длительность и литералы сложных чисел и т.д. [16]

В 2015 году появился TS. Этот TS является экспериментальным расширением библиотеки C++, которое указывает библиотеку файловой системы на основе boost.filesystem V3 (с некоторыми изменениями и расширениями). Этот TS был объединен с C++17.

Это TS стандартизирует параллельный интерфейс для всех стандартных алгоритмов библиотеки, а также добавляет новые алгоритмы, такие как reduce, transform_reduce и exclusive_scan. [17]

2.3 Будущее языка C++

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

Может быть C++ не настолько популярен в плане изучения начинающими программистами, как C# или Java, может быть под него не затачиваются новые технологии, выпускаемые корпорациями-гигантами, может быть он не продвигается теми же Microsoft и Oracle, но несмотря на всё это, он ещё активно используется, и будет в трендах ещё долгое время. Программное обеспечение, написанное с использованием C++, никуда не делось и требует поддержки. Новое ПО, например, игровые движки, также вовсю использует C++, а стандарты C++11, C++14 и C++17 только подтверждают, что дела у этого языка программирования идут неплохо. [17]

Как упоминалось ранее, между стандартами C++11 и C++03 язык находился в своеобразном «подвешенном» состоянии. Вроде бы развивались и дополнялась такие библиотеки, как boost, Qt и прочие, появился C++/CLI, а нового официального стандарта всё не было и не было.

Так продолжалось достаточно долго, да и стандарт C++11, планировавшийся к публикации в 2009 году, вышел только двумя годами позже. Но тем не менее вышел. И не просто вышел, а принёс собой множество дополнений, расширений и «синтаксического сахара». Писать с использованием нового стандарта стало проще и удобнее, в стандартную библиотеку было добавлено множество средств, облегчающих программистам жизнь. Была введена официальная поддержка параллельного программирования, что немаловажно, списки инициализации, призванные сделать код понятнее, лямбда-функции и т.д.

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

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

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

На этом фронте дела идут не слишком гладко: С++ не слишком популярный язык среди начинающих программистов и существенно проигрывает таким языкам, как C# или Java. Как показано на рисунке 2, в 2019 году С++ уступает многим языкам, однако, всё равно остается востребованной в некоторых областях, что позволяет ему оставаться популярным. Однако он теряет позиции уже несколько лет подряд. Тут можно выделить несколько причин. [17]

1. Высокий порог вхождения.

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

ТОП-10 языков программирования будущего: на чем кодить в 2019?

Рисунок 2 – Рейтинг языков программирования по данным StackOverflow

2. Слабое продвижение.

Ни для кого не секрет, как продвигаются такие языки как C# или Java корпорациями-владельцами: Microsoft и Oracle, со стороны Microsoft продвижения весьма заметно. Большинство технологий Microsoft затачиваются именно под C#. Хакатоны, проводимые Microsoft, опять же проходят с использованием C#.

Для C++ такой поддержки нет. Да, для него выпускаются различные инструменты, позволяющие облегчить работу и процесс создания приложений. Тут стоит вспомнить тот же Qt, недавно вышедший ReSharper C++ от JetBrains. В Visual Studio 2015 ввели поддержку некоторых нововведений из последних стандартов, плюс некоторые дополнительные функции — работать стало удобнее. Но с масштабом вышеупомянутых продвижений это всё же в сравнение не идёт. [17]

3. Специализация.

Несмотря на то, что C++ — язык, дающий разработчику, как говорится, все карты в руки, область его применения не всеобъемлюща и занимает определённую нишу. Конкуренты есть, это тоже оказывает свое влияние. Взять, например, мобильную разработку. Основные платформы заняты теми или иными языками: Windows Phone — C#, Android — Java, iOS — Objective-C. И это вовсе не означает, что под эти платформы нет возможности писать на C++, вопрос лишь в том, насколько это будет удобно и будет ли также эффективно. Для веба, разработка под который с каждым годом становится популярнее и популярнее, C++ тоже не очень подходит. Возможность работы с сокетами есть, библиотеки, наподобие Wt, есть. С учётом того, что мобильная и веб-разработка стали очень популярны и только набирают обороты, понятен выбор начинающих в пользу других языков.

В 2017 году был опубликован окончательный вариант С++17. Появились новые функции: сгиб-выражения, вычитание аргумента шаблона, время компиляции, constexpr, встроенные переменные , структурированные привязки, инициализаторы для if и switch, упрощенные вложенные пространства имен, множественные имена, сделанные без учета системы типов, новый порядок правил оценки __has_include, * this, constexpr lambda, пространства имен атрибутов не должны повторяться, новые атрибуты [[fallthrough]], [[nodiscard]] и [[maybe_unused]]. Добавлены ключевые слова register, bool increment.

Также было добавлено несколько мелких изменений в библиотеку шаблонов std. [17]

Следующая крупная версия стандарта C ++ запланирована на 2020, под названием C++20.

Должны будут добавиться следующие опции и функции:

- оператор трехмерного сравнения <=>;

- назначенные инициализаторы;

- пакет-расширений лямбда;

- а также изменения в библиотеке std.

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

ГЛАВА 3. ОСОБЕННОСТИ ВОЗНИКНОВЕНИЯ И РАЗВИТИЯ ЯЗЫКА JAVA

3.1 Возникновения языка Java

Java – это интерпретируемый и компилированный язык программирования. Исходный текст (файлы с расширением a Java) откомпилирован со справкой компилятора Java (javac), который преобразовывает исходный текст в байт-код (файлы с расширением a.class). Цель проектировщиков Java состояла в том, чтобы разработать язык, посредством которого программист мог записать код, который мог бы выполняться всегда, в любое время

История создания языка Java начинается в июне 1991 года, когда Джеймс Гослинг создал проект для использования в одном из своих многочисленных сет-топ проектов. Язык, который рос вне офиса Гослинга, как дуб, Oak - первоначальное название Java до 1995 года, после в дальнейшем история Java продолжалась под именем Green, а позже был переименован как Java.

Но официальной датой создания языка Java считается 23 мая 1995 года, после выпуска компанией Sun первой реализации Java 1.0. Она гарантировала «Напиши один раз, запускай везде», обеспечивая недорогой стоимостью на популярных платформах.

Приблизительно в 1990 Джеймс Гослинг, Билл Джой, Патрик Ногтон и другие в Sun Microsystems начали разрабатывать язык по имени Oak. Прежде всего они видели применение Java для встроенных микрокомпьютерных модулей бытовой техники, в видеомагнитофонах, тостерах, а также для PDA (personal data assistants).

Изначально новому языку было дано имя Oak (от англ.«Дуб»). Всё дело в том, что под окном офиса Джеймса Гослинга рос дуб, который ему очень нравился и в честь которого он и решил назвать новый язык.

Когда же компания Sun Microsystems увидела, что язык хорошо себя зарекомендовал и его можно сделать общедоступным, было принято решение поменять название Oak, поскольку это название уже имел другой язык программирования, а также необходимо было более созвучное, одним словом более коммерческое имя. И было дано новое имя языку – Java. [19]

Чтобы решать эти задачи, Oak должен был быть:

  1. Независимым от платформы (с тех пор как продукцию стали вовлекать многие изготовители)
  2. Чрезвычайно надежным
  3. Компактным.

Существует 3 основные версии почему так назвали язык:

  1. Программисты пьют много кофе. Пока создавался новый язык программирования, были выпиты литры кофе, и поэтому решили назвать язык в честь сорта кофе Java.
  2. Название дано в честь марки кофе Java, который был назван в честь острова Ява (на англ. – Java). Эта версия перекликается с версией № 1.
  3. Поскольку новый язык разрабатывался для программирования бытовых электронных устройств, то иногда связывают это с аллюзией на кофе-машину как пример бытового устройства.

Однако, в 1993 рынки интерактивного телевидения и PDA пошли на убыль. Тогда бурно развивался интернет и сети. Так что Sun сдвинула целевой рынок в сторону интернет-приложений и заменила название проекта на Java.

В основе Java лежат языки С и C++. Его синтаксис получается из С, а ориентированные на объект особенности влияет C++.

В 1994 Sun's выпустила браузер HotJava. Он был написан на Java за несколько месяцев, что показало мощность апплетов, программ, которые работают в пределах браузера, а также для того, чтобы ускорить процесс разработки программ.

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

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

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

13 ноября 2006 года, Sun выпустила большую часть как свободное и открытое программное обеспечение в соответствии с условиями GNU General Public License (GPL). [18]

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

3.2 Особенности программирования на Java

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

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

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

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

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

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

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

Java-апплеты – это программы, встроенные в другие приложения, обычно на веб-странице, отображаемой в веб-браузере. Пример кода в приложении А.

Этот апплет просто нарисовал строку «Привет, мир!». в прямоугольнике, в котором будет запускаться апплет. Это немного лучший пример использования функций OO Java в том, что класс явно расширяет базовый класс «Applet», что он переопределяет метод «paint» и использует импортные инструкции.

Документ с помощью HTML-элемента <applet> показан в приложении Б. Апплет имеет три атрибута: code = «Hello» указывает имя класса Applet, а width = «200» height = «200» устанавливает ширину и высоту пикселя апплета. (Апплеты также могут быть встроены в HTML с использованием элемента object или embed, хотя поддержка этих элементов веб-браузерами несовместима.

Сервлеты Java – это серверные компоненты Java EE, которые генерируют ответы на запросы клиентов (приложение В).

Операторы импорта заставляют компилятор Java включать все общедоступные классы и интерфейсы из пакетов java.io и javax.servlet в компиляцию. Класс Hello расширяет класс GenericServlet; класс GenericServlet предоставляет интерфейс для сервера для пересылки запросов на сервлет и управления жизненным циклом сервлета. [9]

Класс Hello переопределяет метод службы (ServletRequest, ServletResponse), определенный интерфейсом Servlet, для предоставления кода для обработчика запросов на обслуживание. Метод service () передается объекту ServletRequest, который содержит запрос от клиента и объект ServletResponse, используемый для создания ответа, возвращаемого клиенту. Метод service () объявляет, что он исключает исключения ServletException и IOException, если проблема не позволяет ему ответить на запрос.

Метод main () вызывается JVM при запуске программы. Он создает новый фрейм Hello и вызывает его отображение, вызывая метод setVisible (boolean), унаследованный от суперкласса Component, с логическим параметром true. = После отображения кадра, выход из основного метода не приводит к завершению работы программы, поскольку поток диспетчеризации событий AWT остается активным до тех пор, пока все окна верхнего уровня Swing не будут удалены.

По умолчанию внешний вид приложений GUI, написанных на Java, с помощью инструментария Swing очень отличается от родных приложений. Можно указать другой внешний вид с помощью подключаемой системы Swing. Клоны Windows, GTK и Motif поставляются Sun. Apple также обеспечивает внешний вид Aqua для Mac OS X. Хотя предыдущие реализации этих взглядов считались недостаточными, Swing в Java SE 6 решает эту проблему, используя более собственные процедуры рисования виджетов базовых платформ. В качестве альтернативы, сторонние инструменты, такие как wx4j или SWT, могут использоваться для большей интеграции с собственной системой окон. [12]

3.3 Перспективы языка Java

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

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

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

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

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

ЗАКЛЮЧЕНИЕ

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

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

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

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

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

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

СПИСОК ЛИТЕРАТУРЫ

  1. Буч Гради Объектно-ориентированное проектирование с примерами применения. — Конкорд, 2014. — 519 с.
  2. Васильев А. Java. Объектно-ориентированное программирование. — Питер, 2013. — 397 с.
  3. Дейтел Пол, Дейтел Харви С для программистов с введением в С11. — ДМК Пресс, 2013. — 546 с.
  4. Жемеров Д., Исакова С. Kotlin в действии. — ДМК Пресс, 2017. — 404 с.
  5. Крейг Уоллс Spring в действии. — ДМК Пресс, 2013. — 754 с.
  6. Магда Ю. Программирование и отладка C/C++ приложений для микроконтроллеров ARM. — ДМК Пресс, 2012. — 170 с.
  7. Мартин Роберт Идеальный программист. Как стать профессионалом разработки ПО. — Питер, 2011. — 240 с.
  8. Прохоренок Н. Основы Java. — БХВ-Петербург, 2017. — 688 с.
  9. Хабибуллин И. Самоучитель Java (3-е издание). — БХВ-Петербург, 2008. — 759 с.
  10. Bob Bryla, Kevin Loney. Oracle Database 12c The Complete Reference (Oracle Press) 1st Edition. — McGraw-Hill Education, 2013. — 1472 p.
  11. Herbert Schildt Java: A Beginner's Guide, Seventh Edition. — McGraw-Hill Education, 2017. — 752 p.
  12. Joshua Bloch Effective Java. — Addison-Wesley Professional, 2018. — 412 p.
  13. Joyce Farrell Java Programming. — Cengage Learning, 2015. — 976 p.
  14. Scott Meyers Effective Modern C++: 42 Specific Ways to Improve Your Use of C++11 and C++14. — O'Reilly Media, 2014. — 334 p.
  15. Stroustrup Bjarne Programming: Principles and Practice Using C++. — Addison-Wesley Professional, 2014. — 1282 p.
  16. Stroustrup Bjarne The Design and Evolution of C++. — Addison-Wesley, 2015. — 462 p.
  17. Tony Gaddis Starting Out with C++ from Control Structures to Objects. — Pearson, 2017. — 1344 p.
  18. Vertex-academy [Электронный ресурс] История создания Java. Режим доступа: https://vertex-academy.com/tutorials/ru/istoriya-sozdaniya-java-2/ Дата обращения (26.12.2019)
  19. Proglang [Электронный ресурс] Java — Обзор языка программирования: введение, история и преимущества. Режим доступа: http://proglang.su/java/introduction-to-programming Дата обращения (26.12.2019)
  20. itWeek [Электронный ресурс] Перспективы Java. Режим доступа: https://www.itweek.ru/foss/article/detail.php?ID=199284 Дата обращения (26.12.2019)
  21. Справочник Java [Электронный ресурс] Подробнее о технологии Java Режим доступа: http://www.java.com/ru/about/ Дата обращения (26.12.2019)

Приложение А

Листинг кода 1. Апплет

// Hello.java

import java.applet.Applet;

import java.awt.Graphics;

public class Hello extends Applet {

public void paint (Graphics gc) {

gc.drawString («Привет, мир!», 65, 95);

}

}

Приложение Б

Листинг кода 2. Апплет

<! - Hello.html ->

<html>

<head>

<title> Hello World Applet </ title>

</ head>

<body>

<applet code = "Hello" width = "200" height = "200" >

</ applet>

</ body>

</ html>

Приложение В

Листинг кода 3. Сервлет.

// Hello.java

import java.io. *;

import javax.servlet. *;

public class Hello extends GenericServlet {

public void service (ServletRequest request, ServletResponse response)

throws ServletException, IOException

{

response.setContentType ( "текст / html");

PrintWriter pw = response.getWriter ();

pw.println («Привет, мир!»);

pw.close ();

}

}