Файл: Классификация языков программирования . Критерии выбора среды и языка разработки программ.pdf
Добавлен: 04.04.2023
Просмотров: 73
Скачиваний: 1
Наиболее часто используемыми являются визуальные среды Delphi, C++ Builder фирмы Borland (Inprise Corporation), Visual C++, Visual Basic фирмы Microsoft,Visual Ada фирмы IBM и др.
Между основными визуальными средами этих фирм Delphi, C++ Builder и Visual C++ имеется существенное различие: визуальные среды фирмы Microsoft обеспечивают более низкий уровень программирования «под Windows». Это является их достоинством и недостатком. Достоинством – так как уменьшается вероятность возникновения «нестандартной» ситуации, т.е. ситуации, не предусмотренной разработчиками библиотеки компонентов, а недостатком – так как это существенно загружает программиста «рутинной» работой, от которой избавлен программист, работающий с Delphi или C++ Builder. Много нареканий вызывает также интерфейс Visual C++, также ориентированный на «низкоуровневое» программирование [18, с. 14].
В общем случае, если речь идет о выборе между этими средами, то он в значительной степени должен определяться характером проекта.
Таким образом, мы приходим к выводу, что среда (система) программирования представляет собой совокупность инструментов, обеспечивающих преобразование программы на некотором языке программирования в выполнимые вычисления.
2.2. Критерии выбора языка разработки программ
Когда необходимо создать большую программную систему или составить программы для решения какой-либо частной задачи, встает вопрос, какой выбрать для этой цели подходящий язык программирования. Такой выбор делается на основании очень простых факторов: наличии того или иного транслятора и умения писать программы на данном языке.
Но если в распоряжении пользователя несколько языков программирования, то необходимо учитывать следующие обстоятельства [21, с. 91]:
- назначение разрабатываемого программного обеспечения, т.е. необходимость в нем будет временная или оно будет использоваться постоянно, будет ли оно в дальнейшем передаваться другим организациям, будут ли создаваться его новые версии;
- необходимая скорость работы программного обеспечения, соотношение и работа его вычислительных и диалоговых компонентов;
- предполагаемый размер программы, т.е. создавать ее как единое целое, или она будет в виде отдельных взаимодействующих модулей, нужно ли минимизировать размер памяти, которую занимает программа во время работы;
- возможность сопряжения разрабатываемого программного обеспечения с другими приложениями (пакетами или программами), включая приложения, составленные на иных языках программирования;
- основные типы данных, которыми придется оперировать, возможность поддержки работы с различными типами структур;
- характер и уровень использования периферийных средств (монитора, клавиатуры и др.), необходимость в специальном программировании некоторых функций, чтобы работать с периферийными устройствами;
- целесообразность и возможность применения имеющихся стандартных библиотек подпрограмм, процедур, функций.
Язык программирования можно определить множеством показателей, характеризующих отдельные его свойства. Возникает задача введения меры для оценки степени приспособленности ЯП к выполнению возложенных на него функций меры эффективности [20, с. 30].
Эффективность определяет степень соответствия ЯП своему назначению. Она измеряется либо количеством затрат, необходимых для получения определенного результата, либо результатом, полученным при определенных затратах. Произвести сравнительный анализ эффективности нескольких ЯП, принять решение на использование конкретного языка позволяет критерий эффективности.
Критерий эффективности – это правило, служащее для сравнительной оценки качества различных ЯП. Критерий эффективности можно назвать правилом предпочтения сравниваемых вариантов [24, с. 52].
Строятся критерии эффективности на основе частных показателей эффективности (показателей качества) Способ связи между частными показателями определяет вид критерия эффективности.
В качестве частных показателей обычно выступают [20, с. 31]:
- читабельность (легкость чтения и понимания программ);
- легкость создания программ (удобство языка для создания программ в выбранной области);
- надежность (обеспечение минимума ошибок при работе программ);
- стоимость (суммарная стоимость всего жизненного никла языка);
- переносимость программ (легкость переноса программ из одной операционной среды в другую);
- универсальность (применимость к широкому кругу задач);
- четкость (полнота и точность официального описания языка).
В свою очередь, каждый из частных показателей зависит от множества разнообразных характеристик.
Рассмотрим самые важные из показатели более подробно.
1. Читабельность (Readability). Одним из важнейших показателей качества языка программирования является легкость чтения и понимания программ, написанных на нем. По современным представлениям самый длинный период времени из жизненного цикла программ приходится на сопровождение, в ходе которого программы часто модифицируются. Поскольку читабельность программ определяет легкость сопровождения, ее считают существенной характеристикой качества программ и языков программирования [1, с. 95].
Читабельность языка программирования должна способствовать легкому выделению основных понятий каждой части программы без обращения к документации.
2. Простота. Простота сильно влияет на читабельность языка программирования. Язык должен предоставить простой набор конструкций, которые могут быть использованы в качестве базисных элементов при создании программы. Желательно обеспечить минимальное количество различных понятий с простыми правилами их комбинирования. Этому мешает наличие в языке нескольких способов описания одного и того же действия. Например, в языке С добавление единицы к целому числу можно записать четырьмя способами [20, с. 31].
Сильное воздействие на простоту оказывает синтаксис языка: он должен прозрачно отражать семантику конструкций, исключать двусмысленность толкования. Предельно лаконичный синтаксис удобен при написании программы, однако усложняет ее модификацию, поскольку в программе нелегко разобраться. Здесь нужен разумный компромисс – простота не должна быть чрезмерной, не должна приводить к загадкам расшифровки [6, с. 12].
3. Ортогональность. Ортогональность означает, что любые возможные комбинации различных языковых конструкций будут осмысленными, без непредвиденных ограничении или неожиданного поведения, возникающих в результате взаимодействия конструкций или контекста использования [20, с. 31].
Например, предположим, что ЯП содержит три элементарных типа данных (целый, вещественный с плавающей точкой и символьный), а также две конструкции данных (массив и указатель). Если обе конструкции могут применяться к этим типам и самим себе, то говорят об их ортогональности, обеспечивающей создание большого количества структур данных.
Когда конструкции языка ортогональны, язык легче выучить и использовать для чтения и создания программ, ведь в нем меньше исключений и специальных случаев, требующих запоминания.
Приведем примеры недостатка ортогональности в языках [6, с. 14]:
1. В языке Pascal функции могут возвращать значения только скалярного или указательного типов, а в языках С и C++ – значения всех типов, за исключением массивов (трактовка массивов в этих языках отличается от трактовки остальных типов). В функциональных языках, языках Ada и Python этот недостаток ортогональности устранен.
2. В языке С локальные переменные могут быть определены только в начале блока (составного оператора), а в C++ переменные определяются в любом месте блока (ио. конечно, перед использованием).
3. В языке Java величины скалярных типов (символьного, целого, вещественного и т. д.) не являются объектами, а величины всех остальных типов считаются объектами. Скалярные типы называют примитивными типами, а типы объектов – ссылочными типами. Примитивные типы используют семантику значения (значение копируется во время присваивания). Ссылочные типы используют семантику ссылки (присваивание формирует две ссылки па одни и тот же объект). Кроме того, в языке Java коллекции объектов и коллекции примитивных типов трактуются по-разному. Среди коллекций в Java только массивы могут содержать примитивные значения. Примитивные значения могут вставляться в коллекции других типов лишь в капсулах объектов-оболочек.
В языках Smalltalk и Python, напротив, все величины являются объектами, а все типы ссылочными тинами. Таким образом, в этих языках применяется лишь семантика ссылки и все коллекции объектов создаются в ортогональном стиле.
Излишняя ортогональность может стать источником проблем. Например, из-за разрешения полной ортогональности в ходе компиляции программы нс генерируются ошибки, даже при наличии комбинаций, которые логически не согласованы или крайне неэффективны при выполнении [9, с. 112].
Следовательно, простота языка должна быть результатом комбинирования небольшого числа элементарных конструкций и ограниченного применения понятия ортогональности.
4. Структурированность потока управления в программе. Порядок передач управления между операторами программы должен быть удобен для чтения и понимания человеком. Речь идет об ограниченном использовании оператора безусловного перехода goto и применении специальных структур управления [20, с. 32].
5. Легкость создания программ (Writability) отражает удобство языка для написания программ в конкретной предметной области. Поскольку в каждой предметной области программы имеют свою специфику, очень важно выбирать язык, который ее учитывает. Например, если речь идет об исследовании искусственного интеллекта, следует использовать язык Prolog или LISP, а при решении задач научных вычислений – язык Fortran [20, с. 33].
Как и следовало ожидать, характеристики, от которых зависит этот показатель, во многом пересекаются с характеристиками читабельности, ведь чтение текста является неотъемлемым атрибутом как процесса создания, так и процесса понимания программы.
6. Концептуальная целостность языка. Концептуальная целостность языка включает в себя три взаимосвязанных аспекта: простоту, ортогональность и единообразие понятий. Простота языка предполагает использование минимального числа понятий. Ортогональность позволяет комбинировать любые языковые конструкции по определенным правилам. Единообразие понятий требует согласованного, единого подхода к описанию и использованию всех понятий [20, с. 33].
Простота достигается не за счет отказа от сложных языковых конструкций, а путем устранения случайных ограничений на их использование. Так, при реализации массивов следует разрешить их объявление для любого типа данных, допускаемого языком. Если же, напротив, запретить массивы некоторого типа, то язык окажется скорее сложным, чем простым, поскольку основные правила языка изучить и запомнить проще, чем связанные с ними ограничения [6, с. 16].
Простота уменьшает затраты на обучение программистов и вероятность ошибок, возникающих из-за неправильной интерпретации программистом языковых конструкций. Естественно, упрощать язык целесообразно лишь до определенного предела [15, с. 243].
Если язык содержит большое количество разнообразных конструкций, то программисты могут просто не знать каждую из них. Это приводит к неправильному использованию одних возможностей и игнорированию других. В итоге программисты пишут не самые изящные и эффективные программы. Отсюда вывод: использовать небольшой набор элементарных конструкций и согласованных между собой правил их комбинирования намного удобнее, чем применять большое количество конструкций [19, с. 206].
7. Естественность для приложений. Синтаксис языка должен способствовать легкому и прозрачному отображению в программах алгоритмических структур предметной области. Любой из типовых алгоритмов (последовательный, разветвляющийся, циклический, параллельный) имеет естественную структуру, которая должна поддерживаться программными операторами реализующего языка. Язык должен предоставлять структуры данных, операции и структуры управления, адекватные решаемой задаче [20, с. 33].
Естественность – это одна из важнейших причин популярности того или иного языка. Язык, ориентированный на характерные черты предметной области, .может сильно упростить создание для нее программных приложений. Приведем примеры языков с очевидной направленностью на решение конкретных классов задач: Prolog (поддерживает дедуктивные рассуждения), Perl (предназначен для записи различных сценариев) [16, с. 69].
8. Поддержка абстракций. Абстракция является инструментом определения сложных структур данных и действий, при использовании которого гарантируется простота, а также игнорируются многие второстепенные детали. Абстракция устраняет пробел между структурами данных и операциями, характерными для решения задачи, и конкретными структурами данных и операциями, встроенными в язык программирования [20, с. 34].