[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 11/04 03:18 / Filesize : 386 KB / Number-of Response : 1023
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

オブジェクト指向システムの設計 170



1 名前:デフォルトの名無しさん mailto:sage [2016/05/30(月) 23:08:42.31 ID:pIEuB3Z3.net]
オブジェクト指向に限らず、理由もなく小さく細分化させるのはアホ
オブジェクト指向は役割でオブジェクトに分割するものであって
処理で分割するものではない。

752 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 00:28:47.72 ID:N6ydBJjg.net]
>>735
プリミティブ型にメソッドはやせるのは結構便利だし
後 組み込みの演算子というのがなく演算子がメソッドなのは便利

753 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 00:36:09.08 ID:okPwaxJe.net]
俺が言ってるのは、プリミティブ型に仮想関数はいらないという事
メソッド生やしたりは記述の問題だけなのでどうでもよい
1+1も1.sum(1)もsum(1,1)も記述の問題だけで同じこと
オブジェクトというからには仮想関数が欲しい
しかしプリミティブ型に仮想関数はいらない
むしろ、あると邪魔

754 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 00:43:28.32 ID:N6ydBJjg.net]
rubyみたいなスクリプト言語なら仮想関数だろうがどうでもいいと思うし
scalaだったら実行時のオーバーヘッドを無くす仕組みが備わっている

755 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 00:55:14.53 ID:okPwaxJe.net]
もしプリミティブ型をオブジェクトのように扱いたいなら
オブジェクト自体にvtableを持たせるという、大体のOOPの実装を変えなければならない

まず、多態するときはポインタか参照を使って間接的に行うのが普通
さもなければスライジングが起こって大変なことになる

ならば、オブジェクトにvtableを持たせるのではなく
ポインタや参照がvtableを保持すればよい
なぜなら、どうせ仮想関数はポインタか参照越しにしか呼ばないから
そうすれば、intとか、Cの構造体とか、本来vtableを持ってないものを多態させることができる
vtableを保持したポインタ越しにね

実際、C++のshared_ptrは似たような状態になっている
shared_ptrは、仮想関数を持たない、言い換えればvtableを持たないオブジェクトが突っ込まれることもある
その状態で、shared_ptrをアップキャストすると、本来のデストラクタを見失う
ベースクラスのデストラクタしか見えなくなる
このまま参照カウンタが0になって解放されると・・・
それじゃ困るので、shared_ptrは参照カウンタと一緒に本来のデストラクタを保持している

756 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 01:08:03.93 ID:N6ydBJjg.net]
scalaはコンパイル前はプリミティブは完全にクラス

多態を使いたいなら静的ディスパッチ+マクロでzero-overhead
だな

757 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 01:19:29.38 ID:pfL89vbp.net]
いや39yenさんすげぇわ

まあ、ここまで文章で表現できなくても

「なんかオブジェクト指向で設計しない方が問題起きなくね?」

ってのは常々思ってたけどね
オブジェクト指向って利点ないんだよなぁ
って言うと人格攻撃始めるしね(笑)

758 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 01:23:23.27 ID:N6ydBJjg.net]
>>742
そんなに人格批判されてたか
オブジェクト指向の批判と言いつつjavaの批判ばっかしてたような気が

759 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 01:25:21.33 ID:pfL89vbp.net]
>>743
いや別のスレでもさ
オブジェクト指向役に立たないよ
って言うと
真のオブジェクト指向使いが来てレベルが低くてお話にならないって
お墨付きをくれるじゃん

760 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 01:31:29.24 ID:N6ydBJjg.net]
>>744
いや別のスレの話されても知らんがな
2chだからそういう人ばっかなのはしょうがないし
それに関数型界隈からみてオブジェクト指向批判って昨今そんなに珍しくないじゃん?



761 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 01:42:10.16 ID:UaKeA7lT.net]
>>738
俺はRuby使いでもないんだが、個人的に思うのは、
あれは多分「対称性」を増して多態(または同一関数で処理)するためではないかと。

