トップページ⇒tech
1002コメント417KB

オブジェクト指向システムの設計 171 [無断転載禁止]©5ch.io

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2016/06/11(土) 18:18:23.98ID:NAulAg4n
http://d.hatena.ne.jp/asakichy/20090122/1232879842

・単一責任の原則(SRP)
・オープン・クローズドの原則(OCP)
・リスコフの置換原則(LSP)
・インターフェイス分離の原則(ISP)
・依存関係逆転の原則(DIP)

オブジェクト指向設計に関する原則の頭文字をとって「SOLID」とまとめられた原則集。
http://qiita.com/hirokidaichi/items/d6c473d8011bd9330e63

S SRP Single Responsibility Principle(単一責務の原則)
「クラスを変更する理由は1つでなければならない」
O OCP Open/closed principle(開放閉鎖の原則)
「クラスは拡張に対して開き、修正に対して閉じていなければならない」
L LSP Liskov substitution principle(リスコフの置換原則)
「派生型はその基本型と置換可能でなければならない」
I ISP Interface segregation principle(インターフェース分離の原則)
「クライアントが利用しないメソッドへの依存を強制してはならない」
D DIP Dependency inversion principle(依存性逆転の原則)

前スレ
オブジェクト指向システムの設計 170 [無断転載禁止]©2ch.net
http://echo.2ch.net/test/read.cgi/tech/1464617322/
0153デフォルトの名無しさん2016/06/14(火) 13:52:58.25ID:ivY0lwHl
>>152
だったら建築の話を抜いて書き直せ。
内容がないことに気付くだろうから。
0154デフォルトの名無しさん2016/06/14(火) 13:58:18.05ID:HFPvSksZ
>>153
内容なんて全くないよ
普通にソフトウェア作ってれば知ってる事を知らない奴がいるからわざわざ他の製造業を引き合いにして説明してんだから
それとなぜそこまで絡むのかも俺には理解できないけどな
0155デフォルトの名無しさん2016/06/14(火) 14:03:14.85ID:ivY0lwHl
>>154
だろ。内容ないんだから書き込むなよ。
お前が思ってるより他の人は知識があるし、何も知らないで連投してる荒らしは相手すんな。
0156デフォルトの名無しさん2016/06/14(火) 14:35:00.21ID:LIAgHHXu
建築の話ってあれか、OOPを詳細に説明するの面倒くせって奴に、建築なら説明出来ない物は使わないって喚いてた馬鹿か?

建築士だって、全く何も知らないどころか「強度計算なんて役に立たない無用の長物」と喚いてる馬鹿に強度計算の詳細を説明しろと言われたら面倒くせってなるだろw
それ説明して金払ってくれるなら説明するだろうが、客でもない奴にそれを説明する建築士がどれだけいるかねぇ?
0157デフォルトの名無しさん2016/06/14(火) 14:41:18.16ID:ivY0lwHl
>>156
だよな。
0158デフォルトの名無しさん2016/06/14(火) 16:23:27.83ID:LIAgHHXu
もうひとつ建築の話を引っ張りだしてやろうw
建築では設計段階で作るという事を全くしないのか?

答えは否、日常的に作るという事をしている
ソフトウェアと違って実物に近いものを作るのはサイズ的にもコスト的にも困難であるため多くの場合模型という手段を取るだけだ
建築模型士という職業が成立するぐらいには建築業において設計段階での試作が行われている
基本的な型の決まったセミオーダーの建築であれば最終的な図面を固める前にモデルルームやモデルハウスと言った限りなく完成品に近い試作品を使って最終設計を詰めることもある

>同じ製造業でありソフトウェアは後発で設計・製造・試験のノウハウは建築業含む他の製造業から取り入れているのは明白
>>152の言うこれが正しいするならば、プロトタイピングはもっと推奨されるべきだな
0159デフォルトの名無しさん2016/06/14(火) 16:49:38.14ID:dYSnVaKQ
建築業は、アナロジーやメタファーとして使われてる(ことが多い)だけで、別にソフトウェア開発が建築業の
具体的プロセスのノウハウを取り入れてるわけじゃないと思うよ。

建築模型士という職業が成立するということと、プロトタイピングが重要なことに、関連性はないと思うよ。

建築業とソフトウェア開発が何か密接な関係があると思われてるのは、クリストファー・アレグザンダーが
建築家だったせいかもしれん。
0160デフォルトの名無しさん2016/06/14(火) 16:58:08.57ID:LIAgHHXu
>>159
建築を例に持ち出したやつへの単なる当てつけなので俺自身は建築とソフトウェアの関係が深いとは全く思っていないよ
0161デフォルトの名無しさん2016/06/14(火) 19:22:36.65ID:x23BehJN
>>145
オブジェクト指向うんこだから
解決策持ってないよね
0162デフォルトの名無しさん2016/06/14(火) 21:06:56.34ID:MJXh41jF
OOがウンコとだけ書かずに自分のお気に入りパラダイムではこう出来るのにOOは出来ないからウンコと書くように
0163デフォルトの名無しさん2016/06/14(火) 21:39:32.89ID:x23BehJN
>>162
設計思想など捨てた
必要なものを必要なだけ作る
形など持たない
無形の位
0164デフォルトの名無しさん2016/06/14(火) 21:52:46.07ID:GeGW2Y+g
その前にウンコとは何か明確に定義したまえ
0165デフォルトの名無しさん2016/06/14(火) 21:59:55.11ID:VJ/4c5wE
まだやってんの?
0166デフォルトの名無しさん2016/06/14(火) 22:17:14.22ID:RUir73Dk
単純梁計算とオブジェクト指向が明らかに釣り合わないだろ
オブジェクト指向を使わないプログラムのほうが、プロとタイピングも容易で論理エラーの検出も容易なんだから

