オブジェクト指向は愚かな考え
■ このスレッドは過去ログ倉庫に格納されています
カプセル化(英語: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)
大雑把にいうと、教科書の上では素晴らしく、最初は良くても、将来的な改修の際に隠蔽されたデータにアクセスできないと解決できない問題が出てきて、非常に高確率でデスマーチに陥るというのである。医学的にいえば「手術ができない存在」であるといえる。
オブジェクト指向の発案者であるアラン・ケイもコーディング規約(頭文字にアンダースコアを付けるなどの命名規則)で縛る程度にすることを推奨しており、アラン・ケイが関わったオブジェクト指向プログラミング言語にはどれも「private」などという概念はない。
ソースコードが存在し改修が可能であればカプセル化しても問題ない。ソースコードがあってもライセンス的に改修できない場合や、そもそもバイナリのライブラリしかない場合などは絶望的である。
実例
XNA(MonoGame)では標準で3Dモデルを手軽に扱えるModelクラスが用意されている。 1行で読み込み、1行で描画できる素晴らしいものだ。
ただしこのModelクラスを使うと頂点データは遮蔽されておりアクセスできない。 物理演算エンジンに食わせるのにどうしても頂点データが必要なのにだ。
世界中の誰もが同じ問題で悩んでいるようでstackoverflowに回避策が書いてあった。頂点データをGPUに送信した直後にGetData関数でそのまま返してもらうトリッキーなコードでめでたく回避できた。
しかし、時は流れこの方法では動かない環境が登場した。iOSやAndroidだ。こいつらが採用するOpenGL ESはGPUとの通信が一方通行だ。そこで事前に3Dモデルから頂点データを抜き出し別ファイルに保存しておくという一段とトリッキーな方法で回避する。みごと1モデルのファイルが2個になりました。
さらに時は流れた。あるとき謎の不具合が発生。連日連夜のデバッグ作業。原因は片方のファイルの更新を忘れていただけでした。
カプセル化は恐ろしいね!! これオブジェクト指向が悪んじゃないだろ
オブジェクト指向が誤解されて広まったせいだろ サーバクライアントモデルだと
サーバ内部は雪駄下駄でしかアクセスできないから
カプセル化されているようなもの 人間オブジェクトを作った
このオブジェクトを継承した美少女オブジェクトはあらゆるプロパティを隠蔽したい
しかし変態オブジェクトは公開されるべきだ
かくしてオブジェクト指向はクソでした 業務システムでこれやるとだいたいセキュリティホールになる ケースバイケースだろ。プライベートなメンバ変数を定義して、その全てにSetterを用意する阿呆な設計は論外だけどな。 >将来的な改修の際に隠蔽されたデータにアクセスできないと解決できない問題が出てきて、
これってオブジェクト指向が生み出す問題ちゃうやろ? >>2
ゲッタセッタ使えよwゲッタセッタ実装できないほどプライベートならそれはもう本当に使ってほしくないんだろ コード生成こそAIにやらせろ。いいコード書くぞ絶対。 カプセル化というと噛みつかれるけど
独立性を高めるというと黙る不思議 >>22
問題はその精製AIを書くAIが必要な事だ オブジェクト言語は情弱→手続言語は情弱→アセンブラは情弱→機械語は情弱→??? そうは言うがクラス内部でしか使われないクソみたいな変数が外から見えてるようなライブラリ使いたいか? オブジェクトベースかタスクベースかって話じゃないのか >>31
触るとコンパイラ警告を出すだけで十分だと思うけどね。 アホがコード書くから改修が面倒になるだけでオブジェクト指向関係ないだろ 追加の開発がない売りきりだと問題は起きないんだけどね >>28
だな、そして、プログラマーの9割がゴミプログラマーである
ゆえに、「オブジェクト指向は愚かな考え」という結論に至る 鋼鉄の鎧を着たらウンコできなくなって漏らすようなもんだな 結局COBOLが言語として一番素晴らしいつてことか 他人の作ったライブラリを組み合わせてるとよく起きる privateとfinalは要らんと思うがprotectedは必要
継承すれば制約外れるようにしとけば問題ないしカプセル化の問題じゃないよね 美少女オブジェクトを作った
それはオタクオブジェクトと交信すると大金を取得する事が出来た
しかし、やがて管理者が変わり、オタクの他、おじさんオブジェクトとも交信させようとしたが、
結果でオタクオブジェクトが交信しなくなってしまった
同時におじさんオブジェクトも交信しなくなりシステムは停止してしまった
実はオタクオブジェクトとおじさんオブジェクトとの間では衝突を回避する為、美少女オブジェクトは自身の交際情報を彼らに提出していたのだ
このシステムは結局、元にも戻せず破綻してしまった
とか? >>3
カプセル化がわるいのではなく
そのクラスの設計が悪いだけじゃないか
必要なものは外部からアクセスさせるべき 昔、通信ライブラリで送信元の情報がバッサリ消えているのがあったな。
構造体に1個追加させるのに東京と京都を往復しまくって半年かかった。 オブジェクト指向のおかげでプログラミング辞められました(´・ω・`) >大雑把にいうと、教科書の上では素晴らしく、最初は良くても、将来的な改修の際に隠蔽されたデータにアクセスできないと解決できない問題が出てきて、非常に高確率でデスマーチに陥るというのである。医学的にいえば「手術ができない存在」であるといえる。
何言ってんだこいつ カプセル化すれば内部は隠蔽されていても、入出力がはっきり分かれば
それを組み合させて簡単にシステム構築できるんじゃないのか?
まあ、よくわからんが。 >>52
必要な人は少数
必要ない人には触らせたくない
どうするのが正解なの? >>40
宇宙でアムロが新型ガンダムを受け取って乗ったら足を操作する為の装置がなかった
宇宙で戦ってる間は問題なかったが、地上に降りることになって詰みました 変数に関数なんか入れられっかっての
そんなこんなでいつもストレスが(´・ω・`) 俺もこの考えに賛成だ。OOPは要らなかった
では何が問題だったのか、C言語を例に上げると、
文字列操作、リスト、GC、など。
つまりGo言語に行き着くわけだが、
Go言語もなんか違うんだよなw データ構造にメスを入れるならオブジェクト指向じゃなくても大改修にならないか
影響範囲をつかみを把握しづらいことを指摘してるのかな >>57
データベースいじるだけの業務システムだと発生しにくいからな。
深い階層構造になることもないし。
昔某社のエンジンの試験システムでアホみたいに階層を深くしてる馬鹿がいて怒鳴りつけたことあるわ。 >>57
医学的に言えば以下が意味不明だな
医学を知らない奴が考えた文章だろう C++に挫折して、TURBOPascalでプログラミング勉強したんだけど、
おかげで意識せずオブジェクト化という概念を最初から理解できたと思う。
C++に固執してたら何一つ理解せずに終わってたかな。
あれは自由すぎてプログラミング言語としては最悪だね。 >>40
存在が余りにヤバ過ぎるんで∀タイプを地層処分にしたら後代になって発掘されてウエポンベイに牛が詰められた。 情報系じゃないからよく分からないけど、変数とは何かちがうのか。 カプセル化しっかりしてなかったらその前にデスマーチなのでは 業務システム作るだけのプログラマなら、最初からデルファイやC#やJAVAで
はっきりとしたオブジェクトプログラミングしてればいいし、他人の作った定義をそのまま鵜呑みにしてればいいだけ。 単発IDが多いのにこんだけ専門的な話題が成立してるのに驚くw RDBとOOPのインピーダンスミスマッチ
性能問題がついてまわる 外面さえ合わせてしまえば、中はある程度自由に書けるのが利点かと思ってた
継承しすぎるとわけわからんのは困りものだけど 諸悪の根源はC++だろ。オブジェクト自体の定義も自分でできてしまうような自由さが、むしろ初心者プログラマの理解を阻む。
そもそもアメリカではエリートしか使わないような言語なのに、JAVAが出てくるまで日本では、文系Fランや専門卒すらこれで
プログラミングさせてたから最悪。なんでデルファイが日本ではやらなかったのか本当に疑問よ。 関数オブジェクトなんて定義してるプロジェクトには近づくな 人間クラスの排便メソッドがprivateになってんのがおかしいって結論出てただろ >>1
これオブジェクト指向と全然かんけーない。
単に「他人の作ったコードが理解出来ないと直せない」と言ってるだけ。 CPUの種類毎にバイナリデータは変わる事があるはずなのに、バイナリデータしかないというのは謎 >>8
C++のオブジェクト指向実装がそびえ立つウンコだったのや
アランケイのsmalltalkこそ本物のオブジェクト指向 「C++はひどい言語だ。
これをさらにひどいものにしているのは、
水準以下のプログラマーが数多く使用していることで、
またさらに簡単に完全なゴミを作り出せるようになっている点だ。
Gitだけの一発屋のリーナスとかの言葉 >>84
諸悪の根源は言い過ぎだと思うけど、エリートしか使っちゃいけない言語だよなC++は サンデープログラマーの俺には必要無い概念だな
c++もベターc以上の事はやってない
とは言っても業務とか大規模プロジェクトに関わっている人達にはある程度必要なんだろうなとは思う >>27
じゃあそのaiにai作らせれば良いじゃん Adaで作ったF-22は予定通りローンチしたのに
C++で作ったF-35は永遠に未完成で既にスパゲッティ化して手に負えなくなって来てる 俺がプログラミングを始めた小学生の頃
エッチなお姉さんを作ろうとして
おっぱいやオマンコを作っていけばできるんじゃね?と思っていた
しかしプログラミング(BASIC)の勉強をするうちに
そういう"物"を作るのではないと知った
さらにそれから数年後、オブジェクト指向を知って
そういう"物"を作って組み合わせていくことでシステムが完成することを知り
あのときの子供の発想は間違っていたわけじゃないことを知った
別に子供の頃の俺がすごいっていみじゃなく
人間の自然な発想はオブジェクト指向なんだろうなってこと ■ このスレッドは過去ログ倉庫に格納されています