PLC的面向对象编程(OOP)探秘7-类的层次

        本来这一节想讨论接口。不过,回想一下,发现我们这个系列已经有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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值