多態する時、中身がオブジェクト(参照渡し)とプリミティブ(値渡し)だと扱いを変えないといけない時が多い。
また、オブジェクトの場合にはgetter等での対応も可能なのだが、プリミティブだとこれができない。
結果、要するに一つの記述で済ませられなくてウザイ。
とにかく、形が揃っていることが重要。

単発でプリミティブに積極的に仮想関数はやして、ってのはそちらの言うとおり要らないと思うが、
オブジェクトと多態しようとすると、オブジェクト的アクセスが出来ないと無理だ。
だからRubyの仕様は、あれば便利だろうなとは思う。

>>740
Rubyは速度を気にする言語ではないので、多分Rubyは全てが全部ガチのオブジェクトなのではないかと思う。
ただ繰り返すが、俺はRuby使いではないし、詳しい仕様も知らないから、完全に推測だが。

762 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 02:13:17.50 ID:okPwaxJe.net]
RubyはRubyで涙ぐましいことやっているよ
ポインタは必ず4の倍数になるから
ポインタとして絶対使わない値に数値を詰め込んでいる
ただ、個人的にはそこまでしてプリミティブ型をオブジェクトにしなくてもよいと思っている
理由はコンピュータにとって、その方が自然だから
素直な実装を好むのでね

763 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 02:13:48.35 ID:yxmdKndQ.net]
Rubyも、primitive っぽく、オブジェクトへのポインタに、
直接、Fixnum(小さい数値)・Symbol・nil・真偽値の値を納めて、メモリを節約している

そしてたぶん、それらをオブジェクトとして扱うと、
(オブジェクトのメソッドを呼び出す際、)
何か特別な処理をするのだろう。Boxing, Unboxing

764 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 02:52:03.94 ID:N6ydBJjg.net]
>>747
へー勉強になるわ
俺はてっきり他のオブジェクトと同じように扱うのかと思ってた

765 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 14:20:59.62 ID:88+5arvI.net]
>>708
> .net Frameworkの図体のでかさを見てから
って言ってるけど「図体のでかさ」ってどういう意味?対象範囲が広いってこと?
具体的に何を指して.net Frameworkはモノリシックだと言っているんだ?
そして、その問題はオブジェクト指向じゃなければどうやって解消できたんだ?

すべてを説明して初めてまともな主張になるのに相変わらずの単語の羅列。
単語を羅列して満足するのは中学生っぽいからやめよう。

766 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 19:29:59.14 ID:4wogmex0.net]
パソコンの構造自体がオブジェクト指向が出来る様になって無いんだから
誤魔化すしか無いんだ。

767 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 20:34:02.75 ID:I5hI2Tg9.net]
関数型がOOよりマシに感じるのはOOに比べて普及してないから
OOでクソ設計してる連中もそろそろそっちに行くから関数型に代わるパラダイムを探しとけ

768 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 20:57:47.03 ID:88+5arvI.net]
関数型だけでシステムを設計できんの?
データオブジェクトの更新とかどうすんだ?

769 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 21:09:20.34 ID:okPwaxJe.net]
というかマルチパラダイムでよいんだよ
一つの方法で全てしなければならない必要はどこにもないからな

770 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 21:17:51.69 ID:88+5arvI.net]
>>754
併用するやり方は知ってるけど
オブジェクト指向から関数型みたいな書き込みがちらほらあるのは分かってない奴が書いてるだけ?



771 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 21:23:28.39 ID:I5hI2Tg9.net]
立ち位置コロコロ変えながら長文で煙に巻いとる奴への皮肉で書いとるだけやぞ

772 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 21:28:12.06 ID:Box2vTFt.net]
>>753
C言語でアプリは作れないの?

773 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 21:29:12.26 ID:okPwaxJe.net]
あーこれは荒れる予感

774 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 21:31:58.39 ID:UaKeA7lT.net]
>>747-748
いやそれは使い方にもよるが、多分プリミティブをオブジェクトにするためではなく、
GCヒープの二重ポインタアクセス **obj をケチっているだけだぞ。
V8(ChromeのJavaScriptエンジン)でも同じだ。
> V8 は Ruby と同様, 整数値はヒープにとらずポインタに埋め込む. だから 整数値をあらわす Smi (small integer) クラスのコードは少し面白いことになる.
> // objects-inl.h
> int Smi::value() {
> return reinterpret_cast<int>(this) >> kSmiTagSize;
> }
> steps.dodgson.org/bn/2008/09/07/
(モロにRubyと書いてあるが、気にしてなかったわ、、、)
JavaScriptでは整数はプリミティブだ。
それでも、**obj よりも (int)(*obj)>>1の方がケチれるし速い。(とgoogleは考えた)
これは型無しGCヒープだからだよ。

プリミティブは固定長だから管理ヒープのヘッダ側に突っ込める。
丁寧にやるのなら、オブジェクトヒープ(可変長)とプリミティブヒープ(固定長)を分けろということになるが、
2つ作るのは管理上かなり面倒な事になる。
したがって、ヘッダ側に突っ込むのは悪いアイデアではない。

というか、これについては大して努力も要らないし、O(1)で済むし、(貧民からすると)涙ぐましいと言うほどでもない。
C的といえばそうだ。1ビットでもケチろうというのが元来の(富豪プログラミングではない)Cの世界だ。
だから生まれながらの大富豪が「涙ぐましい」と感じるのも分かる。

余談だがV8のチームはド貧民ではない。同URLで
> // objects.h
> // Formats of Object*:
> // Smi: [31 bit signed int] 0
> // HeapObject: [32 bit direct pointer] (4 byte aligned) | 01
> // Failure: [30 bit signed int] 11
となっている。ド貧民なら書き込み時のOR命令をケチるためにHeapObjectを00にアサインする。
Matzが貧民なのかド貧民なのかは俺は知らない。

775 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 21:35:52.33 ID:okPwaxJe.net]
うん、俺もそう思う

776 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 22:08:36.12 ID:88+5arvI.net]
>>756
そういうことな。

777 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 22:09:43.70 ID:88+5arvI.net]
>>757
オブジェクト、関数型って区別するときはCは手続き型だろ。

778 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 23:30:38.18 ID:UaKeA7lT.net]
収まったか?ここまでに分かったことを纏めておくぞ。

1. 1の>>1は無能。
2. Javaはゴミ。
3. OOPはまやかし。

異論ある奴は96時間以内に反対弁論を適宜開始してくれ。
無ければ次の議題があればそれ、それもなければ解散だろう。
次の議題の優先提出権は ID:fuiY39en にあるとするのが妥当だろう。

779 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 23:39:18.18 ID:88+5arvI.net]
>>763
お前>>1を意識し過ぎw
論破されたのがよっぽど悔しかったんだなw

780 名前:デフォルトの名無しさん mailto:sage [2016/06/06(月) 23:52:53.12 ID:qaNk8WrT.net]
Collectionとか有名どころのフレームワークとか使う時は気にならないけど
同僚がOOP的に作った物使ったり、自分でそういうのを目指すときは凄い違和感がある



781 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 00:10:23.92 ID:Gat57in+.net]
ついでに言っておくけど、

>>752
> 関数型がOOよりマシに感じるのはOOに比べて普及してないから
これは俺もそう思う。叩かれてないから埃も出てないだけ。
とはいえ、選択肢が増えることはいいことではある。

>>765
それはいわゆるスタティックおじさんの主張と一致する。
「馬鹿製のOOPなんて糞の役にも立たない。
謹製クラスはパーツとしては極めて優秀なので、それだけ使っていれば事足りる」って奴だ。
俺はこれについては「使い方が悪い」という立場だが、(OOPは正しく使えば有用)
達人にしか使えないシステムなんてつまりゴミ、という考え方も出来る。
>>631はそれ以前で、そもそも筋が悪いからゴミ、という立場のようだが。

782 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 00:13:04.94 ID:AF8c7GVP.net]
というか、多くのフレームワークが
オブジェクト指向を採用していることからも
オブジェクト指向が有用だってのは火を見るよりも明らかなわけで

783 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 00:23:09.28 ID:AF8c7GVP.net]
あと関数型であればテストしやすいのは確かだけど、
関数型であればアプリを作りやすいとは限らないよね。

784 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 00:27:18.57 ID:a1/3IcbT.net]
>>768
テストがしにくい方がアプリが作りやすいとおっしゃる?

