- 1 名前:デフォルトの名無しさん [2020/06/18(木) 23:47:36.69 ID:l/2SQUll.net]
- カプセル化(英語: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)
- 27 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 00:07:21.87 ID:c3NGwjmZ.net]
- 時代はDDDって聞いたんだけど
- 28 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 00:07:51.60 ID:cOWnS532.net]
- 余計な例えは無意味
そもそも変数とか関数とか引数とか理解しとんのか
- 29 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 00:08:22.59 ID:Vry7Dmyh.net]
- じなあガンダムで例えてくれ
- 30 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 00:08:50.90 ID:ih59
]
- [ここ壊れてます]
- 31 名前:xFoN.net mailto: オブジェクト思考は糞
関数の引数と戻り値だけ信用すれば良い オブジェクトに状態持たせるフィールドなんて可読性落ちるだけなのに理解できない一周も二週も遅れてるやつが声高に叫んでるのは笑えるw [] - [ここ壊れてます]
- 32 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 00:09:59.54 ID:DxHcuyZI.net]
- >>4
頂点データは常に見られるようじゃないとダメだろ… レンダリングエンジンとの結びつきどうなってるんだ?
- 33 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 00:11:36.72 ID:A+kahko2.net]
- >>30
>>252 ざっくり見た感じVRAMに送り込んでオリジナルは破棄だな。 もともとXBOX360のフレームワークだからリソースがいまほど潤沢じゃない前提の設計だな。 それがOpenGL ESの「VRAMが書込専用」という追加仕様の襲来で火を吹いた感じだな https://github.com/MonoGame/MonoGame/blob/develop/MonoGame.Framework/Platform/Graphics/Vertices/VertexBuffer.DirectX.cs https://github.com/MonoGame/MonoGame/blob/develop/MonoGame.Framework/Platform/Graphics/Vertices/VertexBuffer.OpenGL.cs
- 34 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 00:12:19 ID:Z/R3v37q.net]
- >>31
そんな仕様変更が入る方がおかしいんじゃないかな
- 35 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 00:12:37 ID:CAQAyB0l.net]
- >>32
そのくらいの仕様変更はザラにある
- 36 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 00:12:54 ID:Vvw9/CQL.net]
- おっそろしーなぁ
- 37 名前:デフォルトの名無しさん [2020/06/19(金) 00:13:25 ID:+NZQ8ymG.net]
- オブジェクト思考って何?
誰か説明して
- 38 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 00:13:53.03 ID:0YXkLCwz.net]
- カプセル化は新人や増援部隊に変な事させない為の仕組み
開発者全員が高度なプロフェッショナルならただの足枷でしかない
- 39 名前:デフォルトの名無しさん [2020/06/19(金) 00:14:23.01 ID:sx6tbUfu.net]
- オブジェクト原理主義者のコードを引き継ぐ事になった時の絶望感は異常
- 40 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 00:15:15.75 ID:yjfNCK7+.net]
- iPhoneアプリ開発に必須のobjective-cやswiftもカプセル化はできない。
人工知能で大流行のpythonもカプセル化はできないようになってる。 これらはアクセス非推奨だがアクセス自体はできる
- 41 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 00:15:51.85 ID:a/1dBbgF.net]
- 「カプセル化は悪」「カプセル化はオブジェクト指向ではない」というのがやっと広まりだした。
- 42 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 00:16:10.62 ID:GyiKM2YL.net]
- 仕様変更の恐ろしさは異常
- 43 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 00:16:29.89 ID:sB9nUpkw.net]
- 未来予測できるが勝負所
- 44 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 00:17:11.14 ID:Xum0r1kt.net]
- >>5
深い階層化って利点あるの?
- 45 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 00:17:23.63 ID:HW2oJRWs.net]
- 怖いですねえ
- 46 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 00:20:35.02 ID:f1TZFQAl.net]
- カプセル化は隠蔽体質ってことですね
- 47 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 00:30:03 ID:EiviKE7C.net]
- >>4
そもそも設計が間違ってるのをオブジェクト指向のせいにしてるんじゃねーよハゲ
- 48 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 00:49:19.41 ID:8/oqYbS2.net]
- >>45
XNA作ったマイクロソフトの超エリートたちですら設計ミスをするくらいオブジェクト指向は難しい。
- 49 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 01:06:57.53 ID:brGXdq3V.net]
- ECS
- 50 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 01:27:35.28 ID:gQU/M+Sr.net]
- > オブジェクト指向の発案者であるアラン・ケイもコーディング規約
> (頭文字にアンダースコアを付けるなどの命名規則)で縛る程度にすることを推奨しており、 > アラン・ケイが関わったオブジェクト指向プログラミング言語にはどれも「private」などという概念はない。 つまり 1. privateという概念(アンダースコアという概念)自体はOK 2. ただしprivateでも外部からアクセスできるようにすること という話
- 51 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 03:21:23.63 ID:sPM5NjRd.net]
- 経験的に言えば、ライブラリや部品的なクラスでは、カプセル化はかなり有効で、
安全になる。 ところがアプリ自体の中にクラスの場合、隠蔽しても余り意味が無い事が 分かって来た。 ファイルツリービューの中のデータを隠して、メインウィンドウのクラスからいじれないように しても、アプリの場合にははっきり言って意味が無い。
- 52 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 04:46:03 ID:8+I0eawj.net]
- >>49
そのアプリを複数人でいじってるんなら、ライブラリやらの恩恵と同じ効果があるんじゃね? カプセル化の是非は、グローバル変数の弊害の話と本質は同じだよね 影響範囲を狭くした方がミスは防げるが、柔軟性は失われる
- 53 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 06:36:33.75 ID:wpvtDg0l.net]
- >>48
ちょっと違うな ST80でもOWでもVWでも共通だが privateはあくまでもプロトコルの一つという設計だから外部からアクセスできるように・・という考え方ではないよ 具体的な扱われ方としてはインスタンス専用のローカルメソッドのような使われ方をする なおprivateプロトコルは全てではないが 他のオブジェクトからコールするとデバッガに落ちるように仕組んでたりする (外部からは使わせないよってこと)
- 54 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 07:02:17.44 ID:wpvtDg0l.net]
- >>49
データを誰が保持するのかって問題はMVCの当初から大問題にはなってたからね 単純にModelが必ず持つという形にすると指摘した問題が必ず発生するから 経緯的にPluggableMVCへと変遷しどこからでもupdateプロトコルを受け付けることができるようになった データはMVCのどれも保持しなくなり、ひとまずの決着がついたが この形式であっても誰がどのようにupdateをかけているのか逐一コーディングしなければならない問題が残ってた そこで現在ではデータを保持するAspectAdaptor系は いわゆるアクセサを書く必要もなくなり通知を受け取るだけで動作するようになっている (updateのためにアクセサを呼ぶなどということはしない)
- 55 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 07:18:54.82 ID:gQU/M+Sr.net]
- >>51
> 他のオブジェクトからコールするとデバッガに落ちるように仕組んでたりする 殆どの言語はprivateにアクセスできる
- 56 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 07:22:21.49 ID:XaRstyom.net]
- OOは業務システム向き
組み込みだと細分化し過ぎるんじゃね?
- 57 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 09:36:31.93 ID:wpvtDg0l.net]
- >>53
目的が違うので private配下のメソッドは外部から呼ばれることを意図しない(ことになっている) のとbehaviorにさえアクセスを許さなかったりする ただこれは言語仕様としてコントロールしているわけではないので あくまでも慣例として扱われてる 適当なクラスを作ってprivateプロトコルに適当なメソッドを組めば好きに外部から呼び出すことは出来る そうは言っても慣例破ってるコードはすぐ見つかってしまうのでまあよろしくないことになる
- 58 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 11:11:36.05 ID:t8sp3Lp3.net]
- >>11
アランケイのは、完璧なものから取り除いていくような感じだったな
- 59 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 11:46:38 ID:gQU/M+Sr.net]
- >>55
private配下のメソッドは外部から呼ばれることを意図しない(ことになっている) 頭文字にアンダースコアを付けるなどの命名規則で縛る程度のも、外部から呼ばれることを意図しない(ことになっている)
- 60 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 11:54:17.24 ID:I4TvFtlH.net]
- >>54
業務システムだとDBいじくるだけだから深い階層構造に関わることはまずないだろ。 DBというグローバル変数をクラスという名の構造体にコピーして、編集して、書き戻すという単純作業の繰り返し。
- 61 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 12:44:14.84 ID:dtaC8DdL.net]
- 隠蔽って言うからおかしくなる
privateは一貫性を守るために変更可能性のスコープをオブジェクト内部に限定するためのものであって、内部状態の秘匿が目的じゃない というかオブジェクトの内部状態が外から分からないようなものはテスト出来ないでしょ ダメだろそんなクラス
- 62 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 16:09:36.39 ID:sPM5NjRd.net]
- >>50
>そのアプリを複数人でいじってるんなら、ライブラリやらの恩恵と同じ効果があるんじゃね? 個々のクラスをじっくり丁寧に作って、データを変更する専用のメソッドをきっちり 作り上げれば安全性は確かに高まる。 これは、人数の多いプロジェクトなら可能だと思われる。 ただ、個人製作のアプリだと、そこまでクラスを作りこむのは時間が掛かりすぎてとても 効率が悪くなる。 結局、個人製作レベルだと、ファイルツリーニューの中のデータを変更する際にやってはいけないことなどの注意事項をどこかのテキストファイルなどに書いておいて データはpublicにしておいて、それに気をつけながら、アプリの他のクラスからでも普通に書き込みアクセスするように した方が開発時間は少なくて済むようだ。
- 63 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 16:12:27.76 ID:sPM5NjRd.net]
- >>59
その気持ちも分かる。 しかし、その一方で、例えば fopen()のようなライブラリ関数を使う際、 FILE構造体の中身までしっかり公開されてなくても、fopenの使い方が しっかり説明されいればそれで十分であり、逆にFILE構造体の中を勝手に見て、 それを前提にプログラムしすぎることは、FILE構造体の中身が変更になった 場合に問題となる。
- 64 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 17:22:18.89 ID:gQU/M+Sr.net]
- >>60
> 結局、個人製作レベルだと、ファイルツリーニューの中のデータを変更する際にやってはいけないことなどの注意事項をどこかのテキストファイルなどに書いておいて それをソースコードの中に書くんでしょ? privateって
- 65 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 17:31:41 ID:I4TvFtlH.net]
- 結論:privateにしたら、必ずgetterを用意しておきましょう。
- 66 名前:デフォルトの名無しさん [2020/06/19(金) 17:34:28 ID:sPM5NjRd.net]
- >>62
昔から言われていることなんだけど、ソースコード以外の場所にちゃんと フローチャートなり、データの構造や関数の関係図、何らかの図など プログラム中に書きにくい注意事項をどこかに予め書いておくと、 プログラムにとても役立つんだ。
- 67 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 22:59:31 ID:wpvtDg0l.net]
- >>60
そこは考え方次第だからねー asyncでいいならファイルツリーはすべてNodeクラス配下で汎用的に扱う方が楽なので 俺ならそうする コードも少なくて済むし扱いやすい 常にsyncって話になるとfsevent見て反映させる カプセル化のメリットは全体像を知らなくても扱えるように理解して努力していれば 結果的にコストが下がることにあるけれど オブジェクト扱ってるのに中身は関数で組んでいる人が混じると割と悲惨なことに(なった)
- 68 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 23:03:14.16 ID:wpvtDg0l.net]
- >>64
それよりもテストコードが含まれてないソースは信用できないね個人的に コードが更新される時ドキュメントも更新されるとは限らないし ドキュメントには本当に必要な情報がなかったりもする・・
- 69 名前:デフォルトの名無しさん [2020/06/20(土) 18:55:53 ID:EGdSCTAj.net]
- こっちでも始まったのか
- 70 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 19:10:33 ID:Zs4RBEp5.net]
- >>66
でもチェックしにくいとこってデバイス絡みや使ってるUIのライブラリの変な仕様のとこだろ テストコードなんて動くの?
- 71 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 19:23:07.65 ID:H+D2eLk6.net]
- >>68
デバイスを使う「ソフトウェアコード」のテストをするんだから、 デバイスのテストをしても意味がないぞ 「デバイス」のテストなのか、デバイスを使う「ソフトウェア」のテストなのか どちらを対象としたテストなのかをはっきりさせよう デバイスのテストはデバイスのテストで別にやる 両方を同時にテストしようとするな
- 72 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 19:47:22 ID:Zs4RBEp5.net]
- >>69
でも全部ひっくるめて正常に動いて欲しいんだろ? どう組んだら正しいのか誰もわからないものでプログラマをぶん殴る口実がほしいと
- 73 名前:デフォルトの名無しさん [2020/06/21(日) 21:47:24.01 ID:yZ1Fm+rk.net]
- >>64
> プログラム中に書きにくい注意事項をどこかに予め書いておく これが必要になる場面って大抵は設計が歪んでいる
- 74 名前:デフォルトの名無しさん mailto:sage [2020/06/21(日) 22:27:56.93 ID:TM3DTGpo.net]
- >>68
>でもチェックしにくいとこってデバイス絡みや使ってるUIのライブラリの変な仕様のとこだろ そういうところを切り出してモックなら動くことを示してソフト側は悪くないって 言い張るための技術だぞ。
- 75 名前:デフォルトの名無しさん mailto:sage [2020/06/23(火) 01:08:56.89 ID:hoXOIHD6.net]
- https://video.twimg.com/ext_tw_video/1273820540352909313/pu/vid/270x478/HZq8qYhba4upqVyw.mp4
- 76 名前:デフォルトの名無しさん mailto:sage [2020/06/23(火) 14:03:05.97 ID:Amhn2FuL.net]
- 頭が悪いやつが多い業界だし、カプセル化は有用だと思うがな
勝手に変更させない、有用に変更しても理解できないので変更しないほうがいいって 2重の意味で
- 77 名前:デフォルトの名無しさん mailto:sage [2020/06/23(火) 15:11:05.61 ID:o6bKn79R.net]
- >>1
そのカリフォルニア大学ソースどこ? むしろ、彼らの作成するソース(github)を見るとオブジェクト指向で、@private(JSDoc)を律儀に記述しているけど。 ん?JavaScript以外?C#やJava? privateをサポートする言語でカプセル化しない馬鹿なんてこの世に存在するの?
- 78 名前:デフォルトの名無しさん [2020/06/23(火) 23:33:42.34 ID:JaUjApVc.net]
- >>74
そういうクラスを作る側が頭が良くて 利用する側がどうせ頭が悪いという傲慢さが オブジェクト指向が批判される原因だと思うわ。 大体 既に書かれたコードの記述で 新規プログラマーのコーディングを制限しようと 言う考えが傲慢以外の何物でもない。 お前らの言う頭の悪い奴は元のクラスのprivateを publicに変えるかもしれないし Personというクラスの隣に Person2と言うクラスを複製してそっちの方をpublicに 変えて利用するかもしれない。 でもそれって止められるわけないだろ? それを言語仕様で止めようとしてる事がどうかしてる 元のクラスが使いにくくて変えたいから変えたいんだよ。 それに5重6重にカプセル化されたオブジェクトなんて 邪魔でしかないんだよ。デバッグしにくいし
- 79 名前:デフォルトの名無しさん mailto:sage [2020/06/23(火) 23:58:42.49 ID:AMcrD26I.net]
- いや、止められるだろ。。そのままリリース出来る方がおかしいだろ
- 80 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 00:33:12.84 ID:Vx2zY5TL.net]
- むしろクラスを作る側が>>76みたいな頭の良い人から身を守るために必要
想定してない使用法でバグった時に責任とりたくないもん Person2に不具合があっても俺には関係ないから好きにやってくれ
- 81 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 00:57:36 ID:I5+T+Giv.net]
- https://video.twimg.com/ext_tw_video/1266492233030627329/pu/vid/720x1280/AvyTiTS0EeNdp3DS.mp4?tag=10
- 82 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 01:13:12.47 ID:ZBvJ9IFx.net]
- カプセル化の弊害とかいいつつ
カプセル化すら理解してなくて草生える
- 83 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 01:57:06.31 ID:W7e3ICMc.net]
- >>76を見てると、オブジェクト指向を批判しているのはバカが過剰に騒いでいるだけなんだなと良く分かるw
- 84 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 02:39:07 ID:gVxDDgwX.net]
- 今一番勢いのある言語であるPythonは完全なプライベートじゃ無いんだよな
- 85 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 03:02:02.88 ID:irp07WaX.net]
- >>81
匿名性のSNSの限界。 記名性だと色々と能力が分かって、無視される。
- 86 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 04:52:29.63 ID:evfa9tXu.net]
- >>76
何がいいたいのか全くわからん。 例えばお前が言ってる頭の悪いやつが、 ローカル変数をグローバル変数に変えるかもしれんよな? そういう場合、なんだっていうんだ? ローカル変数が悪いって話をしてるのか? それを止められないからローカル変数は邪魔といいたいのか?
- 87 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 07:20:27.23 ID:ib1NZqNH.net]
- >>84
まあ、しょうがねぇよなって話じゃん
- 88 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 07:21:13.77 ID:ib1NZqNH.net]
- 初めの書き手が悪いんじゃなくてあくまで変更したやつの責任
- 89 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 12:20:09.25 ID:irp07WaX.net]
- >>76
というか、MFCみたいに修正が推奨されて無い場合は
- 90 名前:除いて、
自社開発のプログラムであれば、能力がある人にはあなたが修正するのを 上司が許可してくれると思うんだ。 もし、修正を許可してもらえないなら、実績が足りて無いか能力のアピールが足りてない。 [] - [ここ壊れてます]
- 91 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 12:31:25.83 ID:bZ0w8eld.net]
- オブジェクト指向の肝は擬人化と依頼だからな
頼む相手の内部状態を勝手に変えないってのは 無茶重要でしょ
- 92 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 13:17:22 ID:U8BVWvkL.net]
- >>88
>オブジェクト指向の肝は擬人化と依頼だからな 初めて聞いた
- 93 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 13:54:42 ID:bZ0w8eld.net]
- 擬人化キャラ(クラス)の関係性で物語を生成する=オブジェクト指向
そんなかんじで習ってそのまま理解してたな ちなみに学校は恥ずかしくて 言えないような底辺学校
- 94 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 14:29:54 ID:+bJy5A36.net]
- 依頼はどことなく委譲って分かるけど擬人化はただのスケベじゃん
- 95 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 14:40:07.82 ID:bZ0w8eld.net]
- >>91
頭わるくてまともな学校にいけない奴らに 教えるために先生が工夫してくれたんだろうね 依頼ってのも困ったら 依存心の高い奴らに教えるのにそういう言い回ししたんだろうね いま思えばなかなか立派な先生だったな 口は臭かったが
- 96 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 15:16:35.37 ID:W7e3ICMc.net]
- >>92
分かりやすく噛み砕いて教える方法としては良いと思うけど、>>88のように一般的に通じるつもりでいきなり独自用語を使うと話が変な方にいくから、不特定多数を相手にするときは一般的な用語を使った方がいいぞ。
- 97 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 16:47:31.01 ID:ZBvJ9IFx.net]
- >>91
本来人間相手にしかに使わない依頼や委譲って言葉を使ってる時点で擬人化してる
- 98 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 16:51:31 ID:ZBvJ9IFx.net]
- 擬人化と依頼のメタファは一般的
オブジェクト指向に限らないけどOOを説明する際によく使われたから Tell Don’t Ask media.pragprog.com/articles/jan_03_enbug.pdf https://martinfowler.com/bliki/TellDontAsk.html
- 99 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 19:00:14.27 ID:z1f+Mb2g.net]
- >>76
> お前らの言う頭の悪い奴は元のクラスのprivateを > publicに変えるかもしれないし > Personというクラスの隣に > Person2と言うクラスを複製してそっちの方をpublicに > 変えて利用するかもしれない。 ねーよw もう少し基礎知識学んでから出直してこい。 まず、ライブラリの中身を書き換えること自体、ありえない。 たぶん、見ず知らずの人達が書いたコードを共有する仕組みから知らないのだろう。
- 100 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 19:25:00 ID:vlqGopWc.net]
- >>96
いや、そもそもできちゃうじゃん そして別にできてもいいじゃん それが嫌だとしたらそれをドキュメントに書いとけよ ソースには書けないし書いても消せるからさ
- 101 名前:デフォルトの名無しさん [2020/06/24(水) 19:30:57 ID:6CkV8gwI.net]
- >>96
いや、周囲や協力会社(依頼元クライアント側プログラマ) にこれやるやつゴロゴロいるんだって ソースファイルでもテーブルでも何でも他人が書いたやつ 複製して仕様変更に対応するんだわ。 privateとかカプセル化なんて笑っちまうよマジで でも意外と何とかなってる、複製したあとはレガシーコードは 全部捨てちまうんだわ 職場で新人研修で「抽象クラスって何のために作るんですか?」 って毎回のように訊かれるけど 「俺にも分からない。必要性を感じたことも、便利だと思った 事も無い。」って正直に答えてる。 オブジェクト指向の入門書に当然のようにabstract紹介 されてるけどそれの有用性を的確に説明している 教科書を見たことがない interfaceのほうは重要性は分かるしちゃんと説明している
- 102 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 19:4
]
- [ここ壊れてます]
- 103 名前:2:39 ID:J59L1bOF.net mailto: >>98
abstractは 上の方の人達が未知の設計概要として会議で使う コーダーじゃない営業や客とのコミュニケーション用 [] - [ここ壊れてます]
- 104 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 19:53:36 ID:GEcMOOIw.net]
- >>75
これだろ https://ja.m.wikipedia.org/wiki/DARPAモデル DARPAモデルとは、インターネットの持つべき通信機能を階層構造に分割したモデルである。 アプリケーション層、トランスポート層、インターネット層、ネットワーク層の4層で構成される。 DARPAモデルという呼称は、インターネットの研究開発を行っていたDARPAに由来する。 元々は確固たる仕様や定義はなく、IPやTCPやUDPなどの仕様中に個々に、あるいは暗黙の前提として存在していたものだが、後からRFC 1122で1つにまとめられた。 IP群はプロトコルとサービスをカプセル化する事によって抽象化する。 通常、より上位層のプロトコルはその目的の達成に役立てるために、より下位層のプロトコルを用いる。 これまでIETFはインターネット・プロトコル・スタックをRFC 1122で定義された4層から変更した事はない。 IETFは7層からなるOSI参照モデルに従うような試みはせず、また標準化過程(Standards Track)にあるプロトコル仕様やその他の構造上の文書をOSI参照モデルに対して参照する事もしない。 https://ja.m.wikipedia.org/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:UDP_encapsulation.svg RFC 3439では、インターネット構造に関して第3章の序文に"Layering Considered Harmful (階層化の有害性)"と題された節が有り、 「階層化」という考え方が概念的および構造的にさまざまな利点を持っているが、 実装面では層単位で同じような最適化が繰り返し発生することによる無駄な処理により効率的な実装を阻害し、複雑化を招くことがあり、 また低層部分のみに存在するデータにアクセスできない場面が発生するなど、 インターネット・プロトコルの目指す「単純化」という原則に反することもあることが明記された。
- 105 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 20:04:30.89 ID:GEcMOOIw.net]
- >>75
ググったら日本語訳もあった www5d.biglobe.ne.jp/stssk/rfc/rfc3439j.html
- 106 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 21:01:40.99 ID:7L466iYI.net]
- >>98
抽象クラスは単なるテンプレ クラスを作る際の約束事を規定できる 具体的には実装忘れやメソッド名を間違えるのを防げる 自分のような忘れぽい人間には役立つ
- 107 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 22:26:02.81 ID:z1f+Mb2g.net]
- >>98
> 「俺にも分からない。必要性を感じたことも、便利だと思った事も無い。」って正直に答えてる。 正直なのはいいけど...なんで、privateの有効性がわからないのに、カプセル化を批判するのか。 無知の批判ほど、初心者が誤解を生む原因になるからやめてほしい。 例えばだよ。 何の言語をよく使うのか不明だが...標準ライブラリってあるじゃん? その標準ライブラリのクラスに「呼び出したら破綻する(内部処理実装用の)メソッドや変数」が定義されていたら、どうする? クラスを使う人に呼び出してほしくない機能はprivateにするべきでしょ。 実装する側の都合だけじゃなくて、クラスを使うユーザーのことも配慮して使うものだよ。 OOPアンチとOOP活用者の絶対的な違いは自作したクラスを使う人のことを深く考えているかどうか。そこだよ。
- 108 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 22:30:44.22 ID:MQA513Hf.net]
- >>103
使う側と作る側が完全に分離した環境に当たったことがない win32apiや.netframeworkを作る人以外にそんな需要ってあるの?
- 109 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 22:31:32.44 ID:evfa9tXu.net]
- >>104
win32apiや.netframeworkを作る人には需要があるって認めたの?
- 110 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 22:32:45.63 ID:z1f+Mb2g.net]
- って、わからないのは抽象クラスかいッ!
なんか、アンカを間違えたような間違えていないような微妙な回答をしてしまった...。 まぁ、抽象クラスは>>102に書かれている通りって事で。
- 111 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 22:34:51.23 ID:MQA513Hf.net]
- >>105
俺が作るならいらん 状態をクラスのインスタンスが内部に保持してしまうのは害にしかならない
- 112 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 22:42:26.10 ID:MQA513Hf.net]
- なんか今までノリでクラスで作ってきたのを止めると物凄くスキルアップするぜ
一度はオブジェクト指向をやってみるのもいいかもなってのは思う クラス構造で便利なものとそうでないものは当然ながらこの世にはあって そのほとんどが実はクラスにしないほうがうまくいくものばかりだ 大半の処理は 入力→処理→出力 の繰り返しであってこれのまとまりが 機能となる ただ極稀にクラス構造で考えた方が便利な構造のものもある 役に立つのはその時だけだ そしてそのケースは極めて稀である
- 113 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 22:43:14.13 ID:z1f+Mb2g.net]
- >>104
.netは勿論、Android、iOSネイティブ、バックエンド node.jsやPython、mbed(組み込み)、 まぁ、一部private機能をサポートしていない環境はあるけど、作る側・使う側の意識は常に持つよ。 .netを知っているってことは、Nugetのことは知っていると思うけど... gradleとか、npmとか、github等と連携させて他人の作ったライブラリの自動追加及びアップデートの仕組みはいくらでもある。 てか、自分で作ったコードですら、作る側・使う側は意識するよ。 過去に作った自分のソースなんて、他人が作ったソースみたいなものだし。 内部実装を理解していないと使えないソースなんて使いこなせるほど俺の頭はよくないよ。
- 114 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 22:44:48.06 ID:evfa9tXu.net]
- >>107
> 俺が作るならいらん つまり、俺が作らないなら、必要だって言ったのと同じことだよね
- 115 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 22:47:38.19 ID:evfa9tXu.net]
- 最初からオブジェクト指向は大規模なものを
複数の人で作るためのもので それをわかってないから、 「俺が一人で作るようなものならいらん」 なんて発言が出てしまうんだよな
- 116 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 22:52:50.78 ID:7L466iYI.net]
- >>109
内部実装を理解していないと使えないソースなんて使いこなせるほど俺の頭はよくないよ。 まあこれだよね 頭いいやつには必要ない技術かもね 凡人には必須だとおもうけどな あと設計思想とかそんな面倒な話じゃなくてシンプルに補完ができるのが楽
- 117 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 22:54:20.40 ID:VGKuFIs7.net]
- >>107
内部に保持するのが良いとは言わんが外部に公開すれば良いってもんでも無いでしょ いつ何時外部から状態が変更されても破綻しないように責任持てと言われても 僕は頭が悪いから無理です
- 118 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 22:55:53.79 ID:evfa9tXu.net]
- そもそもprivateっていうのはコミュニケーションの道具で
privateって書いていなければ、好き放題アクセスしてOKという意味に 捉えられるかもしれないわけだ。 コメントの高度版なのだからコメントなくてもできるのは当たり前 だがそうすると修正が難しくなる 俺が作るなら〜っていうのはコミュニケーションが 必要ないから言える話
- 119 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 22:58:49.48 ID:z1f+Mb2g.net]
- >>112
まぁ、そうだな。 ただ、面白いのが... 頭のいい人がOOPに漬かると、余裕ができた分、コンピューターの仕組みにとらわれずエンドユーザーの事を全力で配慮した品質の高い製品を作れるようになる。
- 120 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 22:59:48.33 ID:z1f+Mb2g.net]
- アンカまた間違えた...
- 121 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 23:00:40.93 ID:z1f+Mb2g.net]
- 間違えてなかった。もうダメだ...
- 122 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 23:26:13.24 ID:MQA513Hf.net]
- >>113
構造体でまるっと渡してやるよ
- 123 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 23:27:50.80 ID:MQA513Hf.net]
- >>111
逆だな デカければでかいほどオブジェクト指向で組むのはやめた方がいい 内部の状態遷移を誰も理解できない
- 124 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 23:31:43.79 ID:MQA513Hf.net]
- そもそもさ
クラスで状態を保持するソースってさ 実装全部見て 何やるとどう状態遷移が起こるのか把握しないと使えないじゃん これが最高にダルイ もう年取ったしこんなの付き合ってらんない面倒臭くて
- 125 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 23:32:23.15 ID:fkg3GZzF.net]
- 単なるモジュール切り離しのための技術の一つだよ。
バカが騒ぎまくったせいでクソみたいなインターフェイスによる切り離しで 逆に見通しが悪くなることが多くなった。 細かい粒度で使うような技術じゃない。
- 126 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 23:41:46.40 ID:MQA513Hf.net]
- >>121
いや、単純に面倒臭いだけでメリット皆無じゃん
- 127 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 00:13:01.48 ID:JeYxH76v.net]
- 内部に状態変数をもたれたらグローバル変数の比ではないほど厄介。
単体テストやデバッグが壮大なことになる。
|
|