百科问答小站 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      

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




  

相关话题

  怎么给VBA代码提速? 
  Java 集合类库的顶层里的 Collection,List,Set 是抽象类的话是否更“正确”一些? 
  写C with class很丢人么? 
  什么时候用C而不用C++? 
  面向对象编程是否是从根本上反模块化且反并行的?为什么? 
  如何用一句话说明什么是面向对象思想? 
  C++在面向对象编程中,非虚继承和非虚析构函数的存在是为了解决什么问题? 能否都用虚继承和虚析构函数? 
  怎么通俗的解释COM组件? 
  在哪里排队最有可能中奖? 
  为什么C#中型变不能直接修饰在类定义上? 

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





© 2024-11-22 - tinynew.org. All Rights Reserved.
© 2024-11-22 - tinynew.org. 保留所有权利