nardoo 发表于 2013-1-15 03:08:43

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

 
2007年我们提出了结构化数据编程,同时将这种思想广泛应用于新开发的项目中,并且取得了很好的效果。例如:生产测试系统、上海大用户项目、北京(大连)网络表项目、天津(山东)网络表项目等等,这些项目都用到了结构化数据编程的思想。结构化数据编程不仅为协议解析提供了指导方法,而且使得这些代码的实现更为简洁,更加易于维护。进入2008年以来,随着配变项目的陆续推进,我们在吉林配变、广电配变和内蒙配变等项目中也相继尝试更实用的编程技术,用以解决数据结构和转换层次的问题。这一新方法就是“面向对象的结构化数据编程”。
 
一、概述
面向对象的结构化数据编程是在结构化数据的基础上加入面向对象的思想,并将数据的格式转换融合在一起,这样就构成了更加抽象的数据对象。一份协议可以分解为三个层次:结构、格式和语义,其中结构与格式占据其50%以上的内容。研究面向对象的结构化数据编程就是用于解决描述协议结构和格式的问题。
http://www.agoit.com/bbs/../../../upload/attachment/30448/6adf93bd-1b12-3472-a211-23c50fe297de.gif
 
<span style="">图1-1 data数据的抽象
<span style="">图1-1是data对象的类图,我们通过实现data对象的构造函数和运算符重载来封装其格式转换,使得data对象具有更高的抽象性,使其在外的特性表现为一个value的数据类型。实际上,data对象就将数据结构和格式进行了很好的封装。而实现这个过程的方法就是面向对象的结构化数据编程。
<span style="">二、实现
<span style="">示例一:
假设以电表协议DT645为研究对象,考察面向对象的结构化数据编程是如何解决电能量数据标识0x9010对应的描述。0x9010的数据格式是:xxxxxx.xx (BCD码);数据长度:4字节;单位:kwh;(当前)正向有功总电能(+A)。参考代码如下:<span style="" />
#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 ( )  
 
页: [1]
查看完整版本: 面向对象的结构化数据编程