面向对象设计与封装:从理论到实践


Lambert 发布于 2024-12-13 / 3 阅读 / 0 评论 /
写在前头 这篇笔记是在观看《面向对象设计C++》的过程中整理的,视频大约从早上七点半开始,中间还花了半个小时去看一些有&#

写在前头

这篇笔记是在观看《面向对象设计C++》的过程中整理的,视频大约从早上七点半开始,中间还花了半个小时去看一些有趣的UML内容。笔记是在语雀完成的,导出过程稍显麻烦,尤其是由于图片有防盗链的限制。通过这次写作,我逐步探索出从语雀到博客的写作流程:

  • 在语雀中写笔记更为舒适,同时方便管理源素材,图片直接放在桌面上。

  • 然后从语雀导出 Markdown 文件,手动插入图片。

  • 最后,删除不必要的内容,比如图片名称(如 ![截屏2023-10-22 08.55.25.png])。

一、面向对象设计基础

在面向对象设计中,我们从对象出发,思考问题和分析问题。首先明确几个概念:

  • 对象(Object):可以视为“实体”(Entity),包括可见和不可见的部分。在编程语言中,任何变量都是对象。

  • 对象 = 属性 + 服务:例如,灯的对外服务是“发光”或“不发光”。对象内部的状态(属性)不能直接操作,外部只能通过服务进行访问。这是理解面向对象设计的重要基础。

二、映射与操作

在面向对象设计中,“映射”指的是从问题空间到程序空间的转化。在面向过程编程中,分析问题通常遵循时间顺序,按步骤处理,而面向对象编程则更关注场景中的对象及其相互关系。

  • 对象的定义:对象内部包含数据,外部提供操作(Operations)。

我们可以用面向对象的思想去设计、分析和实现具体的代码。

三、对象的层次与类

对象可以发送消息,这一点可以通过生活中的实例进行解释。我们把“类”理解为概念,而对象是该类的具体实例。例如,当我们定义“人”的概念时,仍然需要具体的个体来加深理解。

  • 类与对象:类定义了对象的形态,而对象则是类的实例。在C++中,类(Class)与类型(Type)是同义的。

四、OOP描述与接口

在面向对象编程中,有几个关键点需要注意:

  1. 理解“要做什么”(What to do),而不是“怎么做”(How to do)。我告诉你该做的事情,你如何去做则是你的自由。这也引发了我对“教我做事吗?”这一流行表达的思考。

  2. 对象可以嵌套对象。

  3. 每个对象都有类型,计算机科学的本质是人为定义规则,先有类型,再产生对象。

  4. 同一类型的对象可以接受相同的消息。

对于接口(Interface)的理解,接口外部的部分是可以替换的,这样设计接口有助于减少耦合度,增加灵活性。

  • 隐藏实现:通过接口的设计,程序员可以选择隐藏内部实现,只暴露必要的接口,便于后续的替换和维护。

五、封装(Encapsulation)

封装是面向对象设计的重要特性,它将数据和方法放在一起,并限制外部访问。通过封装,程序员可以控制成员变量的可访问性,这种信息隐藏机制提高了代码的安全性和灵活性。

封装的最佳例子就是“类”,它通过对外暴露接口来保护内部数据。

封装不仅是提高代码安全性的手段,也使得开发过程更为高效。通过只对外暴露必要的接口,我们能够创建出更稳健的系统。

参考资源

通过这篇博客,希望能帮助读者更好地理解面向对象设计的核心概念,尤其是封装和接口在实际开发中的重要性。


更新于:2023年10月22日



是否对你有帮助?

评论