785 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 00:29:10.50 ID:wZ7jqyPr.net]
>>769
テストだけが構築のしやすさを決める要因じゃないだろ。

786 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 00:35:25.39 ID:a1/3IcbT.net]
>>770
いや全部テストだと思うわ
不具合が一件もなければ誰も設計なんてせんもん
したらテストがしにくいってのはかなりコアな部分でダメなんだよ

787 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 00:42:39.37 ID:wZ7jqyPr.net]
>>771
バグがなければ設計しなくなるのはどうして???
>不具合が一件もなければ誰も設計なんてせんもん

788 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 00:47:09.94 ID:Gat57in+.net]
>>767
LispやHaskellが本格的に使用され始めたら、関数型のフレームワークがごろごろ出て来ますー(棒)

789 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 00:48:44.00 ID:nXPTtP+t.net]
>>773
じゃあ一生無いですね

790 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 01:13:07.58 ID:AF8c7GVP.net]
>>771
例えばデータベースを使うウェブアプリってのは、殆どというぐらいたくさんある。
実績のあるMySQLを使う。

その中で例えば、フォームからユーザーの作成ボタンを押したらユーザーを作成する。
この時データベースにはユーザー名とメールアドレスと仮パスワードが記録されてており
メールアドレスにメールが送信される。

そのメールのアドレスを表示すると仮パスワードと新しいパスワードを
入力するフォームが表示され、そこに仮パスワードを新しいパスワードを入力し、
仮パスワードが一致すれば、新しいパスワードを登録して、ユーザー登録が完了する。

いうとありがちなテストを、関数型言語(と関数型用のフレームワーク)で記述するとどうなるの?

面倒なら具体的に書かなくてもいいけど、どういったツールを使って
どんな感じでやるのか教えてくれない? まったく想像つかないんだよね。



791 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 01:14:33.37 ID:Gat57in+.net]
>>771
内容については同意。
ただ、だからといって関数型の時代が来るとは思わないが。
普通に考えれば、テスタビリティに問題があるのならそこを改善した「改善版OOP」を使おうということになる。
本質的に駄目な場合は諦めるしかないが、そこまで駄目だとも思わない。

なお、どうも馬鹿が2匹いる。
俺は付いて来れない奴は置いていった方がいいという立場だ。
当たり前の事を説明しても無駄に時間がかかるだけ。
ある程度の議論速度を保ったほうが質のいい議論が出来る。

792 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 01:17:12.72 ID:wZ7jqyPr.net]
>>776
矛盾したこと言って説明できなくなるバカ二匹の自己紹介乙。

793 名前:775 mailto:sage [2016/06/07(火) 01:29:47.52 ID:AF8c7GVP.net]
少し質問が曖昧かもしれないからもう少し具体的に書く。
まずオブ

794 名前:Wェクト指向と関数型言語のハイブリッドである
Scalaならこれらをどうやるかだいたい想像できるので省く。

これらのアプリのテストを行う時

1. 関数型言語には何を使う?
2. ウェブフレームワークには何を使う?
3. 開発用のウェブサーバーには何を使う?
4. URLとコントローラ相当へのルーティングの例
5. モデル相当に必要なデータベースと関数型へのマッピング?とかはどうするのか?
  (ORMはオブジェクトへのマッピングだから違うだろう?)
6. ビュー(HTMLへのテンプレートエンジン)は何を使う?
7. JavaScriptとCSSへのサポート機能(Railsでいうアセットパイプライン的な仕組み)
8. テストコード(ユニットテスト相当)は何で書く
9. エンドツーエンドテストには何を使う?

例えばRailsとかはこれらを包括的にサポートしてるんだよね。
このレベルでアプリを開発しやすいと言っているわけよ
[]
[ここ壊れてます]

795 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 02:03:02.34 ID:Gat57in+.net]
>>778
そりゃ自分で答え言っているのと同じじゃん。君の意見は、
「Railsには素晴らしいフレームワークがあるからアプリ開発がしやすい」だろ。
なら関数型もエコシステムが回り始めたらこの点は改善されてしまうのさ。
しかもテストしやすい=デバッグにかかる時間が短い=フレームワークが出来上がる速度も速い、なんだよ。
(最大の問題は、その日が来るのかどうかだが)