そしてプロとタイピングからスムーズに本設計に以降できないからお前達のいう"出来の悪い"オブジェクト指向フレームワークの出来上がりだ

その出来の悪いフレームワークでもプロトタイプのユースケースでは問題ない設計だったのかもしれない

10KBの入力データサイズ処理とを1GBの入力データサイズに"再利用"できると思っている

割り箸で組んだ橋に人間がのれないことは馬鹿でもわかることだが

計算機もリソースに制約があると考えていないから、再利用できるとかんがえてしまうんだね

事あるごとの変更におびえるのは、アーキテクチャそのものが脆弱だからにほかならず、一から設計できないからなんだよ
いちから設計できる人間は変更におびえる必要ないからな
0167デフォルトの名無しさん2016/06/14(火) 22:23:39.41ID:RUir73Dk
そろしろオブジェクト指向にしかできない素晴らしいことを教えてほしいね

Sunが営業戦略でやってたキャッチコピー以外でてこないしそれは他の言語でもサポートされている

再利用性が高いのなら、なぜ今でも情報システムにたいするコストが下がらず、いまだにIT技術者不足になっているんだろうね
0168デフォルトの名無しさん2016/06/14(火) 22:26:43.03ID:MJXh41jF
はい根拠が無い。やり直し
0169デフォルトの名無しさん2016/06/14(火) 22:30:29.95ID:VJ/4c5wE
>>167
オブジェクト指向が生産性を高めて短時間で高品質で膨大な量の開発を可能にした
ITの仕事はこれで楽になるかと思ったが皮肉にも要求の方も多くなり人間が行う仕事量は減らなかったんだ
この業界の常識だから覚えておこうね新人君
0170デフォルトの名無しさん2016/06/14(火) 22:33:26.92ID:RUir73Dk
再利用性、同じことは二度書かない原則に基づいてかかれたインターフェースまみれ、抽象クラスの継承まみれ、Factoryまみれのハイパーアーキテクチャを積んだシステムに、
オブジェクト指向を理解しているが、このシステムは初めての新人を突っ込んだらどうなるか

この問いの答が想像できない奴でも設計できるのがオブジェクト指向

山のように作られたドキュメントとソースコードをたたき付けて
ドキュメントを読めばわかるといえばいい

そんな文化だよな
0171デフォルトの名無しさん2016/06/14(火) 22:35:21.62ID:RUir73Dk
169
結局何一つ再利用出来なかったってことでしょ?
俺の指摘通りの結果だよね
0172デフォルトの名無しさん2016/06/14(火) 22:42:58.42ID:VJ/4c5wE
>>170
新人もスンナリと頭に入ってくる美しいOOPシステムに気分が良くなるだろうね
逆にOOPをやれない粗雑で扱いにくいシステムに放り込まれた新人は即転職だ
最悪の場合そのまま自殺もありえるかわいそうに
0173デフォルトの名無しさん2016/06/14(火) 22:48:10.44ID:x23BehJN
プロはオブジェクト指向など使わない方がいいことを知っている
いいね
0174デフォルトの名無しさん2016/06/14(火) 22:48:16.02ID:MJXh41jF
>>170
ほら自分のお気に入りパラダイムならどうなるかが抜けてるよ、気をつけて

もう一回書き直し
0175デフォルトの名無しさん2016/06/14(火) 22:51:15.44ID:x23BehJN
プロは無形の位に行き着くんだよ
0176デフォルトの名無しさん2016/06/14(火) 23:08:22.06ID:XorM60VV
俺のお気に入りのパラダイムなら
ドキュメントは関数に紐づくだけだね

このクラスには
このメソッドがあります、
このメソッドは、何々インターフェースを実装しています
このメソッドはObjectクラスから継承されたものです
このクラスにおいては型制約を満たした型パラメータしか入力できません
このメソッドはオーバーロードされます(同じ名前のメソッドがずらずら)

これがクラスの個数だけ繰り返されると
まずドキュメントからしてDRY原則が崩壊してることぐらいわかるよな
自分の欲しい機能だけを簡単に切り出すことができないし、クラスの数だけ同じ文面がくり返される

僕らならこんなことはしない
関数はこんなに恩着せがましくもばければ、クラスを使う度にいらないメソッドを押し売りなんてしない

試しにmsdnでdictionaryクラスのドキュメントでもみてきたらどうだ

