オライリー
1:以下、名無しにかわりましてVIPがお送りします 2015/10/30(金) 01:15:38.071 ID:ujT+FPj+0.net

管理とか修正とかめっちゃ便利になるらしいの
ぜひ手にしたいけど分かりやすい解説がないの


スポンサードリンク
2:以下、\(^o^)/でVIPがお送りします 2015/10/30(金) 01:16:25.549 ID:dpVCxdiS0.net

UML読めるようになったら理解できた気がする


3:以下、名無しにかわりましてVIPがお送りします 2015/10/30(金) 01:17:52.489 ID:ujT+FPj+0.net

それは誠か


4:以下、\(^o^)/でVIPがお送りします 2015/10/30(金) 01:18:53.893 ID:An+xkRqz0.net

俺もよくわからん
モジュールとかじゃだめなのか


5:以下、\(^o^)/でVIPがお送りします 2015/10/30(金) 01:19:40.155 ID:nvoY3tVn0.net

機能を部品と考える


6:以下、名無しにかわりましてVIPがお送りします 2015/10/30(金) 01:21:09.507 ID:ujT+FPj+0.net

関数を全て部品(クラス)に置き換えようとして明らかに違うものができた経験


7:以下、\(^o^)/でVIPがお送りします 2015/10/30(金) 01:23:52.415 ID:El7eymq70.net

機能を絞った召使いを何種類も創造する


9:以下、\(^o^)/でVIPがお送りします 2015/10/30(金) 01:27:46.354 ID:X2Ea00K70.net

オブジェクト指向ってそんな深いもんなんか
変数や関数一つ一つがメソッド持ってるってくらいの印象しかねえ


10:以下、\(^o^)/でVIPがお送りします 2015/10/30(金) 01:32:08.934 ID:764j1FTH0.net

デザインパターンを勉強すればちょっとくらい見え方が変わるんじゃね
例で言うとモデル ビュー コントローラとか


11:以下、名無しにかわりましてVIPがお送りします 2015/10/30(金) 01:35:43.004 ID:ujT+FPj+0.net

デザパタ本は読んでみたが「へー」で終わってしもうた


12:以下、\(^o^)/でVIPがお送りします 2015/10/30(金) 01:38:03.809 ID:764j1FTH0.net

>>11
へーって思って実際に設計、実装するときにその思想を組み入れたものを作れるならそれで十分だろ
デザパタの作者も言ってるがもちろん無理に当てはめて使う必要は無いがな


16:以下、\(^o^)/でVIPがお送りします 2015/10/30(金) 01:42:49.483 ID:tde3fkpz0.net

わからないっていうか今のレベルだと必要ないんでしょ
それなりにセンスがあって必要なら勉強しなくても勝手にそうなるから


17:以下、名無しにかわりましてVIPがお送りします 2015/10/30(金) 01:44:42.907 ID:ujT+FPj+0.net

>>16
規模が大きくなって管理に頭を抱えるくらいになるとそうせざるをえなくなる感じか


19:以下、\(^o^)/でVIPがお送りします 2015/10/30(金) 01:47:33.766 ID:tde3fkpz0.net

実用的な何千行にも及ぶプログラムを自分で書かないことには一生わからんと思うわ
例題とか最初から想定して書いててぶち当たる問題を解決するための手段じゃないから

想定してなくて組んでてあとから解決しやすくするための概念だから


21:以下、\(^o^)/でVIPがお送りします 2015/10/30(金) 01:53:07.073 ID:764j1FTH0.net

入出力を担当するクラス、データベースを管理するクラス、ネットワークを担当するクラス、それらのインターフェースを担うクラスという風に分けると以下に便利かがわかるかもしれない


8:以下、名無しにかわりましてVIPがお送りします 2015/10/30(金) 01:27:14.322 ID:ujT+FPj+0.net

課題を作って一緒に考えてみようぜ


15:以下、名無しにかわりましてVIPがお送りします 2015/10/30(金) 01:42:08.725 ID:ujT+FPj+0.net

よし課題を決めたぞ
図書館の蔵書管理をするプログラムを作ろう


22:以下、\(^o^)/でVIPがお送りします 2015/10/30(金) 01:57:39.645 ID:tde3fkpz0.net

たとえば本をバーコードで管理してたとして、バーコードの読み取りを行う機械と
バーコードを管理する機械は完全に独立してたほうがいいわけよ

たとえ将来バーコードの読み取り機械が最新式になっても、ICチップとかになったとしても
管理する機械へ登録する方法さえ同じにしとけば全体が動くわけ

つまり仕事を切り分けておく
あらかじめそういう組み方をしておくと、想定外の変更にも対応しやすくなる

これはほんの一例でそういう仕様変更に強い、とある方法論をオブジェクト指向と呼んでる
それを実現するためにクラスとかそういう機能が言語に備わってたりするわけ


