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

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

Содержание:

ВВЕДЕНИЕ

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

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

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

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

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

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

1. Анализ предметной области

1.1 Парадигмы программирования

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

Одной из характеристик языка является его поддержка определенных парадигм программирования. Например, Smalltalk имеет прямую поддержку программирования объектно-ориентированным способом, поэтому его можно назвать объектно-ориентированным языком. Программы OCaml, Lisp, Scheme и JavaScript имеют тенденцию активно использовать функции, поэтому они называются «функциональными языками», несмотря на наличие переменных и многих императивных конструкций. [5, 9, 15]

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

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

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

На более продвинутом уровне переходят к изучению динамических типов данных (что предполагает более глубокое знание информатики) или объектно-ориентированного программирования (большинство современных программ создаются с использованием этой парадигмы).

Можно выделить два замечания:

  • Очень немногие языки реализуют парадигму на 100%. Если они это делают, они являются чистыми. Очень необычно иметь «чистый ООП» язык или «чистый функциональный» язык. У многих языков есть несколько ответвлений; например, в OCaml, можно программировать с функциями на 90% или более времени.
  • Многие языки облегчат программирование в одной или нескольких парадигмах. В Scala можно легко программировать с точки зрения объектно-ориентированного, и одновременного функционального программирования. Если язык специально предназначен для программирования во многих парадигмах, то он называется многопарадигменным языком. Бывают языки, которые стали поддерживать многофункциональность случайно, то есть изначально они не были разработаны с этой целью. Создатели таких языков придерживаются точки зрения, гласящей, что ни одна парадигма не может быть одинаково эффективной для всех задач, и следует позволять разработчику выбрать лучший стиль программирования для решения каждой отдельной задачи. [4].

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

Управление потоком в императивном программировании является явным: команды показывают, как вычисление происходит, шаг за шагом.

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

Вычисления выполняются с помощью последовательности шагов, в которой эти переменные упоминаются или изменяются. Порядок шагов имеет решающее значение, поскольку данный шаг будет иметь разные последствия в зависимости от текущих значений переменных при выполнении шага [4, 14, 15].

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

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

Преимущества императивного подхода:

  • эффективность;
  • близость к «железу»;
  • популярность;
  • знаком программистам. [5, 9, 15]

Недостатки императивного подхода:

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

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

Логическая программа разделена на три раздела:

  1. ряд определений/деклараций, определяющих проблемную область;
  2. заявления соответствующих фактов;
  3. постановка целей в форме запроса.

Возвращается любое выводимое решение для запроса. Определения и декларации строятся целиком из отношений. т.е. X является членом Y или X находится внутри между a и b, и т. д. [9, 15]

Преимущества логико-ориентированного программирования многообразны:

  • система решает проблему, поэтому само программирование сводятся к минимуму;
  • доказательство действительности разработанных на нём программ является простым.

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

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

Имеются следующие преимущества функционального программирования:

  1. Высокий уровень абстракции, особенно когда используются чистые функции, которые исключают многие нюансы программирования и, таким образом, устраняют возможность совершения многих классов ошибок;
  2. Отсутствие зависимости от операций присваивания. Эта независимость в отношении оценки делает функционально-ориентированные языки хорошими кандидатами для программирования параллельных компьютерных систем;
  3. Отсутствие операций присваивания делает функционально-ориентированные программы гораздо более пригодными для математического доказательства и анализа, чем настольные программы, поскольку функциональные программы обладают ссылочной прозрачностью. [9]

К недостаткам можно отнести следующие:

  1. Менее эффективно.
  2. Проблемы, связанные с множеством переменных или много последовательной деятельности, иногда легче обрабатывать императивно или с объектно-ориентированным подходом.

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

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

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

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

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

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

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

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

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

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

1.3 Объектно-ориентированное программирование

Истоки ООП берут начало с 60-х годов XX века. Однако окончательное формирование основополагающих принципов и популяризацию идеи следует отнести к 80-м годам. Большой вклад внес Алан Кей.

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

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

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

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

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

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

Механизм моделирования программы как совокупности объектов различных классов и, кроме того, использование классов как в качестве модификаций других классов, обеспечивает высокую степень модульности. [9, 15]

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

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

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

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

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

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

2.1 Fortran

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

FORTRAN — один из самых ранних языков программирования. В оригинальных версиях использовались перфокарты для написания программ. С одной стороны, FORTRAN имеет огромное количество доступных библиотек. Тем не менее, Fortran также имеет много архаичных функций, особенно в более ранних версиях. [4]

Первоначально Fortran включал не очень понятный синтаксис с фиксированными полями (5-значный номер строки, маркер продолжения и область оператора (плюс область номера последовательности карт в некоторых версиях). Однако новые спецификации для FORTRAN, такие как Fortran 90, 95, 2003 и 2008, не требуют такого странного форматирования. Кроме того, многие компиляторы имеют дополнительные улучшения для нестандартного кода. Новые стандарты добавляют функциональность и полностью совместимы со старыми версиями. При необходимости различия между этими устаревшими версиями и современным стандартом будут выделены, так как существует значительная база кода, написанная в более старых версиях, особенно FORTRAN 77.

FORTRAN, язык программирования, созданный в 1957 году Джоном Бэкусом, который сократил процесс программирования и сделал компьютерное программирование более доступным. [8, 9]

Создание FORTRAN, дебютировавшее в 1957 году, ознаменовало собой значительный этап в развитии языков компьютерного программирования. Предыдущее программирование было записано на языке машинного (первого поколения) языка или сборки (второго поколения), что требовало от программиста писать инструкции в двоичной или шестнадцатеричной системе. Неээфективность такого программирования привело к поиску более простого и доступного способа общения с компьютерами. В течение трехлетнего этапа развития Бэкус возглавил команду из 10 сотрудников International Business Machines (IBM) для создания языка, сочетающего форму английского сокращения с алгебраическими уравнениями.

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

Позволяя создавать программы на естественном языке, которые работают так же эффективно, как и ручные, FORTRAN стал языком программирования, который был выбран в конце 1950-х годов. Он был обновлен несколько раз в 1950-х и 1960-х годах, чтобы оставаться конкурентоспособным с более современными языками программирования. FORTRAN 77 был выпущен в 1978 году, за ним последовал FORTRAN 90 в 1991 году и дальнейшие обновления в 1996 и 2004 годах. Однако языки четвертого и пятого поколений в значительной степени вытеснили FORTRAN за пределы академических кругов, начиная с 1970-х годов. [4, 9, 15]

2.2 COBOL

COBOL является языком программирования высокого уровня разработанном CODASYL комитетом (Conference DaтаSy Languages) в 1960 году. С тех пор, ответственность за разработку новых стандартов COBOL регулировалось Американским национальным институтом стандартов (ANSI).

Были разработаны три стандарта ANSI для COBOL: в 1968, 1974 и 1985 годах. Новый стандарт COBOL, представляющий объектно-ориентированное программирование для COBOL, должен появиться в ближайшие несколько лет. [17]

Слово COBOL является аббревиатурой, что означает СОMMON Business Oriented Language. Как показывает расширенная аббревиатура, COBOL предназначен для разработки бизнес-приложений, обычно ориентированных на файлы. Он не предназначен для написания системных программ. Например, нам не будут разрабатывать операционную систему или компилятор.

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

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

Приложения COBOL часто используют огромные объемы данных. Отдельные производственные файлы и базы данных, измеренные в терабайтах. [9, 17]

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

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

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

COBOL не является проприетарным (переносным) [14, 15, 20].

Стандарт COBOL не принадлежит ни одному конкретному поставщику. Независимый от поставщика комитет ANSI COBOL законодательно закрепляет формальные, не относящиеся к вендору синтаксис и стандарты семантического языка. COBOL был перенесен практически на любую аппаратную платформу: от любой Windows до каждого фальсификатора Unix до AS/400, VSE, DOS, VMS, Unisys, DG, VM и MVS.

Когда программа COBOL переносится на новый компьютер или имеет новые периферийные устройства, или требуется для работы в другой стране, программисты COBOL знают, что части программы, которые необходимо будет изменить для учета этих изменений, будут изолированы в отделе окружения. На других языках программирования дисциплина программистов могла обеспечить, чтобы ссылки, подлежащие изменению, были ограничены одной частью программы, но их можно было легко распространить по всей программе. В программах COBOL у программистов нет выбора. Жесткая иерархическая структура COBOL гарантирует, что эти элементы будут ограничены разделом окружения. [17]

2.3 Pascal

Паскаль — это процедурный язык программирования, разработанный в 1968 году и изданный в 1970 году Никлаусом Виртом и названный в честь французского математика и философа Блейса Паскаля. Pascal работает на различных платформах, таких как Windows, Mac OS и различных версиях UNIX/Linux.

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

Паскаль — это язык на основе Алгола и включает в себя множество конструкций Алгола. Алгол 60 является подмножеством Паскаля. Паскаль предлагает несколько типов данных и структуры программирования. Легко понять и поддерживать программы Pascal. [1, 2]

Паскаль вырос в популярности в учебной и академической арене по разным причинам:

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

Особенности языка Pascal. Паскаль имеет следующие функции:

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

Ниже приведен простой код паскаль (листинг 1), который будет печатать слова «Hello, World!». 

Листинг 1 — Простая программа на Pascal

program HelloWorld;

uses crt;

begin

writeln('Hello, World!');

readkey;

end.

Определение переменной помещается в блок, начинающийся с ключевого слова var , с последующим определением переменных следующим образом: «var A_Variable, B_Variable ... : Variable_Type;»

Переменные Pascal объявляются вне тела кода функции, что означает, что они не объявлены в парах начала и конца, но они объявляются после определения процедуры/функции и перед ключевым словом begin. Для глобальных переменных они определяются после заголовка программы. [3]

В Паскале процедура состоит из команд, которые должны быть выполнены, без возвращаемого значения, а функция — это процедура с возвращаемым значением. Определение функции/процедур будет таким, как показано в листинге 2.

Листинг 2 — Определение процедур

Function Func_Name(params...) : Return_Value;

Procedure Proc_Name(params...);

Многострочные комментарии заключены в фигурные скобки и звездочки как {* ... *}. Паскаль допускает однострочный комментарий, заключенный в фигурные скобки {...} (листинг 3).

Листинг 3 — Комментарии

{* Это многострочный

комментарий *}

{ Это однострочный комментарий }

Объявление типа используется для объявления типа данных идентификатора. Синтаксис объявления типа: type-identifier-1, type-identfier-2 = type-specifier;

Например, следующее объявление определяет переменные days и age как integer type, yes и true как Boolean type, name и city как тип строки, сборы и расходы как реальный тип (листинг 4). [3]

Листинг 4 — Определение переменных

type

days, age = integer;

yes, true = boolean;

name, city = string;

fees, expenses = real;

Основные переменные в Паскаль показаны ниже:

  1. Символ. Обычно один байт. Это целочисленный тип.
  2. Целое число. Самый естественный размер целого для машины.
  3. Числа с плавающей запятой. Значение с плавающей запятой с одиночной точностью.
  4. Логический. Задает истинные или ложные логические значения. Это также целочисленный тип.
  5. Перечислимый. Определяет пользовательский список.
  6. Поддиапазон. Представляет переменные, значения которых лежат в пределах диапазона.
  7. Строка. Сохраняет массив символов. [2, 3]

Язык программирования Pascal также позволяет определять различные другие типы переменных, таких как «Указатель», «Массив», «Записи», «Наборы и файлы» и т. д.

Все переменные должны быть объявлены до их использования в программе Pascal. За всеми объявлениями переменных следует ключевое слово var . Объявление определяет список переменных, за которым следует двоеточие (:) и тип. Синтаксис объявления переменной показан на листинге 5.

Константа — это объект, который остается неизменным во время выполнения программы. [2] Паскаль позволяет объявлять только константы следующих типов:

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

Синтаксис для объявления констант показан на листинге 5.

Листинг 5 — Объявление констант

const

identifier = constant_value;

В таблице 1 показаны все арифметические операторы, поддерживаемые Pascal. Предположим, что переменная A имеет место 10, а переменная B имеет 20, тогда результаты будут таким как в таблице ниже.

Необходимо соблюдать форматирование в выводе программы. Переменная c должна быть отформатирована с общим числом цифр 7 и 2 цифрами после десятичного знака. Pascal допускает такое форматирование вывода с числовыми переменными. [1, 2, 3]

Таблица 1 — Арифметические операторы

Оператор

Описание

Пример

+

Добавляет два операнда

A + B даст 30

-

Вычитает второй операнд с первого

A - B даст -10

*

Умножает оба операнда

A * B даст 200

/

Делит числитель на знаменатель

B / A даст 2

%

Оператор модуля и остаток после целочисленного деления

B% A даст 0

В данной главе были рассмотрены процедурные языки такие, как Fortran, Pascal и COBOL. Были рассмотрены их особенности и изучены элементы синтаксиса.

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

3.1 C#

C# — это язык программирования с несколькими парадигмами, включающий сильную типизацию, императивность, декларативность, функциональность, объектно-ориентированность (основанный на классах) и различные другие дисциплины программирования, компонентно-ориентированного логики. Он был разработан Microsoft в рамках своей инициативы .NET, а затем одобрен в качестве стандарта Ecma (ECMA-334) и ISO (ISO/IEC 23270: 2006). C # — один из языков программирования, предназначенных для общей языковой инфраструктуры. [12]

При разработке клиентской части нашей программы, в качестве инструмента был выбран именно C#. Он обладает рядом больших преимуществ, которые позволяют вести разработку на нём очень удобной. К его особенностям относятся:

  1. Модернизированный язык.

C# - модернизированная версия C++. Первоначально был язык C, который широко использовался. C++ стал добавлять объектную ориентацию к C, а C++ стал языком построения «реальных» приложений для Windows (согласно разработчикам, на C++). C++ использовался для написания инфраструктуры и приложений низкого уровня, в то время как разработчики Visual Basic писали бизнес-приложений.

C # привносит парадигму быстрого развития VB в мир разработчиков C++ с некоторыми очевидными изменениями. C # использует .NET Framework, что означает, что уже есть доступ к мощному движку форм, который был у разработчиков VB в течение многих лет. В него добавлены новые типы данных, такие как десятичный тип данных для выполнения финансовых расчетов.

  1. Безопасность.

C# является строго типизированным, что даёт ряд преимуществ. Например, невозможно использовать неинициализированные переменные. В C++ легко объявить переменную, а затем проверить ее значение; все, что было в адресе памяти, указанном этой переменной, будет показано, и это может привести к падению приложения. C# complier уведомит, если разработчик попытается использовать переменную, прежде чем инициализировать ее до некоторого допустимого значения. [9, 12]

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

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

Хотя многие утверждают, что C++ объектно-ориентирован, C# переходит на другой уровень. Даже простые типы данных могут рассматриваться как объекты, а это означает, что INT имеет методы, связанные с ним. Например, вы можете использовать метод ToString для получения строкового значения для int.

Кроме того, символьные строки можно рассматривать как объекты и поддерживать различные методы, такие как ToUpper , ToLower , и многие другие. [9]

  1. Упрощенный синтаксис.

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

Файлы заголовков также были удалены из C#. Операторы имен и ссылочные операторы, “::” и “->” соответственно, были заменены одним оператором.

Возможно, одним из самых больших изменений является то, что типы данных int и bool теперь совершенно разные. Это означает, наконец, становится возможным закончить сопоставления и сравнения в if условиях. [12] Другими словами, следующий код даже не компилируется под C#:

int Counter = 14;

if (Counter = 14) {// сделать что-то}

Попытка скомпилировать этот код вернет сообщение об ошибке: “невозможно неявно преобразовать тип int в bool”.

C# также решает проблемы управления памятью, с помощью схемы сборщика мусора .NET. Элементы, на которые больше не ссылаются объекты, отмечаются, и сборщик мусора её очистит.

  1. Комментарии XML.

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

  1. Не только Microsoft.

C# - это не просто Microsoft. Microsoft выпустила C# для ECMA и она была опубликована в качестве стандарта. Кроме того, проект Mono - это попытка создать версию .NET Framework (часть под названием CLI) с открытым исходным кодом и версию C # с открытым исходным кодом для Linux.

  1. Все о компонентах.

Создание компонентов является простой задачей, так как программа ссылается на эти компоненты в коде. Пространства имен в C# заменяют множество головных болей из мира COM (Component Object Model), в которых приходилось выполнять поиск в реестре, и создавать объекты, и беспокоиться о таких вещах, как IUnknown и IDispatch. Используя C#, вы просто импортируете пространство имен, а затем начинаете использовать классы в этом компоненте.

  1. Сила быть небезопасной.

Многое связано с безопасностью типов в C#, но если вы хотите “водить без ремня безопасности”, вы можете это сделать. Если вам действительно нужно использовать указатели, например, вы можете использовать небезопасное ключевое слово, чтобы отметить блок кода. Это позволяет этому коду обходить проверку безопасности типа Framework и означает, что вы можете напрямую манипулировать памятью. Это делает C# невероятно мощным и является одним из преимуществ C # над VB.NET. [9]

  1. Возможности кроссплатформенного языка.

C# позволяет вам взаимодействовать с любым другим языком на платформе .NET. Многое было сказано о том, как вы можете создать компонент на одном языке и наследовать, и расширять этот компонент на другом языке, что было бы сложным, если не невозможным, с COM.

C# также поддерживает концепцию обработки ошибок на разных языках.

Когда дело доходит до создания приложений для .NET, выбор между VB.NET и C# обычно не важен. Однако вполне возможно, что компании готовы платить больше за разработчиков C#. [16]

3.2 Java

Язык Java разработан компанией Sun Microsystems, создателем которого был Джеймс Гослинг, и выпущен в 1995 году в качестве основных компонентов компании Sun Microsystems — Java платформ (Java 1.0 [J2SE]). [6]

К его преимуществам можно отнести следующие:

  1. Объектно-ориентированный. В Java все является объектом. Дополнение может быть легко расширено, так как он основан на объектной модели.
  2. Платформонезависимый. В отличие от многих других языков, включая C и C++, Java, когда был создан, он не компилировался в платформе конкретной машины, а в независимом от платформы байт-коде. Этот байт код распространяется через интернет и интерпретируется в Java Virtual Machine (JVM), на которой он в настоящее время работает.
  3. Простой. Процессы изучения и введение в язык программирования Java остаются простыми.
  4. Безопасный. Методы проверки подлинности основаны на шифровании с открытым ключом.
  5. Архитектурно-нейтральный. Компилятор генерирует архитектурно-нейтральные объекты формата файла, что делает скомпилированный код исполняемым на многих процессорах, с наличием системе Java Runtime.
  6. Портативный. Архитектурно-нейтральный и не имеющий зависимости от реализации аспектов спецификаций — все это делает Java портативным. Компилятор в Java написан на ANSI C с чистой переносимостью, который является подмножеством POSIX. [10, 15]
  7. Прочный. Выполняет усилия, чтобы устранить ошибки в различных ситуациях, делая упор в основном на время компиляции, проверку ошибок и проверку во время выполнения.
  8. Многопоточный. Функции многопоточности, можно писать программы, которые могут выполнять множество задач одновременно. Введение в язык Java этой конструктивной особенности позволяет разработчикам создавать отлаженные интерактивные приложения.
  9. Интерпретированный. Java байт-код переводится на лету в машинные инструкции и нигде не сохраняется. Делая процесс более быстрым и аналитическим, поскольку связывание происходит как дополнительное с небольшого весом процесса.
  10. Высокопроизводительный. Введение Just-In-Time компилятора, позволило получить высокую производительность.
  11. Распространенный. Предназначен для распределенной среды интернета.
  12. Динамический. Программирование на Java считается более динамичным, чем на C или C++, так как он предназначен для адаптации к меняющимся условиям. Программы могут выполнять обширное количество во время обработки информации, которая может быть использована для проверки и разрешения доступа к объектам на время выполнения. [14]

3.2 Ruby on Rails

Rails — это платформа разработки веб-приложений, написанная на языке программирования Ruby. Он призван облегчить программирование веб-приложений, сделав ставку на то, что каждый разработчик должен суметь легко начать на нём писать. Это позволяет писать меньше кода при сравнении с другим большим количества языков и фреймворков. [7]

Rails — это надежное программное обеспечение. 

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

Философия Rails включает в себя два основных руководящих принципа:

  • «не повторяйся» или DRY - это принцип разработки программного обеспечения, в котором говорится, что «у каждой части знаний должно быть одно, недвусмысленное, авторитетное представление внутри системы». Не повторяя одну и ту же информацию снова и снова, код более удобен в обслуживании, более расширяемый и менее подвержен ошибкам;
  • «конец конфигурации»Rails имеет мнение о наилучшем способе делать много вещей в веб-приложении и по умолчанию использует этот набор соглашений, вместо того, чтобы требовать, чтобы указывались всякие мелочи через бесконечные файлы конфигурации.

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

Таким образом, мы знаем, что Rails — это платформа, которая позволяет Rails-разработчикам использовать язык Ruby для разработки веб-сайтов.

4. Критерии выбора

4.1 Критерии выбора языка разработки

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

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

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

  • Кроссплатформенность;
  • мультипарадигменность;
  • эффективность;
  • безопасность;
  • выразительность;
  • поддержка;
  • расширяемость;
  • поддержка методов параллельного программирования.

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

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

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

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

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

Компилируемые языки работают быстрее интерпретируемых и компилирующихся в байткод.

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

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

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

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

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

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

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

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

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

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

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

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

Исходя из всего вышесказанного, следует, что писать высокопроизводительный код следует на C\C++, для написание крупного настольного или серверного ПО разумно использовать JAVA или C#, так как код на этих языках относительно просто писать и поддерживать, хотя С++ и C может использоваться для ускорения работы и поддержки аппаратных особенностей платформы, для прототипирования и проведения прикладных расчетов разумно использовать Python. При этом Python разумно использовать даже там, где требуется большое количество сложных вычислений, например, в научных расчетах. Это происходит из-за того, что профессиональная разработка ПО на этапе научного исследования затруднительна и, как правило, занимает продолжительное время, в то же время Python может использоваться достаточно просто, обеспечивая большой набор готовых инструментов, сокращая время необходимое для реализации алгоритма.

4.2 Критерии выбора среды разработки

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

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

1. Code Blocks. Подойдет для языков программирования: C, C ++, Fortran

Уровень навыка: отлично подходит для начинающих программистов

Code Blocks выделил ключевые слова, чтобы разработчик знал, правильно ли печатает встроенные функции. Интерфейс имеет интеллектуальный отступ, сворачивание кода и настраиваемое выделение, чтобы код был аккуратным и удобным для чтения. Отладчик имеет условные точки останова, точки останова данных и точки останова кода для легкого изучения кода во время выполнения. Поддерживаются множественные компиляторы, такие как GCC и MSVC++. Code Blocks работает на Linux, Mac и Windows и является Open Source. [19]

2. Eclipse. Подойдёт для языков программирования: C, C++, Python, Perl, PHP, Java, Ruby и т. д. Уровень навыка: у Eclipse есть много возможностей как для продвинутых, так и для начинающих программистов.

Эта IDE может использоваться со многими языками благодаря обширной библиотеке плагинов. В ней также есть много полезных дополнений для ускорения разработки проектов. Рабочие пространства и иерархия папок помогают сохранить различные проекты и части кода, организовать их, чтобы их можно было легко найти. Eclipse можно использовать кроссплатформенно, но для компиляции и запуска кода на Java требуется Java Runtime Environment (JRE), а также Java Development Kit (JDK).

3. Visual Studio. Подойдёт для языков программирования: Ajax, javascript, Visual Basic, Visual C#, Visual C++ и т. д. Уровень навыка: большинство уровней умения программировать.

Visual Studio существует уже очень давно, и есть много дополнительных функций, которые действительно делают ее отличной IDE. Она использует Xamarin, которая имеет кроссплатформенную разработку для приложений на Android, IOS и Windows. Использование опции совместного проекта делает код доступным для разных консольных приложений. Кроме того, редактор кода помогает найти ненужный или избыточный код, чтобы разработчик мог удалить все ненужное. [19]

4. IntelliJ IDEA. Подойдёт для языков программирования: HTML, javascript, Node JS и т. д. Уровень навыка: это самая ориентированная на разработчиков среда IDE в этом списке.

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

Таким образом, в рамках данной главы были рассмотрены конкретные критерии для выбора языка и среды разработки.

ЗАКЛЮЧЕНИЕ

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

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

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

Клиентская часть таких приложений, в любом случае, будет разрабатываться на HTML, CSS и JavaScript, потому что эти технологии являются господствующими при разработке клиентских частей веб-приложений. Также для разработки корпоративных веб-приложений подойдут Ruby on Rails.

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

В качестве среды разработки, наиболее лучшим вариантом будет Intellij Idea. Она подойдёт для разработки на огромном количестве языков программирования, в том числе и для веб-разработки.

СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ

  1. Алиев, Ю.А. Практикум по алгоритмизации и программированию на языке Паскаль/ Ю.А. Алиев. – В. – Питер: 2007. – 527с
  2. Алексеев, Е.Р. Турбо Паскаль 7.0/ Е.Р. Алексеев, О.В. Чесноков а.- М.: НТ Пресс, 2007.– 83с.
  3. Аронов, В.В. TurboPascal/В.В. Аронов. – БХВ - Петербург, 2004 . – 156с.
  4. Артемов, И. Л. Fortran: основы программирования. – М.: Диалог-МИФИ, 2007. – 304с.
  5. Буч Гради Объектно-ориентированное проектирование с примерами применения. — Конкорд, 2014. — 519 с.
  6. Васильев А. Java. Объектно-ориентированное программирование. — Питер, 2013. — 397 с.
  7. Майкл Хартл Ruby on Rails для начинающих. Изучаем разработку веб-приложений на основе Rails. — ДМК Пресс, 2017. — 574 с.
  8. Мартин Роберт Идеальный программист. Как стать профессионалом разработки ПО. — Питер, 2011. — 240 с.
  9. Орлов С. А. Теория и практика языков программирования. — Питер, 2017. — 688 с.
  10. Прохоренок Н. Основы Java. — БХВ-Петербург, 2017. — 688 с.
  11. Робин Никсон Создаем динамические веб-сайты с помощью PHP, MySQL, JavaScript, CSS и HTML5. — Питер, 2016. — 767 с.
  12. Робисон У. С# без лишних слов. – ДМК Пресс, 2017 — 344 с.
  13. Шуляев А. В. Критерии выбора языка программирования для разработки комплекса программных решений. — Аспирант, Южный университет (ИУБиП) №9, 2016. — 133-137 с.
  14. Herbert Schildt Java: A Beginner's Guide, Seventh Edition. — McGraw-Hill Education, 2017. — 752 p.
  15. Jeffrey A. Hoffer Modern Database Management. — Pearson, 2015. — 601 p.
  16. Joshua Bloch Effective Java. — Addison-Wesley Professional, 2018. — 412 p.
  17. Michael Coughlan Beginning COBOL for Programmers. — Apress, 2014. — 588 p.
  18. Справочник Java [Электронный ресурс] Подробнее о технологии Java Режим доступа: http://www.java.com/ru/about/ Дата обращения (25.01.2019)
  19. Digitrode [Электронный ресурс] Обзор популярных интегрированных сред разработки. Режим доступа: http://digitrode.ru/articles/973-obzor-populyarnyh-integrirovannyh-sred-razrabotki-ide-chast-i.html Дата обращения (25.01.2019)