Файл: Классификация языков программирования . Критерии выбора среды и языка разработки программ.pdf
Добавлен: 04.04.2023
Просмотров: 70
Скачиваний: 1
Таким образом, в функциональных языках отсутствуют переменные (в том смысле, который им придается в императивных языках), нет операторов присваивания, нет повторений в форме итераций.
Чтобы определить функцию, нужно придумать ее имя и задать вычисляемое ей выражение. Описание единичного действия – это вызов функции с конкретными аргументами. Описание программы – это описание последовательности вызовов отдельных функций [17, с. 97].
Кобелев И.А., Иванова Л.В., Чекушина В.Е. предлагают классифицировать функциональные языки с опорой на используемые функции [14, с. 62].
Таблица 4
Классификация функциональных языков программирования
Функции |
Примеры |
|
1 |
Узкого класса |
В языке программирования «Пролог» имеем функции, возвращающие результат только логического типа. |
2 |
Разных классов |
Язык программирования «Хаскел» работает с различными функциями. |
В настоящее время существует несколько функциональных языков программирования, например, Душкин Р. В. выделяет [7]:
- Lisp (List processor). Считается первым функциональным языком программирования. Нетипизирован. Содержит массу императивных свойств, однако, в общем поощряет именно функциональный стиль программирования. Существует объектно-ориентированный диалект языка – CLOS.
- Scheme. Диалект Lisp’а, предназначенный для научных исследований в области computer science. При разработке Scheme был сделан упор на элегантность и простоту языка.
- ML (Meta Language). Семейство строгих языков с развитой полиморфной системой типов и параметризуемыми модулями.
- Miranda. Разработан в качестве стандартного функционального языка, использовавшего отложенные вычисления. Имеет строгую полиморфную систему типов. Оказал большое влияние на разработчиков языка Haskell.
- Haskell. Один из самых распространенных нестрогих языков. Имеет очень развитую систему типизации. Несколько хуже разработана система модулей. Последний стандарт языка – Haskell-98.
- Gofer (GOod For Equational Reasoning). Упрощенный диалект Haskell’а. Предназначен для обучения функциональному программированию.
- Clean. Специально предназначен для параллельного и распределенного программирования. По синтаксису напоминает Haskell. Clean использует отложенные вычисления.
С некоторой натяжкой, к функциональным языкам программирования, можно отнести системы редактирования (работа в интерпретационном режиме со специализированными данными – тексты, изображения). Как примеры, назовем HTML, Flash. Представление о классификации языков программирования необходимы, например, при переводе алгоритмов с одного языка на другой.
С.А. Орлов выделянт также логические и объектно-ориентированные языки программирования.
Логические (декларативные) языки описывают не способ решения задачи, а саму задачу. Фактически они задают формализованное представление предметной области (например, язык Prolog) [20, с. 70].
Иногда логические языки называют языками, основанными на системе правил. Здесь осуществляется проверка некоторого разрешающего высказывания (утверждения), и в случае его истинного значения выполняется соответствующее действие [1, с. 82].
Объектно-ориентированные языки задают вычисления как взаимодействия программных объектов. Объект – это именуемый модуль, заключающий в себе данные и операции для их обработки [20, с. 73].
Программный объект во многом похож на физический объект реального мира. В частности, программный объект имеет свое состояние и демонстрирует окружающей среде свое поведение. Состояние объекта характеризуется перечнем данных и их значений. Поведение задается последовательностью выполняемых операций [9, с. 104].
Объекты взаимодействуют друг с другом с помощью сообщений. Посылается сообщение объектом-источником в адрес объекта-приемника. Каждое сообщение – это запрос на выполнение операции объектом-приемником.
Описание объектов с общей структурой и поведением называется лддссо.и. Как и переменные, единичные объекты создаются по их описаниям. Только в роли описаний для переменных выступают тины данных, а в роли описаний для объектов – классы. Объект считается экземпляром класса.
Специфику объектно-ориентированного подхода определяют три принципа [20, с. 74]:
- инкапсуляция (сокрытие своего содержимого от внешнего мира);
- наследование (возможность получения потомками структуры и поведения предков);
- полиморфизм (использование одного и того же имени для выражения различных действий и объектов).
Инкапсуляция означает, что каждый объект помещен в защитную оболочку, сквозь которую другие объекты видят лишь самое необходимое: заголовки операций, которые может выполнять объект. Наследование позволяет внедрить в новый класс элементы данных и операции старого класса, обеспечивая возможность их модификации. Наконец, полиморфизм поддерживает возможность существования целого семейства различных операций с одинаковым именем [17, с. 119].
Первый объектно-ориентированный ЯП, Simula 67, был придуман норвежцами К. Нигаардом и У. Далом как расширение императивного языка Algol 60. Этот язык опередил свое время и был благополучно забыт.
Второй объектно-ориентированный ЯП, Smalltalk, появился в нужное время (1972-1980) и в нужном месте. Его автором стал Алан Кей из фирмы Xerox.
Широкое распространение получил язык C++, созданный Б. Страуструпом (1983).
Очень часто используются гибридные языки, реализующие сразу несколько парадигм: Ada 2005, Eiffel, Object Pascal (императивная и объектно-ориентированная парадигмы), CLOS (функциональная и объектно-ориентированная парадигмы) [20, с. 74].
Р.А. Кинзябулатова, А.Ю. Маврина подразделяют языки программирования на три категории: компилируемые, интерпретируемые и смешанные [13, с. 68].
1. Компилируемые языки. Программы, которые пишутся на компилируемом языке, преобразуются специальной программой в машинный код. Такую программу называют компилятором. Во время изменения кода программы в машинных инструкциях могут обнаружиться ошибки, например, в случае отсутствия знаков препинания, неправильном названии функции, переменных – все это исправляется на этапе компиляции. Тем самым, при любом изменении кода программы снова потребуется ее компиляция. Как правило, такие программы реализуются быстрее интерпретируемых программ, так как компилятор переводит программу на машинные инструкции сразу и целиком в исполняемый файл [17, с. 158].
К данной категории относятся различные языки программирования, основным из них является язык C. Этот язык был разработан в 1972 году специально для операционных систем семейства Unix, в последующие годы стремительно набрал большую популярность. На сегодняшний день почти на всех операционных системах установлен компилятор языка C. Язык C обладает многими качествами: например, является переносимым, то есть программа, написанная на данном языке может быть переведена на другой с малыми изменениями. Также этот язык не связан строгими ограничениями и имеет удобный стиль программирования [13, с. 68].
2. Интерпретируемые языки. Программы, написанные на интерпретируемом языке, выполняются только при наличии дополнительной программы-интерпретатора. Реализация программы происходит значительно медленнее, чем реализация программы, написанной на компилируемом языке.
Программа-интерпретатор переводит исходный код на машинный язык при выполнении программы построчно, в этом заключается отличие от процесса компиляции. Для того чтобы посмотреть результат, программу необходимо постоянно интерпретировать, это является недостатком [9, с. 168].
Интерпретируемый язык является кроссплатформенным, в отличие от компилируемого языка. Популярным примером данного языка является язык PHP. Данный язык входит в пятерку популярнейших языков программирования. Является схожим с языками C и Perl, поэтому знающим программистам не составит особого труда изучить PHP. Специально разработан в 1995 году для создания веб-сайтов. Является кроссплатформенным, то есть подходит для большинства операционных систем. Используется для того, чтобы создавать интернет-сайты, так как данный язык максимально эффективен с базой данных MySQL. Также плюсом является то, что РНР работает на стороне сервера, то есть не зависит от мощности компьютера и т.д. Чаще всего с PHP рекомендовано использовать сервер Apache, поскольку он является самым распространенным [15, с. 46].
3. Смешанный тип или компилируемо-интерпретируемые языки программирования переводятся не в машинный язык, а в байт-код. Далее этот байт-код интерпретируется на специальной виртуальной машине. Эти языки заключают в себе достоинства как компилируемых языков, так и интерпретированных. Но также они являются зависимы от виртуальных машин. К такой категории языков относятся Java и C# [13, с. 69].
Язык Java разработан в 1995 году командой Green. Сначала целью создания языка была возможность программирования на бытовых приборах, например, на телевизорах, холодильниках. Является упрощенной версией языка C, при этом имеет сборщик мусора, то есть процесс высвобождения памяти. Java является кроссплатформенным, многопоточным, доступным, простым в освоении. Популярной средой разработки приложений является Eclipce [16, с. 51].
Обобщая вышесказанное, мы приходим к выводу, что на текущий момент не выработано единой, общепринятой классификации языкрв программирования. Разные авторы разбивают языки программирования на машинно-ориентированные и машинно-независимые, на языки низкого и высокого уровня уровня, на процедурные и непроцедурные, императивные и функциональные и др.
2. КРИТЕРИИ ВЫБОРА СРЕДЫ И ЯЗЫКА РАЗРАБОТКИ ПРОГРАММ
2.1. Факторы, влияющие на выбор среды разработки программ
Средой программирования называют программный комплекс, который включает специализированный текстовый вый редактор, встроенные компилятор, компоновщик, отладчик, справочник систему и другие программы, использование которых упрощает процесс писания и отладки программ [1, с. 112].
По мнению Т. Пратт, М. Зелковиц, среда разработки (environment framework) состоит из вспомогательных средств и инструментов, отражающих в конечном счете инфраструктуру среды существования программы и используемых для управления разработкой программы. Она обеспечивает программиста необходимыми при разработке программ сервисами, позволяющими организовать хранение данных, быстро разработать графический интерфейс пользователя, обеспечить безопасность и коммуникационную связь с другими программами. Программисты неизбежно используют инфраструктурные сервисы как компоненты при разработке своих программ. Соответственно, иногда языки разрабатываются таким образом, чтобы облегчить доступ к этим сервисам [23, с. 58].
Среды программирования (иногда называемые также системами программирования) объединяют в себе различные инструментальные и вспомогательные средства для создания программ. В их состав обычно входят: транслятор (компилятор), отладчик, редактор связей, средства оптимизации программного кода, сервисные средства (например, текстовый, двоичный и шестнадцатеричные редакторы), библиотеки (наборы процедур и функций, реализованные в виде отдельных модулей), справочные системы [26, с. 39].
Когда в среде разработки программного обеспечения (далее – ПО) присутствуют все вышеназванные компоненты, тогда такую среду называют интегрированной. Такие среды разработки увеличивают темп, а также удобность разработки за счет: автоматизации, возможности производить весь цикл создания и разработки ПО. Обычно среда разработки ПО предназначена для разработки только на одном языке программирования. А такая среда разработки как интегрированная, предоставляет право выбрать создателю программы язык программирования для разработки, удобный разработчику (из языков поддерживаемых данной средой). Примером тому служат: Visual Studio, Komodo, Geany, Kylix, NetBeans, Eclipse [9, с. 186].
При выборе среды выполнения программы необходимо учитывать несколько факторов, а именно [17, с. 152]:
- уровень сложности и трудоемкости процесса проектирования программного обеспечения для конкретной среды;
- наличие инструментальных средств разработки программного обеспечения;
- возможность внесения корректив в программу в процессе эксплуатации;
- наличие средств проектирования пользовательского интерфейса;
- скорость выполнения программы;
- надежность работы программы и защищенность от программных сбоев.
Последнее время широкое распространение получили среды визуального программирования, в которых программист получает возможность визуального подключения к программе некоторых кодов из специальных библиотек компонентов, что стало возможным с развитием объектно-ориентированного программирования.
Появление объектно-ориентированных визуальных сред разработки программного обеспечения использующих событийный подход к программированию и в основном рассчитанных на создание интерфейсов со свободной навигацией, существенно снизило трудоемкость разработки подобных интерфейсов и упростило реализацию интерфейсов прямого манипулирования. Таким образом, выбор двух последних типов интерфейсов предполагает использование одной из визуальных сред разработки программного обеспечения Если соответствующие среды разработчику не доступны, то следует учитывать большую трудоемкость создания подобных интерфейсов [22, с. 84].