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

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

 

一是类与类之间的关系,除了 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 对象的方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值