I still firmly believe that object-orientation is an inherently imperative concept. However, as a recent question made me think some more about programming paradigms in general, I put together a more comprehensive answer, which is somewhat off-topic, but incidentally also answers your question:
The 2 major programming paradigms are the declarative paradigm, where the programmer writes down abstract relations (thus telling the compiler what he wants), and the imperative paradigm, where the programmer writes down algorithms (thus telling the computer how to get what he wants).
The paradigms are a priori language-agnostic - it's more of a way on how you think about and structure your program. However, there are differences in how easy a language makes it to use a paradigm: Language semantics and syntax lead to an idiomatic way of writing code.
An example for a declarative language would be Prolog, an example for an imperative language would be Fortran (and Real Programmer can write FORTRAN programs in any language).
As an example for code which is imperative and declarative at the same time, consider this implementation of the Fibonnaci-sequence in Perl6:
my @fibonacci-sequence := 0, 1, * + * ... *;
This is clearly a declarative description of the sequence. However, as *
and ...
are valid Perl6 operators - the whatever-star can be used to create lambda-expressions, the sequence-operator to create lazy lists - it's also an imperative statement invoking runtime-intrinsic code.
Let's consider some other programming paradigms, in particular functional and object-oriented programming.
The functional paradigm is inherently declarative, as it models computation as a relation between sets.
The object-oriented paradigm is inherently imperative, as it models computation as communication between stateful objects, called message passing.
Some languages are pure, meaning all computation conforms to the paradigm. For example, Haskell is a purely functional language, and Smalltalk is a purely object-oriented language.
However, this doesn't mean that that functional languages resp. object-oriented languages prevent imperative resp. declarative programming. In practice, you often use functions imperatively - you put in an input value to get out an output value. The converse holds true for object-oriented programming: the set of messages an object accepts declares its interface.