1.面向对象基础
1.1 基本概念
方法重载是函数名字相同,参数列表不同
组成
即组合,指整体与部分的关系,整体与部分生命周期相同
聚合
关联关系的一个特例,是体现整体与部分,即使has-a的关系,此时整体与部分是可以分离的,具有不同的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享。聚合对象是指一个对象包含其他对象。
特征:封装、继承、泛化
对象基本概念:
+:public
#:protected,同包或子类可以访问
default,同包可以访问
-:private,只有内部的方法可以访问
对象的特性:
1,良好定义的行为
2,清晰的边界
3,可拓展性
面向对象方法:Booch方法、Coad方法和OMT方法
对象的状态包括这个对象的所有属性(通常是静态)以及每个属性当前的值(通常是动态的);对象的行为代表了其外部可见的活动;操作代表了一个类提供给它的对象的一种服务
封装:
概念:封装是指将逻辑上相关的数据以及行为绑定在一起,使信息对使用者隐蔽的方法叫“封装”
组成:对象名、属性、行为(方法)
消息来自于外界,是通过 接口 与封装的对象 进行信息传递
在面向对象软件开发中,封装是一种信息隐藏技术,其目的是使得对象的使用者和生产者分离。
类:组成:类名、数据成员、成员函数
类是具有相同属性和服务的一组对象的集合
类的分类:
1.实体类(数据类):现实世界真实存在的实体,有大量属性;比如人
2.接口类(功能类、边界类、interface):为用户提高系统合作交互的方式,有大量的方法;接口类分为人和系统两大类;其中人的接口可以是显示屏、窗口、web窗体、对话框、菜单、列表框、其他显示控制、条形码、二维码或者用户与系统交互的其他方法;系统接口涉及把数据发送到其他系统,或者从其他系统接收数据;
3.控制类:描述业务逻辑,用来控制活动流,充当实体类和接口类之间的协调者
父类又称超类、泛类
子类是父类的特殊化,父类是子类的泛化
java不支持二义性(子类不能拥有两个父亲,即使多重多态,使用多重多态容易造成子类中存在二义性的成员)
继承是类之间的一种关系,在定义和实现一个类的时候,可以在一个已经存在的类的基础上进行,继承用于在已存在的类的基础上创建新类。
多态:
重写,父类与子类之间的不同表现(2个类),
重载发生在一个类之间的不同表现(1个类)
过载多态:一个名字在不同的上下文中所代表 的含义不一样,重载是属于这样的一种表现。
多态:同一个操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。同一消息可以调用多种不同类的对象的方法,这些类有某个相同的超类。
在面向对象方法中,多态指客户类无需知道所调用方法的特定子类的实现。在使用时,用户发送一个通用的消息,而实现的细节则有由于接受对象自行决定。
在面向对象方法中,支持多态的是动态绑定。
动态绑定:运行时;是指过程调用和响应调用所需执行的代码在运行时加以结合
静态绑定:编译时;是过程调用和响应调用所需执行的代码在编译时加以结合
动态绑定和多态:要有继承关系、要发生了重写、要有【父类引用】指向【子类对象】
参数多态和包含多态称为通用多态,过载多态和强制多态称为特定多态
参数多态:应用广泛、最纯的多态。采用参数化模板(函数模板或类模板),通过给定不同的类型参数,使得一个结构有多种类型。
包含多态:同样的操作可用于一个类型及其子类型(不是子类)。包含多态一般需要进行运行时的类型检查
过载多态:同一个名(操作符、函数名)在不同的上下文中所代表的含义不同
强制多态:编译程序通过语义操作,把操作对象的类型强行加以变换,以符合函数或操作符的要求
总结:
对象:属性(数据)+方法(操作)+对象ID
封装:隐藏对象的属性和实现细节,仅对外公开接口(信息隐藏技术)
类(实体类、控制类、边界类):
接口:一种特殊的类,它只有方法定义没有实现
继承和泛化:复用机制(单重继承和多重继承)
重置/覆盖:在子类中重重新定义已经定义的方法
重载:一个类可以有多个同名而参数不同的方法
多态:不同对象收到同样的消息产生不同的结构
过载多态:同一个名字在不同的上下文所代表的含义不同
1.2 面向对象设计7大原则
2、UML
2.1 UML图的概念以及分类
交互图:序列图、通讯图、交互图和定时图
类图和对象图区别:最上面那行如果有冒号,就是对象图(对象图是”某一时刻一组对象以及他们之间的关系“)。
序列图和通信图是站在代码的角度去看待的,活动图是站在业务逻辑的角度去看待
组件,和系统的模块是一样的。
部属图是唯一一个跟硬件有关的
在关联上可以标注重复度(表示一个类的实例能够与另一个类的多少个实例相关联)和角色。两个类之间可以有多个关联,但这些关联需要不同的角色进行标识
2.2 类图
类图中的关系:
代码实现举例:
关联:getB(),getA()
依赖:A{ xy(Bb){} }
泛化:父子类;特殊/一般关系
聚合:一对多的关系;整体和部分的生命周期不同
组合:一对多的关系;整体和部分的生命周期相同 ;组合的关系比聚合紧密一点,比如汽车报废,车上的零件就全废了 ;B{list(A)}
实现:接口和类之间的关系。
2.3 用例图中的关系
用例图之间的关系(之前考过文字概念):
包含:<<include>>、拓展:<<extend>>、
2.4 各类图的学习
2.4.1 类图和对象图
对象图跟类图很像,除名字那边,类图的名字是类名,对象图的名字的“类名 : 对象名“,所以要区分只要看名字就可以了。
2.4.2 用例图
用例图描述一组用例、参与者以及他们之间的关系
用例之间的关系:包含关系、拓展关系、泛化关系
用例建模的流程:1.识别参与者(必须) 2.合并需求获得用例(必须) 3.细化用例描述(必须) 4.调整用例模型(可选)
2.4.3 协作图(通讯图)
强调的是发送和接收信息的对象之间的组织结构,
组成元素有:
1,对象
矩形表示,前面为对象名后面为类名,表示类的一个实例
2,链接
两个对象间用单一线条表示,用来表示在通讯图中的关联,目的是让不同的消息在不同系统对象之间传递
3,消息
通讯图中对象之间通信的方式,
2.4.4 活动图
组成:活动状态和动作状态、转换和对象
活动图可以有开始、结束和一系列动作,可以表示分支(条件叫做【监护表达式】)、合并、分岔和会合
3、面向对象开发技术
采用面向对象开发技术,对象是系统运行时基本实体。它包括数据(属性),也包括作用与数据的操作(行为)。一个对象通常由 对象名、属性和操作 三部分组成
在面向技术中,不同的对象在收到同一消息时可以产生完全不同的结果,这一现象称之为多态,它通过继承机制来支持。在运行时,可以通过指向基类的指针来调用实现派生类中的方法。如果一个语言只支持类而不支持多态,只能说它是基于对象,但不是面向对象
4、面向对象程序设计(面向对象开发流程)
(考的有点多,也有点偏)
在采用面向对象开发系统时,主要步骤有:面向对象分析、面向对象设计、面向对象程序设计、面向对象测试
面向对象分析主要强调问题是什么,描述软件要做什么,不关心解决方案。面向对象设计侧重问题的解决方案,并且要考试技术和方面的细节
面向对象分析主要包括:认定对象(名词)、组织对象(抽象成类)、描述对象间的相互作用、定义对象的操作、定义对象的内部信息。目的是为了获得对应问题的理解,确定系统的性能功能要求。最重要的也是分析第一步是确定问题域
面向对象设计是设计分析模型和实现相应的源代码。
面向对象程序设计选择合适的面向对象设计语言,将程序组织为相互协作的对象集合,每个对象表示某个类的实例,类通过集成等关系进行组织,
面向对象测试是尽可能早的进行系统测试,以发现系统中可能存在的错误并进行修复,进而保证系统质量
xml:可扩展标记语言,是标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言
HTML更适合处理静态网页、
prolog是逻辑型程序设计语言
LISP是一种函数式编程语言
python是一种面向对象。解释型计算机程序设计语言
C++面向对象的编译型语言
5、设计模式
5.1 顺口溜
设计模式有点多,顺口溜记得比较牢固一点,下面这段是别人编的顺口溜(原文链接:https://blog.csdn.net/HAN_789/article/details/131477285),要是记不住的话可以找下其他人的:
创建模式下: 工厂模式,原型模式,单例模式,建造者模式,抽象工厂模式
创公园,但见愁
结构模式:享元模式,外观模式,组合模式,适配器模式,代理模式,装饰模式,桥接模式
姐想外租,世代装桥
行为模式:状态模式,责任链模式 ,中介模式,模板方式模式,访问者模式,解释器模式,备忘录模式,观察者模式,策略模式,命令模式,迭代模式
行状折中模仿,戒备观测鸣笛
创公园,但见愁
姐想外租,世代装桥行状折中模仿,戒备观测鸣笛
————————————————版权声明:本文为博主原创文章,遵循 CC 4.0 BY 版权协议,转载请附上原文出处链接和本声明。
5.2 三种类型的模式
创建型模式又分为对象创建型模式和类创建型模式。对象创建型模式处理对象的创建,类创建型模式处理类的创建。详细的说,对象创建型模式把对象创建的一不过推迟到另一个对象中,而类创建模式将它的对象的创建推迟到子类中
结构型模式涉及如何组合类和对象以获得更大的结构,即通过多个类个对象来实现更复杂的结构
行为型模式包括类行为模式和对象行为模式,用于描述程序在运行时复杂的流程控制,即描述多个类和对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象之间职责的分配
5.3 创建者模式
工厂方法Factory:
定义一个用于创建对象的接口,让子类觉得将哪一个类进行实例化,使得一个类的实例化延迟到子类,
适用:
1.当一个类希望由它的子类来指定它所创建的对象时
2,当一个类不知道它所必须创建的对象的类的时候
3,当类将创建对象的职责托付给多个帮助子类中的某一个,并且希望将哪一个子类是代理者这一信息局部化
原型模式Prototype:
用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象
适用:
1,当一个系统应该独立于它的产品创建、构成、表示时
2,当要实例化的类是在运行时刻指定时,例如通过动装载
3,为了避免创建一个与产品层次平行的工厂类层次时
4,当一个类的实例只能有几个不同的状态组合中的一种,建立相应数目的原型并克隆他们可能比每次用合适的状态手工实例该类更加方便
单例设计模式singleleton:
保证一个类仅有一个实例,并提供访问这个唯一实例的全局访问点。
适用:
1,当类只能有一个实例而且客户从一个总所周知的访问点访问它时、
2,当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能拓展实例时
建造者Builder:
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
适用:
1,当创建复杂对象的算法应该独立于该对象的组成部分以及他们的装配方式时
2,当构造过程必须允许被构造的对象有不同的表示时
5.4 结构型模式
适配器模式:
适用:想使用一个已经存在的类,而它的接口不符合要求描述的是适配器
代理模式
通过提供与对象相同的接口来控制对这个对象的访问,以使得在确实需要这个对象时才能对他进行创建和初始化
装饰模式:
适用:在不影响其他对象的情况下,以动态透明的方式给单个对象添加职责描述
桥接模式Bridge:
判断:该设计模式将抽象部分与实现部分分离(抽线于实现部分的关系是——>),使他们都可以独立的变化
适用:不希望再抽象与实现部分之间有一个固定的判定关系的是桥接模式
基于类的最小设计原则,通过使用封装、聚合以及继承等行为让不同的类承担不同的职责。
5.5 行为性模式
状态模式state:
允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。如自动售卖机,根基状态的不同可以又不同的行为
责任链模式chain of responsibility:
通过给多个对象处理请求的机会,减少请求的发送者与接收者之间的耦合,将接收对象链接起来,在链中传递请求,直到有一个对象处理这个请求
适用:
1.有多个对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定
2,想在不明确指定接收者的情况下向多个对象中的一个提交请求
3,可处理一个请求的对象集合应该被动态指定
中介者模式Mediator:
属于行为型对象模式 。用一个中介对象来封装一系列的对象交互,中介者使各个对象不需要显示地相互调用,从而使其耦合松散,而且可以独立地改变他们之间的交互。
适用:
1,一组对象以定义良好但以复杂的方式进行通讯,产生的相互依赖关系结构混乱且难以理解
2,一组对象引用其他很多对象并且直接与这些对象通讯,导致难以复用该对象
3,想定制一个分布在多个子类中的行为,但又不想生成太多的子类
访问者模式Vistor:
一个对象结构包含很多类对象,而系统要求这些类对象实施一些依赖于某具体类的操作;适用于,需要对一个对象结构中的对象进行很多不同的并且不相干的操作,它允许在不改变各元素的类的前提下定义作用于这些元素的新操作。如shoppig-car购物车有不同物品item,结账方式有人工manual和自动auto,那么这个对象结构就包含很多item,依赖的具体类就是结账checkout,使用checkout中的结账方法结合不同的物品进行结账。
解释器模式Interpreter:
给定一种语言,定义它的文法表示,并定义一个解释器,该解释器根据文法来解释语言中的句子。
访问者模式Visitor:
定义一对多的关系,当一个对象的状态发生改变的时候,所有依赖它的对象都收到通知并自动更新
策略模式Strategy:
对于不同算法进行封装和切换,使得算法可以独立于使用他们的用户的变化而变化,但调用策略的对象只有一个
适用:
命令模式Command:
将一个请求封装为一个对象,从而可用不同的请求对客户进行参数化,将请求排队或记录请求日志,支持撤销的操作
适用:
迭代器模式Iterator:
提供一个方法来顺序访问一个聚合对象中各个对象的各个元素,而不是直接暴露改对象的内部表示