Парадигмы программирования

Вы наверняка не раз слышали словосочетания «процедурное программирование», «объектно-ориентированное программирование» и «функциональное программирование». Всё это обозначения различных парадигм (стилей) программирования. Есть целый зоопарк «различных программирований».

Парадигма программирования — это совокупность идей и понятий, определяющих стиль написания компьютерных программ.

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

Перечислим их с короткими пояснениями:

ИМПЕРАТИВНОЕ

программа = последовательность действий, связанных условными и безусловными переходами

ПРОЦЕДУРНОЕ

программа = последовательность процедур, каждая из которых есть последовательность элементарных действий и вызовов процедур, структурированных с помощью структурных операторов if, for и while

ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ

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

ФУНКЦИОНАЛЬНОЕ

программа = система определений функций, описание того, что нужно вычислить, а как это сделать — решает транслятор; последовательность действий не прослеживается

ПРОДУКЦИОННОЕ (ЛОГИЧЕСКОЕ)

программа = система определений и правил вида «условие => новый факт»

СЕНТЕНЦИАЛЬНОЕ

программа = система правил вида «шаблон => трансформирующее действие»

СОБЫТИЙНОЕ

программа = система правил вида «событие => новые события» + диспетчер событий

АВТОМАТНОЕ

программа = конечный автомат или автомат специального типа

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

Структурное (директивное) программирование

Некоторые представители: Fortran, Pascal, C.

Директивная (структурная) программа предписывает, как достичь результата, пошагово описывая действия. Поэтому такое программирование является достаточно легким для понимания. В структурном программировании от входных данных полностью зависит последовательность выполнения команд.

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

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

Представитель логических языков: Prolog.

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

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

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

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

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

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

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

Класс — совокупность свойств, методов и событий.

Объект — это инкапсулированная абстракция с четко определенным интерфейсом.

Что означает «совокупность»? Это значит, что класс как бы состоит из методов, свойств и событий, и они обеспечивают его полноценную работу. Представим себе кнопку. Она обладает:

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

Если все это объединить, то получается автономный класс, который может работать в различных условиях. В этом случае достаточно только установить кнопку на форме, и она уже готова к применению. Как же оформляются свойства, методы и события класса в программах?

  • Свойства — это переменные, которые влияют на состояние класса. Например, ширина, высота.
  • Методы — это те же процедуры и функции, т. е. это то, что класс умеет делать (вычислять). Например, класс может иметь процедуру для вывода какого — то текста на экран. Эта процедура и есть метод, который принадлежит классу.
  • События — это те же процедуры и функции, которые вызываются при наступлении определенного события, только эти процедуры могут как принадлежать классу, так и находиться вне его. Вы создаете процедуру в программе и говорите объекту, что в случае наступления некоторого события, нужно вызвать эту процедуру, и она будет вызываться. Например, если изменилось какое — то свойство, может быть сгенерировано соответствующее событие и вызвана соответствующая процедура, и вы сможете отреагировать на событие.

В основе ООП лежат такие понятия как наследование, полиморфизм и инкапсуляция.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *