面向对象的结构化数据编程

 

2007 年我们提出了结构化数据编程,同时将这种思想广泛应用于新开发的项目中,并且取得了很好的效果。例如:生产测试系统、上海大用户项目、北京(大连)网络表项目、天津(山东)网络表项目等等,这些项目都用到了结构化数据编程的思想。结构化数据编程不仅为协议解析提供了指导方法,而且使得这些代码的实现更为简洁 ,更加易于维护。进入2008 年以来,随着配变项目的陆续推进,我们在吉林配变、广电配变和内蒙配变等项目中也相继尝试更实用的编程技术,用以解决数据结构和转换层次的问题。这一新方法就是“面向对象的结构化数据编程”。

 

一、概述

面向对象的结构化数据编程是在结构化数据的基础上加入面向对象的思想,并将数据的格式转换融合在一起,这样就构成了更加抽象的数据对象。一份协议可以分解为三个层次:结构、格式和语义,其中结构与格式占据其50 %以上的内容。研究面向对象的结构化数据编程就是用于解决描述协议结构和格式的问题。

图1-1 data数据的抽象

 

1-1 data 数据的抽象

1-1data 对象的类图,我们通过实现data 对象的构造函数和运算符重载来封装其格式转换,使得data 对象具有更高的抽象性,使其在外的特性表现为一个value 的数据类型。实际上,data 对象就将数据结构和格式进行了很好的封装。而实现这个过程的方法就是面向对象的结构化数据编程。

二、实现

示例一:

假设以电表协议DT645 为研究对象,考察面向对象的结构化数据编程是如何解决 电能量数据标识 0x9010 对应的描述。0x9010 的数据格式是:xxxxxx.xx BCD 码);数据长度:4 字节;单位:kwh ;(当前)正向有功总电能(+A )。参考代码如下:

#pragma pack (1)
class data {
  public:
    data (double _val) {
        val = hex2bcd(int(_val * 100));
    }
    operator double () {
          return (bcd2hex(val) * 0.01);
    }
    friend ostream &
    operator << (ostream &os, data a) {
        return os << double(a);
    }
  private:
    int val : 24;
};
#pragma pack ( )
 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值