今の議題は、「関数型」「OOP」のどちらがアプリ開発しやすいか?だろ。
「『今』フレームワークが揃っているから」というのは「現在」限定ならいいが、上記議題なら論点がずれているだろ。

テストしやすいってのは本質的にプログラミングしやすいって事なんだよ。
「関数型」が糞だって言われているのは実行速度の方だろ。
あれは本質的に遅いから、今後とも改善しないと思うし。


煽るだけしかできないもう一匹の池沼と比べて、食らいついてこようとするその姿勢は評価するぜ。
だから説明を書いた。

796 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 03:28:03.53 ID:AF8c7GVP.net]
>>779
机上の空論はどうでもいいよ。
それでアプリは開発しにくいんだよね?

797 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 03:28:55.02 ID:AF8c7GVP.net]
関数型が本当に開発しやすいならば、
フレームワークはとっくにできていておかしくないはずだ。

798 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 04:30:33.62 ID:nXPTtP+t.net]
背理法

799 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 09:25:11.47 ID:gm11/fKn.net]
真のオブジェクト指向は、小さなコンピュータを無数に詰め込んだ理想装置の上でしか成り立たない。
いまやっているのは、所詮はナンチャッテOOPでしかない。

800 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 09:31:28.43 ID:lnz4LVtA.net]
それをいうならマルチタスクだってそうなんだが。



801 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 09:40:33.90 ID:gm11/fKn.net]
マルチタスクじゃ、プログラムリソースが全部載せだからダメなんだよ。

802 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 09:49:26.44 ID:NavrVuI3.net]
>>783-785
ごめん、よくわからん

803 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 09:50:56.22 ID:gm11/fKn.net]
よく分からないのは、オブジェクト指向を理解していないから。

804 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 09:55:11.46 ID:NavrVuI3.net]
オブジェクト指向は
『人間が』プログラム開発を行う上で、ソースコードの複雑さ(開発の進めやすさ、理解しやすさ、メンテナンス性等)を何とかする為の技法
だと思ってるけど違う?

805 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 09:55:18.73 ID:gm11/fKn.net]
オブジェクト指向ってのは、たとえるなら、多様な生物が寄せ集まって生態系を形作っている様な物。
万能生物を1体作ろうとしてはいけない。

806 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 10:02:22.59 ID:nXPTtP+t.net]
つまりマイクロサービス?

807 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 10:04:05.56 ID:WYjIc07a.net]
> ID:gm11/fKn
アラン・ケイのオブジェクト指向を持ち出すなら最初にそうだと言わないと駄目だよ
今の流れは(このスレも世の中も)ストラウストラップが再定義したオブジェクト指向がベースなんだから
いきなり再帰的なコンピューターシステムとか生物とか生態系とか言い出しても混乱を招くだけ
ケイのメッセージングOOPのファンだしSmalltalkも好んで使っているので気持ちは分かるんだけど

808 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 10:09:11.65 ID:gm11/fKn.net]
つまりみんな怪しい新興宗教に騙されてるワケか。

809 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 10:13:18.02 ID:gm11/fKn.net]
オブジェクト指向が神の行いなのだから、凡人においそれと真似出来るワケが無い。
だから凡人のやるオブジェクト指向が問題を山の様に抱えるのは当然なのだよ。

810 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 10:19:24.81 ID:wZ7jqyPr.net]
>>771で「不具合が一件もなければ誰も設計なんてせんもん」って言ったのはどういう意味?
こんな意味不明なこと言ってそれを指摘されると「分からないのがおかしい!!!」って言ってるのは周りから見てると笑っちゃうぞ。
それで「勝った勝った!」って騒ぐんだろw

ちゃんと議論したいなら質問には答えろ。
「僕ちゃんの言ってることが正ちいんでちゅ」ってやりたいならここに書き込むなよ。



811 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 10:23:49.00 ID:wZ7jqyPr.net]
>>779
それまで「OOPはテストしずらい」と言ってたくせに
「関数型もフレームワークができればOOPに追いつく」と言い出す。
言ってることが支離滅裂。

