オブジェクト指向は愚かな考え。この世は計算式 ★3©2ch.net

2016/01/05(火) 02:10:25.72ID:hJUQcrkl
オブジェクト指向は愚かな考え。排便メソッドを実装した人間クラスから美少女クラスが作れない。
https://twitter.com/ProgrammingMono/status/665702678006140928

研究グループは、血管新生注において血管が伸長する際の血管内皮細胞注運動を制御するしくみを、生物学と数理モデル・
コンピュータシミュレーションを融合させた先端的な研究手法により明らかにしました。

生物は、最小の機能単位である細胞が寄り集まった多細胞体です。しかし、細胞の集まりが、組織や器官といった
秩序ある形態や構造をつくり機能するしくみはほとんど分かっていません。中でも血管は、体中の全組織に十分な
酸素や栄養源を効率よく供給するため、組織や組織の間に入り込み、血管外の環境との相互作用により、巧妙な
枝分かれ構造をとっています。

これまでに本研究グループは、新しく血管がつくられる(血管新生)際の細胞の動きに着目し、特に血管内皮細胞の
動きをリアルタイムで可視化し、定量的に捉えることを可能にしてきました。

今回さらに、血管の伸長を制御するしくみについて、細胞が自発的に自らを制御して動く過程(自律的過程)と、
隣接した細胞から適宜影響を受けて動く過程(協調的過程)がうまく共存することで、全体の動きが巧みに統制
されていることを世界に先駆けて実証しました。

興味深いことに、血管内皮細胞が前後したり、お互いに追い抜きあったりという血管新生で見られる複雑な細胞集団の
動きを制御している中枢部分は、細胞一つ一つの動き(スピードと方向性)の「確率的な変化」として十分説明できる
ことをコンピュータシミュレーションで実証しました。
http://www.jst.go.jp/pr/announce/20151120-2/#YOUGO3

前スレ
オブジェクト指向は愚かな考え。この世は計算式 ★2
http://peace.2ch.net/test/read.cgi/tech/1450153388/
2016/01/05(火) 02:40:11.66ID:3cj4CitF
>>1 = ハゲ
>>3-1000
ゴミ


死ね
2016/01/05(火) 08:10:47.12ID:WVEw1bNF
相変わらず気が狂ってるね
4デフォルトの名無しさん
垢版 |
2016/01/05(火) 21:54:42.69ID:8fihq/Cm
オブジェクト指向は直観に反するんだよな。
こいつを見てくれ。
http://pbs.twimg.com/media/CW4jn4jUkAAqIlA.jpg

Coffeeオブジェクトに振る舞いがある。これはオブジェクト指向的に完全に正しい。
しかし、現実にコーヒーを飲むのは人間だ。コーヒーは人間によってカップに注がれる存在だ。
これが思考を混乱させる。オブジェクト指向に従うとよくわからないソースコードのできあがりだ。
データに振る舞いを持たせるのは大失敗だと言わざるを得ない。
2016/01/05(火) 22:44:58.11ID:zW6slUa6
空かどうか判定するEmpty()を定義したCupクラスとLiquidクラスを継承したCoffeeクラスを作って、HumanクラスにRefill(Cup,Liquid),Drink(Cup)を定義すればいいだけだ

if(cup.Empty())
{
human.Refill(cup,coffee);
}
else
{
human.Drink(Cup);
}
2016/01/05(火) 22:47:52.22ID:i0IFFoJB
コーヒーの属性定義が広範囲すぎる
量をのオブジェクトに突然、実態コーヒーを入れている
量のオブジェクトの範囲のクラスを作っる
コーヒークラスに量をコンポジションさせる
設計の間違え
2016/01/05(火) 22:51:39.37ID:GCWuNCn0
>>4
単純。