正確にはSystem.Collections.generic.Dictionary <TKey,TValue>クラスな

こんだけ長いドキュメントを読み込んで、ようやく使えるこれ

javascriptなら{}って書くだけで使えるんだが
0177デフォルトの名無しさん2016/06/14(火) 23:10:40.26ID:XorM60VV
ここまで単なる辞書型配列、つまりマップを複雑に解説する出来損ないのパラダイムなんて、オブジェクト指向以外ないんだよなあ
0178デフォルトの名無しさん2016/06/14(火) 23:18:26.39ID:XorM60VV
www.kh.rim.or.jp/~nagamura/misc/stroustrup-interview.html

 もうかなり時間がたったしね、C++ が時間の無駄だということにはほとんどの人が気がついたとは思うけど、
でも当初予想していたよりはずいぶん時間がかかったな。
I:  具体的に何をどうやったのかな。
S:  最初はほんの冗談のつもりでね、みんながあの本を真に受けるとは思ってもみなかったんだ。脳みそが半分でもあれば、
オブジェクト指向プログラミングが非直感的で、非論理的で、非効率なことくらいはわかるよね。
I:  え?
S:  それに「コードの再利用性」ときたら…。どこかの会社がコードを再利用したなんて話を聞いたことがある?
I:  いや、実はないんだけども、でも…。
...

I:  だんだん呆れてきたと言わざるを得ないな。プログラマの給料を上げるためにやったって言ったね? それはひどい話ではないのかな。
S:  そうでもない。選択の自由は誰にでもある。こんなに話が膨らむとは思わなかったんだ。
ま、いずれにしても、基本的に僕の策略は成功したんだ。C++ は今や消え去りかけているけど、でもプログラマの給料は高いままだ。
特に、糞みたいな C++ コードをメンテナンスしなきゃならない哀れな連中はね。大規模な C++ モジュールなんて、自分で書いたのでない限りメンテナンスできないことは理解してる?

くそみたいなコードをいじくりまわして生計立てられるようになったのはストラウストラップのおかげだから、感謝するように
0179デフォルトの名無しさん2016/06/14(火) 23:31:50.78ID:M6DJWkXG
>>145
> オブジェクトにたいするパブリックアクセサメソッドを通じたオブジェクトの内部変数へのアクセスが
> 事実上のグローバル変数として機能しているという認識がないのな

それは間違い。

もし、そのオブジェクトがグローバルオブジェクトであれば、
(えっとな、グローバルオブジェクトっていうのはどこからでもアクセスできるオブジェクトって意味だ)

グローバルオブジェクトに対する内部変数のアクセスは、たしかにグローバル変数だと言えよう。


だけど、グローバルオブジェクトなんてめったにない。
ローカルオブジェクトに対する内部変数のアクセスは、全然グローバルじゃない。

グローバル変数って言うのはどこからでもアクセスできる変数のことだ。
グローバルオブジェクトじゃない以上、どこからでもアクセス出来るわけじゃない。


っていうか、なんでこんな超初心者レベルの話をしないといかんのか?
0180デフォルトの名無しさん2016/06/14(火) 23:41:19.90ID:F7mhDIzv
プログラムを複雑にしているのは相互作用で間違いないよね
で、この部分をいかにシンプルにするかにすべてがかかっている、と思っている

AがBのメソッドを呼んで、そのメソッドから逆にBがAのメソッドを呼び返して、さらにAがBのメソッドを呼び返して・・・
とかと、メッセージパッシング合戦はまったくの糞としか言いようがないからしたくない
単に複雑だし、最初にAがBのメソッドを呼び出したとき、Aは自分のメソッドの処理の途中だから、状態が不完全かもしれなく
その状態でBがAのメソッドを呼び返して、Aのメソッドが正しく動くかどうかわからないからね
これはご法度

