全网最适合入门的面向对象编程教程:00 面向对象设计方法导论

全网最适合入门的面向对象编程教程:00 面向对象设计方法导论

1.1 面向过程编程与面向对象编程 OOP

在嵌入式开发中,我们往往使用 C 语言进行编程,将待完成的问题看作一系列需要完成的任务,函数则用于完成这些任务,解决问题的焦点集中于函数,这就是所谓的面向过程编程。

与之相对的是面向对象编程,它把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数,相同属性和操作方法的对象被抽象为类。以在工业制造上,使用模具来铸造机壳和零件为例,类就是模具,而对象就是使用模具生产出的零件,即类的实例。

以把大象装进冰箱为例,二者区别如下图所示:

1.2 软件危机与 OOP 思想的提出

**“史前时期最骇人的景象,莫过于一群巨兽在焦油坑里做垂死前的挣扎。不妨闭上眼睛想像一下,你看到了一群恐龙、长毛象、剑齿虎正在奋力挣脱焦油的束缚,但越挣扎,焦油就缠得越紧,就算他再强壮、再厉害,最后,都难逃灭顶的命运。过去十年间,大型系统的软件开发工作就像是掉进了焦油坑里…… ” **
——佛瑞德·布鲁克斯

早期的编程语言,如汇编语言、只有 0 和 1 的机器语言,本质上是面向机器编程。他们开始认为编程的设计应该符合人类习惯和逻辑思维的语句,如 add 用于加法运算、sub 用于除法运算、cmp 用于比较两个数的大小。

但 CPU 指令集(汇编语言)还是比较抽象,人们有了一个自然的需求,能不能按照人容易理解的思维写程序后把写出来的程序自动翻译成机器语言呢?后来,计算机科学家们发现所有程序可以化为三种结构构成:顺序结构、分支结构和循环结构。

Fortran、C 等所谓的高级编程语言便应运而生,这样的语言关注逻辑处理过程,在面对编程问题时,往往采用结构化范型来完成软件开发,人们将软件的生存周期分为需求分析、总体设计、详细设计、编程和测试几个阶段,强调系统的模块结构,以及模块的划分,模块间的数据传送及调用关系。

然而随着软件需求的快速增长,面向过程的设计方法使得大型软件更容易被设计成面条式程序,长长的过程调用执行,像一根面条。大型项目最后由这样一根一根面条组成,就成了一个毛线团,变得难以维护和修改。

1968 年,北大西洋公约组织(NATO)在联邦德国的国际学术会议创造软件危机(Software crisis)一词。而 1960 年代中期开始爆发众所周知的软件危机,为了解决问题,在 1968、1969 年连续召开两次著名的 NATO 会议,并同时提出软件工程的概念。1972 年,艾兹赫尔·戴克斯特拉于计算机协会图灵奖的演讲:

软件危机的主要原因,把它很不客气地说:在没有机器的时候,编程根本不是问题;当我们有了计算机,编程开始变成问题;而现在我们有巨大的计算机,编程就成为了一个同样巨大的问题。
—艾兹赫尔·戴克斯特拉,《Communications of the ACM》

软件危机使人们认识到中大型软件系统与小型软件有着本质性差异:

  • 大型软件系统开发周期长、费用昂贵、软件质量难以保证、生产率低,它们的复杂性已远超出人脑能直接控制的程度;
  • 大型软件系统不能沿袭工作室的开发方式,就像制造小木船的方法不能生产航空母舰一样。

软件的存在已经有数十年的历史了,一直到了 1980 年代的面向对象技术才解决了一部分在软件危机上的窘境。人们开始重新审视软件编程这件事情的本质,除了一部分科学计算或者其他特定目的的软件,大部分的软件是为了解决现实世界的问题,企业的库存管理、银行的账务处理等等。所以,软件编程的本质是程序员用代码的方式使现实世界的事务运行在计算机上,计算机软件是为了解决现实世界的问题而开发出来的,那么软件编程这件事情应该关注的重点是客观世界的事物本身,而不是程序员的思维方式或者计算机的指令。

如果软件编程的重点是客观世界的事物本身,那么编程语言如何才能更好地满足这一需求?面向对象编程应运而生,它提出一切皆对象,客观世界的用户、账号、商品是对象;创建、组合、关联这些对象的工厂、适配器、观察者也是对象;将所有这些对象分析、设计、开发出来,一个软件系统就完成了,这个软件系统灵活、强大,最重要的是可以根据需求变化快速更新维护。

1.3 面向对象方法学

面向对象方法学是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,是建立在“对象”概念基础上的方法学。对于面向对象方法学,它把软件开发分为分析、设计和编程三个不同阶段。

1.3.1 面向对象分析(OOA)

OOA 面向对象分析方法指的是在一个系统的开发过程中进行了系统业务调查以后,按照面向对象的思想来分析问题,并确定所需的对象及对象之间的交互关系。分析阶段关注的是需要完成什么,分析阶段的输出是一系列需求。

1.3.2 面向对象设计(OOD)

面向对象设计(OOD)就是在 OOA 模型的基础上运用面向对象方法进行系统设计,是将这些需求转化为实现方案的过程。设计者必须命名对象,定义其行为,指定哪些对象可以针对其他对象实施指定的行为。设计阶段关注的是如何完成。设计阶段的输出是实现方案。

1.3.3 面向对象编程(OOP)

面向对象编程(OOP)是将完美定义的设计转化为可以运行程序的过程,即用具体的数据结构来定义对象的属性,用具体的语句来实现服务流程图所表示的算法。OOP 阶段产生的程序能够紧密地对应 OOD 模型。

文档获取

可访问如下链接进行对文档下载:

https://github.com/leezisheng/Doc


本文档主要介绍如何使用 Python 进行面向对象编程,需要读者对 Python 语法和单片机开发具有基本了解。相比其他讲解 Python 面向对象编程的博客或书籍而言,本文档更加详细、侧重于嵌入式上位机应用,以上位机和下位机的常见串口数据收发、数据处理、动态图绘制等为应用实例,同时使用 Sourcetrail代码软件对代码进行可视化阅读便于读者理解。

关于文档的更多介绍可看:
学嵌入式的你,还不会面向对象??!

相关示例代码获取链接如下:

https://github.com/leezisheng/Python-OOP-Demo

热门相关:法利赛人   恐怖复苏   99次离婚:厉少,请低调   美味的妈妈   别吃那个鬼