オブジェクト指向とは「処理の移譲」です。
Cに代表される構造化プログラミング言語がモジュールを
関数というブロックに分けることによって入力と出力という
ブラックボックスとして扱えるようにカプセル化したのに続いて
オブジェクト指向はオブジェクトに"コマンド"を送る形にすることで
オブジェクトが能動的に振る舞い方を変えることを期待しているのです。

簡単な例としてはRPGの戦闘コマンドを考えてみましょう。
RPGでは戦士>戦う>刀,魔法使い>魔法>炎という風に
明確な指示を与えることで動作を規定できます。
では、もしこれがパーティメンバーが100人、いや一万人いたらどうでしょう?
上位クラスが全員に指示を与えれば一番間違いはないはずですが
上位クラスに末端までの完璧な指示を求めることはおよそ現実的ではありません。
いくつかの階層に分けた上で、具体的ではなく処理と指示が分離した
もっと単純な「戦え」「魔法」や「支えろ」「下がれ」のような
階層ごとのコマンドでオブジェクトが最適と思われる動作を行うようにすれば
コマンドに対する反応の調整という形で問題をそのオブジェクト階層に閉じ込め
また魔法使いパーティと戦士パーティでの同じ「戦え」での振る舞いの
違いを組み立てることができます。

この「コマンドと具体的な処理を分離する」という考え方が
オブジェクト指向の重要なポイントなのですが
"プログラムとは間違いのない完璧な指示を与えて完璧に指示通りに動作させることだ。"
というコンピュータプログラマに刷り込まれた教義とまさに真っ向からぶつかるため
ベテランプログラマであればあるほどなかなか受け入れてくれません。
オブジェクト指向とは"そういうもの"です。