「カプセル化(プログラミング)」を編集中

ナビゲーションに移動 検索に移動

警告: ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。ログインまたはアカウントを作成すれば、あなたの編集はその利用者名とともに表示されるほか、その他の利点もあります。

この編集を取り消せます。 下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。

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

MonoBookへの投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。 自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細はMonoBook:著作権を参照)。 著作権保護されている作品は、許諾なしに投稿しないでください!

このページを編集するには、下記の確認用の質問に回答してください (詳細):

取り消し 編集の仕方 (新しいウィンドウで開きます)