网上oopc实现方式都能搜得到,如oopc参考文章,rtt的oopc也是基本一样:
(1)定义类都用struct——这一过程就是抽象封装的过程,把属性和方法封装到struct里面,方法用函数指针变量表示,其他作为属性。
(2)继承的实现都是结构体套结构体,且父类都是放在子类结构体的首位成员。
(3)每定义一类,都要编写该类对应的构造函数(初始化函数),析构函数可以没有(反初始化函数)。
(4)子类构造函数里重写父类方法。如何实现?通过给父类方法赋值的方式。
这样就实现了面向对象的抽象、封装、继承、多态的特性。
为什么要这么做呢?这样的好处是什么?这样遵循了对内封闭,对外开放的软件设计原则(设计模式就是这么来的)。简单点来说,扩展性好(如搭积木似的),好管理,稳定性强。
rtt的类的构造流程
rtt的设备构造流程一般是由设备驱动层发起的——因为其加入了自动初始化机制,rtt系统起来的时候自动调用它。
构造一般流程:
设备驱动层构造函数->设备驱动框架层构造函数->设备基类构造函数->rtt基类构造函数
这么来看是子类构造函数调用父类构造函数。但是从其函数返回来看是先执行父类构造函数再执行子类构造函数的。
此构造流程的完成意味着把驱动层的对象放到了rtt的对象容器里了,然后应用程序就可以根据名字来获取到其设备能力。
可扩展性强
新增一个子类只需编写该子类的构造函数即可,在其构造函数里调用父类构造函数就行,新的子类和父类是无关的,是解藕的。这样复用父类的构造函数和结构体,稳定性大增。