ロジカルバグ量産してんぞ。

812 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 12:15:20.56 ID:NYG4EICE.net]
大事なのは、自然の生態系を模したところで、それが便利かどうかは場合によるという点
ここが分かっていないとダメ
インターネットは沢山の機器が生態系のように協調して、上手く動いている
うむ、そうかもしれない
しかし、1+1のような単純明快な計算に生態系がどうとか、そういう壮大さは必要ではない
小学生に1+1を教えるときに生態系の話をしたりしないし
大学の数学科でまじめに1+1を考える場合も、突然生態系の話になったりはしない
まさにここが重要で
スケールだとか、粒度だとか、そういう問題がある
プログラムは最終的に物理的なコンピュータで動かすから
一台のコンピュータのメモリや実行速度などの影響を受けるし
プログラミングという作業も、一人が受け持つに相応しい作業量というものがあるから
CADで図面を引き延ばすかのように、簡単にスケールしたりはしない
必ず普遍的な物理世界の係数が絡んでくる
だから大きなもので上手く出来たからと言って、小さなものでもうまくいくとは限らない
軽トラを図面上でそのまま拡大しても大型ダンプカーにならないし、逆もまたしかり

だから、全てを同じ方法でする必要はない、偏る必要もない、とこのスレでさんざん言っているのだ
絶えずスケールを意識する必要がある

813 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 12:30:45.56 ID:gm11/fKn.net]
世界はフラクタルなのだから、物の大小によって見方を変える必要なんか無いよ?
変える必要があるのは、手に持っている定規の方。
顕微鏡の中を見るのに1メートル定規じゃ測れないだろ?

814 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 12:30:53.14 ID:NYG4EICE.net]
文章から文字列を検索したいとして、頭から順番にマッチするか調べていくシンプルなアルゴリズムにしたとしよう
実装が簡単だしバグる可能性が低く、良い選択かもしれない
十分なレスポンスも得られるだろうね
だけど、同じアルゴリズムでGoogleのWeb検索と同じものを作ろうとするのは
誰がどう考えてもバカげている
永遠に等しい時間を待たされるので誰も使わない
小さな規模で上手くいったからと言って、大きな規模で上手くいくかはわからないということ
この場合であれば、人間の待てる時間は決まっていて、それは検索規模と一緒にスケールしないからダメ、となる
これこそまさにエンジニアリングの要

だから、いくらインターネットを持ち出して、生態系の様に振る舞っていて、上手くいっているといったところで
我々の書くプログラムは、インターネットと比べてあまりにも規模が小さいので、スケールが全然合わない
インターネットが必ずしも我々の書くプログラムの参考になるとは限らない
もちろん参考になる部分もあるが

815 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 12:34:28.28 ID:nXPTtP+t.net]
KMPを並列で走らせてるだけじゃないの?(すっとぼけ)

816 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 12:34:54.36 ID:DfsgEpY7.net]
将棋作ってるヤツはどこいった?

817 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 12:35:27.46 ID:NYG4EICE.net]
よくある、もしバッタが人間のサイズだったら、とかいうのは馬鹿げているという事


818 名前:oッタをそのまま拡大したところで、バッタを取り巻く世界の物理係数はそのままだから上手くスケールしない
バッタはバッタのサイズだから、あれだけ跳躍するのだ
[]
[ここ壊れてます]

819 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 12:37:24.23 ID:gm11/fKn.net]
組み立てるレゴブロックの大きさを変えないからそうなるんだよ。
普通のレゴブロックで実物大の蟻は作れないけど、ディテールを表せる十分に小さなレゴブロックを使えば、上手くい。

820 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 12:41:39.96 ID:gm11/fKn.net]
設計なら粒度の取り方の問題に言い換えればいい。



821 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 12:41:58.61 ID:wZ7jqyPr.net]
やっぱり具体的な問題を想定しないと、無益な空想を垂れ流す無意味で気持ち悪いスレになってしまうな。
「Cはメモリリークが起きない」と思ってる知識0の奴が長文を延々と吐き出してるようじゃ…。

822 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 12:44:59.90 ID:axhFPoUK.net]
なんか前提をずらしながら良くわからん事書いてるな

