Open1
オブジェクト指向 is 何
高橋さんの 2021年の「オブジェクト指向」を考える に、私の思うオブジェクト指向が入っていなかったのでスクラップを作ってみた。
※ Zenn 初心者なのでこういうときに記事を建てるのが良いのかコメントするのが良いのか、こうしてスクラップにするのが良いのかよくわからない
で。
私の思うオブジェクト指向は以下の通り。
たとえば関数のようなもの foo
があって、引数が a
, b
, c
なんだけど a
の正体がはっきりしないという状況。つまり、ソースコード上に a.foo(b, c)
とか foo(a, b, c)
とか書いてある。
そんなときに、a.foo(b, c)
などが行う処理の内容が a
の正体によって全く変わるかもしれないようなことができる仕組み、あるいはその仕組を活用したプログラミングスタイルのこと。
だと思う。
a
と b
の両方に依存してもいいけど、そういう処理系はあまりない(無くはない)。
高橋さんの記事だと「遅延束縛」が近いんだけど
- 束縛をコンパイル時にやってもいい。
- 何に束縛するのかはレシーバが決める。上記の例で、
foo
を関数へのポインタにすることで遅延束縛する、みたいな状況はオブジェクト指向っぽくない。
辺りが違う。
とはいえもちろん。
これが唯一の正しいオブジェクト指向の定義だ、なんて思っていたりはしない。
コンセンサスのない単語になっているから使いにくいよね、と思っている。