框架与库

来源:互联网 发布:淘宝网蹦蹦床价格图片 编辑:程序博客网 时间:2024/06/07 00:30
最近去了一个公司上班。公司有一个软件平台。所谓的平台,其实是一套类库。这套类库是根据自身的业务需要,在开源库的基础上进行了封装,形成自己的类。当需要开发或扩展业务时,直接调用这些库或对其进行进一步的扩展。我个思路很好。以前虽然学过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 declarationspublic:// 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();    }
上面的代码中,需要自己写的只有几行。

0 0