网上商城网站开发,平面设计欣赏网站推荐,网站建设专业输入法,网站建设企业排行榜前言
学习设计模式需要有面向对象编程的基础#xff0c;要基本掌握一种面向对象的编程语言。关于面向对象编程思想#xff0c;我们有另外一篇文章专门讲解#xff1a;面向过程和面向对象的联系和区别。 知识点
虚函数
在类的成员函数定义中#xff0c;形式上为定义为vir…前言
学习设计模式需要有面向对象编程的基础要基本掌握一种面向对象的编程语言。关于面向对象编程思想我们有另外一篇文章专门讲解面向过程和面向对象的联系和区别。 知识点
虚函数
在类的成员函数定义中形式上为定义为virtual的函数叫虚函数。
如果虚函数后面有“ 0”这个虚函数就是纯虚函数。
虚函数本身并不是一个真正的函数它没有自己的函数地址。调用虚函数实际上是先去虚函数表中找函数指针再进行调用。
对于虚函数在运行时基类会将虚函数表中的函数指针初始化为自己的函数地址子类初始化时会将其初始化为子类自己的函数地址达到函数覆盖的效果。
对于纯虚函数基类没有定义所以基类只会将虚函数表中的函数指针初始化为NULL子类初始化时会将其初始化为子类自己的函数地址达到函数覆盖的效果。
虚基类
包含纯虚函数的类叫做虚基类。
多态
多态是指当基类指针指向子类对象时使用基类指针调用基类定义的虚函数实际上调用的是此虚函数的子类实现。显然多态是使用虚函数实现的。
继承
面向对象语言三大特性之一这里不做详细说明。
接口
包含一系列虚函数的类就叫做接口。它只定义函数不关心如何实现。具体的功能实现任务交给继承自此接口的子类完成。接口正是利用的面向对象语言的多态特性。 接口顾名思义它连接了功能使用者和功能实现者是负责二者之间交互的类也是一种实现二者解耦的重要方法。
模块化
模块化是软件开发中无处不在的软件架构技术。它的核心思想是分而治之即将一个大问题划分为相对独立的小问题化繁为简逐个击破并最终通过模块间分工协作完成预期功能。
模块化思想存在于计算机技术的方方面面各个层次。例如
从硬件上来说
计算机是由多个零部件组装而成的每个零部件就是一个模块。存储器用于存储数据CPU用于计算输入输出设备用于数据交互
从软件上来说
一个函数就可以看做是一个模块它通过计算解决了某一个小问题再向上一级一个类就是一个模块它通过将属性和方法封装起来实现了一个具有某类功能的功能模块。再向上一级一个库动态库或静态库就是一个模块它将某一问题领域所有的解决方案接口封装在一起例如FFmpeg音视频处理库、pthread多线程库、zlib压缩库等等。再向上一级每一个软件本身也是一个模块这个软件为解决某一领域内的问题提供了完整的交互流程、各个方面的功能。再向上一级到分布式系统中某一计算机集群也是一个模块它是为了稳定地对外提供某一种计算服务。以此类推。
模块化无处不在是人类处理复杂问题的法宝。模块化除了可以降低系统复杂度模块化还便于多人协作。当系统模块化分解以后各个模块的制作可以同时进行并行开发大大加快系统开发进度。
封装
下面来说说封装。封装是实现模块化的核心技术。
封装是隐藏一些东西暴露一些东西。正是有一些东西被隐藏起来才实现了问题的简化。暴露出来的东西的数量相对于隐藏起来的东西的数量微乎其微。使用者只需要关心暴露出来的接口如何使用即可。当每个模块都能使问题复杂度收敛那么系统整体的复杂度就会下降整个系统就能做得很大实现起来也更容易。 结语
本文讲解了学习设计模式所需要的预备知识这些预备知识是理解设计模式的基础同时这些知识也是贯穿软件开发过程中的核心理念必须要多思考多理解多应用。 本文原创首发于微信公众号Qt未来工程师。