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

Классификация языков программирования высокого уровня (Понятие о языках программирования )

Содержание:

Введение

Актуальность. В течение нескольких последних десятилетий сфера информационных и компьютерных технологий шагнула далеко вперёд. Технологии прочно вошли в нашу повседневную жизнь, и уже довольно сложно представить современного человека без обработки какой-либо информации на компьютере. Программирование, само собой, – идёт бок о бок с техническим прогрессом и развивается столь же стремительно, как и остальные технологии. Развиваются старые языки программирования, разрабатываются новые. За всю историю развития электронно-вычислительных машин появились сотни языков программирования, многие из которых используются и по сей день. 

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

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

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

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

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

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

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

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

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

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

1.1. Понятие о языках программирования

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

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

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

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

История языков программирования берет свое начало с разработки машинного языка. Язык включает в себя логические нули и единицы. Код, написанный на этом языке, был достаточно сложный и утомительный. Это привело к созданию языка программирования Ассемблер. Он был создан в конце 40-ч годов, чтобы облегчить работу первым программистам. Записи представляли собой не двоичные цифры, обозначающие какую-то команду, а короткие слова или аббревиатуры. Ассемблер, по мнению программистов, является языком низкого уровня, поскольку он близок к машинному языку – языку программирования самого низкого уровня. Также его называют машинно-ориентированный язык, потому что программы, написанные на языке программирования Ассемблер, сильно зависимы от характеристик конкретного процессора[2]. В связи с тем, что написание программ на языке программирования Ассемблер представляет собой достаточно сложный процесс, и, несмотря на то, что также необходимо отлично знать устройство компьютера, но программы, которые написаны на языке программирования Ассемблер, можно назвать самыми эффективными и работоспособными.

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

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

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

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

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

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

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

В 1954 году начали разрабатывать первый компилятор языка высокого уровня. После двух лет разработок был создан язык программирования Fortran. В языке имелись средства, которые значительно упрощали разработку, однако написание кода на языке программирования Fortran представляло собой достаточно сложную задачу: если в коротких программах он легко понимался, когда дело касалось больших программ, данный язык программирования становился абсолютно нечитаемым. Даже, несмотря на это язык программирования Fortran был очень успешен, и команда разработчиков выпустила много его версий[3].

Изначально все корни Python растут из процедурного структурного и высокоуровневого языка ABC, что задумывался как платформа-язык обучения программированию, по подобию языков Pascal и Бейсик. В разработке же языка ABC и принимал участие родоначальник и создатель языка Python – Гвидо Ван Россум (Guido Van Rossum), которому хотелось придумать не только простой и понятный язык, как ABC, который никак не использовался, кроме как в обучении начинающих программистов, но, и чтобы он был полезен для множества различных людей.

Создание Python началась в декабре 1989 года в центре математики и информатики в Нидерландах, хотя это и не совсем верно, так по словам самого Гвидо Ван Россума «… в декабре 1989 я был в поисках проекта-хобби по программированию, что занял бы меня в течение недели Рождественских каникул. Мой офис был закрыт, но у меня дома был компьютер, и ничего более». Так что, исходя из его слов, можно считать, что начало Python было заложено в уютной, домашней и рождественской обстановке[4].

Хотя сам Гвидо Ван Россум и задумал Python ещё в начале 1980-х, но кто знает, что было бы с Python и был бы он таким, каким мы видим его сейчас, если бы не его «моральный» предшественник ABC…? Практически Python создавался, как попытка исправить ошибки, допущенные при проектировании ABC.

Основными источниками вдохновения при создании Python было множество языков программирования[5]:

  • ABC – использование отступов, вместо скобочек, для группировки операторов и относительная простота и лёгкость понимания кода.
  • Modula-3 – первый язык, использовавший конструкцию исключений try и except, и подаривший её не только Python, но и такому языку как Java. Так же Python унаследовал от Modula-3 систему модулей и пакетов, хотя сама Modula-3 была не первым языком, в котором применялись модули.
  • C, C++ - некоторые синтаксические конструкции. По словам самого Гвидо Ван Россума – он постарался выбрать самые непротиворечивые и логичные конструкции из C, чтобы не вызвать неприязнь C-программистов к Python.
  • Lisp – отдельные черты функционального программирования.

