社区
C++ 语言
帖子详情
《重构..》第一章中这句话该怎么理解?
southbirdfly
2012-03-28 05:17:50
一部影片可以在生命周期内修改自己的分类,一个对象却不能在生命周期内修改自己所属的类
...全文
243
17
打赏
收藏
《重构..》第一章中这句话该怎么理解?
一部影片可以在生命周期内修改自己的分类,一个对象却不能在生命周期内修改自己所属的类
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
atlante
2012-08-10
打赏
举报
回复
我是这么理解的,请多指教。
一部影片可以在生命周期内修改自己的分类,有生命周期就说明这个“一部影片”是个Movie的对象movie,这个对象可以通过setType()来改变自己的分类属性。比如从Regual 变为Childrens分类属性。
一个对象却不能在生命周期内修改自己所属的类。也是这个movie对象,它一经生成后就是一个具体东西,包含了创建时的类所具有的所有特征,该对象不能对创建它的类做CRUD操作来改变创建它的类。
可是这句话不知道怎么会引出了一个State模式的解决方法。。。
muyi66
2012-03-29
打赏
举报
回复
我想那应该是作者认为对象不适合被杀死。实际应用里应该也会碰到类似的状况,你不能把那个对象终结,否则可能带来更麻烦的后果。
作者这样的做法实际上也是更改了属性参数,但他同时得到了新的子类方法,整个过程都被局限在对象的内部实现了,和外界的偶合也就少了。相比之下,如果你先杀死对象再重建,那就不能在对象内部实现整个过程了。
southbirdfly
2012-03-29
打赏
举报
回复
[Quote=引用 14 楼 的回复:]
所以我说他是用的比喻例子不是很合适,因为你能找出很多别的办法来避开他所说的问题......
他想要做到的是:建立一个对象,然后可以象更改影片子类一样的改变它的子类,并且不必先杀了它。你仔细看看他后面的做法,体会一下他是怎么做的,然后回过头来可能就理解这个例子了。
[/Quote]
谢谢你的耐心解答!
例子后面的做法,应该是Movie里面有一个Price的成员,通过将Price实例化成不同的子类的对象来使Movie具有不同的行为,看起来就好像是改变了Movie的类。 这么做是很好,但我还是不知道为什么不能用第一种做法,第一种做法会造成什么问题?? 因为我首先想到的会是第一种做法,如果不能清楚了解它造成的问题,我以后还是会首先想到用第一种做法。。。
muyi66
2012-03-29
打赏
举报
回复
所以我说他是用的比喻例子不是很合适,因为你能找出很多别的办法来避开他所说的问题......
他想要做到的是:建立一个对象,然后可以象更改影片子类一样的改变它的子类,并且不必先杀了它。你仔细看看他后面的做法,体会一下他是怎么做的,然后回过头来可能就理解这个例子了。
southbirdfly
2012-03-29
打赏
举报
回复
[Quote=引用 12 楼 的回复:]
不是这样,作者的意思是:影片不是OOP中类的实例,在同属影片这个大类的前提下我们还可以给它划分子类,而且可以改变它的子类。与此相对比,OOP中类的实例就没有这个灵活性,一旦实例化成为对象,它的……
[/Quote]
不知道是不是我表述不清楚。。。我感觉我说的和你说的应该就是一个意思。。。
问题是:如果采用第一种做法会造成什么问题? 影片可以改变分类,那我在它改变的时候重建实例不就可以了吗?从完成功能来说,我觉得完全可以做到的呀
muyi66
2012-03-28
打赏
举报
回复
[Quote=引用 11 楼 的回复:]
一张影片对应一个实例,实例所属的类是不变的,但影片的归类是可变的,比如今天我把它归为NEWRELEASE,明天我可以把它归为REGULAR,两者价格不同..是不是这么理解?
[/Quote]不是这样,作者的意思是:影片不是OOP中类的实例,在同属影片这个大类的前提下我们还可以给它划分子类,而且可以改变它的子类。与此相对比,OOP中类的实例就没有这个灵活性,一旦实例化成为对象,它的类就不能再改变了。
southbirdfly
2012-03-28
打赏
举报
回复
[Quote=引用 8 楼 的回复:]
引用 7 楼 的回复:
问题就是我看不出这个办法哪里不可行...
你所想的不是作者所想。我想他要的是一个方法,而不是一个参数。你改属性仅仅改了参数,却没有改变方法。所以作者说要用子类来实例化那些Movie。
也许他举的这个例子不是很理想,也许是我们并不了解他们那里的电影收费模式吧。
[/Quote]
一张影片对应一个实例,实例所属的类是不变的,但影片的归类是可变的,比如今天我把它归为NEWRELEASE,明天我可以把它归为REGULAR,两者价格不同..是不是这么理解?
一根烂笔头
2012-03-28
打赏
举报
回复
一部影片修改分类——通过多态——实现自己分类对自己的特征的修改——工厂的蓝图可以在原有基础上修改
一个对象——用类创建出来,就只包含创建时的类所具有的所有特征而不能增删——生产出的产品
深圳大哥
2012-03-28
打赏
举报
回复
[Quote=引用 2 楼 的回复:]
就是说一个对象从它被建立开始就已经被确定了类别了,它没法改变这一点,直到被毁灭。
其实我们自己也是这样的......不管多么不乐意,你是人类这一点就没法改变。
[/Quote]
生动形象
muyi66
2012-03-28
打赏
举报
回复
[Quote=引用 7 楼 的回复:]
问题就是我看不出这个办法哪里不可行...
[/Quote]你所想的不是作者所想。我想他要的是一个方法,而不是一个参数。你改属性仅仅改了参数,却没有改变方法。所以作者说要用子类来实例化那些Movie。
也许他举的这个例子不是很理想,也许是我们并不了解他们那里的电影收费模式吧。
southbirdfly
2012-03-28
打赏
举报
回复
[Quote=引用 6 楼 的回复:]
不是改成员属性,是改变所属子类。改属性倒是容易,改类别就没辙了。
作者只是从一个需求说起,然后设想一种解决办法,然后证明这个办法其实并不可行。再往后就可以引出新的解决方式了。
[/Quote]
问题就是我看不出这个办法哪里不可行...
muyi66
2012-03-28
打赏
举报
回复
不是改成员属性,是改变所属子类。改属性倒是容易,改类别就没辙了。
作者只是从一个需求说起,然后设想一种解决办法,然后证明这个办法其实并不可行。再往后就可以引出新的解决方式了。
southbirdfly
2012-03-28
打赏
举报
回复
[Quote=引用 4 楼 的回复:]
因为这样适应不了变化,电影在放映周期内还可以改变自己的收费类别,而一个对象创建完成就不能再改变类别了。
[/Quote]
是不是说:比如我有一个New Release Movie的实例aMovie,它有个成员type,值可能是NEWRELEASE,在运行过程中,我可以把type的值改为NORMAL,但这时候,aMovie还是New Release Movie类的实例而不是Normal Movie的实例。。也就是和类型不对应??
muyi66
2012-03-28
打赏
举报
回复
因为这样适应不了变化,电影在放映周期内还可以改变自己的收费类别,而一个对象创建完成就不能再改变类别了。
southbirdfly
2012-03-28
打赏
举报
回复
[Quote=引用 2 楼 的回复:]
就是说一个对象从它被建立开始就已经被确定了类别了,它没法改变这一点,直到被毁灭。
其实我们自己也是这样的......不管多么不乐意,你是人类这一点就没法改变。
[/Quote]
这个我理解,但把这句放在这里该怎么理解?因为我第一感觉就是子类化Movie..而且觉得子类化也能解决问题啊
muyi66
2012-03-28
打赏
举报
回复
就是说一个对象从它被建立开始就已经被确定了类别了,它没法改变这一点,直到被毁灭。
其实我们自己也是这样的......不管多么不乐意,你是人类这一点就没法改变。
southbirdfly
2012-03-28
打赏
举报
回复
哇。。图片太大了。。
代码
重构
学习1
最近在阅读《
重构
——改善既有代码的设计》这本书,觉得很有意思,也很有用,特此记录下来。
第一章
,作者通过一个简单的案例额,将
重构
前和
重构
后的代码做了比较,很清楚的就能看明白,
重构
的作用和意义。 作者在
第一章
中
有一句
话
让我印象深刻:“任何一个傻瓜都能写出计算机可以
理解
的代码。唯有写出人类容易
理解
的代码,才是优秀的程序员”。毕竟代码以后是要给人维护的,如果你的代码可以让接手的人轻松读懂,是不是事半功倍...
《构建之法》问题与思考
问题1 在第9章
中
,提到了这样一句“没有风险,就是最大的风险。”
这句
话
该如何
理解
呢?而在本段之前刚刚对于风险管理水平进行了分层,那
这句
话
是否是可以
理解
为:风险会从多方向来袭,企图缩短软件的生命周期,而所谓“没有风险”只是没有预见风险,并且没有对其未来的风险情况进行评估呢? 问题2 在第11章
中
,有下面这样一段内容 “5. 写好代码后,小飞对照设计文档和代码指南进行自我复审,
重构
代码。” ...
java面向对象
第一章
到第六章
中
每章的核心概念和知识点
个人学期总结 仅供参考,不一定写的都对,大佬指点一下
重构
-在实践
中
理解
在老大的推荐下买了Martin Fowler的<Refactoring improving the design of existing code>,其实这本书就是作者
重构
的经验之谈,随便翻一下,尽管你看的多么仔细,如果你没有在实践
中
感受到它或者应用到它,其实你很难在需要的时候用上。 昨天服务上线的时候,老大就给我上了一课,首先是一个同事定位到我的一个查询接口超时,...
重构
其实就是持续改进
==========实用主义=========== 不知什么时候国内的技术人士开始流行大
话
技术了,不少《大
话
XXX》的书出现在世面上,这些书
中
最早也是比较经典的一本应该算是《大
话
设计模式》了,不得不说用这种方式来说技术问题,让不少人更容易
理解
,这种方式传递的应该是一种思想:实用! 从《大
话
重构
》试读的两章
中
可以看出这本书应该也是本着这样的思想,正如书
中
所说关于
重构
的书籍很多,各公司的...
C++ 语言
65,187
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章