Я до сих пор твердо верю, что объектная ориентация является по своей сути императивной концепцией. Однако, как недавний вопрос заставил меня задуматься над парадигмами программирования в целом, я собрал более полный ответ, который несколько не по теме, но, кстати, также отвечает на ваш вопрос:
Двумя основными парадигмами программирования являются декларативная парадигма , в которой программист записывает абстрактные отношения (таким образом сообщая компилятору , что он хочет) и императивная парадигма , где программист записывает алгоритмы (таким образом, сообщая компьютеру , как получить то, что он хочет).
Парадигмы априори не зависят от языка - это больше похоже на то, как вы думаете и структурируете свою программу. Однако существуют различия в том, насколько легко язык позволяет использовать парадигму: семантика и синтаксис языка приводят к идиоматическому способу написания кода.
Примером декларативного языка может быть Prolog, примером императивного языка может быть Fortran (и Настоящий программист может писать программы на языке FORTRAN на любом языке ).
В качестве примера кода, который является императивным и декларативным одновременно, рассмотрим эту реализацию последовательности Фибоначчи в Perl6:
my @fibonacci-sequence := 0, 1, * + * ... *;
Это явно декларативное описание последовательности. Однако, поскольку *
и ...
являются допустимыми операторами Perl6 - независимо от того, какую звездочку можно использовать для создания лямбда-выражений, оператором последовательности для создания отложенных списков - это также обязательный оператор для вызова встроенного кода времени выполнения.
Давайте рассмотрим некоторые другие парадигмы программирования, в частности функциональное и объектно-ориентированное программирование.
Функциональная парадигма изначально декларативна, поскольку моделирует вычисления как отношения между наборами.
Объектно-ориентированная парадигма неотъемлемо обязательна, поскольку моделирует вычисления как обмен данными между объектами с состоянием, называемый передачей сообщений.
Некоторые языки чисты, что означает, что все вычисления соответствуют парадигме. Например, Haskell - это чисто функциональный язык, а Smalltalk - это чисто объектно-ориентированный язык.
Однако это не означает, что эти функциональные языки соотв. объектно-ориентированные языки предотвращают необходимость декларативное программирование. На практике вы часто используете функции обязательно - вы вводите входное значение, чтобы получить выходное значение. Обратное верно для объектно-ориентированного программирования: набор сообщений, которые принимает объект, объявляет его интерфейс.