学习界面与业务分离有感

 学习刘艺老大的《delphi面向对象编程思想》让我收获良多。再这里我想说说我对其中业务与界面分 离的理解,并用自己的 实例说明。

    实例背景:

    这个学期学习了《计算机控制系统》这门课,我就想用delphi实现对pid控制系统的简单仿真。

    实例主要包括三个类:界面类TForm1、业务抽象类:TPID、业务实现类:TPIDSon。TPIDSon继承自 TPID。有两个project:一个是界面project1,另一个是dll。dll里面只有一个输出函数function  PIDObject,返回一个TPIDSon的实例。

    我的想法是让PID的实现过程放在DLL里面,对外提供一个实例接口。然后通过该接口进行相应的操作 。这个DLL里面的PID算法实现是由抽象类的派生类TPIDSon进行实现的,所以,当程序发布以后,如果想 更改实现的方法,直接修改TPIDSon里的实现过程就可以了,从而达到了界面与业务分离的目的。不知道 各高手看了,会不会赞同我的看法,不过我当时确实是这么想的。下面,我们看看TPID的声明方法:

其中Ug是给定输入,Uk是K时刻输出。下面让我们看看其派生类TPIDSon的声明与实现方法:

完成以后,接下来我新建了一个DLL,里面只有一个函数:

该函数:PIDObject返回的是一个实例,所以,我们就可以再 界面类里进行调用。接下来我实现了界面,如下:

这样做之后,我如果想对PID的算法进行更新,我只要修改TPIDSon的实现方法就可以了,这样,是不是比较方便,当然,在做这个之前,我遇到了一个问题,一开始我想用刘艺老大书里说的方法,利用接口,我的做法如下:
首先我在TPID类里面直接实现了PID算法(利用类TInterfacedObject接口类):
然后我声明了一个派生类TNeuglsPID,我的想法是,TPID是最基层的PID“业务”算法,然后通过一个中间的接口实现类(实现接口IPID),TNeuglsPID类的声明与实现如下:

然后,我直接想通过接口IPID进行通讯,实现我要的界面与业务分离,IPID接口声明如下:

然后利用DLL作为载体:

界面还是像上面的一样,只不过在valueChanged方法里面的代码得稍稍改一下,然后再其他的部分稍稍修改一下,编译不会出现问题(我想,应该有一个方法可以做到不用修改,我的看法是把IPID接口里的数据获取方法全改成属性,不知道行不行,以后再试!嘿嘿,如果高手你知道,还请你指点小弟我一下。)在程序编译完成运行时出现了问题,我步进调试时发现PID变量为Nil,我不知道这是什么原因,还请各位看官指点,不知道刘艺老大会不会说我笨,连这都不知道为什么!呵呵。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值