こういうことが起きないように注意を払ってクラス設計するわけだが
最終的に出来上がった最適解は、クラスという間接的な形でアウトプットされる
本当のノウハウ自体はそこにはなく、別のところにある
なぜそういうクラス設計にしたのかと聞かれると、実際の手続き(メソッド内)で発生するであろう
諸所の動的な問題の話をしなければならなく
静的なベン図のようなものしか考えず、猫と犬は動物で猫はニャーと鳴くから、とかそんな単純なものではない
0181デフォルトの名無しさん2016/06/14(火) 23:43:03.25ID:mQ0l4Gv2
手続き型の代表がC言語でOOはJavaだとして、C言語をバリバリやってる(やっていた)人の方が業界経験も長く実行環境がリソース的にシビアな場面など経験が豊富になる傾向はあると思う。
例えばサーバサイドJavaから入ってフレームワークを利用するような経験が多い人は設計コストは少ないと思うし、それをやり玉に挙げるのはフェアな討論ではないと思う
個人的にはOOPとしてのJavaの利点の一つにカプセル化のための細かなアクセス修飾子にあると思う
例えばC言語のfopenで使うFILEはポインタ型で定義されているが、大概の処理系ではFILEの中身の構造体はヘッダファルに書かれているのである意味公開されている
この関数自体はANSI-C規定なのでIFとしては処理系には依存しないがFILEポインタの中身に関しては規定がないので実装依存になる。
つまりFILEの中身はヘッダに書かれていようが触ってはいけないのが暗黙のルールとなっている。
もちろん処理系が固定でstdiolibの実装を熟知しているなら触るケースがあるかもしれないけどこれは稀なケースだ。
0182デフォルトの名無しさん2016/06/14(火) 23:43:26.82ID:mQ0l4Gv2
Javaならjava.io.Fileもしくはjava.nio.Pathがそれに当たるとおもうが、このクラスが公開しているAPIおよびメンバ変数へのアクセスに関しては制限はない。
これはC言語にはないJavaの強力なアクセス修飾子による恩恵だと言える。ルールベースではなくシステム的にアクセスできないカプセル化の機構はソースコードを見ただけで設計思想が十分に伝わる個人的には説得力のあるコードが書けると思っている。
ただ、このJavaのカプセル化を正しく使って自前のクラスを設計できてる人間がどれだけ居るかと言われると半分にも満たないと思う。
勝手に非公開のメンバ変数やメソッドをpublicに直して動かしましたなんて事する人間は多くいるしpublicが好きならpythonでもやってくれって思う事は多々ある。
別にJavaエンジニア批判をするつもりはないし、C言語書きが皆優秀なんて思ってもいないが、ここでC言語書きの人たちの主張の根源はこんな感じじゃないのかなと個人的に思ったので。
元C言語書きで現在Javaメインでやってる自分としてはヘッダファイル書かなくていいのと最近のIDEのJVM系言語の強力さ、ビルドツールの充実さからJavaの方が気楽で好きではあるけど。
長文失礼。
0183デフォルトの名無しさん2016/06/14(火) 23:50:24.10ID:M6DJWkXG
>>180
> こういうことが起きないように注意を払ってクラス設計するわけだが

普通に「層」という考えで作れば
そういうことは起きないよw

オブジェクト間に層が無くて単一の層で
相互関係がってやるから難しくなるんだよ。

「層」を作ってやれば、大して難しい話じゃない。
0184デフォルトの名無しさん2016/06/15(水) 00:13:10.43ID:ytrU1urc
>>176
>自分の欲しい機能だけを簡単に切り出すことができない
ライブラリを参照したら結局必要ない関数もついてくるしあんまり変わらないんじゃないの?
関数内でほかの関数呼んでる場合もあるし、欲しい関数だけ切り出しても動かない事も多いでしょ

>javascriptなら{}って書くだけ
リファレンスと表記の仕方を比べても意味が無い
それにECMAScriptの公式リファレンスには同じくらい長い文章が出てくると思うよ

>>178
それネタだから
http://www.stroustrup.com/bs_faq.html#IEEE
0185デフォルトの名無しさん2016/06/15(水) 00:16:28.62ID:pWxix8Mt
オブジェクト指向はバカには難しいってことがよく分かるスレだな
0186デフォルトの名無しさん2016/06/15(水) 00:22:32.71ID:wTcNi+2O
技術職なのに、馬鹿でも簡単なものがあるとなぜ思った?w

馬鹿がやって混乱させてるのを見てわかるだろ。
馬鹿がプログラミングするんじゃねーと。
0187デフォルトの名無しさん2016/06/15(水) 00:40:38.22ID:UElfrvhY
簡単なことを複雑にやるばかほど生産性が低い人間はいない
簡単なことしかやれない馬鹿のほうがよほど価値があるよな

OOには生産性もなければ、再利用性もない
プロトタイプには普通動的言語使うし、テストにもいちいちフレームワークが必要だという
静的言語でアジャイルとか言ってる奴とかいるよな、馬鹿なんじゃないの
0188デフォルトの名無しさん2016/06/15(水) 00:45:09.83ID:UElfrvhY
わざわざインターフェース宣言してコツコツ実装しておいてアジャイルですって何いってるんだろうね

極めつけはリフレクション使ったりしてな
シャベルで鉄鋼に穴をあけるばかはさすがにいないだろ

それ使う道具まちがえてますよ
そんなのでも設計名乗れるのがオブジェクト指向
白痴でも設計をなのれるのは、OOをのぞいてほかにねえから
0189デフォルトの名無しさん2016/06/15(水) 00:45:34.64ID:lIUne/jR
この業界に限らず自分の理解出来ない物を否定して自分のやり方こそ至高っていう馬鹿な老害はどこにでもいるからなぁ
0190デフォルトの名無しさん2016/06/15(水) 01:00:33.77ID:ytrU1urc
>>187
手続き型、関数型vsOOじゃ戦えなくなってきたから静的vs動的に切り替えたの?それOO関係無いよね