24:以下、名無しにかわりましてVIPがお送りします 2015/10/30(金) 02:10:03.158 ID:ujT+FPj+0.net

入力を担当するクラスを作るとしよう
登録、貸し出し、返却、削除の4パターンと蔵書番号を出すことができればいいわけだ
将来、入力する機器や方法なんかが変わっても入力クラスが決まって↑を出すことさえできれば、修正は入力クラスだけの変更で済む

いや、入力クラスが蔵書番号とかそういうのを知っているというのは変かな
こういうところで継承とかを使うのかな


25:以下、\(^o^)/でVIPがお送りします 2015/10/30(金) 02:12:40.602 ID:764j1FTH0.net

>>24
よく分からんけどそこは普通に継承じゃなくて合成集約じゃね


29:以下、名無しにかわりましてVIPがお送りします 2015/10/30(金) 02:23:35.727 ID:ujT+FPj+0.net

>>25
ググったけど無視して普通に書いていいのかね
入力クラスを派生させて任せるべきかと思ったんだけど


26:以下、\(^o^)/でVIPがお送りします 2015/10/30(金) 02:12:43.816 ID:tde3fkpz0.net

まずオブジェクト指向っていう概念がまずあって
それをどうやって実現するかは言語によって違うんよ

車とはどういうものかを土人に説明するにはいろんな車を見せないといけないでしょ
セダン車だけ見せてたらバスとかクレーン車をみて車だと思わないかもしれないし
ぎゃくにバスを見せてたら電車を車って思っちゃうかも知れない

映画とかでタイヤがなくても未来の車を車って認識するわけじゃん
なぜ人間が物をそう認識できるのかはよくわからない

それとおなじでオブジェクト指向が一体なにかを知るには
オブジェクト指向と呼ばれているものにたくさん触れるしかない


30:以下、\(^o^)/でVIPがお送りします 2015/10/30(金) 02:37:38.129 ID:ujT+FPj+0.net

入力クラスができた


38:以下、\(^o^)/でVIPがお送りします 2015/10/30(金) 03:08:04.177 ID:RO5uZHtV0.net

プログラミング歴4年の底力をみたw


31:以下、\(^o^)/でVIPがお送りします 2015/10/30(金) 02:44:31.038 ID:wYVzSJHQ0.net

オーバーライド出来てなくね?


32:以下、名無しにかわりましてVIPがお送りします 2015/10/30(金) 02:46:37.759 ID:ujT+FPj+0.net

マジで?


34:以下、\(^o^)/でVIPがお送りします 2015/10/30(金) 02:48:37.937 ID:wYVzSJHQ0.net

>>32
オーバーライドは返り値と引数が全く同じ仮想関数だな
あとついでに親クラスのインスタンスを作らない場合はvirtual void hoge() =0;みたいな純粋仮想関数にすべきだな


35:以下、名無しにかわりましてVIPがお送りします 2015/10/30(金) 02:52:45.327 ID:ujT+FPj+0.net

CInputを消してCLibraryInputをそのまま使ってみよう
大丈夫かどうかは分からん


37:以下、\(^o^)/でVIPがお送りします 2015/10/30(金) 03:02:41.171 ID:wYVzSJHQ0.net

とりあえず実装する部分を絞りつつクラスを洗い出しつつ要件をまとめた方がいんでない
クラスの機能が明確に決まってないからこそgetDataの引数も揺れてるんだし

例えばまずは登録のみに関して洗い出すと決めて
そこを構成するのですぐ思い付くのが本と棚と登録者の3つ
登録者は何らかの入力を元に本を生成して棚に格納する
と来たら今度はその入力のクラスを考えて…みたいな感じで


42:以下、\(^o^)/でVIPがお送りします 2015/10/30(金) 03:24:36.382 ID:wYVzSJHQ0.net

とりあえずより具体的な本と棚から行った方が分かりやすいだろう
したら登録者に必要な機能も本のプロパティと棚の機能から決まる
登録に必要なプロパティが決まったら入力も決まる
最初はいきなり完全を目指すよりかはリファクタリングありきでざっくりやって見直しを繰り返すのが良いのでは


45:以下、名無しにかわりましてVIPがお送りします 2015/10/30(金) 03:36:06.764 ID:ujT+FPj+0.net

本クラスができた


47:以下、名無しにかわりましてVIPがお送りします 2015/10/30(金) 03:44:41.540 ID:ujT+FPj+0.net

なんかおかしなことになりかけてる気がする


48:以下、名無しにかわりましてVIPがお送りします 2015/10/30(金) 03:52:30.399 ID:ujT+FPj+0.net

本の実体を持ってるのは登録者なのか本棚なのか…


49:以下、名無しにかわりましてVIPがお送りします 2015/10/30(金) 03:55:06.607 ID:ujT+FPj+0.net

どっちも持ってればいいか
本を生成するのは登録者で、本棚はそのコピーを持つ
メモリに優しくないけど


