web archive

[オブジェクト指向は 難しくない]
まつもとゆきひろさんが 以前の "Matz 日記" で、C の ファイル・ポインタを 取り上げているのを 見つけた。
http://www.rubyist.net/~matz/?date=20030730

オブジェクト指向」 の もっとも 重要な 概念は 通常の プログラミングにも 登場している。 たとえば、C で

FILE *f = fopen(path, "r");

という 呼び出しでは 「path にある ファイルを オープンして、ファイル オブジェクトを 得る」 という 処理 そのものだ。 別に オブジェクト指向は 必要ない。 C の FILE * には fprintf()fclose() などの いくつかの メソッドが ある。

つまり、通常の 非オブジェクト指向言語における プログラミングでも、「オブジェクト」 という 概念は 存在していて、無意識のうちに 使っているはずなのだ。 このことは 別に 目新しいことでも なんでもない。 K&R にも 「オブジェクト」 という 用語は 使われている。

へぇ〜、そうなんだ ...

もっとも 多くの言語には 「オブジェクト」 でない 「値」 もある。 また C の 例を 出すと、構造体は オブジェクトではない。 代入によって コピーが 発生するからだ。...

だから、オブジェクトな 値 (リファレンス あるいは ポインタ値) と オブジェクトでない 値が 混在している 言語*1より、すべての 値が オブジェクトである Ruby のような オブジェクト指向言語の方が 覚えることは 少ないはずだ。

これって、「エスペラントを 先に 学んでおけば、後で 英語に 出会っても 苦労せずにすむ」 のと 同じで、「まず Ruby の プログラミングから 始めれば、C プログラミングへも スッと 入っていける」 と いうこと? (... シマッタ! 気付くのが 遅すぎた ...oLr)

*1:C ですね