コーヒーはただの量であり、人間オブジェクトの一変数だ。
いや、コーヒーはオブジェクトであり、生成からの時間により温度変数の値が変わる。
いや、コーヒー生成の時刻を保持するのは人間であり、コーヒーの温度を計算するのは人間である。
いや、コーヒーはコーヒーサーバーオブジェクトの変数であり、、、、
2016/01/05(火) 22:55:26.17ID:i0IFFoJB
>>5
ま^、これでもいいがこれをオブジェクト指向と思っている時点で
何をやっても後が大変。
2016/01/05(火) 23:02:31.55ID:zW6slUa6
>>8
目的次第としか言えんわ
直感的なコードが求められるなら>>5ってだけ
2016/01/05(火) 23:15:31.85ID:i0IFFoJB
その直感が、直感的だと思う時点
斜め直感にしか見えん
11デフォルトの名無しさん
垢版 |
2016/01/05(火) 23:33:07.12ID:QVqdPGfo
すまん、自動で口にコーヒー注いでくれない前時代のコップ使ってる雑魚おる?
2016/01/06(水) 00:33:16.74ID:73ZB/O6z
胃瘻はかなり前に技術だが
2016/01/06(水) 02:56:11.57ID:MPHK5bs1
>>5
おまえはカップを飲むのかw
2016/01/06(水) 06:53:26.42ID:UF966QGg
現実をそのままモデル化してOO否定って5周くらい遅れとるで
2016/01/06(水) 07:15:47.25ID:QNndC4zW
形式主義ではコーヒーを椅子に置き換えても成り立つってことをいいたいんじゃないのか。
2016/01/06(水) 08:11:16.53ID:xFxLYqzC
>>14
>>4は現実をそのままモデル化できていない。
大事なのは、そのままモデル化するのではなく、どうモデル化するかなのだ。
2016/01/06(水) 08:45:38.03ID:/XlzX9bH
人間は現実を直接みてるわけじゃないからね
2016/01/06(水) 08:58:13.58ID:9xF4ChVe
まー初心者(OOだけでなくプログラミング全般の初心者)向けのオブジェクト指向の解説とかでよくある説明だよね。
「オブジェクトとは日本語で物、対象物などという意味です」みたいなさ。とっかかりとしては平易なためによく使われているけど、
数学の定義のように後生大事にするべき、応用の効く、正しいイメージじゃない。
19デフォルトの名無しさん
垢版 |
2016/01/06(水) 11:11:49.69ID:wCEM/hYT
>>1
20デフォルトの名無しさん
垢版 |
2016/01/06(水) 11:14:02.62ID:Nukx80Um
クラスは原子陽子中性子くらいから完璧に継承すべき
21デフォルトの名無しさん
垢版 |
2016/01/06(水) 11:15:12.81ID:nQqbz+/u
メソッドに何かやらせるのはやめて全て物理演算で動作を決めるべき
22デフォルトの名無しさん
垢版 |
2016/01/06(水) 11:19:28.24ID:dAXQ+tnq
コンピュータ内でシミュレートするのではなく実際の分子原子を用いるべき
2016/01/06(水) 11:34:29.07ID:KjcuT4OL
そんなことしたら分子原子の仕様変更で全てがひっくり返るぞ
24デフォルトの名無しさん
垢版 |
2016/01/06(水) 11:54:24.95ID:nQqbz+/u
メソッドコールのかわりにオブジェクトに対するフォースとトルクを搭載した言語を作ればいい
25デフォルトの名無しさん
垢版 |
2016/01/06(水) 11:57:30.95ID:nQqbz+/u
>>13
これ、どう表現すべきなのか?
2016/01/06(水) 12:01:41.51ID:QNndC4zW
beDrank, beRefilledにかえればいいだけだろ。
2016/01/06(水) 12:26:10.76ID:HvQ48C0N
>>25
drinkに渡すのはcup.contentsとかにする?
2016/01/06(水) 13:44:41.72ID:ZUCJrGIg
>>4は一般的なコーヒーのモデル化じゃなくて
コーヒーの消費が常態化したマの皮肉じゃないの
最後にコメント付いてるし
29デフォルトの名無しさん
垢版 |
2016/01/06(水) 21:55:30.95ID:kAnzyWXR
オブジェクト指向は無理
30デフォルトの名無しさん
垢版 |
2016/01/06(水) 21:55:58.83ID:zRcw+KQb
まったく直感的ではないな
31デフォルトの名無しさん
垢版 |
2016/01/06(水) 21:56:37.47ID:fWGpYiip
こうしてクソみたいなソースコードが溢れた
32デフォルトの名無しさん
垢版 |
2016/01/06(水) 21:57:33.23ID:ljmmccCR
>>25-27
こんな議論になる時点でオブジェクト指向はヤバいだろ
33デフォルトの名無しさん
垢版 |
2016/01/06(水) 21:58:49.59ID:ljmmccCR
>>2
死ね
34デフォルトの名無しさん
垢版 |
2016/01/06(水) 22:00:48.90ID:vTtwKBx3
>>9
そこまでしてオブジェクト指向にこだわる意味がわからない。
そんなもんperlやrubyのワンライナーですませろよ
2016/01/07(木) 00:25:26.48ID:idw/W9gn
オブジェクト指向も結局はコミュニケーションというか
メソッド(関数)指向という方が正しい。
結局はメソッド(関数)をどのように呼ばれるか、まとめられるかってことだから。
2016/01/07(木) 01:03:06.56ID:Spe75WNW
メソッドは関数ではない
メソッドとは特定のオブジェクトにのみ適用可能な手続きであり、
関数とは特定のオブジェクトに依存しないものである
特に純粋関数は状態にも依存せず、参照等価性が成り立つものである