823 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 12:46:42.86 ID:DfsgEpY7.net]
>>802
十分に小さなレゴブロックにするとプラスチックのままだとブロックの側面が薄くなりすぎて、ブロック同士をはめ込んだ際に割れるかもしれない
シリコンなど柔軟性がある素材に変更しないとうまくいかないかもしれないってのが、今言われてるスケールを考えるって事でしょ

824 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 13:04:30.27 ID:gm11/fKn.net]
>>806
ブロックとして使うプログラムは、実は物凄く小さい。
幾ら積み上げてもバッタはおろかアメーバさえ形作るのが大変。
そのくらい小さい。
いま自分たちが試みているのは、そのスケールの遥かに違う物を、
いかに上手く作るかと言う方法。
いきなり埋めていくんじゃ無くて、何段階にも階層を分けて効率良く模倣する方がいいだろ?

825 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 13:30:19.95 ID:NYG4EICE.net]
しかし実際に実行するのは物理的なコンピュータだし
書くのは人間であるから人一人がする作業量も相応しくなければならない

という風に、ロジック以外の現実的な物理係数があり
プログラムをCADみたいにグニャ〜んと引き延ばせたとしても
それを取り巻く周りまで一緒にスケールしないから上手くいくとは限らない

小さなものには小さなものの理屈があって
大きなものには大きなものの理屈がある

町の商店街に行って、小さな八百屋に向かって、イオンと全く同じことをすればもっと流行るよ、と言えば殴られる
もしくは、イオンのシステムをそのまま八百屋にもっていっても、規模が違いすぎて要らないって言われる
だ・か・ら、エンジニアリングが必要で、それが仕事というもの

ある程度大きな尺度であれば、生態系のような作りは上手くいくように思うし
一方で、1+1のようなプリミティブなものに、生態系のような大げさな仕組みは無駄であり、要らないという直感もある
全てを同じ考え方でする必要はないし、統一する必要もない

826 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 13:35:12.26 ID:No96cPk6.net]
>>794
だからさ
どう組んでも不具合が一件も出ないような現場なら設計なんて時間の無駄じゃん
そんな現場がもしこの世にあったら設計をするなんて発想が出ないわけ

つまり設計ってのは不具合を出さないためにやるわけよ

827 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 13:40:44.85 ID:axhFPoUK.net]
ドキュメントを残すとか、設計フェーズとかそういう話?
日曜プログラミングだろうとREPLのお試しだろうと、
頭の中には必ず設計があるし、それは成果のコードの中に表れると思うけど

828 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 13:51:57.70 ID:WYjIc07a.net]
>>796
> 大事なのは、自然の生態系を模したところで、それが便利かどうかは場合によるという点

発案者のアラン・ケイも大きく複雑なシステムでこそ当てはまる比喩だと言及してますし

> In short, you can make something as simple as a clock and fix it when it breaks.
> But large systems have to be negotiated with, both when they are grown, and when
> they are changed. This is more biological in nature, and large systems act more
> like ecologies than like simple gear meshing mechanisms.
squab.no-ip.com/collab/uploads/61/IsSoftwareEngineeringAnOxymoron.pdf

そこをあえて 1+1 とか単純ものに落とし込むのは、Smalltalk などで 1+1 もメッセージで
文法上扱われていることへの批判でしょうか?

ただケイは 1+1(同文書では 3+4 等)もメッセージにするのは、文法やルールを単純にすることで
子供や非プログラマーの理解と着想を助ける配慮だとは言っていても、
こういうところでも動的遅延結合性が活きるとあえては主張していないですよね?

829 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 14:18:34.52 ID:gm11/fKn.net]
地図ひとつ取ってみても、スケールで表示する対象を切り分けてる。
世界地図見て俺の家が載ってないとか、町内会の道路地図見てアメリカはどこだとか、そんな屁理屈言ってるようなもんだよ。
規模が違えば対象の粒度も変わるんだから、登場する概念だって変わって当たり前。

830 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 14:24:26.11 ID:gm11/fKn.net]
でも基本概念として、どのスケールでもオブジェクト指向で考える事に何の問題があるのか?
対象の塊の大きさに見合う分け方を行えばいいんだ。



