Понятие метод (от греческого слова «методос» – путь к чему-либо) означает совокупность принципов и способов организации и построения теоретической и практической деятельности. Существует целая область знания, которая специально занимается изучением методов и которую принято именовать методологией. Методология дословно означает «учение о методах» [1, с. 11].
Методология программирования – это совокупность идей, понятий, принципов, способов и средств, определяющая стиль написания, отладки и сопровождения программ [2].
На сегодняшний день существует не так много методологий, особенно полных, т.е. учитывающих все стадии жизненного цикла программного обеспечения. Именно методология определяет, какие языки и системы будут применяться для разработки программного обеспечения и какой технологический подход будет при этом использован.
Таким образом, вопрос об исследовании методологий программирования и критериях оценки выбора наиболее подходящей методологии для решений поставленной задачи, является актуальным.
Целью данной работы является рассмотреть существующие методологии программирования и определить возможности их использования.
С любой методологией можно связать характерные для нее атрибуты:
– множество методов, через которые реализуется данная методология;
– понятия, поддерживающие методы и позволяющие определить их более точно;
– философский подход (основной принцип), определяющий основной источник эффективности методологии [3].
Для рассмотрения также интересно и само происхождение методологии, ее история и развитие. Любая методология создается на основе уже накопленных в предметной области эмпирических фактов и практических результатов. Для методологий программирования такими фактами и результатами выступают уже существующие языки программирования.
В случае, когда методология применяется во время стадии реализации, ее часто называют парадигмой программирования – способом мышления и написания программ, который не связан с конкретным языком программирования.
Сам термин «парадигма» был впервые предложен Томасом С. Куном, который определил парадигму как свод норм научного мышления. Парадигма – это правило развития научного знания, которое дает научному сообществу модель постановки проблем и их решений в течение определенного времени.
Парадигма программирования – это совокупность идей и понятий, определяющая стиль написания программ. Парадигма, в первую очередь, определяется базовой программной единицей и самим принципом конструирования программы [4].
Парадигмы программирования определяются наборами инструментов: используемыми библиотеками, системами программирования, языком программирования.
В качестве единиц парадигм выступают:
– определения (декларативное программирование);
– предикаты (логическое программирование);
– функции (функциональное программирование);
– действие (императивное программирование);
– диаграмма переходов (автоматное программирование) и другие [2].
Методология декларативного программирования – это подход программирования, при котором описывается, что представляет собой задача и ожидаемый результат (языки программирования SQL, QML, Modelica) [5].
Методология логического программирования – это подход программирования, при котором программа содержит описание проблемы в терминах логических формул и фактов, а решение задачи система выполняет с использованием механизмов логического вывода (языки программирования Planner, Prolog, Mercury) [4].
Методология функционального программирования – подход составления программ, при котором единственным правилом композиции является оператор суперпозиции функции, действием – вызов функции, а способом разделения программы на части – введение имени для функции и задание для этого имени выражения, вычисляющего значения функции (языки программирования LISP, Erlang, Haskell) [4].
Методология императивного программирования – это подход программирования, характеризующийся принципом последовательного изменения состояния вычислителя пошаговым образом; при этом управление изменениями полностью определено и полностью контролируемо (языки программирования C++, Python, Java) [4].
Методология автоматного программирования – это подход программирования, при использовании которого программа или её фрагмент осмысливается как модель какого-либо формального автомата; подход состоит в представлении сущностей со сложным поведением в виде автоматизированных объектов управления, каждый из которых представляет собой объект управления и автомат (языки программирования РЕФАЛ, Scheme) [6].
Различные методологии программирования дают разный выигрыш для решения задач различных классов. Этот выигрыш можно оценивать по двум параметрам:
– эффективность программного обеспечения на современных компьютерах (т.е. способность программного обеспечения предоставлять требуемый уровень производительности в соответствие с выделенными ресурсами, временем и другими обозначенными условиями [7]);
– общие затраты на разработку программного обеспечения (могут включать в себя затраты на оформление программного продукта и подготовку его к продаже, налоги, затраты на маркетинговые исследования и другие).
Выделяют две ветви в развитии языков, поддерживающих методологии:
– языки (как правило, компилируемые), ориентированные на скорость исполнения программного кода;
– языки (компилируемые и интерпретируемые), ориентированные на высокий уровень и удобство написания программ [4].
Языки программирования могут хорошо поддерживать те или иные методологии, но это не означает, что некоторый язык вообще нельзя использовать с несвойственной ему методологией, а только то, что потребуется затратить больше усилий и ресурсов.
Методологии программирования различаются по общим затратам на решения задач с разными характеристиками (научные расчёты, финансовые задачи, системы реального времени и т. п.). Масштаб задач и эффективность создаваемого программного обеспечения также являются важными факторами при выборе методологии программирования.