「カプセル化(プログラミング)」の版間の差分
(→実例) |
(→実例) |
||
22行目: | 22行目: | ||
こいつらはGPUとの通信が一方通行。 | こいつらはGPUとの通信が一方通行。 | ||
− | そこで事前に3Dモデルから頂点データを抜き出し別[[ファイル]] | + | そこで事前に3Dモデルから頂点データを抜き出し別[[ファイル]]に保存しておくトリッキーな方法で回避する。 |
ファイルが2個になりました。 | ファイルが2個になりました。 | ||
謎の不具合が発生しています。 | 謎の不具合が発生しています。 |
2020年6月18日 (木) 07:53時点における版
カプセル化(英語:encapsulation)とは、オブジェクト指向を構成する概念の一つで、オブジェクト内部のデータを隠蔽したり(データ隠蔽)、オブジェクトの振る舞いを隠蔽したり、オブジェクトの実際の型を隠蔽したりすることをいう。
危険性
かつて偏差値の低い学校向けの情報処理系教科書において「カプセル化は大変すばらしいものであり絶対に使うように」と大体的に宣伝された。
一方、カリフォルニア大学バークレー校の有識者を中心とした「インターネットを作った人たち」は「階層化の有害性」として「カプセル化は絶対にやめろ」としている。大雑把にいうと、教科書の上では素晴らしく、最初は良くても、将来的な改修の際に隠蔽されたデータにアクセスできないと解決できない問題が出てきて、非常に高確率でデスマーチに陥るというのである。医学的にいえば「手術ができない存在」であるといえる。
オブジェクト指向の発案者であるアラン・ケイもコーディング規約(頭文字にアンダースコアを付けるなどの命名規則)で縛る程度にすることを推奨しており、アラン・ケイが関わったオブジェクト指向プログラミング言語にはどれも「private」などという概念はない。
ソースコードが存在し改修が可能であればカプセル化しても問題ない。ソースコードがあってもライセンス的に改修できない場合や、そもそもバイナリのライブラリしかない場合などは絶望的である。
実例
XNA(MonoGame)では標準で3Dモデルを手軽に扱えるModelクラスが用意されている。 1行で読み込み、1行で描画できる素晴らしいものだ。
ただしこのModelクラスを使うと頂点データは遮蔽されておりアクセスできない。 物理演算エンジンに食わせるのにどうしても頂点データがどうしても必要なのにだ。
そこでGPUに送信後にGetData関数で頂点データを返してもらうというトリッキーなコードで回避する。 しかし、この方法では動かない環境がある。 iOSやAndroidのOpenGL ESなんかがそうだ。 こいつらはGPUとの通信が一方通行。
そこで事前に3Dモデルから頂点データを抜き出し別ファイルに保存しておくトリッキーな方法で回避する。 ファイルが2個になりました。 謎の不具合が発生しています。 片方のファイルの更新を忘れました。
カプセル化は恐ろしいね!