オブジェクト指向は愚かな考え

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
変数に関数なんか入れられっかっての
そんなこんなでいつもストレスが(´・ω・`)

コメント一覧

タイトルとURLをコピーしました