ところでオブジェクトが状態を持たず、メソッドを持たなければ、
それは単なるデータ(例えばハッシュマップ)と同じである
従ってオブジェクトというものは状態、及びメソッドの存在を暗示している

オブジェクト志向とは全てのものを変更可能なデータ(言い換えればエンティティ)とメソッドで表そうという観念である
関数型はそれに反して極力多くのものを変更不可能なデータ(値)と関数で表そうとする
ここの話はいわゆるドメイン駆動設計にも絡んでいる

どちらが、現実世界の捨象に有用であるかということが問題なのである
2016/01/07(木) 01:15:30.61ID:Spe75WNW
オブジェクト志向で実装可能なことは、原理的に関数型でも実装可能であり
関数型で実装可能なことは原理的にオブジェクト志向でも実装可能なはずである

関数はオブジェクト志向においては、staticクラスを使えば実装できる
メソッドは関数型においては、第一引数によって動作を変更するポリモーフィズムとして実装できる

問題はどちらが汎化に適しているかということなのである
関数型にはオブジェクト指向では綺麗に実装できない麗としてマルチメソッドというものがある
これは第一引数及び第二引数+・・・の型を持ってして動作を変更するという技であるが、
特定のオブジェクトに依存しているオブジェクトにおいてはこれはif文を内包したディスパッチをする他に実装する方法はないだろう

一方staticクラスによる関数のパッケージ化は煩雑である
必要な関数だけをインポートするには、その関数を内包したstaticクラスをインポートする必要がある
もしここで厳密なカプセル化を適用するならば、
1つの関数のために1つのクラスを使う必要がある、さもなくば利用可能でない関数も同時にインポートしてしまう

カプセル化もまた、オブジェクト志向の特権ではないのである
関数型は関数をカプセル化しているのである
そして変数のカプセル化もまたクロージャで実装できる

オブジェクト志向での変数のカプセル化は容易ではあるが、本当に変数はカプセル化されるべきか
それが私の問いなのである
2016/01/07(木) 01:40:36.54ID:6wDD5ILY
>>37
その問いにおける「変数」とは状態のことであるから、
それは構造化・カプセル化によってアクセス制限されるべきなのは明らか。
39デフォルトの名無しさん
垢版 |
2016/01/07(木) 02:02:35.73ID:EDvZlrKk
>>1>>4
結局のところ、この問題に誰もが納得するシンプルな回答を示せない奴が設計するからデスマーチになるんだろ。
2016/01/07(木) 03:17:27.43ID:VBUUQOGk
自分も参加してるプロジェクトでデスマが起こるなら多分自分にも原因があるんだと思うよ
2016/01/07(木) 03:22:02.67ID:Y5yasR7+
>>4
そもそもなんでコーヒーに命令するとコーヒーが自分で動作してんだよ。
そんなコーヒーがあるかw
いきなり設計段階から間違ってるじゃねーか

