框架与库

最近去了一个公司上班。公司有一个软件平台。所谓的平台,其实是一套类库。这套类库是根据自身的业务需要,在开源库的基础上进行了封装,形成自己的类。当需要开发或扩展业务时,直接调用这些库或对其进行进一步的扩展。我个思路很好。以前虽然学过C++面象对象的知识,但是对于类的使用,并没有什么迫切的需要,通过了解这个套库的思想后,我想到可以将原来的许多业务封装到类中,管理起来,形成自己的库。
在使用这套库的时候,最终的功能类都是封装到DLL中,包括有界面和没有界面的。主程序只是按照配置文件去读取相关的DLL,生成整个软件。


以上是一个尝试,用C++builder实现的串口调试工具。先实现一个纯虚类作为接口,再实现中间层,最后是底层。由于的类的继承关系,解决了代码复用的问题。在上层写好的功能,下层就不必重复去写。在底层类中如TXK3190A9,代码量很少,仅仅是对XK3190A9的通信协议作了解析。其他的通信功能直接调用父类TCommData。TCommBase是一个纯虚类,不能直接产生对象,主要是用来管理底层类的实例,即C++多态的使用。当有多台仪表同时工作时,可以用C++多态来方便管理,这样能很好的解决一机多秤的功能需求。

.h文件
//---------------------------------------------------------------------------
#ifndef testUnit1H
#define testUnit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
#include "TXK3190A9.h"
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:// IDE-managed Components
        TButton *Button1;
        TTimer *Timer1;
        TLabel *Label1;
        TButton *Button2;
        void __fastcall Button1Click(TObject *Sender);
        void __fastcall Timer1Timer(TObject *Sender);
        void __fastcall Button2Click(TObject *Sender);
private:// User declarations
public:// User declarations
        __fastcall TForm1(TComponent* Owner);


        TXK3190A9 * A9;
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif

.cpp文件
#include <vcl.h>
#pragma hdrstop

#include "testUnit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    A9 = (TXK3190A9*)getTXK3190A9(0);
    A9->Open("Com1","9600,n,8,1");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
    if(A9)
      Label1->Caption = A9->getWeight();    
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    if(A9)
      A9->Close();    
}
上面的代码中,需要自己写的只有几行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值