もう一回書き直し
0191デフォルトの名無しさん2016/06/15(水) 01:02:38.10ID:SLYlY5zm
確かにprivateは微妙だな
最近はもうpakage defaultでいいやってなってる
0192デフォルトの名無しさん2016/06/15(水) 01:11:51.77ID:pWxix8Mt
って、お前は思ってるんだろ?
0193デフォルトの名無しさん2016/06/15(水) 01:19:50.46ID:SLYlY5zm
レガシーコード完全ガイドとかユニットテストのベストプラクティスから着想を得たんだけどね
0194デフォルトの名無しさん2016/06/15(水) 01:19:58.13ID:Onzr2dah
>>187
よお馬鹿
0195デフォルトの名無しさん2016/06/15(水) 01:20:31.94ID:gHR2VZA2
>>187
> 簡単なことを複雑にやるばかほど生産性が低い人間はいない
> 簡単なことしかやれない馬鹿のほうがよほど価値があるよな

これは日常生活レベルで同意出来る

> OOには生産性もなければ、再利用性もない

生産性に関しては手続き型のモジュール化構造もOOも違いはないと思う
再利用性に関しては切り口次第だし、汎用性を上げなければ再利用性は上がらないのでOOだからとは思えない

> プロトタイプには普通動的言語使うし、テストにもいちいちフレームワークが必要だという

それは要件定義フェーズでモック実装のUI評価とかなら分かるが設計評価・性能評価を意図したプロトタイピングならプロダクトコードで利用予定の言語で書くのが一般的だと思う
テストフレームワークはただのツールなのでメリットがないなら利用しなければいいだけ。必要なんて事はない

> 静的言語でアジャイルとか言ってる奴とかいるよな、馬鹿なんじゃないの

それは動的言語は開発速度が早い神話かなにかの話かな?
0196デフォルトの名無しさん2016/06/15(水) 01:21:49.35ID:UElfrvhY
自分が何をやっているかわからないということがリスクそのものだとバフェットはいうが、そんなリスクの塊みたいな馬鹿が情報システム触るのだけはやめてほしいね

それこそ再利用性もなければパフォーマンスもでない、でも金をかけたから使わざるを得ないような、技術的負債を山ほど積み上げるからね

だいたいOO黎明期で使われてたフレームワークや、開発手法が陳腐化している時点で終わってるよな

C#の例で行くとまずコレクションクラスからして非ジェネリックと、ジェネリックの二つがある

List<Object>とArrayListは同じものと見なせるのかそれとも違うものなのか

データベースだってefだのlinq to SQLだの直接SqL発行するだのいろんな手口がある

そしてefにいたっては、いわゆる貧血ドメインモデルそのもので、なぜそんなフレームワークが一番最新のものとなっているかなんてオブジェクト指向の文脈からすれば謎だ

GUIにいたってはsilverlightは撤退したし、wpfはxamlとかいうオリジナルxml勉強しないとだし、mvvmも勉強しないとだしweakreferenceがどういう内部挙動を示すのかまともなドキュメントはなく、かといってイベントドリブンライクにかくのは古臭いし

マルチスレッドに至っては...

もうやめようか、おれはどうすればいいかを知っているし、
再利用性に富んだオブジェクト指向フレームワークというのはいけてないという理由だけで腐り、新たなフレームワークが作られる

少なくとも関数型チームからすればqsortはいつまでたってもqsortだし、map reduce filterは言語によって様々な名称にはなるが、同じように使える
ドキュメントを読まなくてもシグニチャがわかれば、言語に寄らず使える
C#なら、select aggregate whereだったか
0197デフォルトの名無しさん2016/06/15(水) 01:31:43.89ID:UElfrvhY
少なくともオブジェクト指向言語がマルチパラダイム化してきたのはいいが、旧態依然のオブジェクト指向と様々な部分で衝突してきて、いよいよもってくそ化しはじめている

俺はなにをすべきかだいたいみえてるけど、この状態でC#とか勉強し始めようとする奴はかわいそうで仕方ない
0198デフォルトの名無しさん2016/06/15(水) 02:02:18.05ID:gHR2VZA2
>>197
Erlangあたりがメインの言語の人なのかもしれないけど意識が高いのは分かった
OOPLがマルチパラダイム化するのは長年使われてきた功労者の側面だし、時代にあったコーディングができないエンジニアは言語問わず淘汰されると思う
個人的には長年使われてエンジニア人口が多い言語はある種の正義だと思うし、質はともかく頭数をそろえるのは簡単だし

新人にいきなり関数型言語を教えるのは難しいと思っている。C#やJavaのとっつきやすさは抜きん出ているし。
だってOOには動物クラスと猫クラスの例えがあるからね。新人にはぴったりだ。
もちろんこんなのはウンコの例えだしある程度経験を積めばこの例えがひどい事はすぐに気づくと思う。
関数型言語の大罪はいつまでたってもサンプルが算術的すぎる事にあると思う。
これは新人が学ぶには敷居が高すぎる。
0199デフォルトの名無しさん2016/06/15(水) 02:20:05.26ID:gHR2VZA2
関数型言語に対する個人的な意見は、関数型言語をやるには数学的な知識は必要ないけど、関数型言語を使うメリットを感じるには数学的な知識が必要だと思っている。
また、メリットは絶対的に感じるものではなく相対的に感じるものなので自ずと手続き型言語やオブジェクト指向型言語が対抗馬になる。
単一言語しかやらない人にその言語のメリットを問うのは難しいし、話が合わないのは当然だと思う
個人的にはScalaを使う事もあるけど、チーム開発となるとエンジニアの母数から言ってJavaになるのはしょうがないと思っている
0200デフォルトの名無しさん2016/06/15(水) 04:00:49.97ID:lIUne/jR
日本刀と包丁とカッターナイフを並べてどれが優れているかを声高に唱える奴がいたらそいつは間違いなく馬鹿だと思うんだがなぁ
0201デフォルトの名無しさん2016/06/15(水) 06:36:36.25ID:RnAU+AQ/
>>200

