オブジェクト指向と10年戦ってわかったこと
https://qiita.com/tutinoco/items/6952b01e5fc38914ec4e
のコメントで、@fujitanaokiさんが書かれていることが、この記事の出発点です。
僕は特に問題がないならば連想配列と関数をクラスの代わりに使います。
C++でクラスTemplateではなく関数Templateだけで済ますことができる範囲を検討しています。
必要がないクラスは使わずに済ませたいというのを目指しています。
1の問題というのは、おそらく物事をとても柔軟にする必要があります。クラスに基づき設計した場合、クラスがその変更を予期したものであるかどうかによって結果が異なります。もし変更により新しいメソッドが必要となった場合、新しいインターフェースの導入が必要になるかもしれません。僕はそんな予想はできないと思っているので最初は静的なクラス設計はしないです。
OBJという抽象データ型の言語について検討していた時、
定義した抽象データ型をどう展開(継承)するかいくつかの方法があり、どの方法を取ればいいか全くわからなかったため、シンタックスチェッカを作り、言語の構造理解に努めようとしたことがあります。
十数年後、Event-Bという言語で記述しようとした時も、同じ状態に陥り、手が進みませんでした。
何をどう定義し、どう継承すればよいか、現在の問題の解がわからないと書きようがない。
解が見通せる人なら、きっと大丈夫なのかもと思ってきました。
あるいは、初めから解がもとまっている体系の記述だけであればいいのかもしれません。
逆説的ではありますが、名前を付けることが抽象化の妨げになりうるということも指摘しておきます。
ここ、目から鱗。
遺伝子解析により、植物の体系の変更をしているように、視点が変われば、体系が変わる。
ある視点だけの、静的体系は、別の視点では役に立たないことがあるかもしれない。
データ中心設計
ここまで書いたことと違う視点を一つ記録します。
最近の仕事で、継承を使うことを想定した設計から入って成功しそうな例です。
すでに存在している既存のデータ、データ構造を利用するためのプログラムです。
すでに存在していて、数年、そのデータを使い倒そうという目的のプログラムです。
「データ中心設計」という概念なのかもしれません。
お金になる仕事の半分くらいは、この手の仕事かもしれないと思います。
というのは、自分では、普段は、データ構造を操作するような仕事をしていないからです。
逆に、データ中心設計の仕事しかしていない人には、継承を想定した定義から始めることに疑問を抱かないんだろうなということに気がつきました。
継承設計からはいるのがオブジェクト指向じゃないと言っても、
実はオブジェクト指向はどうでもよく、データ中心設計が金になる。
「オブジェクト指向」という単語は、データ中心設計の仕事に付ける印(brand)にすぎないのかも。
その名札をつけておくと、売り上げが伸びるかもしれないという期待かも。
世の中の「オブジェクト指向」と言っている仕事の半分以上はオブジェクト指向とは関係のない設計に、
印をつけたものではないかも。
#アセンブラが一番のオブジェクト指向言語
アセンブラは、CPUの登録器(register)の名前で直接記述できる。
名前そのもので記述するのがオブジェクト指向であるとすれば、
アセンブラが一番のオブジェクト指向。
参考資料(reference)
オブジェクト指向3ナイ運動
https://qiita.com/tomooda/items/77d77e549a8727a0b2fa
オブジェクト指向の3ナイ運動 番外編:あきらめナイ
https://qiita.com/tomooda/items/78db896909a296f6bc79
逆転オブジェクト指向入門
https://qiita.com/tomooda/items/3f6dd4262eb7ff3434ca
オブジェクト指向と関数型についての自分の考え
https://qiita.com/kumagai_games/items/ca558723a016555ccf8d
文書履歴(document history)
ver. 0.01 初稿
ver. 0.02 参考資料追記 20190525
ver. 0.03 20190716
最後までおよみいただきありがとうございました。
いいね 💚、フォローをお願いします。
Thank you very much for reading to the last sentence.
Please press the like icon 💚 and follow me for your happy life.