In my opinion this figure http://www.jot.fm/issues/issue_2008_03/article4/images/figure2.gif
from http://www.jot.fm/issues/issue_2008_03/article4/
helps understanding one of the main differences between OO and procedural programming.
Basically the idea is that
Procedural programming provides only one dimension to associate a
computational unit with a name. Here, procedure calls or names
are directly mapped to procedure implementations. In Figure a calling
m1 leaves no choice but the invocation of the only implementation of
procedure m1
while
Object-oriented programming adds another dimension for name resolution
to that of procedural programming . In addition to the method or
procedure name, message dispatch takes the message receiver into
consideration when looking up a method. In Figure 2b we see two
implementations of method m1. The selection of the appropriate method
not only depends on the the message name m1, but also the receiver of
the actual message, here Ry
the third section of the figure (c) refers to subject oriented programming, in which the behavior of an object (the called method) does not only depend on the object status but, also, on the subjects which is invoking (or observing) it. However this is actually out of the scope of your question.