まあ、そうだね。
カッタナイフはうまく使いこなす事務の女性が、「日本刀なんてダメよ!仕事で役に立たないわ!」と言う。
包丁の使い方をしらない料理下手の主婦が、「この包丁だめね、おさしみ綺麗に切れない!」と言う。

私は、自転車と自動車と飛行機の違いだと思っている。

自転車はほとんど誰でも乗りこなせて、気楽に買い物できる。
でも、子供との2人乗りはできても、大人を2人運ぶことは難しいし、ちょっと大きな荷物も運べない。
長距離移動も通常は難しい。

自動車は、普通免許とるには勉強と、それなりの運動神経等が必要だし、お金がかかる。
4,5人くらい同時に運べるし、ちょっと大きな荷物も大丈夫。長距離移動も可能。
でも国外への移動は難しい。

飛行機になると、免許書は、自動車免許を取るよりずっと難しくなるし、ボーイングの○○の操縦免許を持っていてもエアバスの××は操縦できない。
英語も必要だし、身体能力のチェックも厳しい。
でも、長距離を高速に移動できるし、旅客機なら大量の荷物も運べる。


無免許運転の罪を問われないとして、普通免許を持っていない人が「ちょっと10km先まで小包とどけてくれない?」と頼まれたとき、自転車と自動車のどちらを選ぶか?って問題と似ている。
自転車を使えば、体力的にちょっと大変かもしれないけど、安心・確実に届けられる。
でも、アクセルもブレーキもよく分らない無免許の人が自動車を運転したら、荷物を届けるよりも事故る可能性のほうが高い。

ここでオブジェクト指向言語に文句を言い続けている人は、無免許で自動車を運転して事故ったか、その危険さを強調しすぎる人たち。

でも、情状酌量の余地もあるかもしれない。
彼らは、自動車程度と考えた難易度が飛行機の免許くらいに広い知識や経験が要求されることを知らなかった。
飛行機を操縦するなら、まずは自動車免許くらいは持っていてほしいけど、それさえ持たない人がいきなり飛行機にチャレンジしたのだから。
0202デフォルトの名無しさん2016/06/15(水) 08:07:41.61ID:lfIMoC4C
その例えでいうならオブジェクト指向は馬車だね
0203デフォルトの名無しさん2016/06/15(水) 08:11:43.28ID:lfIMoC4C
馬車を扱うには、車の技術だけでなく馬の扱いにも秀でている必要がある
もちろん馬車で欲しい出力が出る人ならいいけどね

それとも馬をエンジンの抽象クラスから継承するかい
0204デフォルトの名無しさん2016/06/15(水) 08:49:12.12ID:FEVYup+X
javascriptコーダーにはろくな人間がいない
0205デフォルトの名無しさん2016/06/15(水) 10:16:06.32ID:i4R0HEqY
でも正直に言えば関数型は今のところ使えない玩具だよね。
0206デフォルトの名無しさん2016/06/15(水) 10:27:51.47ID:DCrbbIQF
Erlang「おっそうだな」
関数型使えないってErlangの存在だけで崩れさるよね
美しさ使いやすさとかより実用性全振り
0207デフォルトの名無しさん2016/06/15(水) 11:43:26.20ID:RVEnmxom
「Erlangが関数型」というのは個人的には「ErlangがメッセージングのOOPL」というのと同じ程度に違和感ある
Erlangが(メッセージングOO同様に)関数型を限定的にサポートしている言語だということに異論はないけれど
関数型の扱いにくい部分をさほど追求していないから実用になっていると思うのはうがちすぎ?
0208デフォルトの名無しさん2016/06/15(水) 11:47:44.75ID:pWxix8Mt
したり顔でしつこく語ってる連中はいい加減将棋ソフトを設計しろよ。
偉そうにしゃべってるくせに、実際の設計はまったくできないから笑えるw
ほんとは設計未経験なんだろw

「興味ない」とかいい訳はいらないから。
こんだけしつこく何の役にも立たない書き込みを連投してる暇があるならちょっとは意味のあることしろ。
0209デフォルトの名無しさん2016/06/15(水) 11:50:07.48ID:pWxix8Mt
将棋ソフト
>>69-74

アホがまた騒ぐのがうざいから>>73に注意。
0210デフォルトの名無しさん2016/06/15(水) 12:17:20.50ID:cX/y2RD7
しろよ。
偉そうに
くせに
笑えるw
設計未経験なんだろw

