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

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

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

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

Добавлен: 01.04.2023

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

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

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

Таким образом, мы знаем, что 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#. Также эти языки могут использоваться и при построении серверных частей веб-приложений.