オブジェクト指向ってクソじゃね?
■ このスレッドは過去ログ倉庫に格納されています
カプセル化(英語:encapsulation)とは、オブジェクト指向を構成する概念の一つで、
オブジェクト内部のデータを隠蔽したり(データ隠蔽)、オブジェクトの振る舞いを隠蔽したり、
オブジェクトの実際の型を隠蔽したりすることをいう。
偏差値の低い学校向けの情報処理系教科書において「大変すばらしいものであり絶対に使うように」と大体的に宣伝された。
一方、カリフォルニア大学バークレー校の有識者を中心としたインターネットを作った人たちは「階層化の有害性」として
「絶対に使うな」としている。大雑把にいうと、その時は良くても、将来的な改修の際に隠蔽されたデータに
アクセスできないと解決できない問題が出てきて、結果的にデスマーチに陥るというのである。
オブジェクト指向の発案者であるアラン・ケイもコーディング規約(頭文字にアンダースコアを付けるなどの命名規則)で
縛る程度にすることを推奨しており、アラン・ケイが関わったオブジェクト指向プログラミング言語にはどれも「private」
という概念はない。
https://monobook.org/wiki/%E3%82%AB%E3%83%97%E3%82%BB%E3%83%AB%E5%8C%96 >>617
GUIの座標とか描画とか、共通関数にするよりもスーパークラスに持たせた方が共通処理と分岐処理が別れて、分岐判断の引数とか減るだろ?
別にオブジェクト志向言語じゃなくても構造体でも出来るし、事実、WindowsだってCで書かれてるけどな >>618
いや別に分岐が必要な仕様じゃないんだけど >>619
分岐が必要な仕様じゃないってことは、
分岐が必要な仕様の場合は? >>622
なんで不分岐が必要ない仕様とか言い出したの?
自分が都合がいい例にしたかった?w >>623
いや、テメーで勝手に分岐が必要なブッサイクなクラス作っておいて
それはないなと
それにクラス構造で分岐しないでくんない?
読み辛い
はっきり言ってクソ
仕様書にどんな条件で分岐してるのか書きにくい
控えめに言って死ね >>623
こういう奴がパラダイムの違いを理解しないまま書くからOOPが害悪になるんだよな windowsでは普通にイベント分岐処理でもswitch文使う
それを隠蔽化するために仮想関数にして実現するどうかは作るヤツのセンスで決まる >>626
それすげーやめてほしい
こっちはテメーが作ったただでさえうんこみたいな設計書に
そう書いてあるから見に行ったのに
そのとおり作ってないとか設計書ゴミ箱に捨てんぞ糞が いや、実際にWM_xxxxに対するcase文てんこ盛りだけど。Windowsの低レベルプログラムは。 >>628
> いや、実際にWM_xxxxに対するcase文てんこ盛りだけど。
オブジェクト指向で作らないからそうなる MFCのメッセージマップは嫌いだった。
switchのほうが100倍分かりやすい。 MFCが出てくる前は、Cでゴリゴリ書いてたのよ
MFCが曲者っつー話はさておき、
Cでクライアントプログラムを書くわけだが、Windows自体はOOそのものの思想で作られていて、ウインドウクラスの登録から始まる >>626
>windowsでは普通にイベント分岐処理でもswitch文使う
pedzold では終始一貫して switch なのは、ちょっとどうかな、と当時でさえ思っていました
>それを隠蔽化するために仮想関数にして実現するどうかは作るヤツのセンスで決まる
今思うに、これは悪手なのではないかと >>631
>Windows自体はOOそのものの思想で作られていて、ウインドウクラスの登録から始まる
それ、今でもよくわからないですね
::RegisterClass() ってコンストラクタに該当するのですか?なぜ ::CreateWindow() とは別に定義したのでしょうか?私はこの二つはラッピングしちゃってます… WindowsをCで書くわけにはいまさら中々いかないだろう。
かといってgcのある言語やインタプリタのようにアプリ寄りの言語で書くのは不可能だろ。
そうやってnative codeを出せかつOSの記述も(苦労するが何とか)記述可能な言語は
消去法でC++しかなくなる。DとかRustじゃ無理。
また、Windowsと言う位だから、上位には何らかのOOP GUI IFを提供しなければならない。
別にC++のOOP機能が優れていたからWindowsがC++が記述されたわけではない。
ここ勘違いしないように。 WindowsがOOそのものの思想、と言うのはハンドルまみれなAPI群があるので素直に同意できないけど、ウィンドウ周りは多少は頑張った感あるよね。
>>633
ウィンドウクラスとウィンドウを別管理にすることで、同じウィンドウクラスを使い回す時にメモリが節約できるというメリットがあるかと。 シグナルが何とかならないかと思うけど
atomとかもう使いたくない >>526さんへ
示された所じゃなくて
その下に有ったリンク先を読んで解った事が有った
https://qiita.com/hiruberuto/items/26a813ab2b188ca39019
読んでいて何が自分に難しいのか?
関数型の場合
処理対象全域を考えて関数で並ぶように作らないといけない
副作用やその他の物を一時に頭に入れて整理し無いといけない
(リンク先にはそうではないと書かれているが自分にはそう見える)
けどオブジェクト指向の場合
対象となる処理を分割して個々に作っていく
分割して個々に作っていった物を連携させて
最終的にはその集合体が出来上がれば機能する
という方が自分に向いている
頭が悪い人間と言うのは広く色んな要素が一編に出て来る物の状態を正確に把握して
それを組み立てる
というのが苦手なのよ
関数型プログラミングは間違いなく
使える人が限られる
そういう物になるだろあなぁ
でもc++なんかでも標準ライブラリーに既にそれっぽいのが有るから
使える程度には理解しないといけなくなるんだろうねぇ
その程度ならなんとかなるかなぁ(笑)
何にしても参考になりました >>637
バカじゃん
テメー以外の奴が作ったときに
privateにされたらそれでしめーだろーが
そういう当たり前の想像力が欠落してるからテメーは何考えても
ダメダメのうんこちゃんなんだよ メソッド呼ぶたびにクソクラスの内部のウンコがどうなってるのか
ケツアナほじって掻き出さなきゃいけねーんだよ 標準ライブラリのprivateメソッドとか
もうソースコード読みまくりだからな >>635
>ウィンドウクラスとウィンドウを別管理にすることで、同じウィンドウクラスを使い回す時に
同じウィンドウクラスを使いまわすっていうのが、そういうことをやる機会があるかどうか、という点でいまいち、なんです
つまり現状のウインドウクラスにてウィンドウプロシージャを設定する、というのが疑問でして、ウィンドウプロシージャが ::CreateWindow() の引数だったら、使いまわす、ってことも検討したかもしれませんが >>637
foreach, map, reduce, filter などを使うことによって、
for ループやif分岐や一時変数を使う助長で古典的な書き方から脱却し
リストの要素間の多対応・変換を宣言的に記述し切っていく、
既存言語に拡張されつつある関数プログラミングパラダイムの
限定的でも美味しいとこ取り的な使い方からはじめても全然いいんジャマイカ あと、詳しく書くと長くなるので一言ずつ書くと
繰り返しではなく末尾再帰を使えるところでは活用する
クラスを設けて多様性をあらわすのではなく、クロージャーや部分適用で簡潔に表現する
遅延評価や関数変換を使って有効なところで使う
とか 関数型とオブジェクト指向は実は相性がよくて、
オブジェクト指向でオブジェクトとしての構造を
そしてオブジェクト指向の中で使う関数は関数型と
組み合わせて使うのが最強なんだ >>644
だからそれはレイヤやグレインの観点から上手くいかないんじゃないかって
上で書いたのに。
上手くいく方法があったら披露してよ 末尾再帰の話が出てきたから、知識の浅い人に説明しておくと
関数型は再帰で実装するから手続き型のループを使う方法よりも遅いという常識を
特定の条件を満たしている場合にループに変換することで、遅くならない
というもの。決してループよりも速くなるわけではない >>645
何ができたらうまくいくってことになるんだ?
俺にとっては開発が楽になることがうまくいくことだ
楽になってるのでうまくいっている >>644
あとcontinuationとかyieldとか使うと幸せになることがたまにあるぜよ >>647
何の言語で何をどう作ってんだか知らないが
上手く言っているなら方法論を披露プリーズ >>650
方法論ってなにがほしいのか知らんが、
関数型言語で作ったライブラリは状態を持たないから
汎用的な関数ライブラリになる。
それを便利にオブジェクトで使用する オブジェクト指向のメリットは説明できたかい?
定期的に貼らないと関係ないこと主張する奴がわくからな
これが説明できないならクソ オブジェクト指向のメリットは状態を
簡潔にわかりやすく持たせることができる
アルゴリズムならともかくシステムから
状態をなくすのは不可能なので
それをどれだけ直感的に扱うか不可欠になる
それが関数型に対するオブジェクト指向のメリット OOPのメリットを教えてくれる奴なんていくらでもいたよな
それでOOPが普及して
ふと気付いたらメリットが何だったのか思い出せない
ここでまたメリットを教えられても無限にループするだけだ >>656
そう。3歳の子供でも、リンゴとミカンの色や形
犬や猫の鳴き声の違いぐらいわかるだろう。
それぐれいオブジェクト指向は人間の思考と一致している 型クラス、クラスscope、オブジェクトscope,
同じ名前の多態(振る舞いの違い)、
継承によるあっちこっちに無難格納したソースファイルの
似たmethon部分の短冊のような共有による依存性のジャングル
これらについて理論的、科学的に有効性を述べないとだめだよ そう、そしてそれらがある程度規模の大きく複雑な
アプリケーションレイヤのソフトウエアの構造表現として
どう有効なのか理論的、科学的に述べないと… 確実にメリットがあるなら人には教えないで独占する
それが理論的で合理的
確実ではないギャンブルなら人に教える オブジェクト指向は低学歴にはムリ
それはあってる
オマエも含めてな たまに見るけど100%でない=0%の人の思考はどうなってんだろうね 低学歴知恵遅れが自分を大きくみせようと
必死なのはわかる だいたいわかる
ウンコスクリプトしか使えないような低学歴知恵遅れが
ムダにオブジェクト指向あげしてる 1bit思考の中で最悪なのは、需要と供給
買う方が100%自己責任と思ってるから売ってる側は罪悪感0 その論点から起こしてだね、
オブジェクト指向の有効性を非論理的、寝技的に布教しようとするのは
いくらなんでももう、無理があるよ ここの議論でもそうだけどカプセル化とかインターフェイスに対するプログラミングとか
ここの要素について話すのは意味があるが
「オブジェクト指向」って言葉でまとめると途端にクソ議論になる。
その意味ではやっぱり失敗だろう。 >>672
その辺はポジティブな意味合いが強いからな
ただメリットがあるからってデメリットがどうなるかは別問題として カプセル化とかは「学習コスト」だから100%ネガティブ
コストを消費する代わりに何かメリットがないとポジティブどころか中立にもならねえ 今になって思うのは、オブジェクト指向にまつわる説明で特徴的な何々は何々であるだから何々があるはずだ的な事は製作者側の考え方の根本だったんだろうな。
ここに共感してないから触ってても疑問がつきまとう。
それでもってこういう考え方をする奴は布教的な奴が多い。こういう奴らは本当本当に嫌いだわ。人のその後に対する考えなんてみじんも無い。
例えばウェブ上で人気の言語的なランキングで上位に入ってる言語と周りを見渡して実際触られる言語の食い違いがひどい。
他の奴の意見見てると大体同じ感覚で変な笑いがでる。 オブジェクト指向の宗教的側面と、Rubyの宗教的側面がかけ合わさって
ドン引きするレベルの狂信者が出現した
もはや言語は死につつあるのに狂信者は毎日板を荒らし回ってる >>674
学習コストはなんにでも適用できる
一般的すぎて無視できる
プログラムを作るにはカロリーを消費すると
言うようなもの、そらそうだで終わり カプセル化してしてデータを閉じ込めることこそ
オブジェクト指向の真髄、データに対する責務を
集約する事でプログラムを作りやすく堅牢で
メンテナンスしやすくできる >>678
コストがあるから見返りにメリットが必要だったんだが
コストを無視するならもうメリットがあってもなくてもいいぞ >>680
一般論過ぎてオブジェクト指向の話になってないやん 赤信号なら止まると良いぞと言ってるようなもの
当たり前やん オブジェクト指向テクニックを使うと外から壊されにくい
堅牢なデータ構造を作ることができてプログラムの
完全性を保証できる、オブジェクトを組み合わせて
より大きなプログラムを作れるっていうのが
オブジェクト指向のメリット 当たり前すぎるってあれだよな
反証不可能ってやつ
反証したい勢力と対立煽りするくらいがちょうどいいんだよな データ隠蔽が有害っていうのは嘘だ
データは隠してなんぼ、オブジェクトを使う側に
データの存在を意識させないようにする事で堅牢な
プログラムを構築できる 大規模開発はオブジェクト志向が、
とか喧伝する低偏差値信者もおとなしくなり、
一歩下がって、そんなに良いものだったっけ?と振り帰られる雰囲気がでてきたのは良いこと
いつまでも熱狂信者の思惑通りにはいかないよ
時がたてば、本当にコストペイするものだけが生き残る >>685
テストもできないのが不味い
結局使用する側が状態を意識しなくてもいい造りなら問題はおきない
でもinitメソッド連発で呼ばれると死ぬだろ現実
initメソッド呼んだんだからどんな状態であれ初期状態に移行しろよ
ってのが呼ぶ側の主張 >>687
> でもinitメソッド連発で呼ばれると死ぬだろ現実
> initメソッド呼んだんだからどんな状態であれ初期状態に移行しろよ
どんな場合でも初期状態に移行すればいいだけでは? >>691
別スレッドでアクセスさせなければいいだけ >>690
でも実際はハードに近い部分のinitだったりするとそうはいかないケースがあるよね?
って可能性が想定できないなら君は設計を語るレベルにないんじゃない? >>694
自分の都合がいい条件じゃないと当てはまらないと
認めているようなもんじゃないかw >>695
いやいや、この場合そういうケースがあることを説明できればいいよね >>696
じゃあそういうケース以外には当てはまらないってことでいいよね
例外中の例外なんてどうでもいいわ メソッド呼ぶほうが呼び出し順にナーバスな設計というのが糞
内部を隠蔽できてねーやんというだけのこと >>697
問題はオブジェクトが状態を内包しちゃってることなんだけど? んでそれを踏まえて
お前のクソクラスは息してんの?
って話
レアケースだから死ぬわってお前
言ってるように聞こえるけど
バカなん? >>689
うるせぇエビフライぶつけんぞ
,.、,、,..,、、.,、,、、..,_ /i
;’`;、、:、. .`゙:.:゙`’’’:,’.´ -‐i
‘、;: …: ,:. :.、..; .;;.‐’゛ ̄  ̄
ヽ(´・ω・)ノ
| /
UU >>700
オブジェクトが状態を内包するか
オブジェクトの外に状態を置くかの違いでしか無いですね >>703
だからその一点でクソだって言い続けてるじゃん
カプセル化がどうとかバカの妄想だろ
テメーの状態がわからねーのが一番のリスクなんだよ
何がカプセル化だよ
早く死ねよ localなデータを局所に隠蔽するべきなのはソフトウエア工学上、
当然のことでカプセル化の専売特許ではない。
ほぼすべての最近の言語はlocal scopeを持っている。
だがオブジェクト指向のカプセル化によるデータの内包とアクセサは
他の言語の持つモダンな階層的scopeに管理工学的にはるかに劣る。
ここ勘違いしないように。 まあ、forループの回数カウンタなんかローカルで充分だしな。 >>704
ようするにテストはプライベート変数を見たいってだけですよね?
テスト以外では必要ないですよね
カプセル化バンザイですよね? どれくらいのアクセス度がいいかはそのクラスのそれぞれによるところはある。
STLのvectorなんて見方によってはかなりオープンだけれどあれはあれで適切な開け方。 内部の状態が心配なら
ちゃんとクラスに内部の状態を(コンポジションなら当然再帰的に)ダンプする関数ぐらいつけてんだろうな
つけてないならお話にならない
外部で状態を管理して
外部で構造体を監視するのと
そう変わらない >>710
テストだけではないな
その関数が同一の結果を返す条件を固定したい
っていうかできねープログラムなんてぶっちゃけクソもいいとこだろ 仕事関係なく趣味でソフト作ったやつの意見は尊重できる。仕事だけで横文字多様してる奴のはフィルター推奨だな。 本当にそれは状態として動的に管理すべき対象なのか
十分吟味してないだろ >>716
ん?
じゃあ、クソインスタンスがどんな状態でメソッドを呼んでも絶対同じ結果返すんだな?
その時点でメンバ変数いらねーけど ■ このスレッドは過去ログ倉庫に格納されています