設計を教えてもらおうという立場の人間が
レスを貰うためにすることが初歩的な「煽り」一本ではね
もっと工夫してみなさい
0211デフォルトの名無しさん2016/06/15(水) 12:46:11.12ID:TAanDQJ+
将棋にはもうウンザリだ
0212デフォルトの名無しさん2016/06/15(水) 13:23:15.54ID:2Ug/bEFj
みんなが言ってるOOPって結局なんだろう?
JavaやC#等のオブジェクト指向言語を使うこと?
業務システムをドメイン駆動なんたらで作る事?
提唱者だかが考えてたメッセージングなんたら?

多分、分かりやすくて破綻しない手法を目指しているんだとは思うけど
0213デフォルトの名無しさん2016/06/15(水) 13:44:00.79ID:pWxix8Mt
>>210
設計できない雑魚は黙ってろw
0214デフォルトの名無しさん2016/06/15(水) 13:44:52.21ID:pWxix8Mt
>>211
実際の設計はできないくせにくだらない妄想を連投してる奴にうんざりだよ
0215デフォルトの名無しさん2016/06/15(水) 13:47:38.55ID:c3Bh5f0V
ここに書かれたストーリーが妄想だと言い切ってる間は、何も設計してないか出来てない証拠だけどな。
0216デフォルトの名無しさん2016/06/15(水) 14:00:20.67ID:DCrbbIQF
そもそも「オブジェクト指向の設計」が共有されてないだから議論が噛み合うわけなくね
将棋アプリを業務システム風に設計するスレなら別にいいんだけど
0217デフォルトの名無しさん2016/06/15(水) 15:09:02.08ID:pWxix8Mt
>>215
設計の経験があるなら将棋の設計もできるだろ
できないんだからおとなしくしてろ
0218デフォルトの名無しさん2016/06/15(水) 15:09:42.51ID:pWxix8Mt
>>216
>>73

注意したよ
0219デフォルトの名無しさん2016/06/15(水) 15:16:42.78ID:i4R0HEqY
駒をクラスにしても良いかもしれないなあ。
0220デフォルトの名無しさん2016/06/15(水) 15:19:04.44ID:i4R0HEqY
駒クラスを継承した>>217に「おい、>>218を倒して来い」と命令するオブジェクトを
>>211にするか。
0221デフォルトの名無しさん2016/06/15(水) 15:23:55.03ID:c3Bh5f0V
かつてのシューティングゲームの敵がまさにそんな感じだったな。
0222デフォルトの名無しさん2016/06/15(水) 15:31:53.54ID:DCrbbIQF
>>218
それ以外の例を出すべきと言ったんじゃなくて「オブジェクト指向による設計」について同意できてないんだから
設計例だしてもそれはオブジェクト指向ではない
設計ではないで無限ループになるだけという意味
0223デフォルトの名無しさん2016/06/15(水) 15:47:34.85ID:i4R0HEqY
じゃあ俺が判定してやるよ。
俺がOOだと言えばOOな。
これで争いは起こらない。
0224デフォルトの名無しさん2016/06/15(水) 15:50:04.31ID:i4R0HEqY
駒を継承したクラスは、当然駒の絵を描画できるだろね。
駒の絵は最低二つあるから、裏表も持ってるはず。
0225デフォルトの名無しさん2016/06/15(水) 15:51:57.44ID:i4R0HEqY
負けそうになったとき盤をひっくり返すメソッドがあるはず。
0226デフォルトの名無しさん2016/06/15(水) 16:02:15.42ID:2Ug/bEFj
人が盤をひっくり返す
これをどう表現するかだな

p1.crush(board)
board.crushBy(p1)

あるいは「盤をひっくり返す」をあえて用意しない事で、
ゲームとしての純度を上げるという選択肢もあるはず
0227デフォルトの名無しさん2016/06/15(水) 16:12:12.81ID:i4R0HEqY
ヲラ、設計しろとか言ってたやつ。
出てきたアイデアをキチンと図にして見やすくまとめろよ。
ヲラはよせいや。
0228デフォルトの名無しさん2016/06/15(水) 16:25:42.58ID:JxLjXALv
>駒を継承したクラスは、当然駒の絵を描画できるだろね。

これは最悪のパターンwww
0229デフォルトの名無しさん2016/06/15(水) 16:29:30.63ID:i4R0HEqY
駒の絵をセットで変えられるようにしたいのか。
0230デフォルトの名無しさん2016/06/15(水) 16:31:44.45ID:JxLjXALv
駒とは何であるか、とか無意味なこと考えだしたらドツボ
人生とは何かとか、自分とは何か、とか、自分探しするのと一緒の脳の原理で物事を考えている状態
病気
許されるのは大学生まで
0231デフォルトの名無しさん2016/06/15(水) 16:36:00.86ID:i4R0HEqY
駒は自分が動ける範囲を知っていないといけないな。
0232デフォルトの名無しさん2016/06/15(水) 16:38:04.70ID:JxLjXALv
>駒の絵をセットで変えられるようにしたいのか。

