読者です 読者をやめる 読者になる 読者になる

DELiGHTWORKS

DELiGHTWORKS株式会社の開発に関する情報を発信していきます。

オブジェクト指向は衰退しますか?

最近はGolangをさわり始めている磯波です。

IT業界やゲーム業界でもオブジェクト指向が持てはやされた時期がありました。

ファイナルファンタジーIからファイナルファンタジーIIIまでを開発していた天才プログラマ、ナーシャ・ジベリさんがファミコン上でのアセンブリでオブジェクト指向を用いていたなどという逸話もあります。

アセンブリが全盛であったころは難しかったものの、ハードウェアの進歩はめざましくゲーム業界でもC言語やC++を用いたオブジェクト指向プログラミングが盛んにおこなわれてきました。

昔はメモリ食いで実行も遅いということで嫌われていたんですけど、時代は変わるものです。

オブジェクト指向=クラス

オブジェクト指向とは「振る舞い」であるという話を聴いたことはないでしょうか?

確かにオブジェクト指向言語と呼ばれるものはクラスベースで開発されているものが多いです。

クラスが存在しないJavaScriptやLuaのような言語はプロトタイプベースではありますが、プロトタイプを用いた擬似的なクラスのようなものをつかってオブジェクト指向を実現します。

では、クラスやプロトタイプという概念がないGolangはオブジェクト指向言語ではないのでしょうか?

インターフェイスで会話をすること

代わりにGolangはインターフェイスという仕組みを持っています。

これはまさしく「振る舞い」の為の機能です。

ダックタイピングという言葉を聞いたことがないでしょうか?

「もしもそれがアヒルのように歩き、アヒルのように鳴くのなら、それはアヒルである("If it walks like a duck and quacks like a duck, it must be a duck")」という意味です。

「それ」(=オブジェクト)が、アヒルのように歩き、アヒルのように鳴けるのであれば、例え腕が4本あろうと、足が8本だろうと、双頭であろうとアヒルとして扱っても良いという意味です。

プログラムの用語に置き換えるのなら、「インターフェイス」が適切に実装されているのであれば、どんなものもアヒルのように振る舞うことができる、という意味です。

この例であれば、「歩く」と「鳴く」ということが出来るのが「アヒル」としたとき、その2つが「適切に」行えるマンティコアが渡されても実行できるという意味です。

ideone、なかなか便利なので良かったらためしてみて下さい。

これだとマンティコアがアヒルのように歩いたり鳴いたりすることがわかると思います。

Golangという言語

長い間CやC++を使ってきた人間からすると、Golangはなかなか愉快な言語です。

今までの言語とは明確に違った特徴を持ちながらも、どこか懐かしさすら憶える言語です。

それでいて、コンパイルできる言語ですから速度的にもスクリプト言語に比べて非常に有利でかつ、マルチプラットフォームで動作します。

簡単なツールをつくるのであれば十分な実力を持っている言語だと思います。

良かったら皆さんも触ってみて下さい。