Создание языков структурного программирования привело к появлению программных блоков, независимых подпрограмм, поддержки рекурсии и локальных переменных, отсутствие оператора безусловного перехода. Примерно в 60-ых г.г. был создан один из предшественников язык программирования C#, язык программирования B, который разрабатывал коллектив разработчиков из Технологического института Массачусетса. Главный автор языка программирования B – Кен Томпсон. Тогда команда работала над операционной системой UNIX. Уже существовавший язык программирования PL/I, который применялся в то время для мэйнфреймов производства компании IBM, был достаточно громоздким и меньше подходил для поставленной задачи.

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

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

В 1971 году Ритчи начал создавать расширенную версию языка программирования B. Сначала он назвал её NB (New B), но когда язык стал сильно отличаться от языка программирования B, название сменили на язык программирования C. Язык программирования B расширился за счет того, что в нем явно использовалось типы, структуры и ряд новых операций. По поводу возникновения языка программирования С Питер Мойлан в своей книге «The case against C» писал: «Нужен был язык, способный обойти некоторые жесткие правила, встроенные в большинство языков высокого уровня и обеспечивающие их надежность. Нужен был такой язык, который позволил бы делать то, что до него можно было реализовать только на ассемблере или на уровне машинного кода».

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

1.2. Классификация языков программирования

Прежде всего, языки программирования нужно классифицировать по уровням. Разные авторы разбивают языки либо на три уровня (машинные, машинно-ориентированные и машинно-независимые языки), либо на два уровня (языки программирования низкого уровня, языки программирования высокого уровня)[6].

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

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

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

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

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

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

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

Рисунок 2. Классификация языков программирования по уровню абстракции

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

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

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

А вот с классификацией языков четвёртого и пятого поколений ситуация не так проста. К языкам программирования четвёртого поколения чаще всего относят языки объектно-ориентированные, декларативные (непроцедурные) и визуальные. Но эти языки с уверенностью можно отнести и к языкам третьего поколения. Также очень часто сюда относят языки запросов, например, SQL, который, по своей сути, вовсе не является языком программирования. Вообще, часто можно прочитать о том, что языки программирования четвёртого поколения – это языки, встроенные в определённую программную оболочку и используемые для узкоспециализированных задач, например, для создания баз данных и управления ими (встроенные языки систем управления базами данных). Получается, вернее всего сказать, что языки программирования четвёртого поколения – логичное развитие языков третьего поколения, упрощающее работу программистов ввиду того, что в основе своей эти языки встроены в собственную программную оболочку с функциями, помогающими разработчикам. Также к языкам четвёртого поколения нужно отнести языки параллельного программирования, ориентированные на создание программных средств многопроцессорной архитектуры[9].

Языки пятого поколения, теоретически, должны ещё больше упростить и ускорить работу программистов: целью этих языков является переложить значительную часть работы с человека на компьютер. Чаще всего сюда относят языки экспертных систем, баз знаний. В настоящее время, действительно, нет решений, которые могут выдавать полноценный продукт, получая при этом лишь задачу. Некоторые авторы говорят о системе MathCAD, она действительна заметно облегчает работу пользователей, беря на себя огромную долю вычислительной работы. Но всё же, на данный момент нет чёткого определения, по каким критериям определить языки пятого поколения. Одно ясно: с их использованием компьютер должен будет решить поставленную задачу без необходимости пользователю вручную реализовывать алгоритм.

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

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

Непроцедурные языки можно запросто назвать противоположностью языкам процедурным. Декларативное программирование – парадигма программирования, в которой описывается, что необходимо сделать компьютеру. Хорошим примером служит язык разметки HTML, возьмём тег <img>: необходимо просто заключить в него ссылку на изображение, а каким образом оно отобразится на странице – это задача компьютера.

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

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

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

Глава 2. Анализ языков программирования высокого уровня

2.1. Обзор языков программирования высокого уровня

