软件设计师必考精华 - 面相对象

本文深入探讨了面向对象编程的基础概念,包括类、对象、继承、多态等特性,并介绍了UML统一建模语言,展示了各种图表类型。同时,详细阐述了设计模式中的创建型、结构型和行为型模式,以及它们在实际开发中的应用。重点讨论了工厂方法、抽象工厂、生成器模式、单例模式和设计原则,如单一职责、开放封闭原则等。
摘要由CSDN通过智能技术生成

目录

面相对象

1、基础知识

2、UML

3、图

4、设计模式


面相对象

1、基础知识

对象 = 对象名 + 属性 + 方法(关键字和注释不能作为标识符给对象命名

变量和常量都有属性,但是变量有对应的存储单元,用来赋值修改,常量没有

类:是对象的模版,类是对具有相同操作方法和一组相同数据元素的对象的行为和属性的抽象与总结

消息对象之间进行通信的机制,是对象图上的标志,但是不是对象的组成成分

对象的组成部分包括:对象名,状态(属性),行为(操作)。类是对对象共有属性和行为的抽象,因此一个类定义的对象共享行为和属性

面向对象程序设计语言不通过指针进行

聚合对象:一个对象包含其他对象

主要特征:

  • 继承:定义了超类和子类的关系(两个及以上的超类称为多重继承会出现二义性问题)

  • 多态:不同对象收到同一个消息可以产生不同结果

    • 重载:是一个类拥有多个同名不同参数的方法

    • 过载:同一个名操作符或函数,不同的上下文有不同的类型

    • 覆盖:子类重写父类的方法

    • 包含多态:同样的操作可用于一个类型及其子类型

    • 强制多态:编译程序通过语义操作,把操作对象的类型强行加以变换,以符合函数或操作符的要求

    • 参数多态:采用参数化模板,通过给出不同的类型参数,使得一个结构有多种类型。

  • 封装:使得数据和加工数据的方法变成一个独立性很强的模块,private只有此类中定义的方法可以访问

绑定:函数调用和响应调用所需代码结合的过程

  • 静态绑定:程序编译时

  • 动态绑定:程序执行时,支持多态

抽象类是不能实例化的类,抽象类的子类必须实现抽象类所有抽象方法

  • 抽象类是不能产生直接对象的!!!

接口是一组方法声明的集合 Interface

面相对象分析阶段,架构师主要关注系统的行为

引用调用:实参的地址传给形参

函数 D_count(变量a1, 变量a2){
return integer  //函数体先给出函数的返回值类型
begin
    declare d_count integer;  //函数体执行内部,先声明函数变量
    ···
    ···
end
}

2、UML

UML(Unified Model Language):统一建模语言

2.1 基本元素

image-20210510110630366

2.2 常见UML关系

image-20210510111040669

关联:是一个结构关系,描述了一组链。两个类之间,可以有多个由不同角色标识的关联

  • 试卷和用户(付费学员和普通用户)

组合关系:强关联关系,contain-a,部分和整体有相同的生命周期,部分离开整体或整体消失,都无法正常运行

聚合关系:弱关联关系,has-a,整体与部分相对独立,并没有相同的生命周期

image-20210517111734288

扩展关系:extend指向主要活动,extend离的近的是主要活动

包含关系:include指向被包含的活动

3、图

UML图

  • 结构图:类图、对象图、构件图、组合图、包图 反映静态结构

  • 行为图:用例图、活动图、状态机图、顺序图、通信图、定时图、交互图

图名特点
类图类与类间的联系 对象、接口、协作和它们之间的关系 类和类之间有比例的关系
对象图描述某一时刻或一个时间点上各个对象的快照 对象是一个具体的事物,因此属性后有具体的值 包含类时,必须加上 : 和 __,如 :Order 对象图上没有消息,通信图上有消息
包图对语义联系紧密的事物进行分组 用带标签的文件夹符号表示之间的关系
用例图描述系统与外部系统和参与者的关系 有参与者,有用例,有系统边界
构件图描述一组构件间的依赖与连接,对外提供接口访问 接口间的依赖关系 有供接口和需接口
组合图显示分类器(类、构件、用例)的内部结构 船(螺旋桨—转轴—发动机)
顺序图描述对象间消息的发送与接收,重点在于强调顺序 消息上有箭头,代表发送和返回的顺序区间,有焦点、对象间有一定顺序 控制焦点用矩形表示,表示一个对象执行一个动作所经历的时间段 顶部表示动作开始,底部表示动作结束 返回虚线代表返回消息,实线代表方法 对象销毁用 ‘X’ 来表示
通信图描述对象间的交互,重点是连接 对象间通过消息通信
定时图给出消息经过不同对象的具体时间
部署图软硬件间的物理联系
交互图顺序图+活动图
活动图业务处理流程的描述,描述业务行为和并行行为 有业务流程、有业务判断(菱形)分支和监护表达式 每条箭线上不一定都会有事件
状态机图描述对象状态转换 状态图中每个结点对应的是状态,而状态与状态之间的变迁涉及到事件触发 所以在状态图中,每条箭线上都会有事件

状态转换:原状态和目标状态,在发生特定事件触发警戒条件满足时的状态转换,描述两个状态的一种关系

活动图

image-20210521135802004

顺序图

image-20210527102803180

4、设计模式

4.1 原则

设计原则定义特点
单一职责一个类,应仅有一个引起它变化的原因一个类,应仅有一个引起它变化的原因
开放封闭不可以修改源代码的基础上,新增功能对扩展开放,对修改关闭 构造抽象隔离
接口隔离客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上使用多个专门的接口比使用单一的总接口要好
共同重用一个包中的所有类应该是共同重用的。如果重用了包中的一个类,那么也就相当于重用了包中的所有类一个包中所有的类共同重用
共同封闭一个变化若对一个封闭的包产生影响,则将对该包中的所有类产生影响,而对于其他包则不造成任何影响包中的所有类对于同一种性质的变化应该是共同封闭的,对于其他包则不造成任何影响
依赖倒转高层模块不应依赖于低层模块,两者都依赖于抽象 针对接口编程,而不是针对实现编程抽象不应该依赖于细节 细节应该依赖于抽象
里式替换类型S的对象s1,存在类型T的对象t2, s1替换t2后,程序功能不受影响,S是T的子类型子类替换父类,且功能不受影响

4.2 分类

设计模式按照用途分:

  • 创建型设计模式:工厂方法、抽象工厂、生成器模式、单例模式、原型模式

  • 结构型设计模式:适配器模式、桥接模式、组合模式、装饰模式、外观模式、代理模式、享元模式

  • 行为型设计模式:模版模式、解释器模式、责任链模式、命令模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、访问者模式

按照作用对象分:

  • 类模式:工厂方法、适配器模式、模版模式、解释器模式

  • 对象模式:剩下的其他

依附于一个元素或一组元素之上对其进行约束或解释的简单符号为( 注释 )事物

4.2.1 创建型设计模式

描述如何创建、组合、表示对象

4.1.1 工厂方法

目的定义一个接口,用于创建对象,该模式由子类决定实例化哪个工厂类
构成抽象工厂(核心)、具体工厂、抽象产品、具体产品
特点工厂方法就是把客户类和工厂类分开,客户需要某种商品,只需向工厂提出,而无需自我改变 适用于父类利用子类创建对象
举例生产两种不同的口罩,医用型和N95型
结构图image-20210510120528289

4.1.2 抽象工厂

目的提供一个接口用于创建一组相关或相互依赖的对象 工厂方法只能生产一类产品,而抽象工厂能生产相关联多类产品
构成抽象工厂(核心)、具体工厂、抽象产品、具体产品 抽象工厂中的方法和抽象产品的个数不同
特点增加一类新产品、配置一系列相关产品很容易 工厂方法关注同等级产品生产,抽象工厂关注一个产品族生产
举例分别生产A、B两种级别的医用型和N95型 针对不同的平台定义一系列的组件
结构图image-20210510122316307

 

4.1.3 生成器模式(builder)⭐️

目的将一个复杂对象分解为多个简单对象
构成指挥者、产品、抽象建造者、具体建造者
特点将复杂对象的构建与其表示分离 抽象复杂对象的构建步骤,允许构造对象有不同的表示
举例例如:生产一台电脑 = 显示器 + 机箱 + CPU + 硬盘 生成器模式可以把电脑结构的组成和部件生产完全分开 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式
结构图image-20210510123305021

4.1.4 单例模式

目的一个类只有一个自身创建的实例,提供该实例给所有其他对象
构成单例类、访问类
特点类只有一个实例
举例如系统只能打开一个回收站、系统中的计算器、应用程序中的对话框
结构图image-20210510124136675

4.1.5 原型模式

目的指定一个已创建的实例作为原型,通过复制该原型来创建对象
构成访问类、抽象原型、具体原型
特点具体原型是基于抽象原型的复制
举例windows安装和Ghost镜像安装
结构图image-20210510150512572

4.2.2 结构型设计模式

如何组合类和对象成为更大的结构,该模式一般使用继承,将一个或多个类、对象进行组合、封装

4.2.1 适配器模式

目的类适配器模式:使用多重继承,进行接口间匹配(继承) 对象适配器模式:该模式依赖于对象组合(聚合)
构成原适配者、适配器、目标接口
特点
举例美国交流电插头—转换头—中国交流电插头
结构图image-20210510180046364

4.2.2 桥接模式

目的分离抽象与实现,使他们都可以独立变化
构成抽象化、扩展抽象化、实现化、具体实现化
特点不同抽象接口和实现可以组合和扩充 程序运行时,动态选择、切换具体实现 采用组合关系代替继承关系,解决多维度扩展问题
举例用户买门,门有两种维度变化因素:推拉方式(推拉门/折叠门)和材质(木门/铁门)
结构图image-20210510152305317

4.2.3 组合模式

目的用树型的结构,表示部分与整体的关系
构成抽象构件、树叶构件、树枝构件(抽象构件的部分)
特点对象部分-整体的结构
举例文件、子文件夹、文件夹
结构图image-20210510155743464

4.2.4 装饰模式

目的不改变真实对象的类结构,又可以动态额外增加功能
构成抽象构件、具体构件、抽象装饰、具体装饰
特点将一个对象加以包装,以提供额外行为
举例新增QQ皮肤
结构图image-20210510155807895

4.2.5 外观模式

目的为子系统中的一系列接口提供一个一致的界面,一个高层接口
构成客户、外观、子系统
特点为一系列复杂模块提供了统一接口的外接访问模块 提高子系统独立性,子系统变化不会影响调用它的客户类 减少低水平开发者风险
举例民众—政府大厅—公司交税、申请补贴、养老保险
结构图image-20210510155840564

4.2.6 代理模式

目的让其他对象可以用代理的方式控制访问本对象
构成抽象主题、代理、真实主题
特点代理对象代表一个单一对象,且该模式客户端不能直接访问目标对象 外观对象则代表一个子系统,该模式用户可以访问系统中每个对象
举例用户买票,12306代理访问车票内部数据库
结构图image-20210510155900697

4.2.7 享元模式

目的利用共享技术,复制大量细粒度对象
构成抽象享元、具体享元、非享元、享元工厂
特点解决程序使用中,大量创建相同或相似的对象、导致的资源开销问题 把相同的地方提取出来,使用享元模式
举例五子棋围棋的黑白子、图像中的坐标点或颜色
结构图image-20210510155924081

4.2.3 行为型设计模式

描述对象的职责如何分配,处理对象间的交互

4.2.1 模版模式

目的将算法一些步骤延迟在子类中实现,使得子类不改变数据结构的情况下,重新定义某些算法的特定步骤
构成抽象类、具体子类
特点提供多个子类公有的方法到父类 不变的、复杂的、重要的方法,作为模板方法
举例用户给出个性化要求,生产客制化产品

4.2.2 解释器模式

目的依据语言或某一文法,来定义一个解释器,解释语言中的句子
构成客户端、环境、抽象表达式、终结符表达式、非终结符表达式

4.2.4 责任链模式⭐️

目的多个对象处理某一请求,为避免冲突,将对象连成一条链,并沿着链传递请求,直到有一个对象处理它为止
构成客户、抽象处理者、具体处理者
特点客户无需指定接收者,可向多个对象发送请求
举例推卸责任模式,能处理处理,处理不了,next

4.2.5 命令模式

目的将一个请求封装为一个对象,发送请求和执行就变成了两个独立的操作
构成接收者—具体命令—抽象命令—调用者
举例客人点菜不需要知道厨师姓名,服务员—接收菜单—给厨师执行—厨师做菜

4.3.6 迭代器模式

目的提供一种顺序来访问一个聚合对象中的各个元素的方法,而不暴露聚合对象内部表示细节
构成抽象聚合、具体聚合、抽象迭代器、具体迭代器
特点一种顺序访问、聚合对象、不暴露内部表示

4.2.7 中介者模式

目的利用一个中介对象,减少对象间通信复杂性
构成抽象中介者、具体中介者、抽象同事类、具体同事类
特点一组对象通信复杂、相互依赖 中介对象封装了其他对象间的通信
举例房屋中介 一个后端数据模型能够被多个前端用户界面连接

4.2.8 备忘录模式

目的不破坏封装的前提下,保存、捕获对象内部状态,以便可以恢复到该状态
构成发起人、备忘录、管理者
举例备份、恢复到某一状态、数据库回滚、网页回退

4.2.9 观察者模式⭐️

目的对象间的一对多依赖关系,当被依赖对象改变时,就会通知所有依赖它的对象
构成抽象事件、具体事件、抽象观察者、具体观察者
特点具体事件知道其观察者 观察者和被观察者都有抽象,实现时,应该对扩展开放,对修改关闭 通过引入其他对象来分布通信
举例发布—订阅模式、公众号订阅

4.2.10 状态模式⭐️

目的当状态对象的内部状态发生改变时,对象可以根据条件相应的改变
构成环境、抽象状态、具体状态
特点对象内部状态,允许不同状态下有不同行为 对对象单独封装成类
举例自动贩卖机、操作系统多线程下的线程状态转换、不同情绪下人的表现

4.2.11 策略模式⭐️

目的封装各个算法,不同算法可以相互替换,但不影响客户使用
构成抽象策略、具体策略、环境
特点一个算法有不同的变体,许多相关类仅仅是行为有异 为多个只有行为差异的类, 配置不同行为 不希望客户知道算法的数据结构,分离算法的使用和的实现
例如查询作者出版的不同类型的产物

4.2.12 访问者模式⭐️

目的需要对一个对象结构中的对象进行很多不同且不相关的操作
构成抽象访问者、具体访问者、抽象元素、具体元素、对象结构
特点同一对象,访问者不同,结果不同,操作不同 一个Visitor对象是一个多态的accept操作的参数
举例超市商品系统:顾客关注价格和功能,老板关注利润和数量 小说人物,不同人不同评价
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值