VCL继承关系全图
- 格式:pdf
- 大小:128.49 KB
- 文档页数:1
类之间的关系在大体上分为两种,一种是纵向的,另一种是横向的。
一、纵向的就是继承,它是OO的三个特征之一。
在UNL中称作:泛化(Generalization) 表示为:实现(Realization) 表示为:◆泛化泛化关系: 是一种继承关系, 表示一般与特殊的关系, 它指定了子类如何特化父类的所有特征和行为。
表示类与类之间的继承关系,接口与接口之间的继承关系。
一般化的关系是从子类指向父类的,与继承或实现的方法相反。
// Animal.hclass CAnimal{public:// implementvirtual HRESULT EatSomething(){// Do something}};// Tiger.h#include "Animal.h"class CTiger : public CAnimal{// Do something};◆实现实现关系: 是一种类与接口的关系, 表示类是接口所有特征和行为的实现。
// Animal.hclass CAnimal{public:// interfacevirtual HRESULT EatSomething() = 0;};// Tiger.h#include "Animal.h"class CTiger : public CAnimal{// Do something};注: 泛化和实现的区别就在于子类是否继承了父类的实现, 如有继承则关系为泛化, 反之为实现.二、横向关系,按UML关系分为4种,依赖(Dependency),表示为:--------→即虚线+箭头关联(Association),表示为:实线+箭头聚合(Aggregation),表示为:空心菱形+实线组合(Composition),表示为:实心菱形+实线它们的强弱关系是:依赖< 关联< 聚合< 组合,◆依赖依赖就是某个对象的功能依赖于另外的某个对象,而被依赖的对象只是作为一种工具在使用,而并不持有对它的引用。
什么是MFC?MFC——微软基础类(Microsoft Foundation Classes),同VCL类似,是一种Application Framework,随微软Visual C++ 开发工具发布。
目前最新版本为9.0(截止2008年11月)。
该类库提供一组通用的可重用的类库供开发人员使用。
大部分类均从CObject 直接或间接派生,只有少部分类例外。
MFC 应用程序的总体结构通常由由开发人员从MFC类派生的几个类和一个CWinApp类对象(应用程序对象)组成。
MFC 提供了MFC AppWizard 自动生成框架。
Windows 应用程序中,MFC 的主包含文件为"Afxwin.h"。
此外MFC 的部分类为MFC/ATL 通用,可以在Win32 应用程序中单独包含并使用这些类。
由于它的易用性,初学者常误认为VC++开发必须使用MFC。
这种想法是错误的。
作为Application Framework,MFC 的使用只能提高某些情况下的开发效率,只起到辅助作用,而不能替代整个Win32 程序设计。
MFC,微软基础类(Microsoft Foundation Classes),实际上是微软提供的 ,用于在C++环境下编写应用程序的一个框架和引擎,VC++是WinDOS下开发人员使用的专业C++ SDK(SDK,Standard SoftWare Develop Kit,专业软件开发平台), MFC就是挂在它之上的一个辅助软件开发包,MFC作为与VC++血肉相连的部分(注意C++和VC++ 的区别:C++是一种程序设计语言,是一种大家都承认的软件编制的通用规范,而VC++只是一个编译器,或者说是一种编译器+源程序编辑器的 IDE,WS,PlatForm,这跟Pascal和Delphi 的关系一个道理,Pascal是Delphi 的语言基础,Delphi使用Pascal规范来进行Win 下应用程序的开发和编译,却不同于Basic语言和VB 的关系,Basic语言在VB开发出来被应用的年代已经成了Basic语言的新规范,VB新加的 Basic语言要素,如面向对象程序设计的要素,是一种性质上的飞跃,使VB既是一个IDE,又成长成一个新的程序设计语言),MFC同BC++集成的 VCL一样是一个非外挂式的软件包,类库,只不过MFC类是微软为VC++专配的。
在Delphi编程语言中,类的继承关系可以通过查看类库或代码来理解。
以下是一个简化的Delphi VCL(Visual Component Library)部分组件的继承关系示例:
注:实际上,继承链会更复杂和广泛,这里仅展示了部分常见的组件继承关系。
TObject 是所有Delphi 对象的基类。
TPersistent 提供了序列化和持久化能力给那些需要保存其状态的对象。
TComponent 是所有Delphi 控件和其他可放置在窗体上的组件的基类,提供了组件生命周期管理、属性编辑等功能。
TControl 是TComponent 的子类,增加了位置、大小、可视等与用户界面相关的功能。
TGraphicControl 是TControl 的一个子类,用于那些不需要窗口句柄但
可以显示图形内容的控件。
TBevel 是TGraphicControl 的一个具体实现,它是一个简单的装饰性控件,通常用来绘制线条或者填充区域以分割窗体空间。
TCustomActionControl 和TCustomButtonControl 分别是动作控件和按钮控件的基础类,具体的按钮控件如TButton 等会进一步继承自这些类。
在实际应用中,Delphi 的VCL 类库包含数百个类,它们之间形成了复杂的继承结构,为开发应用程序提供了丰富的基础组件支持。
OfficeCADEDACAE软件脚本开发⼆次开发简要介绍Office/CAD/EDA/CAE软件脚本开发/⼆次开发简要介绍本⽂主要介绍办公软件(Word、Excel、PPT、Access、Visio),CAD(Auto CAD、Solid Works、CATIA),EDA(Altium Designer、Pads、Cadence)和CAE(ICEM、Fluent)等软件的脚本开发⽅式或者⼆次开发⽅式,以及相关的参考资料。
不同的软件的参考资料的丰富程度并不相同,参考资料语⾔限制了⽅便理解软件的开发⽅式,在Office办公软件的脚本开发中Excel脚本开发的资料最为丰富,在CAD软件中以Auto CAD软件最为丰富,在EDA软件中软件脚本及开发的中⽂资料较少,功能模块开发⽅式需要⼈为理解。
CAE软件的介绍就更少(不是没有)了。
⽬前⽐较常⽤的办公软件包括Word、Excel、PPT、Access这三款软件都是微软公司出品的,在购买电脑时已经预装的办公软件,Visio 软件不是Office的⼀部分,需要单独安装,WPS是国产⾦⼭公司的⼀款软件产品,⽬前这⼏款办公软件都⽀持VBA,微软的办公软件是⾃带的⾃家的VBA,Visio本来是⼀家独⽴的公司,后来微软把这个公司买了,成为微软的⼀个独⽴的产品,⾦⼭公司是为数不多的⽀持VBA的国产公司。
⽀持VBA的软件的CAD建模软件有很多,其中⽐较常见的包括Auto CAD、SolidWorks、CATIA等软件,当然也有其他软件⽀持VBA的CAD软件,这些软件的⼚家在微软的官⽅上可以查到,⼀共⼀百余家⼚商,⼤部分都是国外的公司。
使⽤VBA在三维建模软件中⾃动运⾏和使⽤⿏标在三维建模软件中的操作相同,在三维软件中有些函数是具有交互功能的,意思就是在程序运⾏到当前⾏需要客户⽤⿏标指定⼀个图元对象或者使⽤键盘输⼊⼀个字符串程序才能往下执⾏,⼤部分的函数是不具有交互功能的,⽅便程序运⾏,在⽀持VBA的软件中有⼀个脚本编辑器,脚本编辑器中有⼀个对象浏览器,对象浏览器中有该版本的脚本所⽀持的类(在VBA或者C++⾥⾯未实例化的类叫做类,但是在Delphi中未实例化的类叫做对象,对象在使⽤时还是需要实例化)。
数据结构与算法分析c语言描述中文答案【篇一:数据结构(c语言版)课后习题答案完整版】选择题:ccbdca6.试分析下面各程序段的时间复杂度。
(1)o(1)(2)o(m*n)(3)o(n2)(4)o(log3n)(5)因为x++共执行了n-1+n-2+??+1= n(n-1)/2,所以执行时间为o(n2)(6)o(n)第2章线性表1.选择题babadbcabdcddac 2.算法设计题(6)设计一个算法,通过一趟遍历在单链表中确定值最大的结点。
elemtype max (linklist l ){if(l-next==null) return null;pmax=l-next; //假定第一个结点中数据具有最大值 p=l-next-next; while(p != null ){//如果下一个结点存在if(p-data pmax-data) pmax=p;p=p-next; }return pmax-data;(7)设计一个算法,通过遍历一趟,将链表中所有结点的链接方向逆转,仍利用原表的存储空间。
void inverse(linklist l) { // 逆置带头结点的单链表 l p=l-next; l-next=null; while ( p) {q=p-next; // q指向*p的后继p-next=l-next;l-next=p; // *p插入在头结点之后p = q; }}(10)已知长度为n的线性表a采用顺序存储结构,请写一时间复杂度为o(n)、空间复杂度为o(1)的算法,该算法删除线性表中所有值为item的数据元素。
[题目分析] 在顺序存储的线性表上删除元素,通常要涉及到一系列元素的移动(删第i个元素,第i+1至第n个元素要依次前移)。
本题要求删除线性表中所有值为item的数据元素,并未要求元素间的相对位置不变。
因此可以考虑设头尾两个指针(i=1,j=n),从两端向中间移动,凡遇到值item的数据元素时,直接将右端元素左移至值为item的数据元素位置。