Programming 板


LINE

※ 引述《sorryChen (陈扬和)》之铭言: : Sorry..各位高手 之前没有看到大家热情的回应 : 我之前用继承是为把code的function 依照功能分层 所以每层都有实做的function : 之前没有想好要重复使用的目的 但现在要写一个类似的class.. : 而且会用到共同定义的functions 其实我觉得这种情形应该还满普遍 : 但我不知道软工上正确的作法是什麽 把交通工具拿掉也很奇怪阿.. : 所以正确的作法是应该写个独立的class叫交通工具 : 然後车和船 有"交通工具"的这个物件 对吧 : 这是是合成还是聚合阿 ? 我很逊阿!!! 不懂strategy pattern..正在研究当中 : 但水陆两用车直接继承交通工具 这样之前写在车和船的功能就不能重复使用了 : 有多份copy的code不会不好维护吗 你需要的可能是一个叫「移动方式」或「可移动」的 interface, 然後设计一些像是「在陆地上移动」和「在水中移动」的 class 去实作它, 你的车或船只要用 aggregation 的方式去指向这些实作的物件就可以了, 水陆两用车的话也能根据地形变换移动方式, 这样就不需要什麽叫「交通工具」的 class, 用继承树来做功能分层的出发点是对的, 但是这种树状结构应该用在行为类别上而不是 client code 直接操作的类别上, client code 直接操作的类别只要透过 composition 或 aggregation 去组装就行了, 否则你很可能掉进需要不断向下转型的地狱中。 如果你的需求真的是需要以多型的方式去存取「交通工具」, 比方说让「移动」这个 method 留在交通工具这一层, 让你的 client code 能移动任何交通工具而不需要知道它实际上是什麽交通工具, 那留着「交通工具」这类别是无妨, 但不要把行为写死在里面, 还是要照上面讲的分出来, 把移动的责任 delegate 给负责移动的行为物件。 -- Ling-hua Tseng ([email protected]) Department of Computer Science, National Tsing-Hua University Interesting: C++, Compiler, PL/PD, OS, VM, Large-scale software design Researching: Software pipelining for VLIW architectures Homepage: https://www.tinlans.org --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.160.111.24 ※ 编辑: tinlans 来自: 118.160.111.24 (07/20 15:52)
1F:推 sorryChen:非常感谢..但我还在研究中..不是全懂 128.125.87.33 07/21 04:48
2F:→ sorryChen:什麽是向下转型的地狱.. 128.125.87.33 07/21 04:50
3F:→ sorryChen:所以车应该有个"移动的"的class 128.125.87.33 07/21 04:51
4F:→ sorryChen:至於要在水里或陆上..应该事後assign 128.125.87.33 07/21 04:51
5F:→ tinlans:就是动不动就要写 dynamic_cast118.160.118.239 07/21 07:15
6F:→ tinlans:dynamic_cast<船 *>(pointer-to-交通工具)118.160.118.239 07/21 07:16
7F:→ airzone:dynamic_cast 是非常慢的,因为要爬树.. 218.169.86.137 07/21 10:57







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

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

TOP