カプセル化(英語: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:ifygL6bT280デフォルトの名無しさん
2018/09/27(木) 01:41:53.45ID:DSKWvsHE いや、単純にオブジェクト指向なんてやったって地獄に落ちるだけ
クラスっていうゴミ箱に突っ込んで臭いものに蓋してる状態じゃいつまでたってもバグなんて取れないんだよ
単純にプログラムを
入力→処理→出力
という繰り返しの塊にしなければならない
メソッドを呼ぶたびに状態が変化
するようなもん誰も管理できない
クラスっていうゴミ箱に突っ込んで臭いものに蓋してる状態じゃいつまでたってもバグなんて取れないんだよ
単純にプログラムを
入力→処理→出力
という繰り返しの塊にしなければならない
メソッドを呼ぶたびに状態が変化
するようなもん誰も管理できない
281デフォルトの名無しさん
2018/09/27(木) 01:45:45.45ID:oacq4Bqj オブジェクト指向の解釈が多彩なので、あれだけど
オブジェクトscopeは有効な場面は多々あるんだよな
closureとか部分適用とか
オブジェクトscopeは有効な場面は多々あるんだよな
closureとか部分適用とか
282デフォルトの名無しさん
2018/09/27(木) 01:46:43.86ID:pq96CSzd オブジェクト指向でも
詳細化したらデータフロー図に落とせる設計でないと
お話にならない
詳細化したらデータフロー図に落とせる設計でないと
お話にならない
283デフォルトの名無しさん
2018/09/27(木) 01:47:55.67ID:DSKWvsHE 状態を持ってしまうのがまずい
いや、持つだけなら好きにすればいい
内包してしまうのがまずいと言うのが正確か?
いや、持つだけなら好きにすればいい
内包してしまうのがまずいと言うのが正確か?
284デフォルトの名無しさん
2018/09/27(木) 01:50:10.34ID:pq96CSzd 以前(>>161)にも書いたとおり
コレ以外方法はない
この原則さえ守れば破綻は回避できる
大体の大きな問題は起きなくなる
@公開インタフェースは可能な限り少なくする
A原則として、よほど適切な理由がないかぎり、可能な限り継承よりコンポジション使う
B下位階層(ここでの階層は>>101>>106の意味)のクラスが上位階層のクラスのインターフェースに絶対に直接アクセスしてはいけない
※ 当然、下位クラスが上位クラスのインターフェースを直接呼びだすようなリフレクションは禁止
C下位階層のインスタンスが非同期で上位のインスタンスに処理を依頼したい状況が発生した場合(可能な限りこんな状況が起きる設計は当然避けるべき)、
処理のやりとりはメッセージキューで行い、可能な限り少ない回数で簡潔なメッセージを用いて簡単に完結できるようにする、複雑なメッセージシーケンスも禁止
(コレは並立するインスタンス間でも同じ)
D同じ階層に並立するインスタンスをムダに乱立させるのは当然禁止
コンポジションとメッセージシーケンス、クラスの階層(ここでの階層は>>101>>106の意味)、インスタンスの生存期間さえ
ドキュメントで適切におさえることができる状態になっていれば
問題やエンハンスが発生しても持続可能対応できる
コレ以外方法はない
この原則さえ守れば破綻は回避できる
大体の大きな問題は起きなくなる
@公開インタフェースは可能な限り少なくする
A原則として、よほど適切な理由がないかぎり、可能な限り継承よりコンポジション使う
B下位階層(ここでの階層は>>101>>106の意味)のクラスが上位階層のクラスのインターフェースに絶対に直接アクセスしてはいけない
※ 当然、下位クラスが上位クラスのインターフェースを直接呼びだすようなリフレクションは禁止
C下位階層のインスタンスが非同期で上位のインスタンスに処理を依頼したい状況が発生した場合(可能な限りこんな状況が起きる設計は当然避けるべき)、
処理のやりとりはメッセージキューで行い、可能な限り少ない回数で簡潔なメッセージを用いて簡単に完結できるようにする、複雑なメッセージシーケンスも禁止
(コレは並立するインスタンス間でも同じ)
D同じ階層に並立するインスタンスをムダに乱立させるのは当然禁止
コンポジションとメッセージシーケンス、クラスの階層(ここでの階層は>>101>>106の意味)、インスタンスの生存期間さえ
ドキュメントで適切におさえることができる状態になっていれば
問題やエンハンスが発生しても持続可能対応できる
285デフォルトの名無しさん
2018/09/27(木) 01:52:11.89ID:DSKWvsHE 単純にメソッドの成功条件に内部で持たれているメンバの見えない奴が関わってたりすると最悪
プログラムのどこでそいつが変更されるのかわからん
こういう問題が起きるたびに途方も無い労力を支払うのが単純に無駄
オブジェクト指向を考えた奴はわざと技術者の仕事を作るためにこれを考えたのではないか?
というぐらい一切メリットがない
プログラムのどこでそいつが変更されるのかわからん
こういう問題が起きるたびに途方も無い労力を支払うのが単純に無駄
オブジェクト指向を考えた奴はわざと技術者の仕事を作るためにこれを考えたのではないか?
というぐらい一切メリットがない
286デフォルトの名無しさん
2018/09/27(木) 01:54:14.64ID:DSKWvsHE287デフォルトの名無しさん
2018/09/27(木) 01:58:10.12ID:oacq4Bqj もう今日は寝ろよハゲども
ノシ
ノシ
288デフォルトの名無しさん
2018/09/27(木) 02:02:11.90ID:oacq4Bqj 単純な入れ子構造になっているか分かりにくい
ランダムに依存しうるネットワーク構造は管理しにくい
しかもノードインスタンスごとに状態を持っていたり
何の×ゲームだよ
ランダムに依存しうるネットワーク構造は管理しにくい
しかもノードインスタンスごとに状態を持っていたり
何の×ゲームだよ
289デフォルトの名無しさん
2018/09/27(木) 02:41:53.03ID:y/NaeiDF 割と真面目にオブジェクト指向は将来的に絶対破滅するという想定で作るといい気がしてきた
上で出てる上手くいく方法とかは「延命措置」とみなして
そう考えたら何かすっきりする
上で出てる上手くいく方法とかは「延命措置」とみなして
そう考えたら何かすっきりする
290デフォルトの名無しさん
2018/09/27(木) 02:47:01.34ID:Fk1HpByz そう。1000年後には絶対破滅するという想定で、
今の仕事を全力でやればいい。
今必要なら、必要ってことさ、AHAHAHAHA〜
今の仕事を全力でやればいい。
今必要なら、必要ってことさ、AHAHAHAHA〜
291デフォルトの名無しさん
2018/09/27(木) 03:51:07.23ID:fvjtmZUM >>260
部分的に構造化プログラミング養成ギプスのような気がする
部分的に構造化プログラミング養成ギプスのような気がする
292デフォルトの名無しさん
2018/09/27(木) 03:53:07.34ID:fvjtmZUM メソッドを呼び出す順番に依存してはならない
293デフォルトの名無しさん
2018/09/27(木) 07:40:33.24ID:zZL/tnLy >>283
公開されてるメソッドの呼ばれ方による状態繊維が簡易なレベルならば問題ない
といったところ。
通信ソケットの実装みたいなものはどうしても状態を持つのは仕方ないけど、
でもそれもできる限り小さく持つってのが最近の感覚じゃないかね。
内部に巨大で複雑なオブジェクトをガツガツ作る様なメソッドがある場合は
なんか問題ある気がする。
公開されてるメソッドの呼ばれ方による状態繊維が簡易なレベルならば問題ない
といったところ。
通信ソケットの実装みたいなものはどうしても状態を持つのは仕方ないけど、
でもそれもできる限り小さく持つってのが最近の感覚じゃないかね。
内部に巨大で複雑なオブジェクトをガツガツ作る様なメソッドがある場合は
なんか問題ある気がする。
294デフォルトの名無しさん
2018/09/27(木) 08:19:49.02ID:emgF57xx 状態を持つなって言ってるのは関数型の考えから?
常にオブジェクト指向言語の方がメジャーなんだが
常にオブジェクト指向言語の方がメジャーなんだが
295デフォルトの名無しさん
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は糞かもしれんが
じゃあ何がいいのかと言われたら別に他にこれといってないのが現状
じゃあ何がいいのかと言われたら別に他にこれといってないのが現状
■ このスレッドは過去ログ倉庫に格納されています
