理解面向过程与面向对象

面向过程与面向对象

缘起

在学习开发ra6m5的时候翻到了这篇文章,一开始读感触不深,放假回家再读突然萌生了一些想法。文章连接附上

ARM嵌入式系统中面向对象的模块编程方法

在大一学习c语言的时候忽视了程序设计这个部分,以至于在之后编写代码的时候感觉很是繁琐,看了这篇文章醍醐灌顶。在下学期要开课python之际,谈一谈面向过程和面向对象。

程序设计

代码大全中指出设计的层次image

第二层设计

这一层要考虑程序如何分解为主要的子系统,并且定义清楚允许子系统如何使用另一个子系统。通过一些系统间的通信规则,简化子系统之间的联系。
在此基础上,YobeZhou提出里将程序分解为输入子系统->处理子系统->输出子系统

  1. 对于输入子系统,如果产品有用户输入、传感器、远程控制等功能,那么输入子系统可以拆分为:用户输入子系统、传感器子系统、远程控制子系统
  2. 对于中间的处理子系统,它根据输入,提供输出。在这一部分,有业务逻辑规则,对系统的依赖······
  3. 对于输出子系统,可能会涉及显示、操作各类设备、数据保存,那么就可以细分为:显示子系统、设备操作、数据子系统

第三层设计

将第二层的子系统分解为各个类,定义子系统类的同时,要定义类的接口来允许其他类的调用
yobezhou指出

怎么实现某个子系统?关键在于抽象出合适的结构体。比如对于用户输入子系统,可以对外提供两个接口函数:初始化、获得按键数据。
假设需要同时支持多种用户输入设备,那么还可以继续抽象出其他结构体,比如用来描述输入设备的“struct input_dev”,如下:
struct input_dev {const char name;int (Init)(void);}
对于每一个输入设备,都会为它构建一个“struct input_dev”结构体。

这里定义了接口函数供处理子系统:初始化Init,获得输入数据GetData;通过Init函数实现所有输入设备的初始化,通过GetData获得所有输入设备的数据

第四层设计

将类设计为子程序,在这一层里,更细化类的私有函数

第五层设计

子程序内部的设计

软件工程程序设计时候,就应用了面向对象中基于接口的理念,对系统分层分组。单片机工程师为了实现对硬件的控制,往往使用c语言,基于语言特性,这在子程序的实现里往往使用面向过程的设计。因此,在宏观和微观里实现了面向对象和面向过程的统一。

面向过程

用这篇文章里的定义

面向过程的编程方法是:先分析出解决问题所需的步骤,然后针对每一步骤编写函数,最后依次调用这些函数。

使用面向过程编写程序时,符合人类的认知过程,比较自然。它的效率也比较高,因为省去了结构体的初始化,调用函数时也比较直接,无需通过结构体进行调用。

面向对象

面向对象的编程方法是:把问题中的事务分解成各个对象,在对象里描述事务的属性、行为,最后使用对象来解决问题。
其主要的思想是

  • 封装(Encapsulation):将对象的状态和行为封装在一起,通过限制对内部数据和方法的直接访问,提供了更好的安全性和灵活性。
  • 继承(Inheritance):通过继承机制,一个类可以派生出子类,从而继承父类的属性和方法。继承促进了代码重用和扩展,使得代码更易于维护和扩展。
  • 多态(Polymorphism):多态允许不同的对象对同一个消息做出不同的响应。通过多态,可以编写出更通用、灵活和可扩展的代码。

面向对象的抽象程度很高,这要求写出更通用的对象,程序的实现高度依赖对象。高层次模块不应该依赖于低层次模块的具体实现,两者都应该依赖其抽象。这样可以提高代码的可扩展性。
在面向对象中,数据和方法高度绑定,这个时候数据机构是有意义的,构造合适的数据结构就是在选择类与类之间的关系。

posted @ 2026-02-01 21:56  loong2525  阅读(0)  评论(0)    收藏  举报