基于接口、组件和SOA的架构设计与实现
一、接口的概念
1.接口:是专门用来被继承的,一个接口,可以包含一个类属性的变量、常量等内容。但是,接口中的方法不能有具体的代码。接口中的方法类似虚函数,接口也就类似于抽象类。这就意味着,接口不能被实例化,不能把程序入口放到接口中。这样设计的目的是为了实现多重继承,所以接口就出现了。
2.抽象类:只要有一个抽象方法,或者说包含虚函数的类,此类就被标记为抽象类。作为抽象类,用户不能创建此类的实例,只能创建继承它的类的实例。抽象类通常是作为基类,让派生类去实现纯虚函数。派生类必须实现纯虚函数才能被实例化,所谓实现,就是去定义虚函数的函数体。
3.虚函数:虚函数的定义如下,虚函数没有函数体,只有声明,后加 =0 表示此为纯虚函数。
virtual 返回值类型 函数名 (函数参数) = 0;
举例:
class Shape { public: virtual void draw() const = 0; //虚函数1,画出一个对象 virtual void error(const string &msg); //虚函数2,报告错误 int objectID() const; //返回当前对象的整型标识符 }; class Rect: public Shape { //派生类矩形 }; class Elli: public Shape { //派生类椭圆形 };
说明:
上述定义了一个抽象类Shape,draw()函数,并且由“=0”可知它是一个纯虚函数,是没有定义具体实现成员的函数,实际上,他是一个接口。error()函数,如果需要报告错误,就可以调用它。抽象类中定义的虚函数draw()告诉了其派生类要画一个对象,就只是告诉你要“画”这个动作,你咋画就管不着了,不管你是画三角形还是矩形还是五角形我都不管。而派生类Rect就是去实现draw()这个函数,它告诉我要画,然后我就去画矩形,Elli类去画椭圆形。
图形理解:
父亲有大儿子和二儿子,两个儿子都很懒,爸爸不叫干活就整天躺shi~,有一天,父亲叫他两去干活了,干啥随便他们。然后大儿子就去洗碗,二儿子就去扫地了,所以这两儿子是去实现爸爸说的话了。那么,我们可以大概理解为父亲的去干活是一个接口,然后大儿子和二儿子是父亲的派生类,是去实现那个接口的。而当这个去干活接口是个虚函数时,这个父亲类就是一个抽象类。
总结:
从说明中可以看出,draw() 虚函数就相当于一个“通用的动作”,派生类Rect和Elli只有去实现了这个“通用的动作”才知道要去画,这样我们就叫虚函数draw()为接口,而基类Shape的派生类Rect、Elli是去实现接口,上述特性实际上是面向对象的抽象类或者说虚函数的作用,这个作业其实就是,把虚函数当成接口。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库