オブジェクト指向は愚かな考え。この世は計算式 ★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の存在が証明している
レスを投稿する