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

Основы алгоритмизации и программирования: классификация языков программирования. Критерии выбора среды и языка разработки программ

Содержание:

ВВЕДЕНИЕ

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

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

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

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

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

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

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

Виды специализированных языков [2]:

- языки для работы с базами данных (семейство языков SQL);

- языки для web-программирования (Perl, VBScript, JavaScript, JScript ) :

- языки для математических расчетов.

- языки для автоматизации работы определенных программных продуктов (VBA в Microsoft Office).

К универсальным языкам можно отнести языка Visual C ++, Visual C ++. Net, Visual C # .Net, Visual J # .Net, Java, Delphi, Python, Ruby.     

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

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

1. ИСТОРИЯ РАЗВИТИЯ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ

Обратимся к истокам развития вычислительной техники. Вспомним первые компьютеры и программы для них. Это была эра программирования непосредственно в машинных кодах, а основным носителем информации были перфокарты и перфоленты. Программисты обязаны были знать архитектуру машины досконально. Программы были достаточно простыми, что обусловлено, во-первых, весьма ограниченными возможностями этих машин, и, во-вторых, большой сложностью разработки и, главное, отладки программ непосредственно на машинном языке. Вместе с тем такой способ разработки давал программисту просто невероятную власть над системой. Становилось возможным использование таких хитроумных алгоритмов и способов организации программ, что и не снились современным разработчикам. Например, могла применяться (и применялась!). Такая возможность, как самомодифицирующихся код. Знание двоичного представления команд позволяло иногда не хранить некоторые данные отдельно, а встраивать их в код как команды [1]. И это далеко не полный список приемов, владение хотя бы одним из которых сейчас сразу же продвигает вас до уровня «гуру» экстра-класса [1].

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

В 1954 году в недрах корпорации IBM группой разработчиков во главе с Джоном Бекусом был создан язык программирования Fortran. Значение этого события трудно переоценить. Это первый язык программирования высокого уровня. Впервые программист мог по-настоящему абстрагироваться от особенностей машинной архитектуры. Ключевой идеей, что отличает новый язык от ассемблера, была концепция подпрограмм. Напомним, что это современные компьютеры поддерживают подпрограммы на аппаратном уровне, предоставляя соответствующие команды и структуры данных (стек) прямо на уровне ассемблера, в 1954 же году это было совершенно не так. Поэтому компиляция Fortranа была процессом отнюдь не тривиальным. Кроме того, синтаксическая структура языка была достаточно сложна для машинной обработки в первую очередь потому, что пробелы как синтаксические единицы вообще не использовались. Это порождало массу возможностей для скрытых ошибок [1].

В 1960 году был создан язык программирования Cobol. Он задумывался как язык для создания коммерческих приложений, и он стал таким. На Коболе написаны тысячи прикладных коммерческих систем. Отличительной особенностью языка является возможность эффективной работы с большими массивами данных, что характерно именно коммерческих приложений. Популярность Кобола столь высока, что даже сейчас, при всех его недостатках (по структуре и замыслу Кобол во многом напоминает Фортран) появляются новые его диалекты и реализации. Так недавно появилась реализация Кобола, совместимая с Microsoft. NET [2].

В 1964 году все та же корпорация IBM создала язык PL / 1, который был призван заменить Cobol и Fortran в большинстве приложений [1]. Язык обладал исключительным богатством синтаксических конструкций. В нем впервые появилась обработка исключительных ситуаций и поддержка параллелизма. Надо заметить, что синтаксическая структура языка была крайне сложной. Пробелы уже использовались как синтаксические разделители, но ключевые слова не были зарезервированы.

В 1963 году был создан язык программирования BASIC (Beginners 'All-Purpose Symbolic Instruction Code - многоцелевой речь символических инструкций для начинающих). Язык задумывался в первую очередь как средство обучения и как первый изучаемый язык программирования. Он предполагался легко интерпретируется и компиляции. Надо сказать, что BASIC действительно стал языком, на котором учатся программировать (по крайней мере, так было еще несколько лет назад; сейчас эта роль отходит к Pascal). Было создано несколько мощных реализаций BASIC, поддерживающих самые современные концепции программирования (ярчайший пример - Microsoft Visual Basic) [2].

В 1970 году Никлаусом Виртом был создал язык программирования Pascal. Язык замечателен тем, что это первый широко распространенный язык для структурного программирования (Первым, строго говоря, был Алгол, но он не получил такого широкого распространения). Впервые оператор безусловного перехода перестал играть основную роль при управлении порядком выполнения операторов [1].

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

Отрицательной чертой языка было отсутствие там средств для разбиения программы на модули. Вирт осознавал это и разработал язык Modula-2 (1978), в котором идея модуля стала одной из ключевых концепций языка. В 1988 году появилась Modula-3, в которую были добавлены объектно-ориентированные черты. Логическим продолжением Pascal и Modula является язык Oberon и Oberon-2. Они характеризуются движением в сторону объектно-и компонентно-ориентированности [1].

В 1972 году Керниганом и Ритчи был создан язык программирования C. Он создавался как язык для разработки операционной системы UNIX. C часто называют «переносимым ассемблером», имея в виду то, что он позволяет работать с данными практически так же эффективно, как на ассемблере, предоставляя при этом структурированные управляющие конструкции и абстракции высокого уровня (Структуры и массивы). Именно с этим связана его огромная популярность и поныне. И именно это является его ахиллесовой пятой. Компилятор C очень слабо контролирует типы, поэтому очень легко написать внешне совершенно правильную, но логически ошибочную программу [2].

В 1986 году Бьярн Страуструп создал первую версию языка C +, добавив в язык C объектно-ориентированные черты, взятые из Simula (см. Ниже), и исправив некоторые ошибки и неудачные решения языка. C + + продолжает совершенствоваться и в настоящее время. Язык стал основой для разработки современных больших и сложных проектов. У него есть, однако же, и слабые стороны, вытекающие из требований эффективности [2].

В 1995 году в корпорации Sun Microsystems Кеном Арнольдом и Джеймсом Гослингом был создан язык Java. Он унаследовал синтаксис C и C + и был избавлен от некоторых неприятных черт последнего. Отличительной особенностью языка является компиляция в код некоей абстрактной машины, для которой затем пишется эмулятор (Java Virtual Machine) для реальных систем. Кроме того, в Java нет указателей и множественного наследования, что сильно повышает надежность программирования [2].

В 1999-2000 годах в корпорации Microsoft был создан язык C #. Он в достаточной степени схож с Java (И задумывался как альтернатива последнему), но имеет и отличительные особенности. Ориентирован, в основном, на разработку многокомпонентных Интернет-приложений.

В 1962 году появился речь Snobol (а в 1974 - его преемник Icon), предназначенный для обработки строк. Синтаксис Icon напоминает С и Pascal одновременно. Отличие заключается в наличии мощных встроенных функций работы со строками и связанная с этими функциями особая семантика. Современным аналогом Icon и Snobol является Perl - язык обработки строк и текстов, в который добавлены некоторые объектно-ориентированные возможности. Считается очень практичным языком, однако ему не хватает элегантности [1].

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

В 1958 году появился речь Lisp - язык для обработки списков. Получил достаточно широкое распространение в системах искусственного интеллекта. Имеет несколько потомков: Planner (1967), Scheme (1975), Common Lisp (1984). Многие его черты были унаследованы современными языками функционального программирования.

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

Язык JavaScript был создан в компании Netscape Communications в качестве языка для описания сложного поведения веб-страниц. Первоначально назывался LiveScript, причиной изменения названия получили маркетинговые соображения. Интерпретируется браузером при отображении веб-страницы. По синтаксиса схож с Java и (отдаленно) с C / C +. Имеет возможность использовать встроенную в браузер объектную функциональность, однако действительно объектно-ориентированным языком не является [2].

Язык VBScript был создан в корпорации Microsoft во многом в качестве альтернативы JavaScript. Имеет похожую область применения. Синтаксически схож с языком Visual Basic (и есть усеченной версии последнего). Так же, как и JacaScript, исполняется браузером при отображении веб-страниц и имеет ту же степень объектно-ориентированности [2].

Язык Perl создавался в помощь системному администратору операционной системы Unix для обработки различного рода текстов и выделения нужной информации. Развился до мощного средства работы с текстами. Есть интерпретируется языком и реализован практически на всех существующих платформах. Применяется при обработке текстов, а также для динамической генерации веб-страниц на веб-сервере [2].

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

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

1 поколение - 1GL (First Generation Languages):

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

2 поколение - 2GL

Конец 1950-х - начало 1960-х гг - разработан символьный ассемблер, в котором появилось понятие переменной. Это первый полноценный язык программирования. Программы применяются для создания драйверов оборудования компьютеров [2].

3 поколение - 3GL

1960-е годы - языки программирования высокого уровня. Их характеристики:

- относительная простота;

- независимость от конкретного компьютера;

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

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

4 поколение - 4GL

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

5 поколение - 5GL

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

2. ОСНОВНЫЕ СОВРЕМЕННЫЕ ЯЗЫКИ ПРОГРАММИРОВАНИЯ

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

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

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

Выполнение программы в функциональном программировании рассматривается как вызов некоторой функции, которая, в свою очередь, может вызвать другие функции. Наиболее известным представителем этой парадигмы является ЛИСП [1].

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

Парадигма объектно-ориентированного программирования является на сегодня наиболее популярной и стремительно развивается. Объектная программа рассматривается как совокупность параллельно существующих сущностей (объектов), которые взаимодействуют между собой. Каждый объект умеет вызывать определенные операции и характеризуется определенным поведением. Исторически первым объектной языком считается Smalltalk. Наиболее известными представителями этой парадигмы является C ++, Object Pascal, лежащий в основе системы визуального программирования Delphi, Java и другие языки.

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

Важным для дальнейшего рассмотрения есть данные рейтинга языков программирования по категориям (табл. 2.1). Отсюда ясно видно, что наибольшее практическое значение сегодня имеют объектно-ориентированные и процедурные языки программирования [2].

Таблица 2.1. Рейтинг языков программирования по категориям (2013) [2]

Категории языков программирования

Рейтинг в марте 2016

В сравнении с мартом 2015

Объектно-ориентированные

58,7%

+5,3%

Процедурные

36,4%

-5,6%

Функциональные

3,6%

+0,5%

Логические

1,2%

-0,3%

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

SQL (англ. Structured query language - язык структурированных запросов) - декларативный язык программирования для взаимодействия пользователя с базами данных, применяется для формирования запросов, обновления и управления реляционными БД, создание схемы базы данных и ее модификации, системы контроля за доступом к базе данных. Сам по себе SQL не является ни системой управления базами данных, ни отдельным программным продуктом. В отличие от настоящих языков программирования (C или Pascal), SQL может формировать интерактивные запросы или, будучи встроенным в приложения, выступать в качестве инструкции для управления данными. Кроме этого, стандарт SQL содержит функции для определения изменения, проверки и защиты данных.

SQL - это диалоговый язык программирования для осуществления запроса и внесения изменений в базу данных, а также управления базами данных. Многие базы данных поддерживает SQL с расширениями стандартной языка. Ядро SQL формирует командный язык, который позволяет осуществлять поиск, вставку, обновление и удаление данных с помощью использования системы управления и административных функций. SQL также включает CLI (Call Level Interface) для доступа и управления базами данных дистанционно [2].

2.2. Объектно-ориентированные языки программирования

Объектно-ориентированное программирование (ООП) - это модель программирования, основанная на утверждении того, что программа это совокупность объектов, которые взаимодействуют между собой. Каждый объект в этой модели является независимым, и он способен получать, обрабатывать данные и отправлять эти данные другим объектам. В ООП использовано модели наследования, модульности, полиморфизма и инкапсуляции [2].

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

Каждый объект имеет процедуры и функции (то что он умеет выполнять, например, загружать файл, отображать картинку и т.д.), которые служат для работы с данными объекта. Эти процедуры и функции называются методами [1].

Существование ООП возможно благодаря трем основным парадигмам на которых базируется именно ООП [1]:

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

- Наследование. Это означает, что объекты (классы) могут перенимать некоторые свойства в своих прародителей. Как? Это зависит от того языка, на котором пишется программа. Однако в любом случае картина та же: это приводит к повторному использованию уже написанного однажды кода. Подклассы наследуют атрибуты и поведение своих родительских классов, и могут иметь новые собственные атрибуты. То есть образуется иерархия из классов, где от основного класса (так называемого предка) происходят все другие классы.

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

Самым известным и старым из ныне используемых языков ООП-программирования есть С++ [1].

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

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

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

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

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

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

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

Нововведениями C++ в сравнении с C являются:

- поддержка объектно-ориентированного программирования через классы. C++ предоставляет все четыре возможности ООП — абстракцию, инкапсуляцию, наследование (в том числе и множественное) и полиморфизм.

- поддержка обобщённого программирования через шаблоны функций и классов [1];

- стандартная библиотека C++ состоит из стандартной библиотеки C (с некоторыми модификациями) и библиотеки шаблонов (Standard Template Library, STL), которая предоставляет обширный набор обобщенных контейнеров и алгоритмов [1];

- дополнительные типы данных;

- обработка исключений;

- виртуальные функции;

- пространства имён;

- встраиваемые (inline) функции;

- перегрузка (overloading) операторов;

- перегрузка имён функций;

- ссылки и операторы управления свободно распределяемой памятью.

На основе достоинств и недостатков С++ был разработан следующий язык Java.

Java — объектно-ориентированный язык программирования, разрабатываемый компанией Sun Microsystems с 1991 года и официально выпущенный 23 мая 1995 года. Изначально новый язык программирования назывался Oak (James Gosling) и разрабатывался для бытовой электроники, но впоследствии был переименован в Java и стал использоваться для написания апплетов, приложений и серверного программного обеспечения.

Программы на Java могут быть транслированы в байт-код, выполняемый на виртуальной java-машине (JVM) — программе, обрабатывающей байт-код и передающей инструкции оборудованию, как интерпретатор, но с тем отличием, что байт-код, в отличие от текста, обрабатывается значительно быстрее [2].

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

Язык Java потребовался для создания интерактивных продуктов для сети Internet. Фактически, большинство архитектурных решений, принятых при создании Java, было продиктовано желанием предоставить синтаксис, сходный с C и C++. В Java используются практически идентичные соглашения для объявления переменных, передачи параметров, операторов и для управления потоком выполнением кода. В Java добавлены все хорошие черты C++.

Три ключевых элемента объединились в технологии языка Java [2].

Java предоставляет для широкого использования свои апплеты (applets) — небольшие, надежные, динамичные, не зависящие от платформы активные сетевые приложения, встраиваемые в страницы Web. Апплеты Java могут настраиваться и распространяться потребителям с такой же легкостью, как любые документы HTML

Java высвобождает мощь объектно-ориентированной разработки приложений, сочетая простой и знакомый синтаксис с надежной и удобной в работе средой разработки. Это позволяет широкому кругу программистов быстро создавать новые программы и новые апплеты [2].

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

C# (произносится си-шарп) — язык программирования, сочетающий объектно-ориентированные и контекстно-ориентированные концепции. Разработан в 1998—2001 годах группой инженеров под руководством Андерсa Хейлсбергa в компании Microsoft как основной язык разработки приложений для платформы Microsoft .NET. Компилятор с C# входит в стандартную установку самой .NET, поэтому программы на нём можно создавать и компилировать даже без инструментальных средств вроде Visual Studio [2].

C# относится к семье языков с C-подобным синтаксисом, из них его синтаксис наиболее близок к C++ и Java. Язык имеет строгую статическую типизацию, поддерживает полиморфизм, перегрузку операторов, указатели на функции-члены классов, атрибуты, события, свойства, исключения, комментарии в формате XML. Переняв многое от своих предшественников — языков C++, Delphi, Modula и Smalltalk — С#, опираясь на практику их использования, исключает некоторые модели, зарекомендовавшие себя как проблематичные при разработке программных систем: так, C# не поддерживает множественное наследование классов (в отличие от C++) или вывода типов (в отличие от Haskell).

Perl — высокоуровневый интерпретируемый динамический язык программирования общего назначения, созданный Ларри Уоллом, лингвистом по образованию. Название языка представляет собой аббревиатуру, которая расшифровывается как Practical Extraction and Report Language «практический язык для извлечения данных и составления отчётов»

Сейчас Perl содержится практически в каждом дистрибутиве Linux и других UNIX-систем, портирован на Windows и многие другие платформы. Администраторы со всего мира используют его для автоматизации своих повседневных задач [2].

Репозиторий CPAN содержит множество модулей для языка буквально на все случаи жизни [2].

PHP - это «язык сценариев, встроенный в HTML», используемый в основном для динамических веб-приложений. Первая часть этого определения означает, что PHP-код может быть перемешан с HTML, что упрощает создание динамических частей веб-страниц на лету. В качестве языка сценариев PHP-код требует наличия процессора PHP [2]. PHP-код обычно запускается в текстовых сценариях, которые будут работать только на компьютерах с поддержкой PHP (наоборот, языки программирования могут создавать автономные исполняемые бинарные файлы, программы a.k.a.). PHP занимает большую часть своего синтаксиса с C, Java и Perl. Это технология с открытым исходным кодом и работает на большинстве операционных систем и с большинством веб-серверов. PHP был написан на языке программирования C Расмусом Лердорфом в 1994 году для использования в мониторинге его онлайн-резюме и связанной личной информации. По этой причине PHP первоначально стоял за «Личную домашнюю страницу». Лердорф объединил PHP со своим собственным интерпретатором форм, выпустив комбинацию публично как PHP / FI (обычно называемый PHP 2.0) 8 июня 1995 года [2]. Два программиста, Zeev Suraski и Andi Gutmans, перестроили ядро ​​PHP, выпустив обновленный результат как PHP / FI 2 в 1997 году. В настоящее время акроним был официально изменен на PHP: HyperText Preprocessor. В 1998 году был выпущен PHP 3, который был первой широко используемой версией. PHP 4 был выпущен в мае 2000 года с новым ядром, известным как Zend Engine 1.0. PHP 4 показал улучшенную скорость и надежность над PHP 3. Что касается функций, добавлены ссылки на PHP 4, логический тип, поддержка COM в Windows, буферизация вывода, множество новых функций массива, расширенное объектно-ориентированное программирование, включение библиотеки PCRE, и более. Обновления по обслуживанию PHP 4 по-прежнему доступны, в основном для обновлений безопасности. [2].

Когда JavaScript был впервые представлен в 1995 году, он был создан для Netscape Navigator и быстро стал известен как LiveScript. Позже имя было изменено на JavaScript, чтобы отразить поддержку Netscape Java в своем браузере.

На этом этапе нашей истории были два доминирующих веб-браузера: Netscape Navigator (с JavaScript) и Internet Explorer (с Jscript). И к тому времени, когда мир браузеров изменился, и Internet Explorer стал доминирующим браузером, JavaScript превратился в одобренный стандарт для написания интерактивной обработки в веб-браузере.

К 1996 году важность JavaScript выросла настолько, что он был передан международному стандарту для написания сценариев языка под названием ECMA (Европейская ассоциация производителей компьютеров), который по сей день несет ответственность за разработку и поддержку этого языка. В результате на языке сценариев официально было присвоено имя «ECMAScript» (или «ECMA-262»), однако люди по-прежнему называют его JavaScript.

Процесс стандартов ECMA работает в циклах - ECMAScript 2 был выпущен в 1998 году, а ECMAScript 3 был выпущен в 1999 году (который превратился в современный современный JavaScript). Несмотря на то, что Microsoft приступила к реализации некоторых предложений на своем языке JScript, стало ясно, что Microsoft не будет внедрять JavaScript в Internet Explorer.

В 2005 году Eich и Mozilla присоединились к ECMA для поддержки E4X (ECMA-357), что привело к сотрудничеству с Macromedia (приобретенным Adobe), которые работали над внедрением E4X в ActionScript 3. Целью этого сотрудничества было стандартизировать то, что было в AS3 и реализовать его в SpiderMonkey. В результате Adobe выпустила Tamarin - проект открытого курса, созданный с AVM2 [2].

Одновременно сообщества разработчиков с открытым исходным кодом и разработчиков также работали над революционизацией JavaScript и с тем, что с ним можно было сделать, а влияние сообщества достигло своего пика благодаря публикации, выпущенной в 2005 году Джесси Джеймсом Гарреттом, которая описала набор технологий, поддерживаемых JavaScript в качестве основы и где он создал термин «Аякс». Этот документ привел к росту разработчиков, тяготеющих к JavaScript и сообществам с открытым исходным кодом и библиотекам вокруг него. Кроме того, среди выпущенных новых библиотек были jQuery, Prototype и Dojo [2].

Преимущество Ajax возвратило JavaScript в центр внимания и привлекло больше внимания к профессиональному программированию. Результатом стало распространение всеобъемлющих рамок и библиотек, улучшенная практика программирования JavaScript и расширение использования JavaScript за пределами веб-браузеров, что видно из распространения серверных JavaScript-платформ на стороне сервера [2].

Сегодня JavaScript по-прежнему повсюду - это наиболее часто используемый язык сценариев на стороне клиента. JavaScript написан в HTML-документах и ​​позволяет взаимодействовать с веб-страницами многими уникальными способами. Например, благодаря JavaScript мы можем автоматически назначать встречи и играть в онлайн-игры. Кроме того, новые разработки, такие как Node.js, позволяют использовать JavaScript на стороне сервера, в то время как API-интерфейсы, такие как HTML5, позволяют управлять пользовательскими носителями и другими функциями устройства.

Современный JavaScript – это «безопасный» язык программирования общего назначения. Он не предоставляет низкоуровневых средств работы с памятью, процессором, так как изначально был ориентирован на браузеры, в которых это не требуется [2].

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

- Создавать новые HTML-теги, удалять существующие, менять стили элементов, прятать, показывать элементы и т.п.

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

- Посылать запросы на сервер и загружать данные без перезагрузки страницы (эта технология называется "AJAX").

- Получать и устанавливать cookie, запрашивать данные, выводить сообщения [2].

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

Ruby — интерпретируемый объектно-ориентированный язык программирования, созданный в 1995 году Юкихиро Мацумото по прозвищу Мац. Автор ставил себе целью создать истинно объектно-ориентированный язык, что у него и получилось. Ruby имеет строгую динамическую типизацию. Особенностью языка является то, что в нем можно изменить любой класс в любое время. Как и во многих современных языках, в Ruby все данные является объектом (даже классы являются объектом класса Class), а все функции — методами [2].

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

На дизайн Scala оказали влияние многие языки и исследовательские работы.

Конечно, Scala впитала значительное число концепций и синтаксических соглашений Java и C#. Способ выражения свойств во многом заимствован из Sather. Из Smalltalk взята концепция унифицированной объектной модели. Из Beta пришла идея, что все, включая классы, должно допускать вложенность. Абстрактные типы в Scala очень похожи на абстрактные типы сигнатур в SML и OCaml, обобщенные в контексте полноценных компонентов. В некотором смысле Scala – это продолжение работы Pizza. Как и Pizza, Scala компилируется под Java VM, добавляя функции высшего порядка, сопоставление с образцом, конструкции, которые исходно были созданы в сообществе функционального программирования. В то время как Pizza обратно совместима с Java, цель Scala – всего лишь возможность взаимодействия, так что у нее больше степеней свободы в дизайне. Ещё одна цель Scala – предоставить расширенные конструкции для абстракции и композиции компонентов – общая с несколькими недавними исследовательскими разработками [2].

Swift — открытый мультипарадигмальный компилируемый язык программирования общего назначения. Создан компанией Apple в первую очередь для разработчиков iOS и macOS. Swift работает с фреймворками Cocoa и Cocoa Touch и совместим с основной кодовой базой Apple, написанной на Objective-C. Swift задумывался как более легкий для чтения и устойчивый к ошибкам программиста язык, нежели предшествовавший ему Objective-C[7]. Программы на Swift компилируются при помощи LLVM, входящей в интегрированную среду разработки Xcode 6 и выше. Swift может использовать рантайм Objective-C, что делает возможным использование обоих языков (а также С) в рамках одной программы [2].

Kotlin (Котлин) - статически типизированный язык программирования, работающий поверх JVM и разрабатывается компанией JetBrains. Также компилируется в JavaScript. Авторы ставили перед собой цель создать более лаконичный и типо-безопасный язык, чем Java, и более простой, чем Scala [3]. Последствиями упрощения по сравнению с Scala стали также быстрейшая компиляция и лучшая поддержка IDE [2].

Язык разрабатывается с 2010 года, публично представлен ​​в июле 2011. Исходный код был открыт в феврале 2012 [5]. С 17 мая 2017 входит в список официально поддерживаемых языков для разработки приложений для платформы Android.

2.3. Процедурные языки программирования

Язык Pascal является одной из классических языков программирования. Наибольшую известность она достигла в 80-х - первой половине 90-х годов. На ее основе разработан целый ряд современных языков программирования, таких как Borland Delphi. Язык программирования Pascal разработан в 1968 году на кафедре информатики Стэнфордского университета швейцарским ученым Никлаус Вирт. Этот язык программирования получила название в честь известного французского математика и философа Блеза Паскаля (1623-1662) [1].

Сначала она рассматривалась как учебная язык программирования и благодаря простоте использования применялась в учебных заведениях как "первая" язык программирования для студентов. В 1983 году фирма Borland International перевела ее на коммерческую основу в качестве языка программирования для персональных компьютеров "компьютеров. Переломным этапом для языка Pascal стал 1985 год, то когда появилась ее новая версия, которую назвали Turbo Pascal 3.0.[1].

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

Наиболее важным нововведением стало применение модульной концепции (UNIT-концепции), которая была заимствована из языка программирования Modula-2. Это позволило реализовать в Turbo Pascal разработку крупных программных продуктов. С появлением версии 5.0 Turbo Pascal получила еще большие возможности для использования профессиональными программистами. Одним из важных нововведений стало использование аппаратных перекрытий или оверлеев (overlays) [1].

Они позволили создавать мощные программные продукты, которые рассчитаны на использование при малых объемах памяти. Механизм оверлеев заключается в разделении программы на части, поочередно загружаются в память "память (с дискеты или жесткого диска) по мере необходимости. Кроме этого в Turbo Pascal 5.0 расширены возможности отладки программ и обеспечена возможность поддержки расширенной памяти" памяти [1].

Фортран (Fortran) (ранее FORTRAN - сокращение от «The IBM Mathematical Formula Translating System», то есть «Система трансляции математических формул от IBM») - это императивный язык программирования общего назначения, особенно подходит для интенсивных многочисленных и научных вычислений. Разработанная корпорацией IBM в 1950-х годах в университетском городке на юге Сан-Хосе (Калифорния) для нужд научных и инженерных проектов. Довольно быстро Fortran стал доминировать в этой области программирования, и вот уже как более полувека находится в постоянном употреблении в области численного прогноза погоды [1], анализа методом конечных элементов, вычислительной гидродинамики, вычислительной физики и химии. Это один из самых популярных языков в области высокопроизводительных вычислений, а также используется для тестирования быстродействия самых мощных в мире суперкомпьютеров.

Версия Fortran 77 добавила поддержку для обработки символьных данных; операции с массивами и модульное программирование появились в Fortran 90; функциональное программирование в Fortran 95 (частично), объектно-ориентированное программирование и обобщенное программирование в Fortran 2003. И наконец обобщенное параллельное программирование с помощью co-arrays, что использует архитектурно-независимый и близкий для Фортрана синтаксис для параллельной декомпозиции данных и выполнения инструкций было стандартизировано в Fortran 2008 [1].

Кобо́л (COBOL, COmmon Business Oriented Language) — один из старейших языков программирования (первая версия выпущена в 1959 году), предназначенный, в первую очередь, для разработки бизнес-приложений. Руководителем проекта по созданию Кобола была Грейс Хоппер («бабушка Кобола»). Практически с самого своего рождения Кобол является ANSI-стандартизованным языком программирования.

В стандарт языка 2002 года в Кобол добавлены средства объектно-ориентированного программирования и другие современные языковые конструкции[2].

Кобол обычно критикуется за многословность и громоздкость, поскольку одной из целей создателей языка было максимально приблизить конструкции к английскому языку (ещё в 2006 году Кобол считался языком программирования, на котором было написано больше всего строк кода[3]). Кобол имел прекрасные для своего времени средства для работы со структурами данных и файлами, стал первым языком, в котором появился тип данных «запись»[1], это обеспечило ему долгую жизнь в бизнес-приложениях, по крайней мере, в США.

К 1997 году активно использовалось около 240 миллиардов строк кода на Коболе, кодом на Коболе обрабатывалось около 90 % финансовых транзакций в мире и 75 % коммерческих транзакций, общая стоимость используемого кода — 2 трлн долларов США.

3. КРИТЕРИИ ВЫБОРА СРЕДЫ И ЯЗЫКА РАЗРАБОТКИ ПРОГРАММ

3.1. Рейтинг TIOBE для языков программирования

TIOBE индекс (рейтинг языков программирования) является показателем популярности языков программирования, продукт компании TIOBE (Нидерланды). Расчет идет согласно совокупности запросов к браузерным системам, что содержат название языка. [3] Охват поисков в Google, Yahoo! , MSN, Baidu, Youtube и Википедии. Обновление каждый месяц. По мнению авторов это может быть ценным в ходе принятия разных ключевых решений. TIOBE делает акцент на Тьюринговых языках, и потому не информирует про популярность того же HTML [2].

Tiobeindex.png

Рис. 3.1. Рейтинг TIOBE 2002-2018 [8]

По состоянию на апрель 2018 года языки программирования Objective-C и Perl в третий раз за последние 12 месяцев потеряли свои позиции в рейтинге TIOBE. В то же время в список возвратился SQL, о чем уже было упоминание в февральском отчете.

Уменьшенный интерес к Objective-C связан с релизом его преемника — языка Swift. Однако даже новый язык не смог переманить на свою сторону мобильных разработчиков, всё больше использующих сторонние кроссплатформенные фреймворки.

Низкая популярность Perl объясняется неуверенностью программистов в его будущем развитии. Работа над новой версией ведется с 2000 года, но релиз состоялся только в декабре 2015, а интерпретатор Rakudo Star вышел в мае 2017 года. По данным TIOBE, его наилучшей альтернативой считаются Python и Ruby [2].

Но главный факт данного рейтинга демонстрирует уверенное лидерство многие годы трех С-языков: Java, C++, C. И безусловное первенство уже среди этих трех выбранных систем языка программирования Java.

3.2. Критерии выбора языка программирования для разработки комплекса программных решений

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

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

Ключевыми параметрами в процессе выбора языка программирования есть [1]:

• кроссплатформенность,

• мультипарадигменность,

• эффективность,

• безопасность,

• выразительность,

• поддержка,

• расширяемость,

• поддержка методов параллельного программирования.

Ход проектирования программных продуктов (ПП) с целью повышения качества обязательно нужно проводить согласно отраслевым стандартам [4, 5], базовым требованием которых есть реализация выполнение в исчерпывающем объеме всех стадий и этапов проектирования ПП. На каждой определенной стадии проектирования разработчикам нужно оценивать и производить выбор из имеющихся в наличии альтернативных методов и средств. Нет однозначных способов реализации сравнительного анализа такого рода альтернатив. Рекомендуется использования методов теории принятия решений для таких стадий проектирования ПП, как разрабатывание технического задания (ТЗ), технического проекта и построение методики испытаний программы.

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

- возможности языка программирования;

- назначение ПП, принятого к разработке;

- доступность программных пакетов (редактора, транслятора, компилятора, отладчика):

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

свободное или лицензионное распространение;

простоту компиляции программ и установки их на различные компьютеры пользователей [7];

- долговременность использования ПП (временная или постоянная);

- возможность расширения, наращивания функционала;

- число пользователей (возможность единоличного использования или передачи/продажи третьим лицам);

- необходимость работы в режиме реального времени;

- необходимую скорость работы ПП, его вычислительных и диалоговых компонентов (если таковые имеются) и их соотношение;

- предполагаемый размер программы (нужно ли минимизировать размер памяти, которую занимает программа во время работы) [7];

- требования к структуре/архитектуре ПП (необходимость модульного проектирования, использование архитектуры клиент/сервер и т.д.);

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

- основные типы данных и их структур и массивов, которыми придется оперировать (целые, строковые, действительные, списки, таблицы и др.);

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

- целесообразность и возможность применения имеющихся стандартных библиотек подпрограмм, процедур, функций [6];

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

- необходимость отслеживания, отображения, управления текущим состоянием технических средств;

- парадигму языка программирования (стиль написания программ): императивное, объектно-ориентированное, функциональное, декларативное, рефлексивное программирование;

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

- компилируемость или интерпретируемость кода [6];

- управление памятью - поддержку автоматической или ручной «сборки мусора» (освобождения более не нужной памяти);

- стандартизацию;

- переносимость кода на различные аппаратные платформы или операционные системы;

- сложность освоения и скорость разработки;

- скорость исполнения;

- возможности сетевого взаимодействия;

- поддержку многопоточности; стоимость решения.

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

Рассмотрим пример выбора языка программирования с помощью процедуры попарного сравнения альтернатив. После попарного сравнения заполняется матрица, где в i-й строке и j-м столбце стоит сравнительная оценка альтернатив i и j, полученная по следующему правилу: альтернативы равнозначны - оценка «0»; альтернатива j лучше альтернативы i - оценка «1»; альтернатива j хуже альтернативы i - оценка «-1» [5].

Допустим, трем экспертам требуется проанализировать семь возможных языков программирования. Получены три оценочные матрицы (приложение 1). Складываем полученные матрицы и в результирующей матрице проводим суммирование элементов по строкам, вычисляя предпочтительность альтернатив (их ранг). Наиболее предпочтительной является альтернатива (язык программирования) с максимальным рангом 4. На рис. 3.2. показано вычисление рангов семи альтернатив [7].

ЗАКЛЮЧЕНИЕ

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

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

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

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

БИБЛИОГРАФИЧЕСКИЙ СПИСОК

1. Бен-Ари М. Языки программирования. Практический сравнительный анализ. — М.: Мир, 2000. — 366 с.

2. Орлов С. А. Теория и практика языков программирования. Учебник для вузов. 2-е изд. Стандарт 3-го поколения. – СПб.: Питер, 2017. – 688 с.

3. ГОСТ 19.102-77. Единая система программной документации. Стадии разработки. Введ. 1980-01-01. Москва: Стандартинформ, 2005. С. 21-22.

4. ГОСТ Р ИСО/МЭК 9126-93. Информационная технология. Оценка программной продукции. Характеристики качества и руководства по их применению. Москва: Госстандарт России, 2004. 12 с.

5. Иванова Е. М., Вишнеков А. В. Использование методов теории принятия решений при проектировании программного обеспечения в соответствии с государственным отраслевым стандартом // Вестник компьютерных и информационных технологий. — 2013, № 12, С. 59-64.

6. Вишнеков А. В., Иванова Е. М. Интеграция методов поддержки принятия решений в автоматизированных СППР при разработке сложных проектов // Проблемы информатики. 2013. № 2. С. 56 - 64.

7. Карпова И. П., Ферапонтова Е. С., Вишнеков А. В. Расчет ценности альтернатив для метода «идеальной точки» в многокритериальных задачах принятия решения для ситуационных центров // Качество. Инновации. Образование. 2010. № 12. C. 56 - 61.

8. https://tproger.ru/news/tiobe-april-2018/

Приложение 1

Вычисление рангов семи альтернатив [5]