50:以下、\(^o^)/でVIPがお送りします 2015/10/30(金) 03:55:42.441 ID:wYVzSJHQ0.net

登録者は本を作って棚にいれるんやで
じゃあ普段本はどこにあるかってことだ


51:以下、\(^o^)/でVIPがお送りします 2015/10/30(金) 03:55:59.822 ID:RO5uZHtV0.net

そこでオブジェクト指向だ!


53:以下、\(^o^)/でVIPがお送りします 2015/10/30(金) 04:06:14.142 ID:OKGEfxU30.net

JAVAでやってるけど俺もオブジェクト指向よくわからんから


59:以下、名無しにかわりましてVIPがお送りします 2015/10/30(金) 04:14:14.084 ID:ujT+FPj+0.net

今やってるのはここな


61:以下、名無しにかわりましてVIPがお送りします 2015/10/30(金) 04:17:03.551 ID:ujT+FPj+0.net

困った
CClientクラスのRegisterBook関数からCDatabaseクラスのRegisterBook関数にアクセスしたい
どうすりゃいいんだ


62:以下、名無しにかわりましてVIPがお送りします 2015/10/30(金) 04:18:36.906 ID:ujT+FPj+0.net

本を登録したいCDatabaseクラスのポインタを渡してやればいいのか!
なんか違う気もするけども


63:以下、名無しにかわりましてVIPがお送りします 2015/10/30(金) 04:26:34.972 ID:ujT+FPj+0.net

なんだこれ


64:以下、\(^o^)/でVIPがお送りします 2015/10/30(金) 04:28:23.828 ID:RO5uZHtV0.net

ちょっとおちつこうか
ソースみてもどういう分担してんのかわからんw


65:以下、名無しにかわりましてVIPがお送りします 2015/10/30(金) 04:29:35.735 ID:ujT+FPj+0.net

うーんゲッタとセッタ祭り


66:以下、名無しにかわりましてVIPがお送りします 2015/10/30(金) 04:30:58.290 ID:ujT+FPj+0.net

道間違えたかな


67:以下、\(^o^)/でVIPがお送りします 2015/10/30(金) 04:33:44.352 ID:RO5uZHtV0.net

まず司書→本棚という流れの中に同列に本を定義しちゃダメ

本は図書館が作るものじゃないから、
テスト用のエントリポイントからnewして渡すとこからはじめれ
最終的には本屋クラスや問屋クラスを作ってそこからnewするにせよ
図書館という概念の中に本の実体を作るという処理はない


68:以下、名無しにかわりましてVIPがお送りします 2015/10/30(金) 04:36:02.825 ID:ujT+FPj+0.net

CClientは司書ではなく著者のつもりです…
図書館はポインタのみ管理する感じで


69:以下、名無しにかわりましてVIPがお送りします 2015/10/30(金) 04:36:32.265 ID:ujT+FPj+0.net

ん、そうすると司書を挟んだほうがいいのか?


70:以下、\(^o^)/でVIPがお送りします 2015/10/30(金) 04:40:15.217 ID:RO5uZHtV0.net

なんで著者が本をつくるねんwwww
本の内容=メンバの一つに内容をぶちこむファクターではあるが
本という物体の生産に著者は関係ない

本という物体を提供するのは出版社であり問屋
そしてその向こうに印刷会社などが控えてるがそれは当該要件において考える必要はない


71:以下、名無しにかわりましてVIPがお送りします 2015/10/30(金) 04:49:56.264 ID:ujT+FPj+0.net

出版社か
というかそもそも著者が自分の本を売り込みに行くのを想像してた
そりゃ図書館なんだから図書館側が買いに行くよな…


72:以下、名無しにかわりましてVIPがお送りします 2015/10/30(金) 04:54:37.174 ID:ujT+FPj+0.net

だめだ眠いしお腹空いて頭が働かない
寝る


73:以下、\(^o^)/でVIPがお送りします 2015/10/30(金) 05:12:38.230 ID:9rlIM5u/0.net

俺も段々オブジェクト指向が難解なものに思えてきた
クラス『本』があって
その中には変数として本の内容とかそういう情報が入ってて
まずは最低限『読む』って機能がある

さらに継承した『ノート』や『実用書』、『マンガ』とかってクラスが出てきて
基本的な『本』に対して機能や情報が付け加えられてて

それらの本を『本棚』クラスに格納するって話なんだよな
本棚クラスは棚クラスを継承しており、物をしまうことができる

あれ……なんか俺の考えはオブジェクト指向なのか違うのか……段々分からなくなってきた


74:以下、\(^o^)/でVIPがお送りします 2015/10/30(金) 06:16:22.957 ID:IdnGRxFe0.net

システムの目的と本というモノを混同している


元スレ:http://viper.2ch.sc/test/read.cgi/news4vip/1446135338/