[ <<< | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | Источники | >>> ]


© 2001 А.И. Легалов

Роль парадигм программирования

Парадигмы (стили) программирования занимают важное место в технологии разработки программного обеспечения. Именно вокруг них начинают выстраиваться и развиваться методологические концепции. Такая роль обуславливается тем, что возникающие новые идеи по созданию программ первоначально реализуются в простых инструментах, поддерживающих исследование и экспериментальную проверку выдвигаемого стиля. Чаще всего в качестве инструментов выступают языки программирования. Упомянутые исследования начинаются с написания простых программ. Лишь после обобщения первоначального опыта приходит понимание достоинств и недостатков, позволяющих перейти к формированию методологий, обеспечивающих использование парадигмы при разработке больших программных систем. Если разработанная парадигма не способна служить основой промышленной методологии, она отвергается или применяется в ограниченных масштабах.

В своей книге Гради Буч [Буч98], ссылаясь на Боброва и Стетика [Bobrow], приводит пять основных стилей программирования (табл. 1).

Таблица 1

Основные стили программирования

Название стиля

Основополагающие абстракции

Логико-ориентированный

Цели, часто выраженные в терминах исчисления предикатов

Ориентированный на правила

Правила "если - то"

Ориентированный на ограничения

Инвариантные отношения

Процедурно-ориентированный

Алгоритмы, абстрактные типы данных

Объектно-ориентированный

Классы и объекты

Для некоторых из представленных стилей можно провести дополнительную градацию. В частности, процедурно-ориентированный стиль содержит императивную и функциональную парадигмы программирования.

Императивное программирование [Хендерсон] базируется на основе автоматной модели вычислителя, разделяющей абстракции состояния и поведения. При этом программа рассматривается как процесс изменения состояния путем выполнения отдельных команд. Примерами таких вычислителей являются машина Тьюринга, фон-неймановская архитектура. Различные направления императивного программирования получили широкое развитие. В частности, из него выросло структурное программирование [Дал75]. Функциональное программирование [Хендерсон, Бердж] опирается на теорию рекурсивных функций [Барендрегт, Катленд]. Акцент делается на зависимость между функциями по данным. Модель состояний при этом практически игнорируется.

Перерастание парадигмы в методологию определяется различными факторами, среди которых можно выделить:

Из стилей, представленных в таблице, только процедурно-ориентированный и объектно-ориентированный оказались пригодными для разработки больших программных систем, послужив стартовой площадкой для разработки соответствующих методологий. Такая ситуация возникла из-за ряда особенностей, присущих различным парадигмам. Большинство их, в конечном итоге, не смогли удовлетворить требованиям, предъявляемым к промышленным системам. Поэтому, использование многих стилей в настоящий момент ограничено научными исследованиями, быстрой разработкой прототипов, учебными задачами.

Общее в процедурном и объектно-ориентированном подходах

Близость процедурного и объектно-ориентированного подходов позволяют определить причины роста популярности первого по отношению ко второму. Различная распространенность парадигм программирования во многом обуславливается их способностями поддерживать современные методологии разработки программного обеспечения. Основной критерий в оценке программных продуктов - сложность [Буч98], а основными требованиями к методологиям разработки являются: удобство сопровождения, возможность безболезненного наращивания уже существующей программы, способность разработанных программных объектов к повторному использованию. При этом на второй план отступает такое требование, как быстрое проектирование первоначальной версии программы, потому что его воплощение обычно не позволяет соблюсти все остальные условия. Дело в том, что процесс разработки программного обеспечения не заканчивается выпуском одного релиза. Он сводится к итеративному расширению предыдущих версий, что, в некоторой степени, и помогает решать проблему сложности. Техника эволюционного развития реализована в возвратном проектировании [Буч98]. Она же используется при экстремальном программировании (X-programming), набирающем популярность в настоящее время [Beck, Бек].

В борьбе с проблемами, определяемыми сложностью программ, дальше всех продвинулась объектно-ориентированная методология (ООМ), которая и получила наибольшее распространение. В настоящее время она успешно развивается по самым разным направлениям, затрагивая как анализ и проектирование программных систем, так и написание самих программ. Последнее определяется как объектно-ориентированное программирование и связано с использованием соответствующих объектно-ориентированных языков. Развитие ООП практически вытеснило процедурное программирование из разработки сложных программных систем.

Такое достижение в первую очередь связано с методами группировки элементарных программных объектов в более крупные конструкции. Понятия, используемые в ООП, несколько отличаются от тех, что применяются в процедурном программировании. Это позволило по-новому подойти к процессу разработки и явилось ключом к повышению эффективности сопровождения и модификации программ.

Основные виды отношений между программными объектами

Отличие парадигм программирования заключается в реализациях моделей состояния и поведения, а также отношений между этими понятиями, осуществляемых через такие элементарные программные объекты как данные и операции. Абстрагирование от конкретных экземпляров достигается за счет введения понятий "абстрактный тип данных" и "процедура" (понятие "функция" используется как синоним процедуры). Элементарные понятия используются для построения составных программных объектов путем объединения в агрегаты и разделения по категориям. Категорию Г. Буч [Буч98] называет иерархией типа "is-a". Она также трактуется как обобщение программных объектов [Цикритзис]. Агрегаты и обобщения используются при конструировании композиций данных и процедур. В каждой из существующих парадигм программирования вопросы такого конструирования композиций решаются по-своему, что и вносит определенные отличительные черты.


[ <<< | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | Источники | >>> ]