OOAD 板


LINE

※ 引述《hsnucsc (hsnugo)》之铭言: : 我找了很多网站 : 都将解释SRP成: 每一个物件, 应该要只有单一的responsibility : 而将responsibility解释成: 只有一个理由去改变物件 : 但是我还是觉得responsibility这个词很模糊 : (如果直接翻译成中文, "责任", 仍然很难知道这个责任的大小) : 以书上的例子而言 : Automobile 车子有很多功能 : start() : stop() : changeTiles(Tile [*]) : drive() : wash() : checkOil() : getOil() : 应该要被分解成 : Automobile : start() : stop() : getOil() : Driver : drive(Automobile) : Carwash : wash() : Mechanic : changeTires(Automobile, Tire[*]) : checkOil(Automible) : 有一些method移交到其他物件处理 [恕删] : 不过仍然让人很难分辨responsibility : 说严格一点, 好像每个method, 都有理由改变 : 但是又不可能把每个method都新增一个物件去处理这项功能 : 希望有人可以帮忙解答 : 谢谢 弟刚好看到同一本书了,虽然这讨论已经有一阵子了。 我想试着把书上较完整的说法写下来。 最初 Automobile 类别含有下列功能: class Automobile { public void start(); public void stop(); public void changeTires(Tire[] tires); public void drive(); public void wash(); public void checkOil(); public int getOil(); } 书上说 (深入浅出软体开发 中文版 P156) 大多数的时间,你可以利用简单的测试,找出未使用 SRP 的类别: 1. 在一张纸上,写下几行像这样的东西: The [ ] [ ] itself。 对你正在测试 SRP 的类别里的每一个方法, 你应该有一行像这样的东西。 2. 在每一行的第一个空格里,写下类别名称; 在第二个空格里,写下类别的方法之一。 3. 大声把每一行读出来(你可能得加一点字才会好念)。 你所念出来的东西合理吗? 你的类别真的具有该方法所指的责任吗? 万一你所出来的东西不合理,你的方法可能违反 SRP。 该方法很可能属於别的类别...考虑移掉它吧。 ================================================== SRP 分析: Automobile The Automobile start[s] itself. The Automobile stop[s] itself. (汽车负责启动与停止,很合理,那是汽车的功能。) The Automobile changesTires itself. (汽车不负责自己换轮贻) The Automobile drive[s] itself. ( 这一个有点吊诡...我们认为虽然可以启动与停止它自己, 但驾汽车实际上是驾驶人的责任。 ) The Automobile wash[es] itself The Automobile check[s] oil itself. (汽车不负责自己清洗自己,或自己换机油。) The Automobile get[s] oil itself. (汽车能传回剩余油量) ================================================== 我觉得书上提供的方量很简单易用, 至少比起直接看 SRP 的定义, 用初学者较无系统化地步骤去思索: "哪些功能在类别内可能是被错置的?",来得有效率。 确实每个 method 都可能存在改变的理由, 但在明辨出"单一责任"区後,只为负责任而改变。 事情会单纯许多,一但类别承担较多的责任, 那改变的理由、机率就相对增加了不是吗 :) --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.165.131 ※ 编辑: qrtt1 来自: 140.112.165.131 (07/04 11:24)
1F:推 H45 :这麽久的文章也被你挖出来回 XD 07/04 12:35
2F:→ qrtt1 :因为觉得书上的内容也很值得说出来啊 ha ha 07/04 14:11
3F:推 H45 :关於 a car drives itself 的部分,如果车子会认惊驶 07/05 03:53
4F:推 H45 :人的话,那麽就需要考量 a driver drives a car 的设 07/05 03:54
5F:推 H45 :计。不过嘛,在现实生活中,车经常是不认惊驶员的, 07/05 03:55
6F:推 H45 :不管是谁开车,"drive" 这个行为是不变的,这时候就 07/05 03:55
7F:推 H45 :可以说 a car drives itself 07/05 03:56
8F:→ qrtt1 :惊驶!!! 听起来好有趣呦 07/05 09:23
9F:→ qrtt1 :我在抄书时, 想到的是自动驾驶技术。 07/05 09:25
10F:→ qrtt1 :如果醉了车子可以自己载你回家就太棒了 XD 07/05 09:25
11F:→ H45 :虽然我第一时间也是像楼上这样想,但是後来觉得说不 07/05 11:18
12F:→ H45 :太通 XD 最後我分析 "drive" 的行为後,认为三楼的说 07/05 11:19
13F:→ H45 :法比较合理些 :D 07/05 11:19
14F:→ qrtt1 :可是我觉得五楼比较专业耶 >"< 07/05 11:23
15F:→ H45 :我是指三到七楼这整段啦 XD 07/05 11:34
16F:→ rofellosx :自动驾驶并无不通吧 不须迁就现实.... 07/06 08:15
17F:→ qrtt1 :是都能通,只是缺少了买货人的决策orz 07/06 08:17
18F:→ qrtt1 :让我想起了最近读 agile 的书,"与客户一起做决定" 07/06 08:18
19F:→ qrtt1 :"this is not your business" 让能做决策的人做呗>"< 07/06 08:19







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灯, 水草

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

TOP