どう考えても最後の"//I am a software developer"って時点で
そういう設計をやらかす>>4みてぇなバカを揶揄したセルフパロじゃんかw
2016/01/07(木) 04:03:14.50ID:Y5yasR7+
ああ、ジョークまで完全に見えた
>>4は「プログラマがコーヒーを飲む」じゃなくて
「コーヒーがプログラマに飲まれる」って逆転ジョークで
絶え間なくコーヒーが自動的にプログラマに注がれ続ける
おかしな逆転コードでプログラマジョークになってんだ。

「こいつをみてくれ」じゃねーよ!プププ
2016/01/07(木) 04:17:18.05ID:boatvz1E
>>36-37 が大嘘であることはOCamlの存在が証明している
2016/01/07(木) 14:46:08.69ID:Geoe+pHe
こういう根本的に理解できてないのが大量に居る時点で、オブジェクト指向は愚かな考えw
2016/01/07(木) 15:46:48.63ID:bWvRU875
コーヒーはどうでもいいけど、
2.log() とか数に数学的関数計算をくっつけるってどうなのよ?
気持ち悪いったらありゃしねえ。
2016/01/07(木) 18:04:34.20ID:nwSyjPdt
数学みたいにlog(2)でいいと思うが。
その()は何のためにあるんだと言いたい。
2016/01/07(木) 19:24:41.82ID:bWvRU875
大分昔だけどフリー関数は気持ち悪くて、1.sin()とか1.cos()とか書けるのが本来の在り方だ、といった
痛い記事を読んだ記憶がある。Rubyがらみだったかなあ。
今ちょっと検索すると見つからないから俺の妄想なのかもしれん。
2016/01/07(木) 19:33:58.76ID:LLMMv1AA
数字は計算をしないからそう書いちゃいかんのだけどな
2016/01/07(木) 19:53:48.55ID:wknU54yj
+ 1 2
2016/01/07(木) 21:42:11.31ID:a7kpSA/c
死ね括弧
2016/01/07(木) 21:57:00.05ID:sG4YEGv+
(スズ)

拝承
2016/01/07(木) 22:18:47.33ID:a7kpSA/c
>>46
> 何のため
関数そのものなのか、関数を呼び出した結果なのかを区別する括弧。
括弧がなければ関数そのもの、あれば関数呼び出しの結果。
括弧がなければlogという関数そのもの、あればlog(hoge)の計算結果。
かどうかは言語による。
53デフォルトの名無しさん
垢版 |
2016/01/09(土) 14:00:07.10ID:8eWGVEYX
>>45
こういう主語述語みたいなくだらない議論に陥るのがオブジェクト指向の最大の問題点だな
どっちでもいいからそのためのテストなりサンプルコードをがつがつ作ってくれれば問題ないんだが
糞みたいな議論ばっかりふっかける輩を生むところが最大の問題点だな。
54デフォルトの名無しさん
垢版 |
2016/01/09(土) 14:37:25.60ID:hdqMNonU
>>53
何も考えずに作業こなすだけの社畜 VS 議論ばかりやる頭でっかち ファイッ!!
55デフォルトの名無しさん
垢版 |
2016/01/09(土) 16:12:34.83ID:8eWGVEYX
>>54
極論煽るだけのカスも大概だけどな
2016/01/09(土) 17:15:53.50ID:3kY/wzgi
>>53
ドット構文を変な風に使うバカの問題であってオブジェクト指向関係ないな。
2016/01/09(土) 18:23:24.86ID:oGyr6/WF
主語述語っていうけど、オブジェクトは目的語だからね
2016/01/09(土) 19:25:35.83ID:oGyr6/WF
昔ながらのfunc( obj ); 形式だと、オブジェクトを主語と考える人はいないだろうし
obj.func(); は↑が変形したものにすぎないから同じ理屈だよね
しかも時期C++ではfunc( obj )でもobj.func()でもどちらの形式でも呼び出せるようにするって
C++の超偉い人がやる気満々だし、見た目は最早重要ではないよね

普通に考えると、主語はコンピュータや処理系だね
プログラミングを全然知らない人でも、主語は誰?って聞いたらコンピュータって答えるだろうね

