关于面向对象思想中二维数组如何与对象映射思路的思考

原创 2013年10月20日 11:57:26

前几天,看了一段代码,很有感触,于是自己进行了些思考,现将之撰文写出与诸君共勉。

这段代码是实现什么需求的呢?

需求是 设备网元中有多个单板,单板上对应多个命令字。我要随意的给对应单板上对应命令字的指令下发到设备上。

大家不用知道所谓的网元和单板是什么,反正该需求的目的就是要实现一个二维数组中的数据发出去。

按照正常的设计思路,我会设计一个二维数组,如下:

Param[MAX_BOARDID][MAX_CMDID]。

1)假如我要下发该数组中对应的一个元素到其他模块中,我会像如下这样来书写:

Send(Param[0][0]);

2)假如我要对一块单板下发所有的命令,我会像如下编写:

for (int i = 0; i < MAX_CMDID; i++)

{

    Send(Param[0][i]);  

}

3)假如我要对一个单板按照顺序下发所有的命令,我会多定义一个优先级表,在组成数组前将Param[0]排好序,伪码如下:

static const OrderTable[];  //优先级表

SetParamByOrder(data, OrderTable);  //优先级作为入参,也可以直接在函数中调用,这里只是示例一下。

然后再执行上例的for循环。

4)假如我要对一个单板只下发另一单板以前下发过的命令。

那就要这么来写:

for (int i = 0; i < SizeofAnotherBoardParam; i++)

{

       SetParamToMyBoard(i);

}


我们来看看这个原作者代码如何写的?

首先他定义了一个最小的元素Param,这里只有Get/Set,其类结构如下:

ParamGroup                  组   --包含50个ParamRepository,通过BoardID查询

ParamRepository         库    --包含5个Param,通过CmdID查询

Param                             元素



另外设计了ParamConfig类,实现对以上元素的管理。

ParamSynchronizer类,实现元素的创建,类似于工厂类

ParamPipe类,实现与设备通讯

ParamSwitcher类,实现倒换时处理,可以保存参数。

还有CfgParam实现传参作用,包含元素BoardId, CmdID


我们来看下上面的假如这里如何实现的。

1)假如我要下发该数组中对应的一个元素到其他模块中,我会像如下这样来书写:

ParamSynchronizer()->ParamPipe->Send(CfgParam);

2)假如我要对一块单板下发所有的命令,我会像如下编写:

int len = GetSizeOfParamRepository;

for (int i = 0; i < len; i++)

{

     CfgParam = ParamRepository.At(i);

     ParamSynchronizer()->ParamPipe->Send(CfgParam);

}

3)假如我要对一个单板按照顺序下发所有的命令,我会多定义一个优先级表,在组成数组前将Param[0]排好序,伪码如下:

static const OrderTable[];  //优先级表

在ParamRepository中添加时调整顺序即可。

然后再执行上例的for循环。

4)假如我要对一个单板只下发以前下发过的命令,那我只能先想办法将以前下发过的命令保存下来,然后才能下发。

在ParamRepository中已经包含了所有的历史命令

int len = GetSizeOfParamRepositoryAnotherBoard;

for (int i = 0; i < len; i++)

{

     CfgParam = ParamRepositoryAnotherBoard.At(i);

     ParamSynchronizer()->ParamPipe->Send(CfgParam);

}


上面用面向对象的方式把二维数组分解了一下,大家可以看一下,

其好处是一目了然,代码结构清晰了,在应用层只关心自己的内容,

循环遍历数组边界的东西没有,这些东西都隐藏在单独的类里,代码可读性,可维护性,

及犯错误的几率都小了很多。


仔细回味,有感:This is 面向对象的好处啊。











版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

黑马程序员--06 JAVA的面向对象思想与二维数组

----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------ 1、二维数组 格式: Int[][] arr=new int[2]...

JAVA之旅(三)——数组,堆栈内存结构,静态初始化,遍历,最值,选择/冒泡排序,二维数组,面向对象思想

JAVA之旅(三)——数组,堆栈内存结构,静态初始化,遍历,最值,选择/冒泡排序,二维数组,面向对象思想 我们继续JAVA之旅 一.数组1.概念 数组就是同一种类型数据的集合,就是一个容器数组...

Java基础-06.总结二维数组,面向对象

1:二维数组(理解) (1)元素是一维数组的数组。 (2)格式: A:数据类型[][] 数组名 = new 数据类型[m][n]; B:数据类型[][] 数组名 = new 数据类型[m][]; C:...

JAVA基础--db06_java面向对象-二维数组

二维数组: 格式三:int[][] arr = {{3,1,7},{2,4},{8}}; 面向对象:描述事物就2点,一是属性,二是方法 类与对象的关系 类:事物的描述 对象:该类...

黑马程序员_day06_二维数组和面向对象

----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------ 二维数组[][] 格式一:int[][]arr=new int[3]...

黑马训练营java学习日记——二维数组和面向对象(一)

------- android培训、java培训、期待与您交流! ---------- 一、      二维数组 数组:存储同一种数据类型的多个元素的容器。       这里的元素可以是...

黑马程序员—— 4,二维数组,面向对象,制作帮助文档,静态代码块,构造代码块,构造函数,单例设计模式

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------               黑马程序员——  4,二维数...

Java基础学习第六天——二维数组与面向对象入门

二维数组 二维数组常见初始化格式 二维数组练习 面向对象 面向对象思想 如何更符合面向对象思想 面向对象开发设计特征 类 一个对象的内存图 两个对象的内存图 三个对象的内存图

将Opencv中的IPlimage对象的数据与二维数组之间的互相转换

#include "stdafx.h" #include #include int main(int argc, char* argv[]) { IplImage *src = cvLoadI...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)