OOAD 板


LINE

※ 引述《cplusplus (大口小口吃炒饭)》之铭言: : 个人看法是...视情况而定 : 在constructor/destructor里面做些事情也是蛮常见的事情... : 甚至主要功能在里面完成也是蛮常见的事情.. 个人的看法是「一致就是简单,视情况而定就是复杂。」 constructor/destructor 要做什麽事情是非常直观的 而且永远都一样的: 「建构子永远只建立本物件初始的属性。」 除了初始化属性之外,其他的事情都不要做。 : 例如做同步化的时候...常用到简易的lock之类的东西.. : class Lock; : void Function() // syn safe : { : Lock safe("LockName"); //constructor里面帮你做同步化,加上封锁 : ... : ... : ... : return; // 在任何一点用任何方式离开都会呼叫destructor,解除封锁 : } : 这样不会卡死,也不容易让使用者误用 : 当然你要把程式写成 : Lock safe("LockName"); safe.lock(); : ... : safe.unlock(); : 也是可以,只是程式风格的问题... : 提供lock, unlock等功能也挺不错,但这样也提高了误用的可能性, : 且在上面的例子,每个离开点地方你也得加上 unlock,你也可以说在constructor里加上 : 检查做unlock,但这样就失去lock/unlock对秤性了,你在constructor里面不自动lock : 在destructor却自动unlock,这种设计也有人诟病... : 所以如果我只是要一个很简单的自动lock功能,上面的做法我觉得挺好的, : 也是在constructor/destructor里完成所有动作。 让 constructor/destructor 来做 Lock/unlock 反而限制了功能 事实上在许多例子中并不需要把整个函式都锁起来 着名的 Writer/Reader 问题就是一例。 : 我看本来的讨论是说把"整个程式"写在constructor, : 当然,把"整个程式"写在constructor当然就是件很糟糕的事情... : 但是如果只是一些小功能的话,视情况我觉得并不一定要这麽排斥 : 所以我觉得不一定说 constructor 只能做物件属性的初始化 : OO 不是要让程式变得麻烦,是要变得简单好管理又好懂 : class Sound; : void Welcome() : { : Sound s("welcome.mp3"); // play welcome background music repeatly : ..... : // leave the function, autoamtically call constructor to stop play. : } : 这样也不会难懂吧,应该也不至於破坏整个架构吧 如果程式完全不会再修改当然是没有问题 但是软体不变的本质就是: 「改变!」 如果把播放声音的功能直接写在 constructor 中 未来需要把此声音进行编码、加密、过滤都没办法使用既有的物件 因为每次建立此物件就是要播放音乐,而事实上新的需求根本不要播放音乐 这个时候原本的设计就出现了大问题 所以把「播放」的功能独立於另一个函式是非常直观,而且容易维护的。 : --- : 以上只是个人的想法,可以讨论,但不要战我啊 XD --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.211.211.53
1F:推 cplusplus:当你遇到READER/WRITER问题就不该用这个方式,另外设计 09/16 00:31
2F:→ cplusplus:这算是两个不同的事情吧,毕竟那个LOCK有特别的用途,就 09/16 00:33
3F:→ cplusplus:是自动解决忘记UNLOCK的问题,基本上...挺好用的不是? 09/16 00:34
4F:→ cplusplus:当然对於要设计一个多功能可覆用的,这方试就不适合了 09/16 00:35







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

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

TOP