当前位置: 技术问答>java相关
OO能否支持对象的演化?
来源: 互联网 发布时间:2015-07-30
本文导语: 面向对象程序设计中的对象是对现实世界中对象的抽象表述,现实世界中的对象是不断 演化的,即其状态是不断变化的,而对象处于不同的状态,会有不同的行为。 举一个简单的例子,现在有两种对象OpenedBox和ClosedB...
面向对象程序设计中的对象是对现实世界中对象的抽象表述,现实世界中的对象是不断
演化的,即其状态是不断变化的,而对象处于不同的状态,会有不同的行为。
举一个简单的例子,现在有两种对象OpenedBox和ClosedBox,OpenedBox具有close,put,get等行为,而ClosedBox只有open行为。现在我得到一个ClosedBox对象。
ClosedBox aClosedBox = GetaClosedBox();
aClosedBox.open();
现在,我的对象aClosedBox已经成为一个OpenedBox,但是它支持的却还是ClosedBox接口。还有一个问题是对象通过自己的操作open能不能将自己变为(演变为)另一个对象。
一种解决方案,也是常用的就是不分ClosedBox和OpenedBox,而是设立Box 类,具有所有上述操作,并在Box对象内部保持状态,比如bClosed,bOpen。但在对象结构复杂的时候,这个方案会使得Box类很复杂,而且感觉上也很别扭。
不知有没有别的好的解决方案,望大侠不吝赐教,Thx!
演化的,即其状态是不断变化的,而对象处于不同的状态,会有不同的行为。
举一个简单的例子,现在有两种对象OpenedBox和ClosedBox,OpenedBox具有close,put,get等行为,而ClosedBox只有open行为。现在我得到一个ClosedBox对象。
ClosedBox aClosedBox = GetaClosedBox();
aClosedBox.open();
现在,我的对象aClosedBox已经成为一个OpenedBox,但是它支持的却还是ClosedBox接口。还有一个问题是对象通过自己的操作open能不能将自己变为(演变为)另一个对象。
一种解决方案,也是常用的就是不分ClosedBox和OpenedBox,而是设立Box 类,具有所有上述操作,并在Box对象内部保持状态,比如bClosed,bOpen。但在对象结构复杂的时候,这个方案会使得Box类很复杂,而且感觉上也很别扭。
不知有没有别的好的解决方案,望大侠不吝赐教,Thx!
|
的確,temporal property中是沒有關於兩個對象的創建與銷毀。
而其實真正比較好的方法是使用接口,我們知道擴展和復用一個類的功能常用的是繼承,而需要動態的繼承的話,使用委托模式比較好。
一個對象需要在不同的時間“成為不同的衍生類”那麼這個對象根本不應該是一個衍生類。而一個對象可以在不同的時間委托給不同的對象。
使用委托可以很容易的在運行時刻對行為進行組合
而其實真正比較好的方法是使用接口,我們知道擴展和復用一個類的功能常用的是繼承,而需要動態的繼承的話,使用委托模式比較好。
一個對象需要在不同的時間“成為不同的衍生類”那麼這個對象根本不應該是一個衍生類。而一個對象可以在不同的時間委托給不同的對象。
使用委托可以很容易的在運行時刻對行為進行組合
|
你的这个问题,接口好像可以帮忙。或者你既然要这个类能变为另一个类,从这句话可看出,写两个类,必要时创建另一个类的对象不就行了。或许我没遇到你的问题,所以不能体味你的想法。
我个人觉得在你很好的应用OOS、OOD和OOP后,你的问题应该不是问题,一个好的解决方案一般会使你的程序代码易写,而且综合运用这3者好的话你的软件才具有一个好软件的条件之一。谨代表个人观点,仅供参考!
我个人觉得在你很好的应用OOS、OOD和OOP后,你的问题应该不是问题,一个好的解决方案一般会使你的程序代码易写,而且综合运用这3者好的话你的软件才具有一个好软件的条件之一。谨代表个人观点,仅供参考!
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。