はじめに
昔、3ない運動といって、高校生はバイクを買わせない、乗らせない、免許取らせない、ということになっていました。まあそんなの関係なく乗ってるヤツは乗ってましたけどね。まあよくある、老害による余計なお世話ってやつです。
というわけで、オブジェクト指向の3ない運動を始めてみました。しょせん老害の戯言なので、若い子は無視してヒャッハーしてください。
- オブジェクトのメソッドを呼び出さない
オブジェクトのメソッドを外部から勝手に呼び出すことは、誰かの手足を握って無理やり動かして仕事させるのと同じぐらいダメダメです。オブジェクトにはメッセージを投げて「お願い」をしましょう。そしたらそのオブジェクトがそのメッセージに対応するメソッドを持っていたらたぶんそのメソッドを使ってメッセージを処理してくれるし、なかったらなかったで、何かしらのことをしてくれます。「わかりません」と答えるとか。そしたら頼んだ人が「じゃいいです」と言って別のこと始めるかもしれないし、「こうやれ」とか言ってそのメッセージを処理する具体的な「方法」を教えてあげるかもしれません。
個々のオブジェクトは1個のアイデンティティを持つオブジェクトとして尊重されます。基本的オブジェクト権です。勝手に脳みその中のアドレスにjmpしないでください。
はい、単なる言葉尻の問題です。でも言葉尻は大事です。投げ斧を持ったヒャッハーな人が草原で手頃な距離にまーるいお尻を見つけたらどうします?斧を投げるに決まっているでしょう。そういうことです。
- クラスを型と呼ばない
これも言葉尻の問題です。以下同文。
クラスって、具体的な型に左右されなきゃならないほど不自由なものじゃないし、逆に型も具体的なクラスに左右されなきゃならないほど不自由なものじゃないと思うのですよ。もちろんクラス型を持つ言語とかありますよ。でも、そういうのが前面に出て意識しないといけないのって、ぶっちゃけ不自由じゃん。(個人の感想です。人により効果が異なります。)
クラスはクラス。型は型でちゃんと概念として区別しましょうよ。なんとなく。このクラスはこの型が約束している性質を満たすことにします、とか、この型ではこのクラスとこのクラスを前提にします、とかはアリだと思うけどね。
そんな都合のいい言語あるかって?作ってクレクレ。
- オブジェクト型を提供しているからといってオブジェクト指向と言わない
お約束ですが、言葉尻で以下同文です。
オブジェクト指向という言葉の定義によるんだけど、オレ的には A Personal Computer for Children of All Ages 日本語試訳 原文 に描かれている世界を実現しようという技術的指向というか方向性をオブジェクト指向と呼びたいなあと思ってます。
オブジェクトとかオブジェクト型とかは、各言語の設計者さんが決めればいいと思うのですよ。これがこの言語でいうオブジェクトですとか、オブジェクト型です、とか。でも、ほとんどの文脈で使われている言語機能としての「オブジェクト指向」は、実際には「オブジェクト型」だったり「オブジェクト」だったり、メソッド呼び出…じゃなくてメッセージ送信の機能だったりします。精密に言葉を選べば、「オブジェクト指向」という単語を使わないほうがより正確に記述できると思うのですよ。
まとめ
以上、お尻を3つ並べました。
参考資料
[1] Alan C. Kay, A Personal Computer for Children of All Ages. In Proceedings of the ACM annual conference - Volume 1 (ACM '72), Vol. 1. ACM, 2011, 日本語試訳 http://swikis.ddo.jp/abee/74, 原文 http://www.mprove.de/diplom/gui/kay72.html
[2] 阿部 和広, 簡単だけど奥深い!Scratchプログラミングの魅力 第1回 オブジェクト指向プログラミング, ITPro, http://itpro.nikkeibp.co.jp/article/COLUMN/20111019/371081/
[3] sumim, オブジェクト指向の概念の発明者は誰ですか, http://d.hatena.ne.jp/sumim/20040525/p1
[4] tomooda, オブジェクト指向って何?, http://tomostavern.blogspot.jp/2011/09/blog-post_17.html