カプセル化(英語:encapsulation)とは、オブジェクト指向を構成する概念の一つで、
オブジェクト内部のデータを隠蔽したり(データ隠蔽)、オブジェクトの振る舞いを隠蔽したり、
オブジェクトの実際の型を隠蔽したりすることをいう。
偏差値の低い学校向けの情報処理系教科書において「大変すばらしいものであり絶対に使うように」と大体的に宣伝された。
一方、カリフォルニア大学バークレー校の有識者を中心としたインターネットを作った人たちは「階層化の有害性」として
「絶対に使うな」としている。大雑把にいうと、その時は良くても、将来的な改修の際に隠蔽されたデータに
アクセスできないと解決できない問題が出てきて、結果的にデスマーチに陥るというのである。
オブジェクト指向の発案者であるアラン・ケイもコーディング規約(頭文字にアンダースコアを付けるなどの命名規則)で
縛る程度にすることを推奨しており、アラン・ケイが関わったオブジェクト指向プログラミング言語にはどれも「private」
という概念はない。
https://monobook.org/wiki/%E3%82%AB%E3%83%97%E3%82%BB%E3%83%AB%E5%8C%96
探検
オブジェクト指向ってクソじゃね?
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2018/08/24(金) 13:32:09.36ID:ifygL6bT295デフォルトの名無しさん
2018/09/27(木) 08:20:57.92ID:BciEc+9A 昔はgetter/setterを使うべきと言ってたような気がする。
でもその時にそれに疑問を持っていた人達もいたと思うんだ。
結局、クソなのはこういう手法が良いですよという言を真に受けて無理に採用する所じゃね?
このなんとかキブスが自分にぴったりくるなら採用すれば良いし、おかしいと思うなら採用しなくて良い。
オブジェクト指向も一緒でぴったり来てねえのに採用するのは良くないと思う。
でもその時にそれに疑問を持っていた人達もいたと思うんだ。
結局、クソなのはこういう手法が良いですよという言を真に受けて無理に採用する所じゃね?
このなんとかキブスが自分にぴったりくるなら採用すれば良いし、おかしいと思うなら採用しなくて良い。
オブジェクト指向も一緒でぴったり来てねえのに採用するのは良くないと思う。
296デフォルトの名無しさん
2018/09/27(木) 08:24:56.86ID:emgF57xx グローバル変数をそのまま使うよりは
ゲッターセッターをかぶせた方がマシだけど
使わないにこしたことはないってこと
ゲッターセッターをかぶせた方がマシだけど
使わないにこしたことはないってこと
297デフォルトの名無しさん
2018/09/27(木) 09:26:17.13ID:DSKWvsHE >>294
状態を持つと単純にテストがしにくい
あるクラスにprivateでドキュメントにも記述のないメンバ変数が10個あって
その内包するクラスにもメンバが10個あって・・・なんてプログラムだと
そのクラスの持つ状態は10*10*・・・
みたいに増えていく
完璧にプログラムを制御しようとすると
その全てを把握しなければならない
実際にはそれは不可能なのでオブジェクト指向的に組んだプログラムはそもそもバグっている
状態を持つと単純にテストがしにくい
あるクラスにprivateでドキュメントにも記述のないメンバ変数が10個あって
その内包するクラスにもメンバが10個あって・・・なんてプログラムだと
そのクラスの持つ状態は10*10*・・・
みたいに増えていく
完璧にプログラムを制御しようとすると
その全てを把握しなければならない
実際にはそれは不可能なのでオブジェクト指向的に組んだプログラムはそもそもバグっている
298デフォルトの名無しさん
2018/09/27(木) 09:32:35.44ID:wRik+4En >>295
あんたは使うべきの意味を理解してないよ
使うべきっていうのは今も一緒。
まずクラスのpublicフィールドを直接読み書きしたらいけないというルールがある。
そしてもう一つ、クラスのインターフェースを頻繁に変更してはいけないというルールがある
この2つのルールにより、publicフィールドを直接読み書きしていて、あとから読み書きに
何かしらの制限を書けたくなったときにgetter/setterに置き換えたらインターフェースが変わってしまう。
例えば obj.foo だったものを obj.getFoo() に書き換えないといけない
だから常にgetter/setterを使いましょうと言われていた
だけど今はプロパティを備えた言語ができた。
プロパティを備えた言語であれば、クラスのpublicフィールドというインターフェースを変えることなく
getter/setterにできるためあえて禁止する理由がなくなった
(obj.foo = 1 とかいて obj.foo に代入してるように見えて実は関数呼び出しになってる)
今はインターフェース(名前)を変えることなく、フィールドからgetter/setterに変更できるので
言われてないだけ。でもこれはプロパティを備えた言語に限った話
あんたは使うべきの意味を理解してないよ
使うべきっていうのは今も一緒。
まずクラスのpublicフィールドを直接読み書きしたらいけないというルールがある。
そしてもう一つ、クラスのインターフェースを頻繁に変更してはいけないというルールがある
この2つのルールにより、publicフィールドを直接読み書きしていて、あとから読み書きに
何かしらの制限を書けたくなったときにgetter/setterに置き換えたらインターフェースが変わってしまう。
例えば obj.foo だったものを obj.getFoo() に書き換えないといけない
だから常にgetter/setterを使いましょうと言われていた
だけど今はプロパティを備えた言語ができた。
プロパティを備えた言語であれば、クラスのpublicフィールドというインターフェースを変えることなく
getter/setterにできるためあえて禁止する理由がなくなった
(obj.foo = 1 とかいて obj.foo に代入してるように見えて実は関数呼び出しになってる)
今はインターフェース(名前)を変えることなく、フィールドからgetter/setterに変更できるので
言われてないだけ。でもこれはプロパティを備えた言語に限った話
299デフォルトの名無しさん
2018/09/27(木) 09:32:48.24ID:DSKWvsHE んで思うのが
どうもアメリカらしくないなと
あれだけメリットとデメリットと数値化にこだわる国がなんでこんな丼勘定やねんと
オブジェクト指向なんて出回った頃にはもうすでに向こうではプログラミングは
無意味な公共事業の一環になっていたのではないか?
そしてそれにはもはや意味がなくて
できるだけ時間がかかる方法だけが採用されたと
どうもアメリカらしくないなと
あれだけメリットとデメリットと数値化にこだわる国がなんでこんな丼勘定やねんと
オブジェクト指向なんて出回った頃にはもうすでに向こうではプログラミングは
無意味な公共事業の一環になっていたのではないか?
そしてそれにはもはや意味がなくて
できるだけ時間がかかる方法だけが採用されたと
300デフォルトの名無しさん
2018/09/27(木) 09:34:56.57ID:wRik+4En >>297
オブジェクトが状態を持つとテストがしにくいからといって
オブジェクトに状態を持たせなかったとしても、
状態を持ってるアプリケーションから状態を消し去ることは不可能なわけで
どこかに状態が存在するので、結局その部分のテストはしにくくなるよ
単にテストしにくい場所が変わるだけの話
オブジェクトが状態を持つとテストがしにくいからといって
オブジェクトに状態を持たせなかったとしても、
状態を持ってるアプリケーションから状態を消し去ることは不可能なわけで
どこかに状態が存在するので、結局その部分のテストはしにくくなるよ
単にテストしにくい場所が変わるだけの話
301デフォルトの名無しさん
2018/09/27(木) 09:35:52.22ID:wRik+4En302デフォルトの名無しさん
2018/09/27(木) 09:45:20.17ID:DSKWvsHE >>300
まず、それが見えているかどうかが問題
引数から渡す形ならドキュメントに記述を強制できる
さらに同じ引数で実行したらなるべく同じ結果が返って来ることも保証できる
これで気をつけるのはファイルアクセスやDBアクセス、日時、通信などに限定できる
オブジェクト指向は全てのクラスが失敗作であると言える
まず、それが見えているかどうかが問題
引数から渡す形ならドキュメントに記述を強制できる
さらに同じ引数で実行したらなるべく同じ結果が返って来ることも保証できる
これで気をつけるのはファイルアクセスやDBアクセス、日時、通信などに限定できる
オブジェクト指向は全てのクラスが失敗作であると言える
303デフォルトの名無しさん
2018/09/27(木) 09:59:43.55ID:wRik+4En304デフォルトの名無しさん
2018/09/27(木) 10:51:21.68ID:zzHSqWZa オブジェクト指向を捨てたGO言語を使おうってこと?
305デフォルトの名無しさん
2018/09/27(木) 11:05:48.54ID:fvjtmZUM 実は倍精度浮動小数点数のインスタンス変数があったら2^64個の状態があるって話だ
もしくは10x10x10と10+10+10がほぼ一緒の値という主張だよ
もしくは10x10x10と10+10+10がほぼ一緒の値という主張だよ
306デフォルトの名無しさん
2018/09/27(木) 11:44:32.68ID:emgF57xx307デフォルトの名無しさん
2018/09/27(木) 11:52:41.46ID:DSKWvsHE >>306
理由が全くねーじゃん
理由が全くねーじゃん
308デフォルトの名無しさん
2018/09/27(木) 12:15:48.09ID:zzHSqWZa >>306
何年か前にOOPのそのトレーニングやったけど
今にして思えばおかしなことをしてたなって思う
素直にGO使ったほうがいいよ
今は制約を気にせず非常に楽にコードが書ける
それでいてOOPのころの糞コードからかなり離れている
GOのおかげ
何年か前にOOPのそのトレーニングやったけど
今にして思えばおかしなことをしてたなって思う
素直にGO使ったほうがいいよ
今は制約を気にせず非常に楽にコードが書ける
それでいてOOPのころの糞コードからかなり離れている
GOのおかげ
309デフォルトの名無しさん
2018/09/27(木) 12:17:39.22ID:zzHSqWZa GOのtypeは非常に見通しがいい
c/c++のヘッダファイルはなんだったのかと
c/c++のヘッダファイルはなんだったのかと
310デフォルトの名無しさん
2018/09/27(木) 12:19:15.86ID:99b9Jx0M 状態を持たないオブジェクトwww
もはやオブジェクトちゃうやんw何の受け売りやそれw
もはやオブジェクトちゃうやんw何の受け売りやそれw
311デフォルトの名無しさん
2018/09/27(木) 12:24:21.66ID:nvNAA/EB アクセスパターンを限定化する
これを理解出来ないなら
オブジェクト思考プログラミングはし無い方が良い
どういう訳か
凄まじい自信の有る人程解っていない
というのがこの界隈
これを理解出来ないなら
オブジェクト思考プログラミングはし無い方が良い
どういう訳か
凄まじい自信の有る人程解っていない
というのがこの界隈
312デフォルトの名無しさん
2018/09/27(木) 12:31:34.84ID:zzHSqWZa OOPで良いとされているが一番の間違いは
単機能の小さなクラスを沢山作ること
これはクラス数の爆発を産んでるので一番の害悪
例えば特定のファイルを読むためのクラス
そしてそのインターフェイスとDI用のクラスとテストケース
本当にこれが無駄
内部の状態に依存せず単機能でいいなら関数でつくればいいと気が付いた
単機能の小さなクラスを沢山作ること
これはクラス数の爆発を産んでるので一番の害悪
例えば特定のファイルを読むためのクラス
そしてそのインターフェイスとDI用のクラスとテストケース
本当にこれが無駄
内部の状態に依存せず単機能でいいなら関数でつくればいいと気が付いた
313デフォルトの名無しさん
2018/09/27(木) 12:37:21.63ID:emgF57xx314デフォルトの名無しさん
2018/09/27(木) 12:43:37.80ID:tnNln14X >>313
それはOOP自体が悪いからそう見えるだけ
クラス数の爆発のほうが本当の害悪
上のトレーニングもクラスをちいさくする良い理由の一つとして
エディタの一画面にはいるから…
クラスが一ファイル内にないといけないその言語の制約だろう
パッケージ内に在ればいい言語に乗り換えよう
それはOOP自体が悪いからそう見えるだけ
クラス数の爆発のほうが本当の害悪
上のトレーニングもクラスをちいさくする良い理由の一つとして
エディタの一画面にはいるから…
クラスが一ファイル内にないといけないその言語の制約だろう
パッケージ内に在ればいい言語に乗り換えよう
315デフォルトの名無しさん
2018/09/27(木) 12:47:39.73ID:tnNln14X クラスが小さいと困ることがある
インスタンス変数を2つに絞るのは愚か
確実にクラス設計が困難になる
変数をどこが持つべきかを設計しないといけない
そしてそれが間違っていた場合大規模な再設計とコーディングが必要になる
中程度のクラスにある程度必要とされる変数が入れておく方が開発工数は減る
インスタンス変数を2つに絞るのは愚か
確実にクラス設計が困難になる
変数をどこが持つべきかを設計しないといけない
そしてそれが間違っていた場合大規模な再設計とコーディングが必要になる
中程度のクラスにある程度必要とされる変数が入れておく方が開発工数は減る
316デフォルトの名無しさん
2018/09/27(木) 12:49:58.82ID:tnNln14X 状態を持たない
そもそもが小さい
ならクラスじゃなくて関数を使え
そもそもが小さい
ならクラスじゃなくて関数を使え
317デフォルトの名無しさん
2018/09/27(木) 12:53:47.09ID:99b9Jx0M318デフォルトの名無しさん
2018/09/27(木) 12:55:53.67ID:tnNln14X319デフォルトの名無しさん
2018/09/27(木) 13:18:51.56ID:M9UbUXxK TCP接続をOOPで書くとして、オブジェクトの外側でTCPの例の状態遷移を気にする必要あるんかいな
320デフォルトの名無しさん
2018/09/27(木) 14:18:04.82ID:mMx24hKT 不変オブジェクト自体が一つの状態であることは確かだと思うが、語弊がありそうだな。
可換原則的には互換性のある小さなクラスをたくさん作る、が正しいだろうけど、
実際にそれすると、とんでもないバカが現れて瞬時に全壊するのも見たことあるし。
やっぱり一概には言えないと思うわ。
可換原則的には互換性のある小さなクラスをたくさん作る、が正しいだろうけど、
実際にそれすると、とんでもないバカが現れて瞬時に全壊するのも見たことあるし。
やっぱり一概には言えないと思うわ。
321デフォルトの名無しさん
2018/09/27(木) 14:21:34.40ID:emgF57xx322デフォルトの名無しさん
2018/09/27(木) 15:03:29.89ID:DSKWvsHE >>319
気にする必要が無いように組んでもいいし組まなくてもいい
でもテストは全状態に対して行わなくてはならない
現状はおそらくそれをやってる奴が少ないのがまずい
ここではさもやるのが当然とばかりに主張はするがそのテスト方法は提案すら挙げられない雑魚
気にする必要が無いように組んでもいいし組まなくてもいい
でもテストは全状態に対して行わなくてはならない
現状はおそらくそれをやってる奴が少ないのがまずい
ここではさもやるのが当然とばかりに主張はするがそのテスト方法は提案すら挙げられない雑魚
323デフォルトの名無しさん
2018/09/27(木) 15:09:59.98ID:wRik+4En はっきりさせておかないといけないのは
オブジェクト指向と関数型で条件が違う比較をしてるってこと
つまり
「オブジェクト指向で状態を扱う必要がある問題」
VS
「関数型言語で状態を扱わない問題」
という違った問題で比較している
アプリケーションから状態をなくすのは不可能なので
「関数型言語で状態を扱う問題」を解かなければいけないのだが
なぜか状態はすべてなくすことができるんだという間違った前提で
状態がない優しい問題を解いているだけになってる
オブジェクト指向と関数型で条件が違う比較をしてるってこと
つまり
「オブジェクト指向で状態を扱う必要がある問題」
VS
「関数型言語で状態を扱わない問題」
という違った問題で比較している
アプリケーションから状態をなくすのは不可能なので
「関数型言語で状態を扱う問題」を解かなければいけないのだが
なぜか状態はすべてなくすことができるんだという間違った前提で
状態がない優しい問題を解いているだけになってる
324デフォルトの名無しさん
2018/09/27(木) 15:43:16.13ID:emgF57xx325デフォルトの名無しさん
2018/09/27(木) 17:55:02.31ID:34EufdvK おれは関数型主義じゃじゃないけど適切にルール組んでその通りにやればいいだけじゃないか?
関数型はオブジェクト内に状態が隠蔽されてないから
やりやすいだけ
関数型はオブジェクト内に状態が隠蔽されてないから
やりやすいだけ
326デフォルトの名無しさん
2018/09/27(木) 17:57:15.64ID:34EufdvK Cだと構造体がなければほぼ全部シグネチャーに書きださなければならなかったけど
関数型は関数で組み合わせてあるから楽なんだろうなとは思う
関数型は関数で組み合わせてあるから楽なんだろうなとは思う
327デフォルトの名無しさん
2018/09/27(木) 18:00:53.71ID:34EufdvK オブジェクト指向でもやりようによっては状態の遷移がわかりやすくはかける
fluxとかじゃ状態はイミュータブル
actionを適用したらその都度新しい状態オブジェクトを作ってストアしてる
古い状態は書き換えられずに破棄される
fluxとかじゃ状態はイミュータブル
actionを適用したらその都度新しい状態オブジェクトを作ってストアしてる
古い状態は書き換えられずに破棄される
328デフォルトの名無しさん
2018/09/27(木) 19:04:14.07ID:DZkTxoQs 状態が複雑になる場合もなるべく明示した方が嬉しいよねってのが関数型のスタンス
Haskellは状態を持つ部分をモナド型クラスのインスタンス(=型)にするし、ML系は非数値状態を型に持たせて型検査の形で明示する
個人的には基本関数型で組んで、状態が必要不可欠な問題に対しては意味論的に隠蔽されているのが正しいならprivateでそれ以外はミュータビリティと型で制御が妥当かなと
その後でパフォーマンスが必要ならその部分をミュータブルなクラスベースOOPにする
Haskellは状態を持つ部分をモナド型クラスのインスタンス(=型)にするし、ML系は非数値状態を型に持たせて型検査の形で明示する
個人的には基本関数型で組んで、状態が必要不可欠な問題に対しては意味論的に隠蔽されているのが正しいならprivateでそれ以外はミュータビリティと型で制御が妥当かなと
その後でパフォーマンスが必要ならその部分をミュータブルなクラスベースOOPにする
329デフォルトの名無しさん
2018/09/27(木) 22:11:06.04ID:y/NaeiDF >>324
まあ冒頭副作用的な臭いからひっぺがしのモナドが思いつくなこれは
まあ冒頭副作用的な臭いからひっぺがしのモナドが思いつくなこれは
330デフォルトの名無しさん
2018/09/27(木) 22:52:16.03ID:ojLVUDGL オブジェクト指向ってウェブサイトの構築以外でどうやって使うんだ?
phpとかrubyはわかるがjava、c#やらでどういうシステム作れるか教えて
phpとかrubyはわかるがjava、c#やらでどういうシステム作れるか教えて
331デフォルトの名無しさん
2018/09/27(木) 22:55:44.14ID:pq96CSzd poco使ってc++でwebサーバーの振る舞い自体を組み込みで書く
332デフォルトの名無しさん
2018/09/27(木) 23:41:51.25ID:emgF57xx333デフォルトの名無しさん
2018/09/28(金) 00:59:07.19ID:2dxGIytS そもそもストラウプトのC++がまずかったんだよ
334デフォルトの名無しさん
2018/09/28(金) 01:09:58.28ID:2dxGIytS >>324
functionalは状態の管理手法じゃないのになに言ってんだ。
functionalは構造の再帰的分割による細分化やリスト処理の宣言的記述に有効であって
状態は必要なければなるたけ持たないほうが良いのはいろはのイ、セオリーだぞ
そして状態遷移は本当に必要ならオブジェクト指向を流用するのではなく
状態をきちんと管理するんだよ。
それをgetter/setterで要らぬところに状態持ち込んでishaだのhasaだの言ってるから
子供にまで後ろ指差されて笑われるんだよ。
言っとくが別にオレはfunctionalマンセーじゃないぜ。
functionalは状態の管理手法じゃないのになに言ってんだ。
functionalは構造の再帰的分割による細分化やリスト処理の宣言的記述に有効であって
状態は必要なければなるたけ持たないほうが良いのはいろはのイ、セオリーだぞ
そして状態遷移は本当に必要ならオブジェクト指向を流用するのではなく
状態をきちんと管理するんだよ。
それをgetter/setterで要らぬところに状態持ち込んでishaだのhasaだの言ってるから
子供にまで後ろ指差されて笑われるんだよ。
言っとくが別にオレはfunctionalマンセーじゃないぜ。
335デフォルトの名無しさん
2018/09/28(金) 02:01:07.68ID:HosvZzhg オブジェクト指向はWebよりjavaとかc#のイメージのが強いな
Webのがメジャーな人もいるのか
Webのがメジャーな人もいるのか
336デフォルトの名無しさん
2018/09/28(金) 02:06:06.17ID:EiOshXgh >>334
何言ってんの……?
>状態は必要なければなるたけ持たないほうが良い
あのね、ビジネスソフトには状態が必要なの!!
いくら関数型が状態を排除するのが理想だからって
ビジネスを道具の方に合わせることはできない
そんなことも分からないんだから嫌になる
これじゃいつまでたっても関数型が普及しないよな
>状態をきちんと管理する
だからその具体案を聞いたことがないんだって
本当馬鹿じゃないかと思う
何言ってんの……?
>状態は必要なければなるたけ持たないほうが良い
あのね、ビジネスソフトには状態が必要なの!!
いくら関数型が状態を排除するのが理想だからって
ビジネスを道具の方に合わせることはできない
そんなことも分からないんだから嫌になる
これじゃいつまでたっても関数型が普及しないよな
>状態をきちんと管理する
だからその具体案を聞いたことがないんだって
本当馬鹿じゃないかと思う
337デフォルトの名無しさん
2018/09/28(金) 05:08:03.15ID:FhArznfq >>335
Spring, ASP.NET Core
Spring, ASP.NET Core
338デフォルトの名無しさん
2018/09/28(金) 08:02:53.14ID:pE+2cSJR339デフォルトの名無しさん
2018/09/28(金) 08:05:29.06ID:8utkG/Cm システムの状態とオブジェクトの状態をごちゃまぜにしちゃう無能がおると聞いて
340デフォルトの名無しさん
2018/09/28(金) 10:00:32.06ID:bPXaydqo341デフォルトの名無しさん
2018/09/28(金) 12:17:05.53ID:pLiz6ELv オブジェクト内部に状態は持たないほうがいいと言うのは当たり前すぐる気がするけどね
342デフォルトの名無しさん
2018/09/28(金) 12:54:45.76ID:bPXaydqo343デフォルトの名無しさん
2018/09/28(金) 13:12:28.51ID:GxtNhjDw オブジェクト外部に状態持っても、結局そのオブジェクトを包含している上位のオブジェクトがあるので、行き着くところは「アプリケーションオブジェクトの外部に状態を持ったほうが良い」ってならない?
どこでラインを引くかはセンスってことでOK?
どこでラインを引くかはセンスってことでOK?
344デフォルトの名無しさん
2018/09/28(金) 13:19:48.03ID:1UhvtMTy 他のオブジェクトの持つ変数を必要とする事自体がおかしい。
必要な引数を渡したら、処理を任せて、必要な値をリターンさえしてもらえればよい。
必要な引数を渡したら、処理を任せて、必要な値をリターンさえしてもらえればよい。
345デフォルトの名無しさん
2018/09/28(金) 13:32:05.28ID:bPXaydqo >>343
そのアプリケーションオブジェクトの外部ってのが
なんのことかわからない。
ファイルに保存のことなのかもしれないが、保存するまでは
総てのデータはアプリケーション内部にあるわけで
結局、仮想的なストレージ(ようするにメモリ)に
保存するしか無いでしょう?
そのアプリケーションオブジェクトの外部ってのが
なんのことかわからない。
ファイルに保存のことなのかもしれないが、保存するまでは
総てのデータはアプリケーション内部にあるわけで
結局、仮想的なストレージ(ようするにメモリ)に
保存するしか無いでしょう?
346デフォルトの名無しさん
2018/09/28(金) 15:21:40.87ID:GxtNhjDw347デフォルトの名無しさん
2018/09/28(金) 18:23:35.77ID:KV7CiVPs348デフォルトの名無しさん
2018/09/28(金) 18:37:56.35ID:++iDCvgk >>347
んんん?
じゃ、具体的にアプリケーションオブジェクト以下に状態を一切持たなくてどうやって実装するのん?
BrowserでもOfficeでもいいから、一般的なアプリでアプリケーションオブジェクト外部に通信中にファイルオープン済みか否かやなんやらかんやら全ての状態を無理せず実装するエレガントな方法教えて。
一切の状態をアプリに持ってたら駄目だよ。
いくらなんでもこれは反論する自信あるわ。
んんん?
じゃ、具体的にアプリケーションオブジェクト以下に状態を一切持たなくてどうやって実装するのん?
BrowserでもOfficeでもいいから、一般的なアプリでアプリケーションオブジェクト外部に通信中にファイルオープン済みか否かやなんやらかんやら全ての状態を無理せず実装するエレガントな方法教えて。
一切の状態をアプリに持ってたら駄目だよ。
いくらなんでもこれは反論する自信あるわ。
349デフォルトの名無しさん
2018/09/28(金) 18:41:30.51ID:++iDCvgk350デフォルトの名無しさん
2018/09/28(金) 18:57:00.64ID:/ke/2lv3 いつまでずれた馬鹿な話してんの?
例えば犬クラスがあってポチオブジェクトがあった
そいつに餌を毎日おなじ餌をあげてたけど(戻り値 完食)
ある日半分しか食べなかった(戻り値 半分)
後でわかったけどポチは病気だった
かわいそうなポチ
犬クラス内部に状態があって同じメソッドを使ってても動作変わってるのが厄介だと言ってるんだろ
それがわからないのかなあ?
例えば犬クラスがあってポチオブジェクトがあった
そいつに餌を毎日おなじ餌をあげてたけど(戻り値 完食)
ある日半分しか食べなかった(戻り値 半分)
後でわかったけどポチは病気だった
かわいそうなポチ
犬クラス内部に状態があって同じメソッドを使ってても動作変わってるのが厄介だと言ってるんだろ
それがわからないのかなあ?
351デフォルトの名無しさん
2018/09/28(金) 19:01:55.81ID:/ke/2lv3 ポチはたまたま病気だとわかったけど
わからなかったら何で半分しか食べないのかわからない
事前に誰かが餌をやったのかもしれない
失恋でショックだったのかもしれない
気分がたまたまそうじゃなかったとしたら解剖しても理由はわからない
未来のテクノロジーでその時の内部状態を再現した無数のポチを作って条件に分けて
えさやり動作チェックするなんて考えただけでも寒気がする
わからなかったら何で半分しか食べないのかわからない
事前に誰かが餌をやったのかもしれない
失恋でショックだったのかもしれない
気分がたまたまそうじゃなかったとしたら解剖しても理由はわからない
未来のテクノロジーでその時の内部状態を再現した無数のポチを作って条件に分けて
えさやり動作チェックするなんて考えただけでも寒気がする
352デフォルトの名無しさん
2018/09/28(金) 19:02:47.77ID:1UhvtMTy それはポリモーフィズムを理解してないだけでは。
353デフォルトの名無しさん
2018/09/28(金) 19:03:10.43ID:++iDCvgk354デフォルトの名無しさん
2018/09/28(金) 19:08:25.24ID:++iDCvgk ポリモーフィズムは参照先インスタンスに依存するので、それは間接的とはいえ状態そのものやね。
355デフォルトの名無しさん
2018/09/28(金) 19:11:12.35ID:/ke/2lv3 >>353
だから対象オブジェクト内部に値を持たせないで関数のシグネチャーにして渡せと
関数に
病気かどうか
失恋かどうか
気分が悪いかどうか
前食べてからどのぐらい時間がたったか
と餌の量を値として渡せと
だから対象オブジェクト内部に値を持たせないで関数のシグネチャーにして渡せと
関数に
病気かどうか
失恋かどうか
気分が悪いかどうか
前食べてからどのぐらい時間がたったか
と餌の量を値として渡せと
356デフォルトの名無しさん
2018/09/28(金) 19:13:30.49ID:++iDCvgk357デフォルトの名無しさん
2018/09/28(金) 19:18:47.60ID:/ke/2lv3358デフォルトの名無しさん
2018/09/28(金) 19:19:57.74ID:UT33gEiF359デフォルトの名無しさん
2018/09/28(金) 19:22:08.98ID:++iDCvgk >>357
関数を使う、突き詰めればOfficeのユーザーがどの設定画面のどのタブでどのチェックボックスが有効でどのボタンを押したかを一度に伝えるのん?
俺はそんなことはしてないなぁ。
少なくともどの画面が表示されてて何が選択されてるかはアプリの状態に依存してるわ。
関数を使う、突き詰めればOfficeのユーザーがどの設定画面のどのタブでどのチェックボックスが有効でどのボタンを押したかを一度に伝えるのん?
俺はそんなことはしてないなぁ。
少なくともどの画面が表示されてて何が選択されてるかはアプリの状態に依存してるわ。
360デフォルトの名無しさん
2018/09/28(金) 19:23:07.62ID:TedNHSTO 犬に餌をやらなくても満腹にできる魔法
361デフォルトの名無しさん
2018/09/28(金) 19:24:11.70ID:/ke/2lv3 何でモデルとアプリの状態の話を混同してるかがわからない
362デフォルトの名無しさん
2018/09/28(金) 19:25:06.97ID:++iDCvgk363デフォルトの名無しさん
2018/09/28(金) 19:32:21.07ID:++iDCvgk364デフォルトの名無しさん
2018/09/28(金) 19:36:02.78ID:UT33gEiF365デフォルトの名無しさん
2018/09/28(金) 19:37:20.39ID:UT33gEiF366デフォルトの名無しさん
2018/09/28(金) 19:38:21.84ID:++iDCvgk 俺がはなっから言ってるのは、アプリ以下のどこかに状態は必要なはずで、それよりも外に状態を追い出すのは無理があるってことだけ。
367デフォルトの名無しさん
2018/09/28(金) 19:39:58.48ID:++iDCvgk368デフォルトの名無しさん
2018/09/28(金) 19:44:25.53ID:+9bdVI5n システムの状態とオブジェクトの状態をごちゃまぜにしちゃう無能がハッスルしちゃっとると聞いてw
369デフォルトの名無しさん
2018/09/28(金) 19:45:26.35ID:/X9jOxDh370デフォルトの名無しさん
2018/09/28(金) 19:47:14.39ID:++iDCvgk システム、つまりアプリの状態は少なくともアプリケーションオブジェクト以下が制御してるので、全てのオブジェクトが状態を管理しないってのは無理があるって話。
最初からそう言ってる。
最初からそう言ってる。
371デフォルトの名無しさん
2018/09/28(金) 19:50:57.15ID:lTwZu9zK つか関数型餌やりだと餌やり関数から出力される犬は入力された犬のクローンじゃないのか?
372デフォルトの名無しさん
2018/09/28(金) 20:15:03.29ID:UT33gEiF373デフォルトの名無しさん
2018/09/28(金) 20:18:19.44ID:+9bdVI5n374デフォルトの名無しさん
2018/09/28(金) 20:20:36.12ID:++iDCvgk375デフォルトの名無しさん
2018/09/28(金) 20:21:59.66ID:+9bdVI5n >>374
今はおまえがしゃべっていい時間やないで
今はおまえがしゃべっていい時間やないで
376デフォルトの名無しさん
2018/09/28(金) 20:23:45.55ID:++iDCvgk377デフォルトの名無しさん
2018/09/28(金) 20:25:39.72ID:+9bdVI5n378デフォルトの名無しさん
2018/09/28(金) 20:26:26.12ID:++iDCvgk >>377
あい、すんません。
あい、すんません。
379デフォルトの名無しさん
2018/09/28(金) 20:28:27.44ID:UT33gEiF >>374
c言語でグローバル変数使わなかったら他どんな組み方があるの?
引数か戻り値で渡すしかないでしょ?
グローバル変数使用禁止が作法のように語られてたんだから
昔の人は何をするべきかわかってたんだよ
c言語でグローバル変数使わなかったら他どんな組み方があるの?
引数か戻り値で渡すしかないでしょ?
グローバル変数使用禁止が作法のように語られてたんだから
昔の人は何をするべきかわかってたんだよ
380デフォルトの名無しさん
2018/09/28(金) 20:56:14.71ID:/X9jOxDh OOPは糞かもしれんが
じゃあ何がいいのかと言われたら別に他にこれといってないのが現状
じゃあ何がいいのかと言われたら別に他にこれといってないのが現状
381デフォルトの名無しさん
2018/09/28(金) 21:12:44.75ID:k5h2WtG4 頭悪いヤツにかぎって
うれしがってなんでも継承して抽象化とかいってるからな
ホモを人間クラスから派生するぐらい愚かなことやってる
うれしがってなんでも継承して抽象化とかいってるからな
ホモを人間クラスから派生するぐらい愚かなことやってる
382デフォルトの名無しさん
2018/09/28(金) 21:16:43.74ID:l603LAAk 基本は当たり前すぎて、階層化であり局所化であり
順序回的な「無用な」状態保持は極力回避し組みあわせ回路的・関数的構造にし、、、、
関連はネットワーク構造よりもツリー構造を指向して見通しよくし、
関連性の強い物は近くにおき(遠くのファイルからあちこち継承してクロスファイルでmethod取り込むようなことはせず)、
といった、、、アー効けく茶後期ツのための基本セオリー。
その表現技法は言語のパラダイムによって変わるだろう。
問題はオブジェクト指向がそういった基本セオリーに反するような手法として普及してしまったことだよ。
順序回的な「無用な」状態保持は極力回避し組みあわせ回路的・関数的構造にし、、、、
関連はネットワーク構造よりもツリー構造を指向して見通しよくし、
関連性の強い物は近くにおき(遠くのファイルからあちこち継承してクロスファイルでmethod取り込むようなことはせず)、
といった、、、アー効けく茶後期ツのための基本セオリー。
その表現技法は言語のパラダイムによって変わるだろう。
問題はオブジェクト指向がそういった基本セオリーに反するような手法として普及してしまったことだよ。
383デフォルトの名無しさん
2018/09/28(金) 21:17:57.02ID:l603LAAk384デフォルトの名無しさん
2018/09/28(金) 21:23:02.60ID:/X9jOxDh なんでコイツ急にポエりだしたん?
385デフォルトの名無しさん
2018/09/28(金) 21:25:30.29ID:k5h2WtG4 オレぐらいのレベルでないと
オブジェクト指向は使いこなせない
オブジェクト指向は使いこなせない
386デフォルトの名無しさん
2018/09/28(金) 21:27:24.36ID:l603LAAk たとえば関数型であれば、クロージャーや部分適用を使うことにより、
クラスをイロイロ作ったり状態instance変数でオブジェクトに特徴をもたせ分けるより
非常にシンプルに表現できるし、
また、解法を関数の段階的 細分化で構成することにより、
内側の回関数は小さくなるにつれ速やかに単純な構造になる上、
(再帰も含めた)関数呼び出しの引数リストと帰り値のスタック階層および局所変数が、
自然と個々の階層の参照する「近くにあるべき」状態を単純な木構増階層のかたちで保持できる。
ちなみに上にも書いたけど俺はfunctinalマンセーじゃないからな。
クラスをイロイロ作ったり状態instance変数でオブジェクトに特徴をもたせ分けるより
非常にシンプルに表現できるし、
また、解法を関数の段階的 細分化で構成することにより、
内側の回関数は小さくなるにつれ速やかに単純な構造になる上、
(再帰も含めた)関数呼び出しの引数リストと帰り値のスタック階層および局所変数が、
自然と個々の階層の参照する「近くにあるべき」状態を単純な木構増階層のかたちで保持できる。
ちなみに上にも書いたけど俺はfunctinalマンセーじゃないからな。
387デフォルトの名無しさん
2018/09/28(金) 21:29:55.72ID:l603LAAk388デフォルトの名無しさん
2018/09/28(金) 21:33:34.54ID:k5h2WtG4 あえていえば
できるだけ自律的であることが適切で
なおかつそのようにほぼ自律的に振舞うように実装されていれば
内部状態が保持されることは実装として適切
ただし、すべて外部的な要因で翻弄される続けるオブジェクトが内部状態を保持することは
適切な理由がないかぎり、できるだけ避けるべきといっていい
できるだけ自律的であることが適切で
なおかつそのようにほぼ自律的に振舞うように実装されていれば
内部状態が保持されることは実装として適切
ただし、すべて外部的な要因で翻弄される続けるオブジェクトが内部状態を保持することは
適切な理由がないかぎり、できるだけ避けるべきといっていい
389デフォルトの名無しさん
2018/09/28(金) 21:35:43.41ID:l603LAAk 問題によってどうしても必要な内部状態というものはあるからな。
そこまでだれも否定はしてない
そこまでだれも否定はしてない
390デフォルトの名無しさん
2018/09/28(金) 21:36:39.96ID:k5h2WtG4 刺身の上にタンポポ乗せる作業なんか
ほっといってもいい
そのクラスだけでほぼ完結できる
ほっといってもいい
そのクラスだけでほぼ完結できる
391デフォルトの名無しさん
2018/09/28(金) 21:37:59.71ID:/X9jOxDh > 外部的な要因で翻弄される続けるオブジェクトが内部状態を保持する
まぁアンタの言うように避けたようがよさげにも見えるが
ここでふと思い出されるのはコンテクストとかビルダの働き
java.awt.Graphicsみたいなコンテクストオブジェクトをグニグニいじったり
java.lang.StringBuilderのようなビルだオブジェクトをグニグニいじったり
そういうところこそにOOPの楽しみがあるように俺には少し思えるんだ
まぁアンタの言うように避けたようがよさげにも見えるが
ここでふと思い出されるのはコンテクストとかビルダの働き
java.awt.Graphicsみたいなコンテクストオブジェクトをグニグニいじったり
java.lang.StringBuilderのようなビルだオブジェクトをグニグニいじったり
そういうところこそにOOPの楽しみがあるように俺には少し思えるんだ
392デフォルトの名無しさん
2018/09/28(金) 22:12:55.17ID:bBdkrZUa ボタンやチェックボックスがGUIの共通の振る舞いを制御する親クラスがいるのはC++で書かれる前から実装継承するように設計されていた。
一方、普通預金、当座預金、定期預金の共通関数があったとして、預金というスーパークラスを書いているシステムはないぞ。メガバンクの情報系であってもな。
一方、普通預金、当座預金、定期預金の共通関数があったとして、預金というスーパークラスを書いているシステムはないぞ。メガバンクの情報系であってもな。
393デフォルトの名無しさん
2018/09/28(金) 22:24:55.23ID:+9bdVI5n お、キングを抜いた奴がでたでw
今は>>389がバカキングなw
今は>>389がバカキングなw
394デフォルトの名無しさん
2018/09/28(金) 22:51:26.95ID:HosvZzhg■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 「老後は都会生活が便利」投稿に地方民が猛反論「電車の待ち時間がムダ」「荷物を車で運べない」★2 [七波羅探題★]
- 鈴木農水相「自由にコメ作れば価格が暴落する」おこめ券はコメ価格に「ほとんど影響なし」 [Hitzeschleier★]
- 【本】日本の「移民大国化」が止まらない…最新データが示す"永住型の労働移民は世界3位"という衝撃の現実 (是川 夕氏) [少考さん★]
- 【MLB】ヤクルト・村上宗隆、ホワイトソックスと2年総額53億で合意! 背番号は5 米報道…低迷チームが白羽の矢、短期契約★2 [冬月記者★]
- 【卓球】福原愛が再婚と妊娠を衝撃告白 2021年に不倫疑惑騒動、離婚も…信頼できる“パートナー”だった知人男性と入籍 [Ailuropoda melanoleuca★]
- 立民・岡田克也氏「国民の感情をコントロールしていかないと」、日中議連発言は「侮辱」保守党・有本香氏に怒 ★4 [nita★]
- 【クリスチャンしぐさ】石破とトランプは「神から選ばれた特別な関係」だった [979264442]
- 【悲報】高市早苗、完全に詰む「利上げに積極的な姿勢を取らなくては円安が止まらないが財政拡張と金融緩和を唱えてしまった」 [856698234]
- 全国の水道水PFAS検出マップ・・・とんでもない汚染地域が見つかる😱・・・・・・ [441660812]
- 高市早苗「すでに物価高対策の約束は果たした。」「スピード感持って取り組めたと思う。」 [153490809]
- 貧困日本人さん、セルフレジで100%オフ節約術を開始してしまう・・・😲 [441660812]
- 【画像】こんなにかわいいパンダ、日本人はいらないとのことw [271912485]
