雑記帳 0038(2004/1/29〜)


言葉の上だけの議論は空しい(2005/1/29)

ええと、本年初の更新になります。あけましておめでとうございます。 って今頃書くのはバカですか。

年が明けると同時に断酒も明けましたが、酒飲んで良いことがあるわけでもないので、 年明けからは休肝日を週2回にしています。 …と、自分にプレッシャーを与えるために、ここでも宣言してみる。

最近の掲示板でのやり取りとかもあって、 久々に2chのプログラム板のOO関係スレとか見てみたりしたんだけど、 つくづく思ったのが、タイトルの通り「言葉の上だけの議論は空しい」 ということ。

雑記帳ではプログラミング関係の話はあまり出さないつもりでしたが、 今回は、ある程度プログラミングを知ってないと意味がわからない話だと思います。 わからない人すみません。

たとえば、「クラスは構造体に毛が生えたようなものだ」と言うと、 これに対してえらく過剰に反応する人がいる。 しかし、Javaでこんなクラスがあったとして、

class Point {
    public int x;
    public int y;
}

こんなのは、Cの構造体と何ら変わるところがない。

オブジェクト指向はカプセル化だっ! とばかりに、

class Point {
    private int x;
    private int y;

    Point(x, y) {
        this.x = x;
        this.y = y;
    }

    public int getX() {
        return x;
    }
    public int getY() {
        return y;
    }
}

こんなimmutableなクラスにしたところで、 これが座標というデータを抱えるものである以上、 構造体的な側面は持っている。

もちろん、Javaのようなオブジェクト指向言語では、 通常のCプログラマが構造体を使わない局面でもクラスを使うから、 CプログラマがJavaを覚えるなら、そこで発想を広げてもらわなければいけないけど、 とっかかりとして「クラスは構造体に毛が生えたようなものだ」 と教えるのが悪いとは私には思えない。 もちろんこれは私の考えで、 「クラスは構造体に毛が生えたようなものだ」 なんて教えるとこれこれこういう誤解を招くからよろしくない、 という意見はあってもいい。

問題は、「クラスは構造体に毛が生えたようなものだ」と言うのなら、 それを誰に向かって、どんなコンテキストにおいて言うか、 および受け手がそう聞いてどう思うかなのであって、 「クラスは構造体に毛が生えたようなものだ」 という言葉自体をもって間違っているとは言えないはずだ。 いや、これがたとえば「Javaにはsizeof演算子がある」とかなら それ単体で間違いだろうけど。

同様のことは「Javaにはポインタがある/ない」論争でも言える。 だいたい、Javaの文法レベルで誤解していない人間同士が 「ある」か「ない」かの議論をしてもしょうがないわけで (だって、どちらも言語の本当の実態は知っていて、その点では同意しているのだから)、 問題は、「Javaにはポインタがある/ない」という言葉を聞いて、 受け手がどう解釈するかではないか※1

また、実例も出さずに「オブジェクトは現実世界のモノだ」とか 「オブジェクト指向は自然だ」などと言ってもはじまらない。 まあ、たとえばある具体的な設計があって、 「オブジェクトは現実世界のモノに対応すべきだからこの設計はよい/よろしくない」 という議論は有益な場合もあるが、それは双方が 「オブジェクトは現実世界のモノに対応すべき」かつ、 「このプログラムはオブジェクト指向であるべき」という認識を持っていて 初めて成立する議論のはずだ※2

私も、本とかはもちろん、会社の仕事やWebページでもいろいろな文章を書いているわけで、 書くことが単なる「言葉遊び」にならないよう、自戒していきたいと思う ※3

あ、なんか新年の抱負っぽくなった。…って、これまた今頃書くのはバカですか。


断章(2005/2/28)

忙しさにまみれているうちに2月も終わりが近づき、 この雑記帳は最低でも月に一度は更新しようと思っているので、 以前から考えてはいるもののまとまらないネタを、 まとまらないままに書いてみる。


ひとつ上のページに戻る | ひとつ前の話 | ひとつ後の話 | トップページに戻る