Основой нашего анализа является статистика с ресурса Stackoverflow. Каждый год они подготавливают отчет о самых популярных языках программирования. В опросе участвуют более 50, 000 разработчиков со всего мира. Чтобы проследить динамику, мы собрали данные за 2017, 2016 год и использовали данные с Google Trends. 

Рисунок 3.Популярность языков в 2016 и 2017 году

Рассмотрим основные из них.

Javascript. Это один из самых популярных языков программирования. Он находится на первом место уже несколько лет подряд. По динамике видно, что этот тренд будет сохранится и дальше. Это самый кроссплатформенный язык программирования, который позволяет разрабатывать desktop, веб и мобильные приложения. Javascript имеет много удобных и гибких библиотек. Среди самых популярных стоит отметить React.js. Angular.js и Vue.js. Последняя библиотеке только набирает популярность. Vue имеет хорошую производительность и одна из самых легких для изучения. Тем не менее, ей будет тяжело выйти на столько высокий уровень популярности как другие библиотеки. Рынок уже поделен между React и Angular. 

Библиотека React была разработана компанией Facebook. Она является одной из самых популярных на основе javascript. React позволяет разрабатывать мобильные приложения, сайты и SPA (single page application). React существенно легче в изучении по сравнению с Angular 2. Angular разработан компанией Google и в последнее время терпит много трансформаций. Сначала все использовал Angular 1, несколько лет назад вышел Angular 2, который более производительней, удобней и быстрее. Сейчас Google разрабатывает Angular 4. Он должен заменить Angular 2 и стать лидером среди javascript библиотек. Посмотрим, что с этого выйдет. В целом, Angular сложный для новичков и хорошо подходи для разработки веб приложения для крупных компаний.

Кроме приведенных выше библиотек очень популярный node.js. Он позволяет разрабатывать серверную часть на Javascript. Это лучшее решение если вы хотите разработать back-end часть с использованием js. Как видите, javascript универсальный язык программирования. Имеет хорошую гибкость и производительность. Именно это и делает его одним из самых популярных в нашем списке.

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

Java. Java очень популярный в финансовой и банковской индустрии. В первую очередь благодаря своей скорости работы и уровня безопасности. Java разработчики очень ценятся на рынке труда из-за дефицита. Этот язык программирования достаточно сложный для изучения и для новичков не всегда дается легко. Кроме всего прочего, приложения Android разрабатываются именно на Java. Это основная причина столь значительной популярности этого языка. По статистике Google Trends, динамика идет вниз.

C#. Один из самых продвинутых и удобных языков программирования. Он является основным языком разработки для платформы Microsoft .NET. C# очень похож на Java, но все же имеет ряд своих преимуществ. Стоит отдельно отметить, что C# сложнее в изучении чем Java. Это не самое лучшее решения для новичков.

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

PHP Самый используемый язык программирования для серверной части. Согласно статистике, PHP используют около 240 миллионов вебсайтов. PHP имеет хорошую гибкость и производительность. Его можно использовать для небольших бизнес сайтов, а также для крупных проектов с высокой нагрузкой. Существует множество фреймворков разработанных на PHP. Они имеют хорошую скорость и высокий уровень безопасности. Наша компания, Merehad, отдает предпочтение именно этому языку программирования. В своей работе мы используем Laravel фреймворк для разработки крупных веб приложений. Основными недостатками является, отсутствие возможности разрабатывать десктопные приложения и серверные компоненты. Как и большинство серверных языков программирования он теряет свою популярность. 

C++. Один из самых сложных языков программирования. Новичку будет сложно разобраться и многие стараются обходить его стороной. Но вместе с этим C++ имеет высокую производительность. Он позволяет создавать приложения и программы практически для любых целей.[11]

TypeScript. TypeScript разработан компанией Microsoft. За короткое время он набрал популярность. TypeScript является гибким и производительным языком программирования, который основан на Javascript. Основатели TypeScript потратили много усилий и продолжают добавляют новые решения для повышения производительности и удобства. Неудивительно, что Javascript пытается внедрить их у себя. Если вы новичок, на него стоит обратить внимание, так как он будет продолжит набирать популярность в 2018 году. 

Ruby. Это динамично императивный объектно-ориентированный язык программирования. Он используется в веб разработке в связке с фреймворком Rails. Ruby является языком сверх высокого уровня. У него простой и чистый синтаксис. Ruby обеспечивает хорошую масштабированность и легкое сопровождение. Как и PHP он позволяет разрабатывать ecommerce платформы. Язык могут начать изучать новички. Основным недостатком является плохая документация и медленные рост популярности. 

Swift. Язык разработан компанией Apple и был призван заменить Objective-c. Swift имеет улучшенную читабельность кода, больше возможностей по сравнению objective-c и повышенную безопасность. Он набирает популярность и сейчас превосходит objective-c. На мой взгляд это язык программирования имеет хорошие перспективы. 

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

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

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

class HelloWorld {

public static void main (String args []) {

System. out. println ("Hello World");

}

}

Для того, чтобы поработать с приведенными в книге примерами вам нужно получить по сети из Sun Microsystems и установить Java Developers Kit - пакет для разработки Java-приложений (http://java.sun.com/products/jdk).

Язык Java требует, чтобы весь программный код был заключен внутри поименованных классов. Приведенный выше текст примера надо записать в файл HelloWorld.java. Обязательно проверьте соответствие прописных букв в имени файла тому же в названии содержащегося в нем класса. Для того, чтобы оттранслировать этот пример необходимо запустить транслятор Java - javac, указав в качестве параметра имя файла с исходным текстом:

C: \> javac HelloWorld.Java

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

C: > java HelloWorld

Hello World

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

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

Строка 1

class HelloWorld {

В этой строке использовано зарезервированное слово class. Оно говорит транслятору, что мы собираемся описать новый класс. Полное описание класса располагается между открывающей фигурной скобкой в первой строке и парной ей закрывающей фигурной скобкой в строке 5. Фигурные скобки в Java используются точно так же, как в языках С и С++.

Строка 2

public static void main (String args []) {

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

public

Разбивая эту строку на отдельные лексемы, мы сразу сталкиваемся с ключевым словом public. Это - модификатор доступа, который позволяет программисту управлять видимостью любого метода и любой переменной. В данном случае модификатор доступа public означает, что метод main виден и доступен любому классу. Существуют еще 2 указателя уровня доступа - private и protected, с которыми мы более детально познакомимся в главе 8.

static

Следующее ключевое слово - static. С помощью этого слова объявляются методы и переменные класса, используемые для работы с классом в целом. Методы, в объявлении которых использовано ключевое слово static, могут непосредственно работать только с локальными и статическими переменными.

void

У вас нередко будет возникать потребность в методах, которые возвращают значение того или иного типа: например, int для целых значений, float - для вещественных или имя класса для типов данных, определенных программистом. В нашем случае нужно просто вывести на экран строку, а возвращать значение из метода main не требуется. Именно поэтому и был использован модификатор void. Более детально этот вопрос обсуждается в главе 4.

main

Наконец, мы добрались до имени метода main. Здесь нет ничего необычного, просто все существующие реализации Java-интерпретаторов, получив команду интерпретировать класс, начинают свою работу с вызова метода main. Java-транслятор может оттранслировать класс, в котором нет метода main. А вот Java-интерпретатор запускать классы без метода main не умеет.

Все параметры, которые нужно передать методу, указываются внутри пары круглых скобок в виде списка элементов, разделенных символами ";" (точка с запятой). Каждый элемент списка параметров состоит из разделенных пробелом типа и идентификатора. Даже если у метода нет параметров, после его имени все равно нужно поставить пару круглых скобок. В примере, который мы сейчас обсуждаем, у метода main только один параметр, правда довольно сложного типа.

Элемент String args[] объявляет параметр с именем args, который является массивом объектов - представителей класса String. Обратите внимание на квадратные скобки, стоящие после идентификатора args. Они говорят о том, что мы имеем дело с массивом, а не с одиночным элементом указанного типа. Мы вернемся к обсуждению массивов в следующей главе, а пока отметим, что тип String - это класс. Более детально о строках мы поговорим в главе 9.

Строка 3

System. out. prlntln("Hello World!");

В этой строке выполняется метод println объекта out. Объект out объявлен в классе OutputStream и статически инициализируется в классе System. В главах 9 и 13 у вас будет шанс познакомиться с нюансами работы классов String и OutputStream.

Закрывающей фигурной скобкой в строке 4 заканчивается объявление метода main, а такая же скобка в строке 5 завершает объявление класса HelloWorld.

Лексические основы

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

Пробелы

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

Комментарии

Хотя комментарии никак не влияют на исполняемый код программы, при правильном использовании они оказываются весьма существенной частью исходного текста. Существует три разновидности комментариев: комментарии в одной строке, комментарии в нескольких строках и, наконец, комментарии для документирования. Комментарии, занимающие одну строку, начинаются с символов // и заканчиваются в конце строки. Такой стиль комментирования полезен для размещения кратких пояснений к отдельным строкам кода:

a = 42; // если 42 - ответ, то каков же был вопрос?

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

/*

* Этот код несколько замысловат...

* Попробую объяснить:

* ....

*/

Третья, особая форма комментариев, предназначена для сервисной программы javadoc, которая использует компоненты Java-транслятора для автоматической генерации документации по интерфейсам классов. Соглашение, используемое для комментариев этого вида, таково: для того, чтобы разместить перед объявлением открытого (public) класса, метода или переменной документирующий комментарий, нужно начать его с символов /** (косая черта и две звездочки). Заканчивается такой комментарий точно так же, как и обычный комментарий - символами */.

Глава 3. Тенденции развития современных языков программирования высокого уровня

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

С момента зарождения ЯП ВУ выделяют четыре больших направления в классификации традиционных языков программирования по критерию вычислительных моделей, лежащих в основе языка. Это парадигмы: императивного, объектно-ориентированного (ООП), функционального и логического программирования[12].

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

Язык программирования XXI века должен быть с «изящным» синтаксисом, содержать элементы функционального программирования, быть ориентированным на объектный подход и легко позволять встраиваться программному коду (созданному на нём) на клиентские станции или серверы – поддерживать распределённую обработку данных.

Следуя данным тенденциям, было разработано несколько ярких ЯП ВУ: Scala, Elm, Swift, Rust, Dart. Если к традиционным языкам программирования высокого уровня, таким как структурные: Си, Паскаль, Бейсик, как язык гипертекстовой разметки HTML и язык сценариев JavaScript, как объектно-ориентированным Visual Basic, Object Pascal, C++ пользователи и разработчики приложений уже привыкли, то новые языки программирования, которым нет и десятка лет, не всем известны и пока не очень тиражируются, в частности, в высшей школе. Поэтому, опираясь на информационные ресурсы электронных источников и историческую хронологию новых ЯП ВУ, показывает, как изменились требования к инструменту написания кода, какое влияние оказывает на эволюцию языков прикладного программирования характер стремительно меняющейся экономической картины мира.

Остановимся на вышеупомянутых ЯП ВУ: Elm, Swift, Scala, Dart, чьё будущее, в плане максимальной востребованности, как инструмента прикладного программирования, ещё впереди. Например, функциональный язык программирования Elm, представленный американским программистом Эваном Чаплицким в 2012 году в ходе работы над своим дипломным проектом в Гарварде, обладает ключевой особенностью. Системы программирования, поддерживающие этот язык, содержат отладчик реального времени, с помощью которого легко можно изменить программный код в реальном режиме времени и проследить реакцию на внесённые изменения по выбранным параметрам.

Подобные действия по изменению параметров записываются, могут быть просмотрены и проанализированы, а также тщательно и многократно оттестированы и проверены. Этот современный язык программирования относится к парадигме функционального программирования, с поддержкой принципов функционального реактивного программирования (ФРП).

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

Кроме того, ЯП ВУ Elm удобен и прост в использовании: небольшой по объёму программный код обеспечивает разработчику приложения возможность работать с мышью для воспроизведения любой (даже сложной) фигуры в приложениях или в браузере. Тем не менее, язык изначально – функциональный, о чём говорят его родственные связи с семейством языка Haskell.

На рисунке 4 показаны взаимовлияния традиционных языков программирования и новых, ровесников двадцать первого столетия. Elm, не смотря на ярко выраженную принадлежность к функциональной парадигме, может быть использован для создания различного уровня сложности веб-приложений, практически всегда имеется возможность встроить написанный на этом языке программный код в блок тегов на странице сайта, так как Elm-программа без труда компилируется в коды HTML, CSS JavaScript.

Проведенный анализ популярных языков программирования данной парадигмы, показал, что функциональное программирование и его основные идеи получили в настоящее время новый виток развития. Так, необходимо выделить новый язык с интересными связями, и, являющийся представителем этой вычислительной модели – язык Swift от компании Apple. Данный язык служит отличным полигоном для создания интерактивных приложений для мобильных устройств и в этом отчасти совпадает с предназначением ЯП ВУ Elm[13].

Если рассмотреть генеалогические связи этого языка (рис. 4), то становится понятно, почему Swift такой яркий и его синтаксис вполне лёгкий для освоения современными прикладными программистами. Во-первых, на его появление оказали влияние Си-подобные языки программирования, которые на протяжение десятков лет широко востребованы и освоены разработчиками ПО: это Java, Ruby, C++, Objectiv-C.

Рисунок 4. Связи ЯП ВУ

В таблице 1 указана востребованность у работодателей в нашей стране специалистов со знанием перечисленных языков программирования. И тенденция такова, что основные языки – проверенные временем PHP, Java, C++ – занимают первые строчки таблицы, но современные языки, ровесники века, не уступают им в процентах роста и набирают популярность. Так, если брать цифры 2015 года за 100%-ю отметку, то прирост Swift составил 100%, а стоящий второй по числу заявок Java, прибавил 38% за год[14].

Таблица 1

Вакансии мест для программистов

ЯП ВУ

Временной период

2016

2017

1

PHP

5586

9707

2

Java

6219

8581

3

C++

3252

4135

4

C#

2853

4093

5

JavaScript

2307

3657

6

Python

3791

2581

7

SQL

1449

1955

8

Oracle

1303

1742

9

C

917

1338

10

Ruby

993

1003

11

Scala

456

362

12

Perl

165

223

13

Go

72

188

14

Objective-C

89

81

15

Swift

39

78

Во-вторых, масштабность решаемых экономических задач, массовый охват всех сфер экономики сетевыми структурами диктует строгие требования к создаваемым приложениям: быстрота, интерактивность, динамичность, инкапсуляция, масштабируемость. Все эти качества присущи тем языкам, о которых упоминалось выше. Анализ динамики вакансий специалистов-программистов за 2013-2017гг. в нашей стране (где 2013 год взят за базовую отметку в 100%)[15] (Таблица 2) показывает наибольшую востребованность программистов, владеющих языками JavaScript, Java, PHP.

Значит и современные языки - потомки этих апробированных временем языков, должны получить со временем признание у массового пользователя – разработчика различного рода приложений. В высшей школе, например, в образовательном стандарте для информационно-технологических направлений обучения за последние пять лет появился даже курс, связанный с веб-технологиями, основу которого составляют знания по применению ЯП ВУ JavaScript, PHP.

Таблица 2

Вакансии программистов в России

Временной интервал

Языки программирования ВУ

PHP

Java

C++

C#

JavaScript

2013

100

100

100

100

100

2014

149

135

120

124

178

2015

136

169

127

133

194

2016

149

189

115

144

290

2017

260

257

151

208

462

ЯП ВУ Swift как раз и сочетает в себе понятность Си-подобных языков, опирается на мощную динамическую объектную модель Objective-C, не уступает по быстродействию C++ и Java, обладает доступностью по отношению к интерфейсам прикладного программирования для различных операционных систем[16].

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

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

Другой представитель мультипарадигменной направленности – язык программирования начала века – Scala, хотя по прошествии более десятка лет с момента выхода его в свет, он занимает в рейтинге популярности не самое видное место (таблица 1), но с точки зрения вклада в другие языки, такие как Swift, заслуживает внимания. Scala разрабатывался для простого и быстрого программирования приложений, поэтому в нём органично сочетаются возможности объектно-ориентированного и функционального программирования. На формирование этого языка оказали влияние такие элегантные ЯП ВУ, как Lisp, Haskell, Java, C#, он считается языком хорошей поддержки для компонентного программного обеспечения[17].

Влияние Java на этот язык велико, на Scala можно писать программы лишь немного корректируя синтаксис Java, это тоже является плюсом, так как Java появился на десять лет раньше и следует проверенным и надёжным принципами «чистого» объектно-ориентированного программирования. Например, можно использовать Scala-коллекции из библиотек и неявные преобразования из данной коллекции в Java – коллекции, причём как в одну сторону, так и в другую сторону. Даже инструмент написания встроенных аннотаций совпадает у этих двух языков[18].

Характерная черта современного прикладного программирования – веб-направленность. Используя статистические данные, упомянутые выше (таблица 1), можно сказать, на примере PHP, языки объектно-ориентированной парадигмы и скриптовые языки для написания веб-предложений будут востребованы ближайшие годы (рис 5-6).

Рисунок 5. Прогноз востребованности PHP-программистов

Рисунок 6. Прогноз востребованности Java-программистов

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

ЯП ВУ Dart – совершенно новый язык, уже относящийся к языкам, появившимся во втором десятилетии двадцать первого века. Так или иначе, но при его создании разработчики попытались избавиться от недостатков, присущих его историческим «родственникам»[19].

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

За то небольшое время с момента представления языка (2011 год), программы, созданные на Dart – высокопроизводительны и успешно работают на вычислительных устройствах широкого класса: от смартфонов до серверов. Это является подтверждением качества предлагаемого языка, который в настоящее время проходит апробацию у разработчиков. По безопасности – также важнейшему критерию современного программирования, ЯП ВУ Dart надёжнее Go и JavaScript. Безопасность веб-приложений, написанных на Dart, уже проверена и одобрена разработчиками. Имеются удобства у пользователей этого языка и в плане поддержки, отладки и модификации кода. Кроме того, 4 июля 2014 вышел первый стандарт языка Dart.

Эти аргументы говорят в пользу этого нового ЯП ВУ, что в ближайшее время он должен получить признание и у «массового программиста». Таким образом, мир прикладного программного обеспечения не стоит на месте и появление новых ЯП ВУ тому подтверждение. В настоящем веке наиболее популярными становятся скриптовые языки и языки реактивного программирования, как правило, относящиеся к мультипарадигмальной концепции и опирающиеся на Си-подобный синтаксис. Данные тенденции обусловлены новыми разноплановыми экономическим задачами, сетевыми всемирными структурами, желанием программистов иметь простой, понятный и универсальный инструмент разработки современных приложений.

Заключение

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

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

Мы рассмотрели классификации языков программирования: по уровню, по абстракции, по поколениям, по функциональному признаку.

При анализе обзора языков программирования высокого уровня мы выявили, что на первом месте стоит Javascript, на втором месте SQL. Эти два языка наиболее популярные в 2016-2017 году.

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

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

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

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

Scala. Язык программирования [Электронный ресурс]. URL: // http://progopedia.ru/language/scala// (дата обращения 14.08.2018).

Very Long Term History [Электронный ресурс]. URL: // http:/www.tiobe.com/tiobe-index/ (дата обращения 14.08.2018).

Александреску, А. Язык программирования D / А. Александреску. - СПб.: Символ-плюс, 2014. - 544 c.

Голицына О.Л., Попов И.И. Программирование на языках высокого уровня // М.: ФОРУМ. 2011. 496 с.

Исаева Г.Н, Пахомов Д.А., Возможности современных языков программирования высокого уровня. В сборнике: СОВРЕМЕННЫЕ ИНФОРМАЦИОННЫЕ ТЕХНОЛОГИИ Сборник трудов по материалам межвузовской научно-технической конференции. МГОТУ под науч. ред. В.М. Артюшенко. 2015. С. 163-167.

История развития языков программирования. – http://softcreate.narod.ru.дата доступа (14.08.2018)

Ишкова, Э. А. Изучаем С++ на задачах и примерах / Э.А. Ишкова. - М.: Наука и техника, 2016. - 240 c.

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

Коэльё Л. П., Ричерт В. Построение систем машинного обучения на языке Python. — Перевод с английского. — М.: ДМК Пресс, 2015.

Маккинли У. Python и анализ данных. — Перевод с английского. — М.: ДМК Пресс, 2015. — 482 с.

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

Сайт о языке программирования Dart – руководства, инструкции, новости, статьи и многое другое: [Электронный ресурс]. // dartdot.ru. URL: http://dartdot.ru/ (дата обращения 15.08.2018).

Самые востребованные языки программирования 2017 [Электронный ресурс]. URL: //https://habrahabr.ru/company/hh/blog/318450/(http://dartdot.ru/ (дата обращения 15.08.2018).

Язык программирования Swift. Русская версия: [Электронный ресурс]. // Хабрахабр. URL: https://habrahabr.ru/post/225841(дата обращения 15.08.2018).

Язык программирования. Эволюция языков программирования [Электронный ресурс]. URL:http://wiki.mvtom.ru/index.php/Язык_программирования дата доступа (14.08.2018)

Языки программирования и их классификация [Электронный ресурс]. URL:http://www.maksakov-sa.ru/ProgrProd/YazProgr/index.html дата доступа (14.08.2018)

  1. Александреску, А. Язык программирования D / А. Александреску. - СПб.: Символ-плюс, 2014. - 544 c.

  2. История развития языков программирования. – http://softcreate.narod.ru.дата доступа (14.08.2018)

  3. История развития языков программирования. – http://softcreate.narod.ru.дата доступа (14.08.2018)

  4. Коэльё Л. П., Ричерт В. Построение систем машинного обучения на языке Python. — Перевод с английского. — М.: ДМК Пресс, 2015.

  5. Маккинли У. Python и анализ данных. — Перевод с английского. — М.: ДМК Пресс, 2015. — 482 с.

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

  7. Языки программирования и их классификация [Электронный ресурс]. URL:http://www.maksakov-sa.ru/ProgrProd/YazProgr/index.html дата доступа (14.08.2018)

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

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

  10. Язык программирования. Эволюция языков программирования [Электронный ресурс]. URL:http://wiki.mvtom.ru/index.php/Язык_программирования дата доступа (14.08.2018)

  11. Ишкова, Э. А. Изучаем С++ на задачах и примерах / Э.А. Ишкова. - М.: Наука и техника, 2016. - 240 c.

  12. Голицына О.Л., Попов И.И. Программирование на языках высокого уровня // М.: ФОРУМ. 2011. 496 с.

  13. Исаева Г.Н, Пахомов Д.А., Возможности современных языков программирования высокого уровня. В сборнике: СОВРЕМЕННЫЕ ИНФОРМАЦИОННЫЕ ТЕХНОЛОГИИ Сборник трудов по материалам межвузовской научно-технической конференции. МГОТУ под науч. ред. В.М. Артюшенко. 2015. С. 163-167.

  14. Very Long Term History [Электронный ресурс]. URL: // http:/www.tiobe.com/tiobe-index/ (дата обращения 14.08.2018).

  15. Самые востребованные языки программирования 2017 [Электронный ресурс]. URL: //https://habrahabr.ru/company/hh/blog/318450/(http://dartdot.ru/ (дата обращения 15.08.2018).

  16. Исаева Г.Н, Пахомов Д.А., Возможности современных языков программирования высокого уровня. В сборнике: СОВРЕМЕННЫЕ ИНФОРМАЦИОННЫЕ ТЕХНОЛОГИИ Сборник трудов по материалам межвузовской научно-технической конференции. МГОТУ под науч. ред. В.М. Артюшенко. 2015. С. 163-167.

  17. Scala. Язык программирования [Электронный ресурс]. URL: // http://progopedia.ru/language/scala// (дата обращения 14.08.2018).

  18. Язык программирования Swift. Русская версия: [Электронный ресурс]. // Хабрахабр. URL: https://habrahabr.ru/post/225841(дата обращения 15.08.2018).

  19. Сайт о языке программирования Dart – руководства, инструкции, новости, статьи и многое другое: [Электронный ресурс]. // dartdot.ru. URL: http://dartdot.ru/ (дата обращения 15.08.2018).