はてなキーワード: C++とは
21世紀にもなれば、みんな、ちゃんとしたコンピューターでプログラミングなんて当たり前で
C++やPerlや他の言語をちょっと扱える程度じゃ何の自慢にもならないと思ってた。(20世紀なのでWebと言えばPerl程度しか知らなかった)
プロともなれば、もっともっとずっとずっと高度な技術を売らなきゃ売れない時代が来ると思ってた。
そうはならなかったなあ。
世界はことごとく俺の逆を行く。
JavaScriptはJavaにあやかって名付けられたけど、インドネシアもインドにあやかってんのかな。
と思って調べてみたら、
という流れのようなので、どっちかというとC++とObjective-Cみたいな感じか。
オブジェクト指向とかかっこいい言い方をしても無駄だ。従来の構造化プログラミングから進歩したことなど一つもない。オブジェクト指向がなぜダメであるのか、それを今から話すぜ。
1. データと処理をまとめるという発想。
データと処理をまとめてクラスとして置くという発想がある。しかし、このようなことをしなくとも、モジュールという単位で利用データと処理の集合をまとめればよかったので、クラスを使う必要はない。しかもクラスはインスタンス化のときに、不要な情報まで持ってくるのでメモリ効率が明らかに悪い。コンピュータが進化しているからメモリのことはあまり考える必要がないとはいえ、必要ない処理をまとめて閉じ込めるのは無駄が多い。なぜクラスという名詞で概念分類できると考え始めたのかは不明だが、アルゴリズムとデータ構造という構造化プログラミングの手法を、クラスと型というパラダイムに変換することで型にうるさいC++馬鹿を生み出し、彼らが発狂することになってしまった。しかもデータと処理にわざわざ依存関係を持たせて、変更に対する柔軟性を失わせている。
2. 継承
継承によって既存の構造を持ってこようとする必要性が全く無い。それどころか、継承を使うことによってプログラムがスパゲティ化し、依存関係のグラフがややこしくなってしまう。継承など使わず、必要な情報はスコープの限られた共通の変数、または関数の引数として用意しておけば良い。もしクラスをどうしても使いたければ、共通のインターフェイスをもたせたほうがマシである。インターフェイスを使えば、クラス利用者が意識すべきpublicメソッドがなんであるか把握できる。
3. カプセル化
オブジェクト指向の中で役立つ概念はカプセル化だけである。しかし、カプセル化はクラスなしで構造化プログラミングの方法で実装できる。pythonでは、モジュールの中でアンダースコアから始まる関数を用意しておけば、それがprotectedやprivateと似たように機能させることができる。オブジェクト指向がなぜカプセル化が独自の概念だと言い始めたかは謎。
4. ポリモーフィズム
同じ名前のメソッドを、入力に応じて処理の内容を変える。このようなことはオブジェクト指向などと誇大宣伝をするほどのことでもない。構造化プログラミングで似たようなことができる。
これソシャゲっていうか今のゲーム全般が分業進み過ぎて内部処理の構造的に演出の完了を待たないと次に進めないものが増えてるんだと想像してるけど実際どうだかは知らない>RT— やむっ🔞夏コミ2日目東サ15b (@yamu_RN) October 23, 2023
むしろUnityの場合はSceneを切り替えるコストが大きいってまともな人なら知ってるから設定画面みたいな独立してるものならまだしもインゲームで切り替えることは稀と思う
C++で一から作ってるならシーンごと落としてメモリ解放コスト下げるとかやるけどキー入力の受付はだいたいフレームワーク上にあうから切り替え先シーンの初期化が済むまで単にスルーしてるだけですね