写在前头
这篇笔记是在观看《面向对象设计C++》的过程中整理的,视频大约从早上七点半开始,中间还花了半个小时去看一些有趣的UML内容。笔记是在语雀完成的,导出过程稍显麻烦,尤其是由于图片有防盗链的限制。通过这次写作,我逐步探索出从语雀到博客的写作流程:
-
在语雀中写笔记更为舒适,同时方便管理源素材,图片直接放在桌面上。
-
然后从语雀导出 Markdown 文件,手动插入图片。
-
最后,删除不必要的内容,比如图片名称(如
![截屏2023-10-22 08.55.25.png]
)。
一、面向对象设计基础
在面向对象设计中,我们从对象出发,思考问题和分析问题。首先明确几个概念:
-
对象(Object):可以视为“实体”(Entity),包括可见和不可见的部分。在编程语言中,任何变量都是对象。
-
对象 = 属性 + 服务:例如,灯的对外服务是“发光”或“不发光”。对象内部的状态(属性)不能直接操作,外部只能通过服务进行访问。这是理解面向对象设计的重要基础。
二、映射与操作
在面向对象设计中,“映射”指的是从问题空间到程序空间的转化。在面向过程编程中,分析问题通常遵循时间顺序,按步骤处理,而面向对象编程则更关注场景中的对象及其相互关系。
- 对象的定义:对象内部包含数据,外部提供操作(Operations)。
我们可以用面向对象的思想去设计、分析和实现具体的代码。
三、对象的层次与类
对象可以发送消息,这一点可以通过生活中的实例进行解释。我们把“类”理解为概念,而对象是该类的具体实例。例如,当我们定义“人”的概念时,仍然需要具体的个体来加深理解。
- 类与对象:类定义了对象的形态,而对象则是类的实例。在C++中,类(Class)与类型(Type)是同义的。
四、OOP描述与接口
在面向对象编程中,有几个关键点需要注意:
-
理解“要做什么”(What to do),而不是“怎么做”(How to do)。我告诉你该做的事情,你如何去做则是你的自由。这也引发了我对“教我做事吗?”这一流行表达的思考。
-
对象可以嵌套对象。
-
每个对象都有类型,计算机科学的本质是人为定义规则,先有类型,再产生对象。
-
同一类型的对象可以接受相同的消息。
对于接口(Interface)的理解,接口外部的部分是可以替换的,这样设计接口有助于减少耦合度,增加灵活性。
- 隐藏实现:通过接口的设计,程序员可以选择隐藏内部实现,只暴露必要的接口,便于后续的替换和维护。
五、封装(Encapsulation)
封装是面向对象设计的重要特性,它将数据和方法放在一起,并限制外部访问。通过封装,程序员可以控制成员变量的可访问性,这种信息隐藏机制提高了代码的安全性和灵活性。
封装的最佳例子就是“类”,它通过对外暴露接口来保护内部数据。
封装不仅是提高代码安全性的手段,也使得开发过程更为高效。通过只对外暴露必要的接口,我们能够创建出更稳健的系统。
参考资源
通过这篇博客,希望能帮助读者更好地理解面向对象设计的核心概念,尤其是封装和接口在实际开发中的重要性。
更新于:2023年10月22日