- 1 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 18:53:35.21 ID:+9+AiKkI0
-
カプセル化(英語: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(木) 18:54:02.44 ID:+9+AiKkI0
大雑把にいうと、教科書の上では素晴らしく、最初は良くても、将来的な改修の際に隠蔽されたデータにアクセスできないと解決できない問題が出てきて、非常に高確率でデスマーチに陥るというのである。医学的にいえば「手術ができない存在」であるといえる。オブジェクト指向の発案者であるアラン・ケイもコーディング規約(頭文字にアンダースコアを付けるなどの命名規則)で縛る程度にすることを推奨しており、アラン・ケイが関わったオブジェクト指向プログラミング言語にはどれも「private」などという概念はない。
ソースコードが存在し改修が可能であればカプセル化しても問題ない。ソースコードがあってもライセンス的に改修できない場合や、そもそもバイナリのライブラリしかない場合などは絶望的である。
- 20 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 19:02:53.35 ID:Jvy+us5d0
- >>2
ゲッタセッタ使えよwゲッタセッタ実装できないほどプライベートならそれはもう本当に使ってほしくないんだろ - 3 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 18:54:26.59 ID:+9+AiKkI0
実例XNA(MonoGame)では標準で3Dモデルを手軽に扱えるModelクラスが用意されている。 1行で読み込み、1行で描画できる素晴らしいものだ。
ただしこのModelクラスを使うと頂点データは遮蔽されておりアクセスできない。 物理演算エンジンに食わせるのにどうしても頂点データが必要なのにだ。
世界中の誰もが同じ問題で悩んでいるようでstackoverflowに回避策が書いてあった。頂点データをGPUに送信した直後にGetData関数でそのまま返してもらうトリッキーなコードでめでたく回避できた。
しかし、時は流れこの方法では動かない環境が登場した。iOSやAndroidだ。こいつらが採用するOpenGL ESはGPUとの通信が一方通行だ。そこで事前に3Dモデルから頂点データを抜き出し別ファイルに保存しておくという一段とトリッキーな方法で回避する。みごと1モデルのファイルが2個になりました。
さらに時は流れた。あるとき謎の不具合が発生。連日連夜のデバッグ作業。原因は片方のファイルの更新を忘れていただけでした。
カプセル化は恐ろしいね!!
- 52 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 19:17:29.13 ID:wg66kMLr0
- >>3
カプセル化がわるいのではなく
そのクラスの設計が悪いだけじゃないか
必要なものは外部からアクセスさせるべき - 59 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 19:19:04.68 ID:GcU+CHOH0
- >>52
必要な人は少数
必要ない人には触らせたくないどうするのが正解なの?
- 60 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 19:19:27.52 ID:NZ/tgaMx0
- >>59
読取専用 - 4 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 18:54:58.59 ID:QYJ6VIPy0
- 底辺が集まる環境では重要
- 5 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 18:55:59.77 ID:GFYvCpQt0
- 未来を見通せるなら問題ないよね
- 6 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 18:56:04.84 ID:vzFM5Le30
- 使う人の中な変な人混じると変になる
- 7 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 18:56:05.49 ID:glno2wR00
- 適材適所
- 8 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 18:56:37.63 ID:/PEJkeeM0
- これオブジェクト指向が悪んじゃないだろ
オブジェクト指向が誤解されて広まったせいだろ - 9 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 18:56:43.68 ID:nxOzoX3w0
- 堀井社長↓
- 10 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 18:56:44.70 ID:CzAdmke2O
- ぼく係長「この愚か者めが!」
- 11 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 18:57:19.39 ID:vOjw9QIp0
- デスマーチになって初めて設計ミスに気がつく
- 12 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 18:57:32.92 ID:1sMDKXZK0
- 消えたデータ
- 13 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 18:58:16.20 ID:JcNH+rUL0
- サーバクライアントモデルだと
サーバ内部は雪駄下駄でしかアクセスできないから
カプセル化されているようなもの - 14 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 18:58:26.93 ID:Bhvulvrn0
- よくある
- 16 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 18:58:43.01 ID:3IYsxS2G0
- ポリモーフィズムでみんな挫折するよねw
- 17 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 18:59:09.43 ID:8urFRRnH0
- 業務システムでこれやるとだいたいセキュリティホールになる
- 18 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 18:59:52.11 ID:I/+LJrx20
- ケースバイケースだろ。プライベートなメンバ変数を定義して、その全てにSetterを用意する阿呆な設計は論外だけどな。
- 19 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 19:01:57.63 ID:4RfX+TUe0
- >将来的な改修の際に隠蔽されたデータにアクセスできないと解決できない問題が出てきて、
これってオブジェクト指向が生み出す問題ちゃうやろ?
- 21 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 19:03:00.17 ID:7oQ/s3xA0
- アクセサメソッド用意しとけば問題ないだろ
- 22 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 19:03:06.68 ID:WIrHNbyC0
- コード生成こそAIにやらせろ。いいコード書くぞ絶対。
- 27 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 19:05:38.57 ID:3T+TRiDe0
- >>22
問題はその精製AIを書くAIが必要な事だ - 23 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 19:03:09.60 ID:sOYbk9Ks0
- 玄人指向
- 24 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 19:03:20.35 ID:K+8cjdSR0
- 未だにこの考え方が理解できない。
- 25 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 19:05:11.50 ID:v5+OtR/B0
- >>1
オブジェクト指向で挫折した人? - 26 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 19:05:13.00 ID:5nU2ZEG40
- カプセル化というと噛みつかれるけど
独立性を高めるというと黙る不思議 - 28 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 19:06:15.26 ID:PjOv2bl70
- OOPはゴミプログラマーが混ざると破綻する
- 43 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 19:13:19.30 ID:hFdxhUZd0
- >>28
だな、そして、プログラマーの9割がゴミプログラマーである
ゆえに、「オブジェクト指向は愚かな考え」という結論に至る - 29 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 19:06:26.79 ID:ffY+SLXo0
- じゃ、カプセルホテルはいけないっていうのかよ?
- 30 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 19:07:23.28 ID:82As7IuD0
- オブジェクト言語は情弱→手続言語は情弱→アセンブラは情弱→機械語は情弱→???
- 31 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 19:08:28.20 ID:LABNEyUr0
- そうは言うがクラス内部でしか使われないクソみたいな変数が外から見えてるようなライブラリ使いたいか?
- 34 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 19:10:05.24 ID:UOgkoKsr0
- >>31
触るとコンパイラ警告を出すだけで十分だと思うけどね。 - 32 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 19:08:52.12 ID:j9SDv8Ue0
- これこそ
考えるな、感じろ
の分野だと思ってるわ - 33 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 19:09:32.02 ID:L+wWXull0
- オブジェクトベースかタスクベースかって話じゃないのか
- 35 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 19:10:23.93 ID:fw6YvO8s0
- そもそもカプセル化はオブジェクト指向ではない
- 36 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 19:10:59.45 ID:ty/pXuON0
- せめてprotectedにしておいてほしいよな
- 37 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 19:11:11.20 ID:xCdanIvS0
- アホがコード書くから改修が面倒になるだけでオブジェクト指向関係ないだろ
- 47 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 19:15:46.94 ID:hFdxhUZd0
- >>37
コードより前に設計がアホなんだろう - 38 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 19:11:25.05 ID:PjOv2bl70
- この記事書いた人頭悪そう
- 39 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 19:11:58.75 ID:ty/pXuON0
- あとから出てきた環境では対処できないとかよくある
- 40 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 19:12:12.88 ID:dvk/EClb0
- 全然わからん。
ガンダムでたとえてくれ。 - 62 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 19:19:32.77 ID:hFdxhUZd0
- >>40
宇宙でアムロが新型ガンダムを受け取って乗ったら足を操作する為の装置がなかった
宇宙で戦ってる間は問題なかったが、地上に降りることになって詰みました - 64 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 19:21:47.36 ID:dvk/EClb0
- >>62
すげーわかった気がするサンキュ - 41 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 19:12:23.84 ID:FtEMcQXQ0
- アホ仕様
- 42 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 19:13:06.14 ID:QFVroX+90
- 追加の開発がない売りきりだと問題は起きないんだけどね
- 44 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 19:13:59.87 ID:6BH1uF0S0
- 改修の限界
- 45 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 19:15:21.79 ID:AKcanZw50
- 鋼鉄の鎧を着たらウ●コできなくなって漏らすようなもんだな
- 46 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 19:15:31.69 ID:s1FweWan0
- 結局COBOLが言語として一番素晴らしいつてことか
- 48 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 19:16:05.56 ID:Qg7C6Duh0
- 他人の作ったライブラリを組み合わせてるとよく起きる
- 49 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 19:16:31.21 ID:mKNgS41W0
- privateとfinalは要らんと思うがprotectedは必要
継承すれば制約外れるようにしとけば問題ないしカプセル化の問題じゃないよね - 50 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 19:17:06.52 ID:xCqRYfOo0
- オブジェクトの考え方が人によって違うから
- 53 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 19:17:31.40 ID:KvCDGP5u0
- 今はどんなのが良いの?
- 54 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 19:17:57.58 ID:GcU+CHOH0
- 昔、通信ライブラリで送信元の情報がバッサリ消えているのがあったな。
構造体に1個追加させるのに東京と京都を往復しまくって半年かかった。 - 55 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 19:18:05.78 ID:y1/JJ8jh0
- 排便メソッド
- 56 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 19:18:13.51 ID:XWCN860C0
- オブジェクト指向のおかげでプログラミング辞められました(´・ω・`)
- 61 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 19:19:31.24 ID:v5+OtR/B0
- >>56
転職したの? - 57 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 19:18:13.60 ID:dFXfwtOg0
- >大雑把にいうと、教科書の上では素晴らしく、最初は良くても、将来的な改修の際に隠蔽されたデータにアクセスできないと解決できない問題が出てきて、非常に高確率でデスマーチに陥るというのである。医学的にいえば「手術ができない存在」であるといえる。
何言ってんだこいつ
- 63 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 19:20:15.53 ID:+JSb6sXA0
- >>57
経験ないの? - 58 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 19:18:36.16 ID:MSUA1YlL0
- カプセル化すれば内部は隠蔽されていても、入出力がはっきり分かれば
それを組み合させて簡単にシステム構築できるんじゃないのか?
まあ、よくわからんが。 - 65 名前:一般よりも上級の名無しさん 投稿日時:2020/06/18(木) 19:23:02.51 ID:XWCN860C0
- 変数に関数なんか入れられっかっての
そんなこんなでいつもストレスが(´・ω・`)
コメント一覧