OOAD 板


LINE

※ 引述《hsnucsc (hsnugo)》之铭言: : 最近在看Head First OOA&D : 他有一个例子是 : Guitar GuitarSpec Inventory FindGuitar(main的所在) : ========= ============= =========== ========== : serialNumber builder guitars inventory : price model : GuitarSpec type : getSerialNumber() getBuilder() addGuitar() : setprice() getModel() getGuitar() : getSpec() getType search() : 原本search()是写成 : public List search(GuitarSpec searchSpec) : { : List matchingGuitars = new LinkedList(); : for(Iterator i = guitars.iterator(); i.hasNext(); ) : { : Guitar guitar = (Guitar)i.next(); : GuitarSpec = guitar.getSpec(); : if(searchSpec.getBuilder() != guitarSpec.getBuilder()) : continue; : if(searchSpec.getModel() != guitarSpec.getModel()) : continue; : if(searchSpec.getType() != guitarSpec.getType()) : continue; : matchingGuitars.add(guitar);//builder, model, type都一样的话 就加进list : } : return matchingGuitars; : } : 但是这样一来 如果GuitarSpec要加入其他特性 就必须更改Inventory.search() : 所以他把两个GuitarSpec的比较 : 委派(delegate)给GuitarSpec : 於是GuitarSpec多了下面这个method : public boolean matches(GuitarSpec spec) : { : if(builder != spec.getBuilder()) : return false; : if(model != spec.getModel()) : return false; : if(type != spec.getType()) : return false; : if(backWood != spec.getBackWood()) : return false; : return true; : } : ========================================================================= : 我大致上知道 : 通常物件是名词 : 而他的method则是动词 是那个物件可以做的动作 : ex: Dog : ====== : eat() : drink() : sleep() : 但是如果是俄罗斯方块中的 Sqare : 应该是sqare 有rotate() 然後我是叫sqare自己旋转 : 还是说应该是player拥有roate(这个method)去旋转sqare Player 会旋转吗? Sqare 会旋转吗? 看来是 Player 会旋转 Sqare 而且 Sqare 会旋转自己。 这样分析看起来,Player 必须拥有 Sqare 的资讯才有办法旋转 Sqare 但是 Sqare 只要旋转自己就好。 所以将 Sqare 的 rotate 方法放在 Sqare 比较好 优於将 rotate 方法放在 Player。 当 Player 想要旋转 Sqare 的时候,则委派 Sqare 去做 rotate 即可。 即: Player Sqare ============ ======== sqare: Sqare rotate() ------------ rotate() │ └sqare.rotate(); : 但是像matches应该是Inventory可以做的动作 : 还是Guitar可以做的动作(Guitar会自己做match??) : 又 search 应该是Inventory(存货的清单)可以做的动作吗 Inventory 会配对吉他吗? Guitar 会配对吉他吗? 看起来是 Inventory 会配对两个不同的吉他,而且 Guitar 会配对另一个未知的吉他 这样分析起来 Inventory 必须拥有两个吉他的资讯才有办法进行配对。 但是 Guitar 只要让自己和另一个吉他配对就好。 所以将 matches 放在 Guitar 比较好 优於将 matches 放在 Inventory。 当 Inventory 想要配对两个吉他的时候,只要委派 Guitar 去做 matches 即可。 : 我想问的是 : 我们该如果思考哪些哪些class可以有哪些method : 哪些method应该是属於哪些class做的 : 这问题似乎与 andrew43大大 po的 "不懂如何抽离物件(初学物件导向的问题)"类似 : 不过我看完回文之後 仍然对於这方面 似懂非懂 : 是不是有方法可以有系统的design OO的架构呢 : 谢谢 往下继续看 Head First OOA&D,看完整就会知道运作流程了。 --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.116.247.13
1F:推 hsnucsc :谢谢您的回答 12/08 21:26
2F:→ hsnucsc :但是我们在写的时候 难道该写好架构後 再改成委派吗 12/08 21:30
3F:→ hsnucsc :怎麽去思考怎样的method适合委派 有时候有点confuse 12/08 21:31
4F:推 tinlans :那本书後面会讲 SRP 和 CRC card 吧,先读读看? 12/08 22:28
5F:推 hsnucsc :soga 谢谢 12/09 15:09







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:iOS站内搜寻

TOP