Директивное (структурное) программирование

Директивная программа предписывает, как достичь результата, пошагово описывая действия. Таким образом, структурная программа описывает, как получить результат.

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

Типичными представителями структурной парадигмы являются языки Fortran, Pascal, C.

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

Объектно-ориентированное программирование

В этом подходе особое внимание уделяется данным, которые представляются в программе в виде объектов. Объекты взаимодействуют между собой с помощью механизма передачи сообщений. Задача программиста — реализовать такие объекты, при взаимодействии которых можно будет получать желаемый результат.

ООП призвано решать более сложные и объемные задачи по сравнению с директивным программированием.

В основе ООП лежат следующие понятия:

1. Инкапсуляция — это свойство системы, позволяющее объединить данные и методы, работающие с ними в классе, и скрыть детали реализации от пользователя.

2. Наследование — это свойство системы, позволяющее описать новый класс на основе уже существующего с частично или полностью заимствующейся функциональностью. Класс, от которого производится наследование, называется базовым, родительским или суперклассом. Новый класс — потомком, наследником или производным классом.

3. Полиморфизм — это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта.

Все объекты являются экземплярами классов, которые по отношению друг к другу могут выступать в роли родитель-потомок. Классы-потомки наследуют свойства родительского класса.

Типичные представители объектно-ориентированных языков: С++, Java, Python.

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

Функциональное и логическое программирование

Декларативная программа заявляет (декларирует), что должно быть достигнуто в качестве цели. Важным является точная формулировка задачи. Программист не задает алгоритм для ее решения.

Функциональное программирование основано на математическом понятии функции, которая не изменяет свое окружение; это отличие функционального программирования от функций в структурных языках. Функциональная программа состоит из совокупности определений функций, которые в свою очередь представляют собой вызовы других функций и предложений, управляющих последовательностью вызовов. Каждая функция возвращает некоторое значение в вызвавшую его функцию, вычисление которой после этого продолжается; этот процесс повторяется до тех пор, пока не будет достигнут результат.

Типичные представители функциональных языков: List, Haskell.

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

Наиболее известным представителем логических языков является Prolog.

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

Выбор парадигмы

Универсальной парадигмы программирования не существует, по большому счету, она и не нужна. Выбор же того или иного способа реализации программного обеспечения зависит от совокупности различных факторов:

– сложности описания предметной области;

– требований к скорости разработки и/или скорости работы программы;

– требований переносимости (кроссплатформенности) или же наоборот, оптимизации под единственную платформу;

– сложности используемых алгоритмов;

– подхода к решению задачи («что сделать» или «как сделать»).

Можно одну и ту же задачу решить с использованием различных парадигм или их комбинации. Выбор, на наш взгляд, должен осуществляться с учетом «естественности» применения того или иного подхода для решения конкретной задачи. Так, например, вряд ли кто-то будет писать программы для численного решения дифференциальных уравнений с использованием декларативных методов или реализовывать интеллектуальную систему на основе структурного подхода.

Литература

1. Лазарев Д. Презентация: Лучше один раз увидеть! — М.: Альпина Паблишер, 2011. — 142 с.

2. Феличи Дж. Типографика: Шрифт, верстка, дизайн. — Санкт-Петербург: БХВ-Петербург, 2004. — 496 с.

3. Рудер Э. Типографика. — М.: Таллер, 1998. — 232 с.

4. Балдин Е.М. Компьютерная типография LaTeX. — Санкт-Петербург: БХВ-Петербург, 2008. — 304 с.

5. Официальный учебный курс Adobe InDesign CS4 +CD = Adobe InDesign CS4 Classroom in a Book. — М.: Эксмо, 2009. — 464 с.

6. Ландэ Д.В., Снарский А.А., Безсуднов И.В. Интернетика: Навигация в сложных сетях: модели и алгоритмы. — M.: Либроком, 2009. — 264 с.

7. Ландэ Д.В. Поиск знаний в Internet. — М.: Диалектика, 2005. — 272 с.

8. Колисниченко Д.Н. Поисковые системы и продвижение сайтов в Интернете. — М.: Диалектика, 2007. — 272 с.

9. Братищенко В.В. Проектирование информационных систем. — Иркутск: Изд-во БГУЭП, 2004. — 84 с.

10. Брукс Ф. Мифический человеко-месяц или как создаются программные системы. — Санкт-Петербург: Символ-Плюс, 1999. — 304 с.

11. Себеста Р.В. Основные концепции языков программирования. — М.: Вильямс. — 672 с.

12. Роганов Е.А. Основы информатики и программирования: Учебное пособие. — М.: МГИУ, 2001. — 315 с.

Наши рекомендации