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