私は若い頃、C言語(C++ではない)でオブジェクト指向プログラミングを設計&実装させられた事があって、それと C++ を比較して「オブジェクト指向言語すげー」と思ったことがある。その後 Java を触るようになって、ポインタをすべて参照で隠蔽する思い切った言語設計に苦笑した覚えがある。今どきの人はむしろポインタこそ難解な概念かもしれないけどw
産業界でも Ruby が台頭し始めて改めて思ったのが「コンパイル言語ってオブジェクト指向プログラミングと相性が悪いんじゃねーの?」だった。
これが覆ったのが #golang を知ってから。クラスも継承もなく、枯れた言語仕様のみで構成されてるのに無理なくオブジェクト指向プログラミングができるのはある意味で衝撃的だった。関数型プログラミングの要素を極力排除する、時代と逆行する言語設計も面白い
書籍『Clean Architecture』では
>オブジェクト指向プログラミングは、間接的な制御の移行に規律を課すものである。
とざっくり書かれている。もう少し言えば、オブジェクト指向ってのはオブジェクトという概念を使って「振る舞い」に関する制約を構成する。
もし Perl にオブジェクト指向な言語仕様を追加できれば面白いだろう(今世紀に入って Perl はオブジェクト指向な要素を追加した話を聞いた気がするが... うろ覚えゴメン)。最近のバージョンは知らないが、元々の Ruby の動的型システムは確か duck typing で、基本型を含めて、まさに振る舞いによる制約を構成するものだ。スクリプト言語はオブジェクト指向と相性がいいよね