何するにしても、結局実行するのはコンピュータだからね
これが全く現実世界でおこっている物理現象なのに、あえてオブジェクトを主語という風に
ひねくれた別な観点で考え直す必要は無いね

現実世界に合わせて、主語をコンピュータ、オブジェクトを目的語、関数を述語、と捉えると
それで多態や継承が出来なくなるっつーんなら困るけど、そういうわけではないからね
だったら現実世界で起こっていることに合わせて考えたほうが自然だね
2016/01/09(土) 19:39:23.22ID:OrUjMMRy
メッセージングのオブジェクト指向の言い方で言うと、
主語はメッセージのレシーバであり、文の残りはメッセージだ
2016/01/09(土) 23:40:46.34ID:3kY/wzgi
>>58 チンパンジーのアイちゃんかな?
2016/01/09(土) 23:55:42.86ID:CpCNnIMM
>>58
x.sin() では x がオブジェクトで、sinというメソッド(もしくはメッセージ?)を処理していて、
sin(x) では sin がオブジェクトで、xという入力を処理している。

どちらかの方がよりオブジェクト指向的だという序列なんかない。
数学関数それ自体をオブジェクトと認めようとしない思想(?)の根源は何なんだ?
62デフォルトの名無しさん
垢版 |
2016/01/10(日) 00:13:34.71ID:MD/fGeTk
ポーランド記法嫌いそう
2016/01/10(日) 00:21:12.30ID:sdj7zt3O
演算子前置のポーランド記法は嫌いだなぁ
存在する意味がわからないレベルで嫌い。
演算子後置の逆ポーランドじゃないとね。
2016/01/10(日) 00:34:49.51ID:0XznusY4
> 存在する意味がわからないレベルで嫌い。

なんで?

> 演算子後置の逆ポーランドじゃないとね。

なんで?
2016/01/10(日) 00:40:13.45ID:hoksOuY6
Add 3 to 5, then multiple it by 2.
2016/01/10(日) 01:09:07.40ID:UgGJRpwk
逆ポーランドの方が実装しやすいと思う。
人それぞれの範疇だが。
67デフォルトの名無しさん
垢版 |
2016/01/10(日) 01:11:54.59ID:MiN6/z6v
>逆ポーランドの方が実装しやすいと思う。

意味がわからん。
構文木作るのに一番前と後でなんか変わるか?
AST作らずにそのまま逐次実行するならスタックに
積むだけでいい逆ポーランドの方がいいかもしれんが
2016/01/10(日) 01:16:08.27ID:+l1yiqNW
x.sin() では x がオブジェクトで、sinというメソッド(もしくはメッセージ?)を処理していて、
sin(x) では sin がオブジェクトで、xという入力を処理している。

どちらかの方がよりオブジェクト指向的だという序列なんかない。
数学関数それ自体をオブジェクトと認めようとしない思想(?)の根源は何なんだ?

違うよな
どちらがオブジェクト志向的かといえばx.sin()でしょ
xというオブジェクトにsin()というメソッドが属しているという考えなんだから
sin()は関数に対してxというオブジェクト、あるいは単にデータを引き渡しているだけ

後者は明らかに関数的な考え方、動詞優位
69デフォルトの名無しさん
垢版 |
2016/01/10(日) 01:27:11.07ID:hZikTLMs
関数へのエイリアスのようなメソッドはドットで繋ぐのでなく、
別の文字にした方がいいよな。
2016/01/10(日) 01:29:17.31ID:sdj7zt3O
釣りじゃなくて単に本当にあたまおかしいのかな?
Xはデータであって演算ではない。Xは演算しない。
Xをオブジェクトとして扱った場合、その操作として実装されるメソッドは
データのゲットセットなど内部状態を隠蔽するためのメソッドと
可変不変などのデータ状態をあらわすメソッド。

