「カプセル化(プログラミング)」の版間の差分

提供: MonoBook
ナビゲーションに移動 検索に移動
17行目: 17行目:
 
[[物理演算エンジン]]に食わせるのにどうしても[[頂点データ]]が必要なのにだ。
 
[[物理演算エンジン]]に食わせるのにどうしても[[頂点データ]]が必要なのにだ。
  
そこで頂点データを[[GPU]]に送信後にGetData関数で返してもらうというトリッキーな[[コード]]で回避する。
+
世界中の誰もが同じ問題で悩んでいるようで[[stackoverflow]]に回避策が書いてあった。頂点データを[[GPU]]に送信後してGetData関数で抜き出すトリッキーな[[コード]]で回避できた。
しかし、この方法では動かない環境がある。
 
[[iOS]]や[[Android]]の[[OpenGL ES]]なんかがそうだ。
 
こいつらはGPUとの通信が一方通行。
 
  
そこで事前に3Dモデルから頂点データを抜き出し別[[ファイル]]に保存しておくトリッキーな方法で回避する。
+
しかし、時は流れこの方法では動かない環境が登場した。[[iOS]]や[[Android]]だ。こいつらが採用する[[OpenGL ES]]はGPUとの通信が一方通行だ。
ファイルが2個になりました。
 
謎の不具合が発生しています。
 
片方のファイルの更新を忘れました。
 
  
カプセル化は恐ろしいね!
+
そこで事前に3Dモデルから頂点データを抜き出し別[[ファイル]]に保存しておくという一段とトリッキーな方法で回避する。みごと1モデルのファイルが2個になりました。そして謎の不具合が発生。連日連夜のデバッグ作業。原因は片方のファイルの更新を忘れていただけでした。
 +
 
 +
カプセル化は恐ろしいね!!
  
 
== 関連項目 ==
 
== 関連項目 ==

2020年6月18日 (木) 09:42時点における版

カプセル化英語:encapsulation)とは、オブジェクト指向を構成する概念の一つで、オブジェクト内部のデータを隠蔽したり(データ隠蔽)、オブジェクトの振る舞いを隠蔽したり、オブジェクトの実際の型を隠蔽したりすることをいう。

危険性

かつて偏差値の低い学校向けの情報処理系教科書において「カプセル化は大変すばらしいものであり絶対に使うように」と大体的に宣伝された。

一方、カリフォルニア大学バークレー校の有識者を中心とした「インターネットを作った人たち」は「階層化の有害性」として「カプセル化は絶対にやめろ」としている。大雑把にいうと、教科書の上では素晴らしく、最初は良くても、将来的な改修の際に隠蔽されたデータにアクセスできないと解決できない問題が出てきて、非常に高確率でデスマーチに陥るというのである。医学的にいえば「手術ができない存在」であるといえる。

オブジェクト指向の発案者であるアラン・ケイコーディング規約(頭文字にアンダースコアを付けるなどの命名規則)で縛る程度にすることを推奨しており、アラン・ケイが関わったオブジェクト指向プログラミング言語にはどれも「private」などという概念はない。

ソースコードが存在し改修が可能であればカプセル化しても問題ない。ソースコードがあってもライセンス的に改修できない場合や、そもそもバイナリライブラリしかない場合などは絶望的である。

実例

XNAMonoGame)では標準で3Dモデルを手軽に扱えるModelクラスが用意されている。 1行で読み込み、1行で描画できる素晴らしいものだ。

ただしこのModelクラスを使うと頂点データは遮蔽されておりアクセスできない。 物理演算エンジンに食わせるのにどうしても頂点データが必要なのにだ。

世界中の誰もが同じ問題で悩んでいるようでstackoverflowに回避策が書いてあった。頂点データをGPUに送信後してGetData関数で抜き出すトリッキーなコードで回避できた。

しかし、時は流れこの方法では動かない環境が登場した。iOSAndroidだ。こいつらが採用するOpenGL ESはGPUとの通信が一方通行だ。

そこで事前に3Dモデルから頂点データを抜き出し別ファイルに保存しておくという一段とトリッキーな方法で回避する。みごと1モデルのファイルが2個になりました。そして謎の不具合が発生。連日連夜のデバッグ作業。原因は片方のファイルの更新を忘れていただけでした。

カプセル化は恐ろしいね!!

関連項目