- 1 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2020/06/18(木) 16:57:23.25 ID:NaL2qLjhd
カプセル化(英語:encapsulation)とは、オブジェクト指向を構成する概念の一つで、オブジェクト内部のデータを隠蔽したり(データ隠蔽)、オブジェクトの振る舞いを隠蔽したり、オブジェクトの実際の型を隠蔽したりすることをいう。
かつて偏差値の低い学校向けの情報処理系教科書において「カプセル化は大変すばらしいものであり絶対に使うように」と大体的に宣伝された。
一方、カリフォルニア大学バークレー校の有識者を中心とした「インターネットを作った人たち」は「階層化の有害性」として「カプセル化は絶対にやめろ」としている。
https://monobook.org/wiki/%E3%82%AB%E3%83%97%E3%82%BB%E3%83%AB%E5%8C%96(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0)
- 2 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2020/06/18(木) 16:57:51.04 ID:NaL2qLjhd
大雑把にいうと、教科書の上では素晴らしく、最初は良くても、将来的な改修の際に隠蔽されたデータにアクセスできないと解決できない問題が出てきて、非常に高確率でデスマーチに陥るというのである。
医学的にいえば「手術ができない存在」であるといえる。- 23 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2020/06/18(木) 17:22:07.01 ID:bbyuj0Yi0
- >>2
C++が流行りだしたころに、これ言ったら変な目で見られたわ。
設計能力と未来を見通す能力がある人限定なんだよ。
大人数だと低い方に合わされるから、大人数プロジェクトには不向き。優秀な少数精鋭プロジェクトなら良いんだけどね。 - 3 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2020/06/18(木) 16:58:05.91 ID:NaL2qLjhd
オブジェクト指向の発案者であるアラン・ケイもコーディング規約(頭文字にアンダースコアを付けるなどの命名規則)で縛る程度にすることを推奨しており、アラン・ケイが関わったオブジェクト指向プログラミング言語にはどれも「private」などという概念はない。- 4 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2020/06/18(木) 16:58:30.10 ID:NaL2qLjhd
ソースコードが存在し改修が可能であればカプセル化しても問題ない。ソースコードがあってもライセンス的に改修できない場合や、そもそもバイナリのライブラリしかない場合などは絶望的である。- 5 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2020/06/18(木) 16:59:20.41 ID:NaL2qLjhd
実例
XNA(MonoGame)では標準で3Dモデルを手軽に扱えるModelクラスが用意されている。 1行で読み込み、1行で描画できる素晴らしいものだ。ただしこのModelクラスを使うと頂点データは遮蔽されておりアクセスできない。 物理演算エンジンに食わせるのにどうしても頂点データが必要なのにだ。
そこで頂点データをGPUに送信後にGetData関数で返してもらうというトリッキーなコードで回避する。 しかし、この方法では動かない環境がある。 iOSやAndroidのOpenGL ESなんかがそうだ。 こいつらはGPUとの通信が一方通行。
そこで事前に3Dモデルから頂点データを抜き出し別ファイルに保存しておくトリッキーな方法で回避する。 ファイルが2個になりました。 謎の不具合が発生しています。 片方のファイルの更新を忘れました。
カプセル化は恐ろしいね!
- 6 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2020/06/18(木) 17:00:47.29 ID:flnyUul/H
- シンプルなほうが解読しやすいよね
散逸して現物しか残ってない場合とか特に - 7 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2020/06/18(木) 17:05:04.14 ID:Bqmv61pE0
- 逆張りおじさん
- 8 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2020/06/18(木) 17:05:51.61 ID:qFzM0+sv0
- なんか基本情報技術者止まりの学生さんって感じの文章
- 9 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2020/06/18(木) 17:06:00.55 ID:j6NmyjI80
- つまりどういうことや
- 10 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2020/06/18(木) 17:06:48.13 ID:LKhJ6fPV0
- 8番のモジュールまだ~?
- 11 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2020/06/18(木) 17:07:48.00 ID:2niNRZ0w0
- 美少女クラスに排便メソッドを実行できない
- 12 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2020/06/18(木) 17:08:06.95 ID:cAw3ir+t0
- 俺が初めてつくったゲーム全体でシングル関数になってて笑う
関数の頭から後ろまでで1フレームの描画だからある意味美しくもあるけど - 13 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2020/06/18(木) 17:09:03.30 ID:5ZAoBBr3M
- 究極のところアプリケーションの出力を他のアプリから自在に扱えるOSってのが理想
マーケットスピードなんかを利用して
株の自動売買を構築しようと思っても
内部データを読み出せないしな
自前描画のJava製となるとメモリハックも厳しい - 14 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2020/06/18(木) 17:10:04.43 ID:dnF6pZ/50
- オブジェクト指向プログラミング出来ない老害はとことん出来ないからな
- 15 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2020/06/18(木) 17:10:33.84 ID:zDOwEbSO0
- 頂点読めないのはプログラムのカプセル化とは関係ないだろ
だいたい、privateにしておこうと思ったようなデータに後からアクセスするようなことしてまともに動くわけがない
それこそデスマーチ確実だろ - 16 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2020/06/18(木) 17:12:15.31 ID:+LO7uNtK0
- 副作用の起きない処理はpublicでも問題ないだろうな
問題が起きるとすれば運用側の問題 - 17 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2020/06/18(木) 17:13:56.19 ID:YPuP8JBe0
- オブジェクト志向じゃないとツール使ったテストが難しくなりそうだが
その辺はどうなんだろね - 18 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2020/06/18(木) 17:14:43.47 ID:ZNuYk5620
- 一般に公開されたライブラリとしてはパブリックな静的メソッドの集合の方が使い勝手が良い場合もあるが
自分たちで作ってるフレームワークとかだとクラス化して責任範囲明確化した方が安全だろ
どうしても後から公開しないといけないデータやメソッドが出てきたら単にソースいじって公開すれば良いだけだし - 19 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2020/06/18(木) 17:15:37.60 ID:S32hCWxi0
- ファイルアイコンをクリックしたらアプリが立ち上がるのもオブジェクト指向でいいのか?
- 20 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2020/06/18(木) 17:18:31.05 ID:YPuP8JBe0
- 今更オブジェクト指向やめますって言われても
昔書いてた形で今風のアプリ作れなんて無理だわ、もう体に染み付いちゃたし - 21 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2020/06/18(木) 17:20:14.04 ID:QkWrn8B9d
- 俺プログラマだけどこういう話全然分かんね
何してたら理解できるようになるんだ? - 24 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2020/06/18(木) 17:24:55.47 ID:bbyuj0Yi0
- >>21
まだ経験の少ない若い人なら、もう少し経験積めば良い。
炎上プロジェクトを何度か経験すると、何が原因だとか、何によってコードが複雑化するのか、とかそういうのを考えるようになる。 - 34 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2020/06/18(木) 17:41:36.76 ID:aoWeg8VQM
- >>21
ほんとにプログラマか? - 22 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2020/06/18(木) 17:20:34.26 ID:xpFFCmFr0
- この事例だと導入するライブラリを間違ってるだけでしょ
大量のグローバル変数地獄のほうがきついよ - 25 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2020/06/18(木) 17:25:31.12 ID:arBfmd9Jp
- 日本の場合はカプセル化されてようがいまいが基底クラスなんて弄ったら再テストしなきゃいけないから
同じ機能を持ったクラスを作るので意味が無い - 26 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2020/06/18(木) 17:25:58.11 ID:URVn5J6O0
- 振る舞いがわかってるんだから、必要になった時にそのオブジェクトだけ差し替えたら?
- 27 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2020/06/18(木) 17:29:20.05 ID:NjDOs+Bl0
- そもそもアランケイの考えたものと今のオブジェクト指向が違うっていうね
オブジェクトなんて名前を使ったせいでオブジェクトが重要だと勘違いしてるし全員
よって失敗
ただ発展には貢献したそれだけ - 32 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2020/06/18(木) 17:36:50.16 ID:Ddg/4dXA0
- >>27
smalltalkはあんま普及してない? - 28 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2020/06/18(木) 17:30:14.82 ID:bxtsjV91r
- Staticおじさんスレ?
- 29 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2020/06/18(木) 17:31:34.13 ID:mVcB0Cxb0
- よー分からんな
実例の話は始めから触れないと問題ある部分があるのに選択したのが間違いじゃないの?
オブジェクト指向じゃなくても痒いとこに手が届かないみたいなことはあるよね - 31 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2020/06/18(木) 17:35:52.76 ID:YPuP8JBe0
- >>29
この実例は良くないよね
Modelクラスが何かにラップされてるならその元を探して改良すべきなのに
それやらないでトリッキーな方法で回避するから余計面倒になってる - 30 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2020/06/18(木) 17:31:39.95 ID:jnrp3qED0
- 昔作ったクラスを継承したり再利用したりなんて殆どない
データと関数数個だけで済むものを
無駄にクラス化して
ヘッダと実装にわけて無駄にコード追いにくくするのはあかん - 33 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2020/06/18(木) 17:40:49.52 ID:DW2SCuso0
- 内部に状態を持つな
- 35 名前:番組の途中ですが翡翠の名無しがお送りします 投稿日時:2020/06/18(木) 17:42:15.76 ID:1vEXKpee0
- オブジェクト指向で設計やるとしばしば手段が目的化してしまって不必要に複雑化する
オブジェクト指向は愚かな考え

コメント