甘草的《面向对象理论》阅读笔记

来源:互联网 发布:软件培训大纲 编辑:程序博客网 时间:2024/04/27 16:14

今天读了 甘草的《面向对象理论》,内容还是比较基础的,不过有两点比较关注

 

一是类与类之间的关系,除了 has-a(聚合), is-a(继承), can-do(实现) 之外,在第八篇提到了 implement-with 关系

以前没有考虑过C++ public, protected, private 继承之间不同。文中明确指出了 C++ 中只有 public 继承是 is-a 关系,而 protected 则是 implement-with 关系。所谓的 implement-with ,则是指 class A 实现了某一功能,而 class B 利用 class A 的功能实现自身的功能。例子请看原文

 

二是第九篇中提到的矩形和正方形关系。这个问题以前也考虑过。为什么数学中“正方形是特殊的矩形”这一论断,到了OOP中就不对了呢?原因其实在于“正方形”和“矩形”的概念改变了

在数学中,给定一个顶点和长宽,就确定了一个矩形。如果改变顶点或者长宽,那就是另外一个矩形了。但是在设计矩形类的时候,一般都会具有设置顶点和长宽的函数。于是,同一个矩形对象,可以改变它的顶点和长宽,表示(数学意义上)不同的矩形了。

如果我们在设计矩形类时为这个类加上不变性(immutable),即对象创建出来后就不能改变了,那么这个矩形类才能真正表达数学上的矩形;从它派生出正方形类,虽然可能会有数据冗余,但却不会有逻辑上的问题了。

不可变类的典型例子,就是 C# 中的 string 类。string 类没有提供任何改变对象自身的方法,只提供了从一个 string 对象构造出新的 string 对象的方法。

原创粉丝点击