社区
C++ 语言
帖子详情
《重构..》第一章中这句话该怎么理解?
southbirdfly
2012-03-28 05:17:50
一部影片可以在生命周期内修改自己的分类,一个对象却不能在生命周期内修改自己所属的类
...全文
292
17
打赏
收藏
《重构..》第一章中这句话该怎么理解?
一部影片可以在生命周期内修改自己的分类,一个对象却不能在生命周期内修改自己所属的类
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
哇。。图片太大了。。
重构
是什么,为什么要
重构
,怎么
重构
本文深入浅出地解析了
重构
的概念,为何及如何进行
重构
,包括提炼函数、以查询取代临时变量、引入解释性变量等技巧,旨在改善代码质量,提高软件的可读性和维护性。
如何
理解
重构
本文详细介绍了代码
重构
的概念及其重要性,并按数据级、语句级、子程序级等不同层次逐步展开,提供了具体实用的
重构
方法。
【
重构
】一、
重构
的原则
本文探讨
重构
的原则与实践,包括改进软件设计、提升
理解
性、助于找bug及提高编程速度。阐述了
重构
的最佳时机,如预备性
重构
、帮助
理解
的
重构
及捡垃圾式
重构
,强调
重构
在敏捷开发
中
的作用。
简单的
理解
<
重构
>
本文详细阐述了
重构
的概念、目的及方法,包括提炼函数、以查询取代临时变量、引入解释性变量等技巧,旨在提升代码质量与可维护性。
通过
重构
得到更深层的
理解
通过
重构
代码不仅可以改进其质量,还能加深对业务领域的
理解
。本文介绍了如何通过与领域专家合作、利用分析模式及持续
重构
来发掘深层模型,从而使设计更加清晰和灵活。
C++ 语言
65,210
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章