您好,登录后才能下订单哦!
今天就跟大家聊聊有关如何浅析RT-Thread面向对象编程思路,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
前言
一个对象可以概况如下:
01
面向对象的好处
在程序设计中,如果采用面向对象去设计程序,一方面考虑了结构化设计程序的优点,另外一方面又考虑了现实世界与面向对象空间的映射关系。
具体说起来如下:
(1)符合人类思维习惯,能自然地表现现实世界的实体和问题
我们程序往往去操作的就是现实生活的具体的物件,比如门锁控制,门锁的方法有开门和关门,门锁的状态有已经关上,已经开启,或者正在打开或者正在关闭,门锁的组成有机械结构和把手,门锁的含义就是为了保证家庭安全。有了这些思考,我们就可以把门锁控制程序抽象成一个对象了。
(2)代码复用的有效途径
当程序被抽象后,很多方法就可以进行复用操作了,我们可以将具体的东西抽象一层,比如门锁,可以抽象成电机控制,电机的正转反转这个方法不仅适用于门锁,还适用于其他比如把手之类的,所以抽象之后,电机的方法可以被把手和锁体同时复用,大大简化逻辑。
(3)封装使得对象相对独立,对软件维护带来方便
这个理解更加简单,就是降低了程序设计的耦合性,修改或者变更一个功能时,不会引起程序逻辑的混乱。
(4)多态性增强了操作的透明性、理解性和可维护性
多态性和继承的结合增强软件的灵活性和可复用性,由于多态的支持,使得软件的设计更加灵活,稳定。
(5)模块化
要得到可维护性、可复用性与兼容性好的软件,软件的系统结构应该是模块化的。好的模块具有高内聚低耦合的特性,软件质量得到保证
02
rt-thread中面向对象的思想
现实世界中的任何客观存在着的事物都可以称为对象。属性和操作是对象的两大要素。属性是描述对象的静态特征的,操作是描述对象的动态特征的。
我们都知道C语言是面向过程的,如何设计成面向对象。
struct object
{
int field;
};
struct child_object
{
struct object parent;
int a;
int b;
};
简单的说起来就是结构体的嵌套。
在rtthread中所有的类型的上帝就是rt_object。
一个rt_object的属性如下:
对象有对应的名称,类型,标识以及下一个的链表。
比如说ipc,消息间的通信机制
这些都是基于rt_ipc_object的基类集成的。
所以rt-thread的程序设计中,大量的用到了这种面向对象的思想进行设计。
03
rt-thread中对象的管理
我们知道,对象是需要管理的,如果只是一个一个单个的对象,是无法形成一个系统的,rt-thread中对于对象的管理如下图所示:
对象容器是操作对象,我们通过特定的方法,将这些容器插入到链表中,由操作系统进行管理。其接口有四大类型:
1.初始化对象
void rt_object_init(struct rt_object* object, enum rt_object_class_type type, const char* name);
初始化对象会设置相应的类别,并放置到相应的对象容器链表中。
2.脱离对象
void rt_object_detach(rt_object_t object);
脱离对象会从相应的对象容器链表中删除。
3.分配对象
rt_object_t rt_object_allocate(enum rt_object_class type type, const char* name);
对于一个动态对象,在使用前需要分配相应的对象数据块。当对象类型指定时,也将从系统的对象表中获得相应的数据块大小,而后分配出来。
4.删除对象
void rt_object_delete(rt_object_t object);
删除一个对象,首先它会做对象的脱离工作,然后释放相应的内存空间。
rtthread的设计思想是面向对象的方式,这样使得开发起来耦合性很强,所以在适配不同的bsp包的时候,我们可以不用修改内核部分,只用将bsp的具有接口做好,这种设计非常的理想,不管是我们自己写裸机程序还是使用操作系统设计程序,都应该有这种面向对象的思想,这样设计出来的程序稳定性更加的可靠。
看完上述内容,你们对如何浅析RT-Thread面向对象编程思路有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。