>>388
run(dog)だとその関数(=run)を呼び出す側の配下にrun関数を用意しておかなければならない。
そして呼び出す側とこのrunには強い関連性がない場合がほとんど。

dog.runにすればそのメソッド(=run)を直接呼ぶのはオブジェクトなわけで
当然ながら呼ぶ側とそのrunには強い関連性がある。

単純な単細胞なプログラミングをするのであればありがたみはわからないが(というより逆に分かりにくい)
複雑なプログラミングをするならオブジェクト指向じゃなければ手に負えなくなるほど複雑になる。