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

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 28.03.2023

Просмотров: 371

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Язык 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]

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]