百科问答小站 logo
百科问答小站 font logo



如果我现在想定义Windows这个类,之后让它继承Rectangle这个类,这样做对么? 第1页

  

user avatar   Ivony 网友的相关建议: 
      

我同意

@vczh

的观点,但我倒不认为这是is a的流毒。

事实上是很多人根本就搞不清什么是is a xxx。

X is a Y的一个我认为相对正确理解是,所有的X是所有的Y的真子集。

然后我们来套一下就知道了

所有的窗口是所有的矩形的真子集。

好像有点不对,窗口和矩形有神马关系。

我相信你不会指着你家的窗子说,这是个矩形,然后指着你家的挂钟说,这是个圆形,,,,


再想一下我们是怎么把窗口和矩形结合起来的?

事实上一个读起来比较正常的句子是:窗口是矩形

千万别丢了这个,有没有这个含义可完全不一样。


我们不会说,苹果是水果的。

所以,窗口是矩形的,这个描述真实的含义是:窗口是个矩形的容器,窗口是个矩形的控件,窗口是个矩形的XX。


如此一来,窗口是不是个矩形简直就是呼之欲出的事情。



至于窗口到底是个啥,事实上我非常不建议任何初学者从神马窗口这种东西开始构建自己的设计。在XX是YY这种概念都不能清晰的分辨的时候,从窗口这种高度具象和复杂的东西出发,弄出来的东西必然是惨不忍睹的。



OOD做多了,像C#这样的单根继承体系怎么设计基本已经是本能了,我也随便贡献一个吧,以Windows操作系统里面的窗口为例,初步的构想是这样的:

       //标准的应用程序窗口 public class ApplicationWindow : StandardWindow, IMenuContainer, IToolbarContainer  //标准窗口,指矩形窗口 public class StandardWindow : WindowBase, IDialog, IResizable  //窗口基类 public class WindowBase : LayoutControl  //布局控件 public class LayoutControl : ContainerControl  //容器控件 public class ContainerControl : Control  //控件 public class Control : IVisual  //对话框,指有标题和关闭按钮的矩形可视化容器。 public interface IDialog : IRectangleVisual, IClosable, ITitleContainer  //可以调整大小的矩形容器 public interface IResizable : IRectangleVisual  //呈现为矩形区域的视觉控件 public interface IRectangleVisual : IVisual  //需要绘制的东西 public interface IVisual  //具有目录条的容器 public interface IMenuContainer  //具有工具条的容器 public interface IToolbarContainer  //可以关闭的视觉控件 public interface IClosable : IVisual      

可以看出来,在我的设计里,矩形这一特征,还是被保留在继承体系中,但是只是其中一个很小的小枝。




  

相关话题

  面向对象程序设计比传统的面向过程程序设计更有什么好处? 
  面向对象编程是否是从根本上反模块化且反并行的?为什么? 
  C++ 允许「我们都是人,所以我可以把你私有的眼睛借来随便玩,再还给你」,这难道是一种设计上的妥协? 
  设计闭包(Closure)的初衷是为了解决什么问题? 
  最上层的语言和最底层的语言都无需设计模式? 
  面对对象程序设计中return不能多次使用并且switch最好不用的说法是对的吗? 
  UML 还有用吗? 
  ES6的class关键字有没有实现真正的面向对象? 
  怎么通俗的解释COM组件? 
  Java中有哪些设计精良的部分(精华),还有哪些是不值得花费很多时间探究的知识点? 

前一个讨论
NSA 在 RSA 加密算法中安置后门是怎么一回事,有何影响?
下一个讨论
大家设计数据库时使用外键吗?





© 2024-09-28 - tinynew.org. All Rights Reserved.
© 2024-09-28 - tinynew.org. 保留所有权利