本来这一节想讨论接口。不过,回想一下,发现我们这个系列已经有7节的篇幅探讨OOP理论了。感觉有些内容没有讲透。这个篇幅我们探讨一下偏向实际的问题,这个问题我们在写代码过程中100%会遇到,只是很多人没有注意到这个问题,也没有总结。我在这里替大家总结。这个问题就是类的层次。本篇就探讨类的继承、嵌套和类的层次,以及类的层次如何用。
一,类的嵌套
先举例说明什么是类的嵌套。还是用探秘3中图1的例子,创建一个类FB1
,图 1
然后创建一个FB2,
,图 2
在FB2中,声明一个变量obj_fb1,该变量的类型是类FB1。这样就形成了对象中包含对象的局面。这就是今天要探讨的类的层次。我们这里讲的嵌套是指类的成员变量类型声明为其他类。一些高级语言支持的类嵌套与今天我们要探讨的类嵌套的形态不同,我们先不探讨。
我们可以称obj_fb1为内层对象,称FB2为外层类。可以讲,内外层的结构在几乎所有OOP代码中都存在。这种内外层类有一个最大的特点:外层类拥有内层类所有的特性。讲到这一点,不由我们联想起探秘5中的图5。所以也可以说外层类扩展了内层类,这和类的扩展非常相似。
二,类的多继承
类的嵌套还有一个好处,就是外层类中可以包括多个不同或者相同的内层类。这就实现了类似多继承的关系。所谓多继承,就是子类可以继承多个父类。但是在现代一般的OOP编程语言中,都不允许多继承。
不过通过类的嵌套可以实现类似多继承。
三,内外层类
我们在这里总结一下内外层类。
类的嵌套也是一种继承。内层类类似子类,外层类类似父类。内层类具有外层类的特性。在本文的讨论中,我们用外层类归纳父类或者嵌套的外层类;用内层类归纳子类或者嵌套的内层类。无论是用扩展还是用嵌套,最终结果都是可以抽象为内层类和外层类。下文将用内外层类的概念解决一个实际问题。
四,架构类的层次关系解决问题
有时候我们解决问题,并不需要写太多的代码,而是通过架构类的层次关系来解决问题。
假设我们自己做一个MODBUS TCP主站的类。这个类可以采用扩展方式,也可以采用嵌套方式。内层类是可以实现TCP主站通讯的类。外层类实现MODBUS的功能。这样的架构与网络7层协议暗合,内层类对应7层规范中低一些的层(如TCP传输层),外层类对应网络更高的层(如应用层-也就是本例子中的需要实现的modbus代码)(“需要实现的modbus代码"在IT领域可以简称为实现modbus业务)。
这种简单的小架构,就可以支撑起实现一个MODBUS TCP主站的类。
图 3
图3的解释:
1,创建一个可以实现MODBUS TCP主站的类,类名称是MB_Mst_TCP。这是外层类
2,在该类中声明一个TCP客户端的对象,tcpclient。我们知道主站都是客户端。从站是服务器。
3,TCP_Client是Net Base Services Library中的类。需要将该库添加到项目中。具体操作不是本文档重点,在这里不做过多解释。
4,在代码区,编写2类代码。
5,在变量声明区,声明一些代码中用到的变量。
6,声明一个TCP_Client对象只能与一个MODBUS TCP从站通讯。如果需要与多个从站通讯,那么需要声明多个对象。并且还需要有从站轮询的代码。
结束语
这篇文档重点探讨了类的层次对于解决一些问题的重要性。
虽然是结束语言,但是这里还是想说一下上面的例子。在MB_Mst_TCP类中,我们还可以创建方法。比如连接方法、数据传输方法、modbus业务方法。如果需要还可以为这个类创建属性和动作。这样的代码结构更OOP。

被折叠的 条评论
为什么被折叠?



