前言
本系列文章为观看b站视频以及b站up主@zst_2001
系列视频所做的笔记,感谢相关博主的分享。如有侵权,立即删除。
视频链接:视频链接(注:文章中有关图片、以及网友的相关评论与总结等内容未标明出处均出自该视频,感谢大家的分享!)
b站up主页:b站up
一、基本概念
- 消息:对象之间的通讯,机制为异步通讯。
- 接口:一种类特殊的类只有方法的定义没有实现消息进行对象之间的交互的机制异步。
- 一个类可以拥有多个名称相同而参数表(参数类型或参数个数或参数类型顺序)不同的方法,称为 方法重载。
(注:下图来自前言中up主视频)
(说明:重载的三种类型)- 父类=超类=基类、子类=派生类。
- 编译时zst对象不能调用子类中有而父类中没有的方法。
(注:下图来自前言中up主视频)- 静态数据的值可以被修改。
真题链接
聚合对象是指 一个对象包含其他对象。
在面向对象分析与设计中,实体类 是应用领域中的核心类,一般用于保存系统中的信息以及提供针对这些信息的相关处理行为;边界类
是系统内对象和系统外参与者的联系媒介;控制类 主要是协调上述两种类对象之间的交互。在面向对象的系统中,对象是运行时实体,其组成部分不包括 消息;一个类定义了一组大体相似的对象,这些对象共享 属性和行为。
对象的 状态 标识了该对象的所有属性(通常是静态的)以及每个属性的当前值(通常是动态的)。
一个类可以具有多个同名而参数类型列表不同的方法,被称为方法 重载。
一个类是 一组对象的抽象定义。在定义类时,将属性声明为private的目的是 实现数据隐藏,以免意外更改。
在面向对象软件开发中,封装是一种 信息隐藏 技术,其目的是使对象的使用者和生产者分离。
对象、类、继承和消息传递是面向对象的4个核心概念。其中对象是封装 数据和行为 的整体。
在面向对象方法中,将逻辑上相关的数据以及行为绑定在一起,使信息对使用者隐蔽称为 封装。当类中的属性或方法被设计为private时,只有此类中定义的方法 可以对其进行访问。
一个类中,成员变量和成员函数有时也可以分别被称为 属性和方法。
面向对象程序设计语言C++、JAVA中,关键字 this 可以用于区分同名的对象属性和局部变量名。
封装 是把对象的属性和服务结合在一个独立的系统单元,并尽可能隐藏对象的内部细节;继承 是指子类可以自动拥有父类的全部属性和服务;消息
是对象发出的服务请求,一般包括提供服务的对象标识、服务标识、输入信息和应答信息等。在面向对象技术中,继承 定义了超类和子类之间的关系,子类中以更具体的方式实现从父类继承来的方法称为 覆盖,不同类的对象通过 消息 互相通信。
在面向对象方法中,两个及以上的类作为一个类的超类时,称为 多重继承,使用它可能造成子类中存在 二义性 的成员。
在面向对象方法中,继承用于 在已经存在的类的基础上创建新类。
过载多态 是一种特定的多态,指同一个名字在不同上下文中可代表不同的含义。
在面向对象技术中,不同对象在接收到同一消息时可以产生完全不同的结果,这一现象称为 多态,它由 继承 机制来支持。
包含多态 在许多语言中都存在,最常见的例子就是子类型化。
在面向对象方法中,多态指的是 客户无需知道所调用方法的特定子类的实现。
绑定是在编译时进行的,叫做 静态绑定 。 动态绑定 则是在运行时进行的。
动态绑定 是和类的继承以及多态相联系的。
二、设计原则
真题链接
开放-封闭原则 是指一个软件实体应当对 扩展 开放,对 修改 封闭;里氏替换原则 是指任何 基类对象 可以出现的地方,子类对象
一定可以出现。依赖倒置原则 就是要依赖于 抽象,而不依赖于
实现,或者说要针对接口编程,不要针对实现编程。进行面向对象设计时,就一个类而言,应该仅有一个引起它变化的原因,这属于 单一责任 设计原则。
共同封闭原则:包中的所有类对于同一类性质的变化应该是共同封闭的。一个变化若对一个包产生影响,则将对该包中的所有类产生影响,而对于其他的包不造成任何影响。
面向对象分析时,执行的活动顺序通常是 认定对象、组织对象、描述对象间的相互作用、确定对象的操作。
面向对象设计时包含的主要活动是 识别类及对象、定义属性、定义服务、识别关系、识别包。
在面向对象技术中,对象具有以下特性:清晰的边界、良好定义的行为、可扩展性。
三、UML
- UML建模:使用它提供的图工具,把相关的项目的一些情况用这种图来做表达、表示。
- 注:UML详细内容见下午题基础篇:第三章 UML建模
四、设计模式
1、设计模式的概念
2、设计模式的分类
(注:下图来自前言中up主视频)
- 创建型模式:就是指的用于创建对象的模式,为设计类实例化新对象提供指南。
- 创建型:主要处理类和对象的组合问题
- 结构型模式:主要是处理类或对象的组合问题,让类或对象形成更大的结构,提供相应的一 些指导。
- 适配器模式:把不统一的东西统一起来,电源适配器原理。
3、创建型模式
- 工厂方法:使得子类实例化的过程推迟了,可以在运行的时候去指定我要创建的具体是哪一 个类的对象。
- 原型模式:会消耗较多资源,但是效率高。
- 单例模式:相当于一个主页面,能对其他所有子页面进行访问。
- 对象的创建,默认构造函数,拷贝构造函数,原型模式就是调用拷贝构造函数。
- 简单工厂模式:
(注:下图来自前言中up主视频)- 抽象工厂每个工厂可以创建多个对象;而工厂方法每个工厂只能创建一个对象。
4、结构型模式
5、行为型模式
23种设计模式关键词速记
- 创建型模式 :
- 抽象工厂:生成系列对象。
- 生成器:复杂对象构造。
- 工厂方法:动态生产对象。
- 原型:克隆对象。
- 单例:单实例。
- 结构型模式:
- 适配器:转换接口。
- 桥接:继承树拆分。
- 组合:树形目录结构。
- 装饰:附加职责。
- 外观:对外接口统一。
- 享元:文章共享文字对象。
- 代理。
- 行为设计模式:
- 责任链:传递职责。
- 命令:日志记录,可撤销。
- 解释器:虚拟机机制。
- 迭代器:数据库数据集。
- 中介者:不直接引用。
- 备忘录。
- 观察者:联动。
- 状态:状态变成类。
- 策略:多方案切换。
- 模板方法。
- 访问者。
真题链接
- 在面向对象软件开发过程中,采用设计模式 以复用成功的设计。
- 为图形用户界面(GUI)组件定义不同平台的并行类层次结构,适合采用 抽象工厂(Abstract Factory) 模式。
- 生成器(Builder) 设计模式,适用于 当创建复杂对象的算法应该独立于该对象的组成部分及其装配方式时 和 当构造过程必须允许被构造的对象有不同的表示时。该模式
将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。- 桥接(Bridge) 设计模式 将抽象部分与其实现部分相分离,使它们都可以独立地变化。
- 组合(Composite) 设计模式 将对象组合成树形结构表示“部分-整体”的层次结构,使得客户对单个对象和组合对象的使用具有一致性。
- 欲 动态地给一个对象添加职责,宜采用 装饰器(Decorator) 模式。
- 外观(Facade) 设计模式,适用于 需要为一个复杂子系统提供一个简单接口。(将一系列对象加以包装以简化其接口)
- 因使用大量的对象而造成很大的存储开销时,适合采用 享元(Flyweight) 模式进行对象共享,以减少对象数量从而达到较少的内存占用并提升性能。
- 代理(Proxy) 模式通过提供与对象相同的接口来控制对这个对象的访问。
- 命令(Command) 设计模式将一个请求封装为一个对象,从而使得可以用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。该模式属于
行为型对象模式,该模 式适用于 抽象出执行的动作以参数化某对象。- 中介者(Mediator) 模式用一个对象来封装一系列的对象交互;使用户对象和组对象不需要显式的相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。该模式属于 行为型对象模式,该模式适用于 一组对象以定义良好但是复杂的方式进行通信,产生的相互依赖关系结构混乱且难以理解。
- 观察者(Observer) 设计模式允许一个对象在其状态改变时,通知依赖它的所有对象。ConcreteSubject
在其状态发生改变时,向它的各个观察者发出通知。该模式体现的最主要的特征是 使所要交互的对象尽量松耦合。适用于 一种一对多对象依赖关系,当一个对象修改后,依赖它所有的对象都自动得到通知并被自动更新。- 状态(State) 模式使得 一个对象在其内部状态改变时通过调用另一个类中的方法改变其行为,使得这个对象看起来如同修改了它的类。该模式为 行为型对象模式,体现的主要的意图是 一个对象在其内部状态改变时改变其行为。
- 策略(Strategy) 设计模式定义一系列算法,把它们一个个封装起来,并且使它们可以相互替换。这一模式使得算法可以独立于它的客户而变化。适用于:需要使用一个算法的不同变体、许多相关的类仅仅是行为有异。
- 某些设计模式会引入总是被用作参数的对象。例如 Visitor 对象是一个多态accept方法的参数。
- 访问者(Visitor) 模式为 行为型对象模式。适用于 需要对一个对象结构中的对象进行很多不同的并且不相关的操作。
- 适配器(Adapter) 设计模式可以用于 将已有类的接口转换成和目标接口兼容。