まだお前の脳内じゃおまえがコーヒーを飲むんじゃなくて
コーヒーが勝手に口に飛び込んで来てんのか。
2016/01/10(日) 01:29:19.21ID:Ch7U5rc3
x.sin()は手続き言語的だと思うけどなあ
もちろんsin(x)も。
オブジェクト指向ならメッセージを送るような記述の方が自然では
72デフォルトの名無しさん
垢版 |
2016/01/10(日) 01:52:12.61ID:hZikTLMs
現実世界をオブジェクト指向に当てはめるやついるけど馬鹿だよなー

コーヒーが勝手に口まで運ばれてくる機能をコーヒにつけただけじゃんw
ついでにコーヒーがしゃべる機能もつけたよ。

問題がないからそういう設計にしたんですよ
2016/01/10(日) 01:53:23.52ID:+l1yiqNW
どちらがより汎化されているかではなく
具体例で語ろうとする人間は、プログラムを実装したことがないのでは?

具体的な手続きによる具体的な文字通りのプログラムを書きたいなら
Cでかいてどうぞ
2016/01/10(日) 01:59:31.92ID:+l1yiqNW
オブジェクト指向だろうと関数志向だろうとやってることは変わらない

オブジェクトはメソッドの第一引数でしかない

コーヒーを飲むという行為を書くためには手続き的に書くしか無い
コーヒーが俺の口の中にあるという結果を宣言的に書きたいのに
その手続きを丹念に描写したいならそうすればいい

I.drink(coffee)と書けばいいんだよ
I.drink(coffee)とyou.drink(coffee)は飲み方が違う!というのならそう実装すればよい

モデリングとは物事を単純化する行為、汎化する行為であって具象化する行為ではない
Iとyouの違いがモデルのキーポイントなら、Iとyouという(メソッドの第一引数)をパラメータに加えればいいし
そうでないなら含まないほうがモデルがシンプルに保たれる

数学ができない自称モデラーはプログラムを手続き的に書いたらいいんだよ
75デフォルトの名無しさん
垢版 |
2016/01/10(日) 02:00:42.57ID:hZikTLMs
特化させたいのに汎化する必要ある?
狭い世界で使うなら特化させていい。
広い世界で使うなら汎化させる。

それだけ。
76デフォルトの名無しさん
垢版 |
2016/01/10(日) 02:03:41.63ID:hZikTLMs
汎化と特化させるもんを決めるのが設計な
77デフォルトの名無しさん
垢版 |
2016/01/10(日) 02:42:12.92ID:JhCLPk/2
>>74
言ってることはわかるがコーヒーを主語に対象を汎化なら
coffee1.drunkBy(me);
coffee2.drunkBy(you);
だろ
78デフォルトの名無しさん
垢版 |
2016/01/10(日) 03:01:38.69ID:JhCLPk/2
>>72
普通モデリングなんて想定される実装の多さや効率の問題で変えるものだからね
感性にまかせる初心者ほど文脈や抽象に拘って依存性の上下を無視するよ
2016/01/10(日) 04:22:46.36ID:sdj7zt3O
アクセル→エンジン→ギア→タイヤじゃなくて
タイヤ.回転で自動車設計してそうだなおまえら。
80デフォルトの名無しさん
垢版 |
2016/01/10(日) 05:12:47.23ID:JhCLPk/2
>>79
そうやって現実の構造を想定している時点でもう駄目なんだよ
81デフォルトの名無しさん
垢版 |
2016/01/10(日) 05:20:12.43ID:JhCLPk/2
ちうかこれオブジェクトが目的語とか言ってる人か?
英語とプログラミングのobject混同とかとてもまともとは思えないよ
2016/01/10(日) 05:34:14.40ID:97NQyWJD
>>74
JavaScriptだと実際foo.barは第0番目の引数を指定するための糖衣構文でしか無い
オブジェクト指向は別にそんな大したものでも、手続き型と相容れないものでもない
指向とは言うが実際の所スタイルの一部だね
2016/01/10(日) 08:13:48.91ID:86WjwACC
いいえ、自転車.操業で設計しています
2016/01/10(日) 08:49:55.36ID:jS8+hJYw
>>82
そういう嘘をまき散らさないでもらいたいなあ。
毛の人といい、技術の普及は嘘との戦いだな。
オブジェクト指向は嘘つきが多すぎた。
レスを投稿する

5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況