X



オブジェクト指向は愚かな考え
■ このスレッドは過去ログ倉庫に格納されています
0001アンタレス(公衆電話) [IT]
垢版 |
2020/06/18(木) 18:53:35.21ID:+9+AiKkI0?PLT(12015)

カプセル化(英語: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)
0002アンタレス(公衆電話) [IT]
垢版 |
2020/06/18(木) 18:54:02.44ID:+9+AiKkI0?PLT(12015)

大雑把にいうと、教科書の上では素晴らしく、最初は良くても、将来的な改修の際に隠蔽されたデータにアクセスできないと解決できない問題が出てきて、非常に高確率でデスマーチに陥るというのである。医学的にいえば「手術ができない存在」であるといえる。

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

ソースコードが存在し改修が可能であればカプセル化しても問題ない。ソースコードがあってもライセンス的に改修できない場合や、そもそもバイナリのライブラリしかない場合などは絶望的である。
0003アンタレス(公衆電話) [IT]
垢版 |
2020/06/18(木) 18:54:26.59ID:+9+AiKkI0?PLT(12015)

実例

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

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

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

しかし、時は流れこの方法では動かない環境が登場した。iOSやAndroidだ。こいつらが採用するOpenGL ESはGPUとの通信が一方通行だ。そこで事前に3Dモデルから頂点データを抜き出し別ファイルに保存しておくという一段とトリッキーな方法で回避する。みごと1モデルのファイルが2個になりました。

さらに時は流れた。あるとき謎の不具合が発生。連日連夜のデバッグ作業。原因は片方のファイルの更新を忘れていただけでした。

カプセル化は恐ろしいね!!
0005イータ・カリーナ(茸) [CN]
垢版 |
2020/06/18(木) 18:55:59.77ID:GFYvCpQt0
未来を見通せるなら問題ないよね
0008アンドロメダ銀河(茸) [GB]
垢版 |
2020/06/18(木) 18:56:37.63ID:/PEJkeeM0
これオブジェクト指向が悪んじゃないだろ
オブジェクト指向が誤解されて広まったせいだろ
0010ブレーンワールド(コロン諸島) [US]
垢版 |
2020/06/18(木) 18:56:44.70ID:CzAdmke2O
ぼく係長「この愚か者めが!」
0013プレアデス星団(栃木県) [US]
垢版 |
2020/06/18(木) 18:58:16.20ID:JcNH+rUL0
サーバクライアントモデルだと
サーバ内部は雪駄下駄でしかアクセスできないから
カプセル化されているようなもの
0015ガーネットスター(SB-Android) [EU]
垢版 |
2020/06/18(木) 18:58:37.87ID:iwvIi+PF0
人間オブジェクトを作った

このオブジェクトを継承した美少女オブジェクトはあらゆるプロパティを隠蔽したい

しかし変態オブジェクトは公開されるべきだ

かくしてオブジェクト指向はクソでした
0017大マゼラン雲(茸) [US]
垢版 |
2020/06/18(木) 18:59:09.43ID:8urFRRnH0
業務システムでこれやるとだいたいセキュリティホールになる
0018アークトゥルス(東京都) [US]
垢版 |
2020/06/18(木) 18:59:52.11ID:I/+LJrx20
ケースバイケースだろ。プライベートなメンバ変数を定義して、その全てにSetterを用意する阿呆な設計は論外だけどな。
0019ミマス(茨城県) [BG]
垢版 |
2020/06/18(木) 19:01:57.63ID:4RfX+TUe0
>将来的な改修の際に隠蔽されたデータにアクセスできないと解決できない問題が出てきて、

これってオブジェクト指向が生み出す問題ちゃうやろ?
0020アクルックス(茸) [US]
垢版 |
2020/06/18(木) 19:02:53.35ID:Jvy+us5d0
>>2
ゲッタセッタ使えよwゲッタセッタ実装できないほどプライベートならそれはもう本当に使ってほしくないんだろ
0024グリーゼ581c(埼玉県) [PE]
垢版 |
2020/06/18(木) 19:03:20.35ID:K+8cjdSR0
未だにこの考え方が理解できない。
0025トラペジウム(東京都) [ニダ]
垢版 |
2020/06/18(木) 19:05:11.50ID:v5+OtR/B0
>>1
オブジェクト指向で挫折した人?
0030リゲル(ジパング) [US]
垢版 |
2020/06/18(木) 19:07:23.28ID:82As7IuD0
オブジェクト言語は情弱→手続言語は情弱→アセンブラは情弱→機械語は情弱→???
0031水星(埼玉県) [US]
垢版 |
2020/06/18(木) 19:08:28.20ID:LABNEyUr0
そうは言うがクラス内部でしか使われないクソみたいな変数が外から見えてるようなライブラリ使いたいか?
0037ダイモス(大阪府) [FR]
垢版 |
2020/06/18(木) 19:11:11.20ID:xCdanIvS0
アホがコード書くから改修が面倒になるだけでオブジェクト指向関係ないだろ
0041エウロパ(宮城県) [PL]
垢版 |
2020/06/18(木) 19:12:23.84ID:FtEMcQXQ0
アホ仕様
0042テチス(茸) [US]
垢版 |
2020/06/18(木) 19:13:06.14ID:QFVroX+90
追加の開発がない売りきりだと問題は起きないんだけどね
0043デネブ・カイトス(東京都) [ニダ]
垢版 |
2020/06/18(木) 19:13:19.30ID:hFdxhUZd0
>>28
だな、そして、プログラマーの9割がゴミプログラマーである
ゆえに、「オブジェクト指向は愚かな考え」という結論に至る
0045エリス(茸) [US]
垢版 |
2020/06/18(木) 19:15:21.79ID:AKcanZw50
鋼鉄の鎧を着たらウンコできなくなって漏らすようなもんだな
0047デネブ・カイトス(東京都) [ニダ]
垢版 |
2020/06/18(木) 19:15:46.94ID:hFdxhUZd0
>>37
コードより前に設計がアホなんだろう
0049ポラリス(東京都) [US]
垢版 |
2020/06/18(木) 19:16:31.21ID:mKNgS41W0
privateとfinalは要らんと思うがprotectedは必要
継承すれば制約外れるようにしとけば問題ないしカプセル化の問題じゃないよね
0051地球(中部地方) [NL]
垢版 |
2020/06/18(木) 19:17:18.34ID:3T+TRiDe0
美少女オブジェクトを作った
それはオタクオブジェクトと交信すると大金を取得する事が出来た
しかし、やがて管理者が変わり、オタクの他、おじさんオブジェクトとも交信させようとしたが、
結果でオタクオブジェクトが交信しなくなってしまった
同時におじさんオブジェクトも交信しなくなりシステムは停止してしまった
実はオタクオブジェクトとおじさんオブジェクトとの間では衝突を回避する為、美少女オブジェクトは自身の交際情報を彼らに提出していたのだ
このシステムは結局、元にも戻せず破綻してしまった


とか?
0052ダークエネルギー(茸) [US]
垢版 |
2020/06/18(木) 19:17:29.13ID:wg66kMLr0
>>3
カプセル化がわるいのではなく
そのクラスの設計が悪いだけじゃないか
必要なものは外部からアクセスさせるべき
0054アクルックス(茸) [ニダ]
垢版 |
2020/06/18(木) 19:17:57.58ID:GcU+CHOH0
昔、通信ライブラリで送信元の情報がバッサリ消えているのがあったな。
構造体に1個追加させるのに東京と京都を往復しまくって半年かかった。
0057パルサー(大阪府) [ニダ]
垢版 |
2020/06/18(木) 19:18:13.60ID:dFXfwtOg0
>大雑把にいうと、教科書の上では素晴らしく、最初は良くても、将来的な改修の際に隠蔽されたデータにアクセスできないと解決できない問題が出てきて、非常に高確率でデスマーチに陥るというのである。医学的にいえば「手術ができない存在」であるといえる。

何言ってんだこいつ
0058オベロン(家) [US]
垢版 |
2020/06/18(木) 19:18:36.16ID:MSUA1YlL0
カプセル化すれば内部は隠蔽されていても、入出力がはっきり分かれば
それを組み合させて簡単にシステム構築できるんじゃないのか?
まあ、よくわからんが。
0061トラペジウム(東京都) [ニダ]
垢版 |
2020/06/18(木) 19:19:31.24ID:v5+OtR/B0
>>56
転職したの?
0062デネブ・カイトス(東京都) [ニダ]
垢版 |
2020/06/18(木) 19:19:32.77ID:hFdxhUZd0
>>40
宇宙でアムロが新型ガンダムを受け取って乗ったら足を操作する為の装置がなかった
宇宙で戦ってる間は問題なかったが、地上に降りることになって詰みました
0067チタニア(東京都) [GB]
垢版 |
2020/06/18(木) 19:24:20.36ID:8h6zYq6p0
俺もこの考えに賛成だ。OOPは要らなかった
では何が問題だったのか、C言語を例に上げると、
文字列操作、リスト、GC、など。
つまりGo言語に行き着くわけだが、
Go言語もなんか違うんだよなw
0069カリスト(静岡県) [US]
垢版 |
2020/06/18(木) 19:24:28.97ID:7G1N45xv0
>>28
OOPじゃなくても破綻するでしょ
0070ヒアデス星団(茸) [TW]
垢版 |
2020/06/18(木) 19:24:30.65ID:2qAhmW/e0
データ構造にメスを入れるならオブジェクト指向じゃなくても大改修にならないか
影響範囲をつかみを把握しづらいことを指摘してるのかな
0071ミラ(茸) [JP]
垢版 |
2020/06/18(木) 19:25:00.65ID:EDnvwUu10
>>57
データベースいじるだけの業務システムだと発生しにくいからな。
深い階層構造になることもないし。

昔某社のエンジンの試験システムでアホみたいに階層を深くしてる馬鹿がいて怒鳴りつけたことあるわ。
0074土星(神奈川県) [DK]
垢版 |
2020/06/18(木) 19:29:29.29ID:cMMgOIUs0
C++に挫折して、TURBOPascalでプログラミング勉強したんだけど、
おかげで意識せずオブジェクト化という概念を最初から理解できたと思う。
C++に固執してたら何一つ理解せずに終わってたかな。
あれは自由すぎてプログラミング言語としては最悪だね。
0075百武彗星(東京都) [US]
垢版 |
2020/06/18(木) 19:30:03.10ID:WIrHNbyC0
>>40
存在が余りにヤバ過ぎるんで∀タイプを地層処分にしたら後代になって発掘されてウエポンベイに牛が詰められた。
0077カリスト(光) [BR]
垢版 |
2020/06/18(木) 19:30:30.47ID:TY6jecqS0
カプセル化しっかりしてなかったらその前にデスマーチなのでは
0078土星(神奈川県) [DK]
垢版 |
2020/06/18(木) 19:33:06.87ID:cMMgOIUs0
業務システム作るだけのプログラマなら、最初からデルファイやC#やJAVAで
はっきりとしたオブジェクトプログラミングしてればいいし、他人の作った定義をそのまま鵜呑みにしてればいいだけ。
0079ブレーンワールド(群馬県) [UA]
垢版 |
2020/06/18(木) 19:33:17.23ID:2G9Dc6gs0
単発IDが多いのにこんだけ専門的な話題が成立してるのに驚くw
0080ベガ(ジパング) [ID]
垢版 |
2020/06/18(木) 19:33:28.93ID:om5DhezL0
継承が諸悪の根源
0082チタニア(東京都) [GB]
垢版 |
2020/06/18(木) 19:34:01.02ID:8h6zYq6p0
RDBとOOPのインピーダンスミスマッチ
性能問題がついてまわる
0083イータ・カリーナ(長屋) [ニダ]
垢版 |
2020/06/18(木) 19:35:00.48ID:zeC9N7+u0
外面さえ合わせてしまえば、中はある程度自由に書けるのが利点かと思ってた
継承しすぎるとわけわからんのは困りものだけど
0084土星(神奈川県) [DK]
垢版 |
2020/06/18(木) 19:36:45.70ID:cMMgOIUs0
諸悪の根源はC++だろ。オブジェクト自体の定義も自分でできてしまうような自由さが、むしろ初心者プログラマの理解を阻む。
そもそもアメリカではエリートしか使わないような言語なのに、JAVAが出てくるまで日本では、文系Fランや専門卒すらこれで
プログラミングさせてたから最悪。なんでデルファイが日本ではやらなかったのか本当に疑問よ。
0085ベガ(ジパング) [ID]
垢版 |
2020/06/18(木) 19:36:46.60ID:om5DhezL0
関数オブジェクトなんて定義してるプロジェクトには近づくな
0086ベクルックス(埼玉県) [KR]
垢版 |
2020/06/18(木) 19:42:42.51ID:Y5TtkX/i0
人間クラスの排便メソッドがprivateになってんのがおかしいって結論出てただろ
0087ミマス(茨城県) [BG]
垢版 |
2020/06/18(木) 19:43:17.07ID:4RfX+TUe0
>>1
これオブジェクト指向と全然かんけーない。

単に「他人の作ったコードが理解出来ないと直せない」と言ってるだけ。
0088レア(茸) [US]
垢版 |
2020/06/18(木) 19:45:45.02ID:x128P+iG0
ヘヴィーオブジェクトとはなんだったのか
0090褐色矮星(茸) [CH]
垢版 |
2020/06/18(木) 19:47:25.59ID:K6AyMp4M0
>>8
C++のオブジェクト指向実装がそびえ立つウンコだったのや
アランケイのsmalltalkこそ本物のオブジェクト指向
0092褐色矮星(茸) [CH]
垢版 |
2020/06/18(木) 19:50:14.18ID:K6AyMp4M0
「C++はひどい言語だ。
これをさらにひどいものにしているのは、
水準以下のプログラマーが数多く使用していることで、
またさらに簡単に完全なゴミを作り出せるようになっている点だ。

Gitだけの一発屋のリーナスとかの言葉
0093デネブ・カイトス(東京都) [ニダ]
垢版 |
2020/06/18(木) 19:50:23.77ID:hFdxhUZd0
>>84
諸悪の根源は言い過ぎだと思うけど、エリートしか使っちゃいけない言語だよなC++は
0094アルデバラン(茨城県) [CN]
垢版 |
2020/06/18(木) 19:51:50.20ID:cxAi/ail0
>>30
まさかのBASIC?
0095ダークマター(福岡県) [ニダ]
垢版 |
2020/06/18(木) 19:53:33.69ID:KJEsul+90
サンデープログラマーの俺には必要無い概念だな
c++もベターc以上の事はやってない
とは言っても業務とか大規模プロジェクトに関わっている人達にはある程度必要なんだろうなとは思う
0097褐色矮星(茸) [CH]
垢版 |
2020/06/18(木) 19:56:53.47ID:K6AyMp4M0
Adaで作ったF-22は予定通りローンチしたのに
C++で作ったF-35は永遠に未完成で既にスパゲッティ化して手に負えなくなって来てる
0098オリオン大星雲(福岡県) [ニダ]
垢版 |
2020/06/18(木) 19:57:02.23ID:hyANSIX90
俺がプログラミングを始めた小学生の頃
エッチなお姉さんを作ろうとして
おっぱいやオマンコを作っていけばできるんじゃね?と思っていた

しかしプログラミング(BASIC)の勉強をするうちに
そういう"物"を作るのではないと知った

さらにそれから数年後、オブジェクト指向を知って
そういう"物"を作って組み合わせていくことでシステムが完成することを知り
あのときの子供の発想は間違っていたわけじゃないことを知った

別に子供の頃の俺がすごいっていみじゃなく
人間の自然な発想はオブジェクト指向なんだろうなってこと
0099アルデバラン(茨城県) [CN]
垢版 |
2020/06/18(木) 19:57:40.53ID:cxAi/ail0
>>94
手続言語もあったのね(;´Д`)
0100オベロン(東京都) [ニダ]
垢版 |
2020/06/18(木) 19:57:49.59ID:Qg/sBPcn0
全部パブリックだから大丈夫です
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況