831 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 14:31:34.25 ID:gm11/fKn.net]
そしてそのひとつひとつの中身もまたオブジェクト指向で作るんだ。
当然、またその中身もな、またまたその中身も

832 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 14:42:15.44 ID:axhFPoUK.net]
何らかの粒度で切り分けて管理しやすくするなんて、みんなが普通にやってる事じゃん
>>783の理想装置云々はわからんが

833 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 14:45:42.00 ID:2wZrFkOW.net]
曼荼羅w フラクタル図形ww 無限地獄www

834 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 15:29:14.94 ID:gm11/fKn.net]
残念賞
無限地獄にはなら無いんだなぁ
最後は言語の基本動作単位になって、
たいていはそこまで細かくする前に
標準クラスライブラリに落ち着くんだから。

835 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 17:42:28.50 ID:wZ7jqyPr.net]
>>809
設計は構築するものを明確にするためのもの。
「設計ってのは不具合を出さないためにやる」ものじゃない。

836 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 17:54:39.21 ID:opxniSDO.net]
コーディングこそが設計

837 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 19:07:45.74 ID:80JpygVn.net]
>>818
それは要件定義で終わってるだろ

設計はどうやって作るか?
の話だよ
バグらないならさっさと作っちゃえばいい

838 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 19:21:24.71 ID:Ic9MVfcw.net]
(何言ってんだこの人…)

839 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 19:32:48.37 ID:80JpygVn.net]
>>821
だから問題が出ないなら
設計はいらないんだよ
さっさと作れよw

元の話題に戻ると
テストがやりにくいってのは設計の目的から逆行してるよね
って話だったわけよ
わかった?

840 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 19:35:17.52 ID:BAxJi/a8.net]
(もうそっとしとこう)



841 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 19:35:40.04 ID:wZ7jqyPr.net]
>>820
要件定義は「こういうことが要求されている」
設計は「それを実現するにはこういうものを作ろう」

何を作るか決まってないのにどうやって作るんだ?

842 名前:デフォルトの名無しさん [2016/06/07(火) 19:36:06.85 ID:DORepsm7.net]
何を言ってるんだこいつは

843 名前:デフォルトの名無しさん [2016/06/07(火) 19:37:26.85 ID:DORepsm7.net]
>>822


844 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 19:40:33.63 ID:wZ7jqyPr.net]
>>826
え?

ID:80JpygVnとID:DORepsm7は同一人物だろ?
設計の意味すら知らない奴が二人もいるとは信じられないんだが。

845 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 19:44:05.34 ID:bRI80mcg.net]
>>827
>>825のレス先が>>822だってことだろ

846 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 19:45:07.81 ID:rGbZ9k3R.net]
あーいるいる、設計もろくにせんとロクでもないもの作って動くんだからいいだろって奴なw
大抵リファクタリングやメンテナンスで周りがえらい目に合う流れだわ

847 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 19:45:45.60 ID:wZ7jqyPr.net]
>>828
あー、そういうことね。
設計の意味をここまでを知らない奴が二人もいるはずないもんなw

848 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 19:51:02.06 ID:nzxsUsEV.net]
>>822
そもそもprivateのテストは言うほどめんどくさくない

849 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 19:53:11.55 ID:Gat57in+.net]
そしてJava屋による最高の設計がこれである。
> FizzBuzzEnterpriseEdition
> https://github.com/EnterpriseQualityCoding/FizzBuzzEnterpriseEdition
> echo.2ch.net/test/read.cgi/tech/1463663267/629

850 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 19:54:27.56 ID:80JpygVn.net]
>>824
何を作るかは決まってるだろw
要件を定義したんだぜw
これで何を作るか決まってなかったらまずいだろw

どうやって作るかが決まってないんだがこれは問題が起きないことが確定してるなら
別にいいだろ
ってのが大元の話題な



851 名前:デフォルトの名無しさん [2016/06/07(火) 19:58:49.06 ID:hXIJefGv.net]
>>832
すごい

852 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 20:02:58.68 ID:wZ7jqyPr.net]
>>833
ここまでひどいのはさすがに釣りだろ?






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<386KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef