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

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

Содержание:

Введение

Актуальность.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

В 1954 году начали разрабатывать первый компилятор языка высокого уровня. После двух лет разработок был создан язык программирования Fortran[6].

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

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

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

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

  • 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.

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

1.2. Основные операторы языков программирования высокого уровня

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

Операторы присваивания

В языке Паскаль оператор присваивания обозначается двумя символами «:=», между которыми не ставится пробел. В левой части данного оператора должна стоять переменная, а в правой части – выражение, значение которого будет присвоено переменной.

Очень часто в Паскале можно увидеть конструкцию вида p:=p+1. Данная запись не содержит ошибки. Внутри компьютера данный оператор выполняется следующим образом: сначала берется исходное значение переменной, к которому прибавляется единица. После этих действий результат вычислений помещается в переменную p. Таким образом в языке Паскаль реализуется инкремент переменной.

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

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

(1)

Таблица 1

Бинарные арифметические операции над типом integer

Операция

Обозначение

Пример

Сложение

+

p + 2

Вычитание

-

p– 2

Умножение

*

p * 2

Деление нацело

div

p div 2

Остаток от деления

mod

p mod 2

Исходный код программы:

Program Op_prisv;

var

a,b,c:real;

begin

a:=3;

b:=4;

c:=sqrt(a*a+b*b);

end.

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

В результате выполнения данного кода программа вычислит значение гипотенузы треугольника со сторонамиa, b, и занесет это значение в переменную c.

Операторы ввода-вывода

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

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

Для ввода с клавиатуры в языке Паскаль существует два оператора: Readи Readln. Для вывода на экран – Writeи Writeln. Дополнение «ln» произошло от английского слова «line» - строка, линия. Операторы, заканчивающиеся на «ln» в результате своих действий переводят курсор на новую строку. Так, например, при работе оператора Write курсор останется на следующей позиции после последнего выведенного символа. А в случае оператора Read очередные данные будут считываться из той же строки, где стоит курсор.

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

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

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

Program Op_vvod_vyvod;

uses crt;

var

a,b,c:real;

begin

write('Катет a = ');

readln(a);

write('Катет b = ');

readln(b);

c:=sqrt(a*a+b*b);

writeln('Гипотенуза = ',c:3:2);

writeln('Для завершения нажмите любую клавишу...');

readln();

end.

В данной программе используются операторы ввода исходных данных – катетов прямоугольного треугольника. Для вывода результата на экран используется форматированный вывод. Результаты работы программы приведены на рисунке 1.1

Рисунок 1. Пример работы с операторами ввода-вывода

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

Рисунок 2. Пример работы оператора ввода без параметров

Операторы перехода

В языке Паскаль существует два вида операторов перехода – условный и безусловный.

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

Рассмотрим пример программы с использованием оператора безусловного перехода:

ProgramOp_goto;

usescrt;

labelm1;

var

a: integer;

begin

a:=5;

goto m1;

a:=a*10;

m1: writeln('a = ', a);

end.

Рассмотрим последовательность действий данной программы. В первую очередь переменной а присваивается значение 5. Затем в программе встречается оператор безусловного перехода, который посылает компьютеру сигналу о том, что следующий оператор, подлежащий исполнению, помечен меткой m1. Следовательно, дальнейшие действия программы – вывод результата на экран, а не умножение значения переменной на 10. Важно отметить, что оператор a:=a*10 в данной программе не исполнится никогда.

Результат исполнения данного кода приведен на рисунке 1.3.

Рис. 3.Пример работы с оператором безусловного перехода

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

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

  • логическое сложение – or;
  • логическое умножение – and;
  • отрицание – not;
  • исключающее «ИЛИ» - xor.

Операторы выбора

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

  • использовать вложенные условия;
  • использовать оператор выбора.

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

Case<ключ>of

C_1: <операторы_1>;

C_2: <операторы_2>;

C_N: <операторы_N>;

else<операторы 0>

end;

В данной записи ключом называется выражение порядкового типа, в зависимости от значения которого и принимается решение. Значениями C_1, C_2, …, C_N обозначены константы - возможные варианты значения ключа, которые необходимо рассмотреть при вычислениях. Данным значениям соответствуют блоки операторов, которые исполняются, если значение ключа совпадает со значением C. Если же значение ключа не совпало ни с одной из указанных констант, выполнится блок <операторы_0>. Важно отметить, что этот блок может отсутствовать [15, c. 133].

В качестве примера использования оператора выбора рассмотрим задачу определения времени года по введенному месяцу[13, c. 80]:

Program Op_vybor;

uses crt;

var

m: integer;

begin

write('Введите номер месяца: ');

readln(m);

case m of

1,2,12: writeln('Время года - зима');

3,4,5: writeln('Время года - весна');

6,7,8: writeln('Время года - лето');

9,10,11: writeln('Время года - осень');

elsewriteln('Такого месяца не существует!');

end;

end.

В данной программе реализован оператор выбора, который в качестве констант использует сразу несколько значений, операторы для которых идентичны. Данный подход является очень удобным и позволяет сократить число ветвей программы с 13 до 5. Результат выполнения приведенного кода представлен на рисунке 4.

Рисунок 4. Пример работы с оператором выбора

Операторы цикла

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

  • цикл с предусловием – while. Состоит из условия цикла и его тела (см. рисунок 5). Пока условие цикла будет иметь значение «истина», тело цикла будет исполняться.

Рисунок 5. Блок-схема цикла с предусловием

Как видно из блок-схемы, если условие цикла с самого начала имеет значение «Ложь», то тело цикла ни разу не будет исполнено. Если в процессе исполнения цикла условие всегда принимает значение «Истина», то цикл начинает исполняться бесконечно – происходит зацикливание. Это означает, что в алгоритме допущена ошибка. Пример использования цикла с предусловием:

Program Op_pred;

uses crt;

var

N, p: integer;

begin

write('Введитецелоечисло N = ');

readln(N);

writeln('Степени числа 2, не превосходящие ', N);

p:= 2;

while p <= N do

begin

write(p,' ');

p:= p * 2;

end;

writeln();

end.

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

Рис. 6. Пример работы цикла с предусловием

  • цикл с постусловием – repeat-until. В данном случае сначала выполняется тело цикла, после чего проверяется выражение, записанное в блоке until (см. рисунок 7).

Рисунок 7. Блок-схема цикла с постусловием

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

ProgramOp_post;

usescrt;

varm, N, sum: integer;

begin

write('N = ');

read(N);

m:=0;

sum:=0;

repeat

m:=m+1;

sum:=sum+m;

until m=N;

writeln ('Сумма первых ',N,' чисел равна ', sum);

end.

В данной программе определяется сумма первых N натуральных чисел. N задается пользователем с клавиатуры;

Рисунок 8. Пример работы цикла с постусловием

  • цикл с параметром – for. Данный цикл выполняется заданное количество раз. Существует две формы записи данного цикла в зависимости от того, каким образом должна изменяться переменная цикла. Если она должна увеличиваться, используется запись:

for<переменная_цикла>:= <начальное_значение>to<конечное_значение>do<операторы>.

Если же переменная цикла должна уменьшаться, используется другая запись:

for<переменная_цикла>:= <начальное_значение>downto<конечное_значение>do<операторы>.

Чаще всего данный цикл используется при обработке массивов. Рассмотрим пример подобной программы:

Program Op_param;

uses crt;

var i, n, sum, a: integer;

begin

write('N = ');

readln(n);

write('Введите ',n,' элементов массива: ');

sum:=0;

for i:=1 to n do

begin

read(a);

sum:=sum+a;

end;

writeln('Сумма введенных элементов = ', sum);

end.

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

Рисунок 9. Пример работы цикла с параметром

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

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

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

Рисунок 10.Популярность языков в 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++ имеет высокую производительность. Он позволяет создавать приложения и программы практически для любых целей.[9]

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

Язык C++ является расширением языка С. Сфера его применения – системное программирование. Однако долгое время С++ использовался для написания прикладных программ несмотря на то, что требования к системным и прикладным программам не совпадают.

Java – объектно-ориентированный язык. Абстракция, инкапсуляция, наследование и полиморфизм являются для него необходимыми свойствами, как и для С++.

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

Однако есть и различия, с которыми мы предлагаем ознакомиться на нескольких примерах.

Задача 1. Задан двумерный массив, размерностью 4x4.

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

1 2 3 4

12 13 14 5

11 16 15 6

10 9 8 7.

Программа 1.1. (С++)

#include<iostream>

using namespace std;

int main (int argc, char** argv)

{int x; cout<<"x="; cin>>x;

For (int i=0; i<<x<<" "; x++;}

int t=x, y=x+7;

cout<<<endl;

for(int=0; I<3;i++){ cout<<y<<<" ";y++}

cout<<t<< endl;

cout <t+6<<" "<<t+11<<" "<<t+10<<" "<<t+1<< endl;

t+=5

for(int=0; I<4;i++){ cout<<t<<<" ";y--}

return 0;}

Программа 1.2 (Java)

package b1; //b1-название пректа

import java. util.Scanner;

public class B1

{public static void main(String [] args)

{int x;

Scanner in = new Scanner(System.in);

System.out.printf("x=");

x=in.nextInt();

for(int i=0; i++) {System.out.printf("%d;\t", x); x++;}

int z=x, y=x+7;

System.out.printf("\n");

for(int i=0; I<3;i++) {System.out.printf("%d\t", y); y++;}

System.out.printf("%d\t", z);

System.out.printf("\n"); System.out.printf("%d\t%d\t%d\t%d\n", z+6, z+11, z+10,z+1);

z+=5;

for(int i=0; i<4;i++) {System.out.printf("%d\t",z ); z--;}

}}

Рисунок 11. Среды программирования Dev-С++ и NetBeans Java

Задача 2. В одномерном массиве, состоящем из n вещественных элементов, найти элемент с минимальным значением

Программа 2.1 (С++)

#include<iostream>

using namespace std;

int main(int argc, char** argv)

{int n; float min;

cout<<"n="; cin>>n;

float a [n];

for(int i=0;i<n;i++) {cout <<"a["<<i<<"]="; cin>>a[i]; }

min=a[0];

for (int i=0;I<n;a[i]) {min=a[i];}

cout<<"min="<< min

return 0;}

Программа 2.2 (Java)

package b2;

import java.util.Scanner;

public class B2

{public static void main(String[] args)

{int n; float min;

Scanner in = new Scanner(System.in);

System.out.printf("n=");

n=in.nextInt();

float []a = new float [n];

for(int i=0;i <n; i++) { System.out.print("\ta["+i+"]="); a[i]=in.nextInt();}

min=a[0];

for (int i=0;i<n; i++) if(min>a[i]) {min=a[i];}

System.out.print("\nmin="+ min+"\n");

}}

Рисунок 12. Задача 2

Задача 3. Ежемесячная стипендия студента составляет А рублей, а расходы на проживание превышают стипендию и составляют С рублей в месяц. Рост цен ежемесячно увеличивает расходы на 3%. Составить программу расчета суммы денег, которую необходимо единовременно попросить у родителей, чтобы можно было прожить учебный год (10 месяцев), используя только эти деньги и стипендию.

Программа 3.1 (С++)

#include <iostream>

using namespace std;

int main(int argc, char** argv)

{float A, C, S=0;

cout<<"stip: "; cin>>A;

cout<<"exps: "; cin>>C;

S+=C;

cout<<endl;

for(int i=2;i<=10;i++) { C+=C*(float)3/100; S+=C;}

cout<<"exps - 10 m: "<<S<<endl;

cout<<"stip - 10 m: "<<A*10<<endl;

cout<<"sum - parents: "<<S-A*10;

return 0;}

Программа 3.2 (Java)

package b3; //b3 название моего проекта

import java.util.Scanner;

public class B3

{public static void main(String[] args)

{float A,C,S=0;

Scanner in = new Scanner(System.in); //объявить in

System.out.printf ("stip: ");

A=in.nextFloat();

System.out.printf ("\nexps: ");

C=in.nextFloat();

S+=C;

for(int i=2; i<=10; i++) { C=C+C*(float)3/100; S+=C;}

System.out.printf ("exps – 10 m: %f;\n", S);

System.out.printf ("stip – 10 m: %f;\n", A*10);

System.out.printf ("sum – parents: %f;\n", S-A*10);

}}

В программу на языке С++ добавляют строку «using namespace std;», а на языке Java – «import java.util.Scanner;». Данные строки необходимы для корректной работы методов ввода и вывода переменных в соответствующих языках. Именно в этих методах – разница в приведенных программах. В С++ для ввода и вывода используются объекты cin и cout из класса istream и ostream соответственно, хотя в нем есть возможность применения для данных целей методов scanf() и printf(), унаследованных из С. В Java для потокового ввода и вывода в классе System определены объекты in и out. Сам класс размещается в пакете java.lang. который автоматически подключается к программе.

В объекте out определены методы System.out.print(), System.out.println() и System.out.printf(). Способы применения последнего метода также заимствованы из С. В рассмотренных примерах на Java используется именно этот метод, но во второй задаче представлена работа метода print() с конкатенацией в виде знака «+»: System.out.print("\nmin="+ min+"\n"). Для того, чтобы перевести курсор на новую строку, в самом методе применен спецификатор "\n" (аналогично, такие спецификаторы для перехода на новую строку или для табуляции применяют в языке С++).

Когда есть необходимость в переводе курсора на следующую строку без применения "\n" можно воспользоваться методом System.out.println(). Логично предположить, что для ввода данных с консоли можно использовать метод System.in, но в данном случае применяют класс Scanner и его конструктор new. Scanner расположен в пакете java.util и он подключается к программе той строкой, которая была добавлена к шаблону на Java: java.util.Scanner. В теле функции main программист объявляет объект in и присваивает ему значение: Scanner in = new Scanner (System.in). Метод System.in передается new.

Java гораздо сильнее типизирован по сравнению с C++, соответственно и ограничений для него больше на действия с переменными и величинами разных типов. Для ввода целочисленных, вещественных или строковых чисел применяют разные методы. Например, in.nextInt() возвращает введенное с клавиатуры целочисленное значение, nextDouble() – число double, in.next() – строку до первого пробела и т. д.

Java является одним из наиболее востребованных языков программирования на современном этапе. Он предоставляет для широкого использования свои апплеты (applets) – небольшие, надежные, динамичные, не зависящие от платформы приложения.

Глава 3. Перспективы развития Java в 2018 году

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

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

Итак, что нас ждет в 2018-м? Во-первых, новый цикл релиза каждые 6 месяцев. Как будет сообщество Java справляться с поэтапными изменениями? Как будет развиваться Java, чтобы соответствовать новым потребностям больших и малых организаций?

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

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

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

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

Заключение

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

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

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

Мы рассмотрели на примерах 2 языка программирования высокого уровня: С++ и Java.

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

Java гораздо сильнее типизирован по сравнению с C++, соответственно и ограничений для него больше на действия с переменными и величинами разных типов. Для ввода целочисленных, вещественных или строковых чисел применяют разные методы. Например, in.nextInt() возвращает введенное с клавиатуры целочисленное значение, nextDouble() – число double, in.next() – строку до первого пробела и т. д.

Перспективы развития Java в 2018 году:

  • Ускорится конвергенция с контейнерами
  • Kotlin станет следующим популярным языком
  • Новый график выпуска будет стимулировать ускорение инноваций 
  • Бессерверные платформы вызовут крупную перестройку Java.

Java является одним из наиболее востребованных языков программирования на современном этапе. Он предоставляет для широкого использования свои апплеты (applets) – небольшие, надежные, динамичные, не зависящие от платформы приложения.

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

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

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

Гриффитс, Д. Изучаем программирование на C / Д. Гриффитс, Д. Гриффитс. - М.: Эксмо, 2015. - 624 c.

Гукин, Д. Для "чайников". Программирование на C / Д. Гукин. - М.: Вильямс, 2016. - 384 c.

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

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

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

Перри, Г. Программирование на C для начинающих / Грег Перри , Дин Миллер. - М.: Эксмо, 2015. - 368 c.

Полубенцева, М. C/C++. Процедурное программирование / М. Полубенцева. - М.: БХВ-Петербург, 2014. - 448 c.

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

Симакова В.Е., Бедняк С.Г. НОВЫЕ ИНФОРМАЦИОННЫЕ ТЕХНОЛОГИИ. ВИРТУАЛИЗАЦИЯ // Научное сообщество студентов XXI столетия. ТЕХНИЧЕСКИЕ НАУКИ: сб. ст. по мат. VII междунар. студ. науч.-практ. конф. № 7

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

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

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

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

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

  5. Симакова В.Е., Бедняк С.Г. НОВЫЕ ИНФОРМАЦИОННЫЕ ТЕХНОЛОГИИ. ВИРТУАЛИЗАЦИЯ // Научное сообщество студентов XXI столетия. ТЕХНИЧЕСКИЕ НАУКИ: сб. ст. по мат. VII междунар. студ. науч.-практ. конф. № 7

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

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

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

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