意味不明www
普通に考えて、少しでも良心のある人間は、UIやグラフィックと思考ロジックは分ける
なぜなら、それらが端的に別の機能だから
クラスがどうとか言い出す前に、まずざっくり大きく機能で分ける
別の機能だから分ける、ごく自然な発想
クラス設計はそのあと
当たり前
まずは普通の考え方ができるようになってください
0233デフォルトの名無しさん2016/06/15(水) 16:39:31.32ID:i4R0HEqY
馬鹿野郎!
思考ロジックは人間の担当だ!
0234デフォルトの名無しさん2016/06/15(水) 16:41:28.33ID:i4R0HEqY
駒を保持するストレージとして盤面も必要だな。
その他に手駒を入れとく壺が二個。
0235デフォルトの名無しさん2016/06/15(水) 16:42:01.23ID:ebZLVttd
駒はクラスにした方がいいよな。

駒の移動や変身や攻撃モーションの管理とか敵味方とか色とか、
駒のベースクラスから派生した方が綺麗に書ける。
0236デフォルトの名無しさん2016/06/15(水) 16:43:44.80ID:ebZLVttd
>>232
意味不明w

UI、表示、ロジック分けたって全部実装する必要があることには変わりない。
0237デフォルトの名無しさん2016/06/15(水) 16:44:56.93ID:i4R0HEqY
じゃあ俺が裁判所やってやるよ全ての係争は俺が判決出してやる。
0238デフォルトの名無しさん2016/06/15(水) 17:13:12.92ID:Dz16mfwa
いい感じでシニカルな方向に議論が進み始めたな
どんどんやれ
0239デフォルトの名無しさん2016/06/15(水) 18:08:48.11ID:pWxix8Mt
>>222
2スレ以上消費しても何の合意も得られないんだから具体的な例で
のぞましい設計を提示し合えばいいだろ
なんと呼ぶかで延々議論するよりよほど有益
0240デフォルトの名無しさん2016/06/15(水) 18:10:58.01ID:pWxix8Mt
>>227
現在までの進捗は
>>74
0241デフォルトの名無しさん2016/06/15(水) 18:15:05.97ID:pWxix8Mt
>>226
人をクラスとして表現する必然性は見当たらないからboard.crush()一択
0242デフォルトの名無しさん2016/06/15(水) 18:55:13.59ID:i4R0HEqY
たまに盤面を引っ掻き回しに来る猫も登場したほうが良いな。
0243デフォルトの名無しさん2016/06/15(水) 19:12:34.16ID:c3Bh5f0V
駒をリアルに配置させたいから0.1ピクセル単位で位置や回転、当然立たせたり裏返したりするのだから座標系に対して自由度はMAXでおながいしまつ
0244デフォルトの名無しさん2016/06/15(水) 19:18:49.23ID:i4R0HEqY
たしかに。
ジュネーブで驚いたことは、皆すばやく隠密行動をとること。
ある意味国民総忍者の国だと思った。
0245デフォルトの名無しさん2016/06/15(水) 19:19:57.11ID:DCrbbIQF
>>239
そらそんな議論してないし
0246デフォルトの名無しさん2016/06/15(水) 19:34:53.62ID:pWxix8Mt
>>245
言いたいことがまじで分からん
ま、漠然と意見を言い合っていても何も得るものがないのは過去170スレを見直せば分かること
0247デフォルトの名無しさん2016/06/15(水) 19:41:43.23ID:DCrbbIQF
>>246
今のまま「設計」を続けていって構わないけど途中でその設計はオブジェクト指向じゃないとかそういう話に逸れていくと思うけどいいの
俺はこのままでもいいけど
0248デフォルトの名無しさん2016/06/15(水) 19:55:33.11ID:pWxix8Mt
>>247
オブジェクト指向のあるべき設計はこうだってことで争ってるなら実際の設計で比較すればいい
オブジェクト指向なんて使えないから他の手法を使うべきだって主張するならその手法を採用した場合の設計を提示すればその良さが実感できるかもしれない
どっちにしても有意義
0249デフォルトの名無しさん2016/06/15(水) 20:08:34.40ID:JxLjXALv
そんな極論野郎の言う事なんか、ろくでもないから、何も有意義じゃない
0250デフォルトの名無しさん2016/06/15(水) 20:10:53.72ID:JxLjXALv
当たり前だが、全てをオブジェクト指向で書く必要ないし
オブジェクト指向を全否定する必要もない
前々から言っている
当たり前のこと
0251デフォルトの名無しさん2016/06/15(水) 20:13:18.84ID:pWxix8Mt
>>249
こういう批判だけのクズってほんと役に立たねえよなあ
どうせ設計できないもんだからそんなことしか書けないんだろ
お前みたいな無能をはじくのにちょうどいい
0252デフォルトの名無しさん2016/06/15(水) 20:21:14.35ID:fBdcLY2F
コーディングは製造
■ このスレッドは過去ログ倉庫に格納されています