设计中应对变化的方法

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xenium_lee/article/details/4492068

sicp习题2.76:一个带有通用型操作的大型系统可能不断演化,在演化中常需要加入新的数据对象类型或者新的操作。

对于上面提出的三种策略--带有显式分派的通用型操作,数据导向的风格,以及消息传递的风格--请描述在加入一个新类型

或者新操作时,系统所必须做的修改。哪种组织方式最适合那些经常需要加入新类型的系统?哪种组织方式最适合那些经常

需要加入新操作的系统?

我们可以看看OO是哪一种。

OO出现以前,我们是这样写函数的。

fun

{

if (isCat)

miaomiao

else if (isDog)

wangwang

else if (isCow)

miemie

}

这就是典型的“带有显式分派的通用型操作“,这里把“操作”看成“变化”,把“类型”看成“不变”, 适合加入“新操作”,

不适合加入“新类型”。

 

为了解决加入新类型的问题,很容易就想到把“操作”看成“不变”,把“类型”看成“变化”。这就是”消息传递“的风格。

也就是现在所谓的OO风格。C++里面的虚表就是按照这种逻辑设计的,只用告诉对象要调用哪个函数,即表的第几行,就行了。

当然这个表由编译器负责填写。

 

但是OO加“操作”是不方便的,即通常意义上的改接口。

但OO流行的原因在于,我们通常可以先确定接口,但无法确定今后会有哪些扩展的对象。

 

最灵活的就是“数据导向的风格”,类型和操作都可以不确定,完全由运行时数据驱动。

展开阅读全文

如何设计不断变化的的动态报表?

05-02

有这样的一个应用,共有3个数据表,其中A表中存储所有的标准工资信息,有很多字段,B标准存储单位信息,C表中存储每个单位的工资项目信息,结构大致如下:rnA表rn---------------------------------------------rnID deptID usertype userID username A001 A002 A003 A004 A005 A006 A007 A008rnrnB表rn---------------------------------------------rnID deptID deptnamernrnC表rn---------------------------------------------rnID DeptID usertype code codenamernrn就是在C表中存储这左右单位不同人员类型的工资项目,二基本上各个单位的工资项目是不同的,现在如何按照不同的单位生成报表???? rnrn实例数据如下:rnA:rn1 1001 001 1001001 A 400 0 123 0 345 0 0 768rn2 1001 002 1001002 B 400 50 0 0 0 0 0 450rn3 1002 001 1002001 C 400 60 30 21 0 0 0 511rn4 1002 001 1002002 D 350 70 25 15 0 0 0 460rn5 1002 002 1002003 E 350 0 150 25 0 15 45 570rn6 1003 001 1003001 F 0 250 150 0 0 15 0 415rn-------------------------------------------------------------rnB:rn1 1001 单位一rn2 1002 单位二rn3 1003 单位三rn------------------------------------------------------------rnC:rn1 1001 001 A001 基本工资rn2 1001 001 A003 等级工资rn3 1001 001 A005 奖金rn4 1001 001 A018 实发工资rn5 1001 002 A001 基本工资rn6 1001 002 A002 岗位工资rn7 1001 002 A008 实发工资rn8 1002 001 A001 基本工资rn9 1002 001 A002 岗位工资rn10 1002 001 A003 等级工资rn11 1002 001 A004 交通费rn12 1002 001 A008 实发工资rn13 1002 002 A001 基本工资rn14 1002 002 A003 等级工资rn15 1002 002 A004 交通费rn16 1002 002 A006 高原补贴rn17 1002 002 A007 边远补贴rn18 1002 002 A008 实发工资rn19 1003 001 A002 岗位工资rn20 1003 001 A003 等级工资rn21 1003 001 A006 高原补贴rn22 1003 001 A008 实发工资rnrn现在要生成如下形式的报表:rnrn 单位一工资表rn类型:001rn----------------------------------------------rn序号 姓名 基本工资 等级工资 奖金 实发工资rn1 A 400 123 345 768rn 合计 400 123 345 768rnrn----分页------rn 单位一工资表rn类型:002rn----------------------------------------------rn序号 姓名 基本工资 岗位工资 实发工资rn1 B 400 50 450rn 合计 400 50 450rnrn----分页------rn 单位二工资表rn类型:001rn----------------------------------------------rn序号 姓名 基本工资 岗位工资 等级工资 交通费 实发工资rn1 C 400 60 30 21 511rn2 D 350 70 25 15 460rn 合计 750 130 55 36 971rnrn----分页------rn 单位二工资表rn类型:002rn----------------------------------------------rn序号 姓名 基本工资 等级工资 交通费 高原补贴 边远补贴 实发工资rn1 E 350 150 25 15 45 570rn 合计 350 150 25 15 45 570rnrn----分页------rn 单位三工资表rn类型:001rn----------------------------------------------rn序号 姓名 岗位工资 等级工资 高原补贴 实发工资rn1 E 250 150 15 415rn 合计 250 150 15 415rnrn该如何生成这些报表,能够同时预览和打印?????rn 论坛

没有更多推荐了,返回首页