面向对象基础
(1)类
类分为三种:实体类(世间万物)、接口类(又称边界类,提供用户与系统交互的方式)、控制类(前两类之间的媒介)。
对象:由对象名+数据(属性、状态)+操作(行为、函数、方法)组成。
消息:对象之间进行通信叫做消息,例如a.func(b),即对象.消息(外界信息)。
重载:方法名相同,参数数量或参数类型不同或参数类型相同排列顺序不同。
(2)面向对象三大特征
封装
对象将自身内部复杂的属性和行为隐藏起来,成为一个整体,将使用者和生产者隔离。
继承
在定义和实现一个类的时候,可以在某个已存在类的基础上进行,将该类中的内容为自己所用,并可以增加新内容,实现类之间数据和方法的共享。
多态
不同对象收到同一消息,可能做出不同形为。用户发出一个通用消息,具体实现细节由接收对象自己决定。多态的实现受继承的支持,通用功能的消息放在较高层次,具体功能的不同实现放在较低层次。
参数多态:用途最广,最纯的多态。
包含多态:子类型化,即一个类型是另一个类型的子类型。
过载多态,同一个名字在不同上下文中含义不同。
强制多态。
动态绑定:运行时,静态绑定:编译时。
(3)面向对象五大设计原则
单一设计原则
一个类只有一个职责,即一个类只有一个引起他变化的原因。
开闭原则
软件实体(类、模块、函数)是可以拓展的(开放),但是不可以修改的(关闭)。
里氏替换原则
子类应该可以替换父类,即父类可以出现的地方,子类也可以出现。
依赖倒置原则
抽象不依赖于细节(实现),细节应依赖于抽象。即高层模块不依赖低层模块,二者都依赖于抽象。
接口分离原则
依赖于抽象,不依赖于具体。
(4)两大补充设计原则
共同重用原则
重用包中一个类,就要重用所有类。
共同封闭原则
一个变化对一个包产生影响,整个包中的类都要被影响,该包以外没有任何影响。
(5)面向对象的分析(OOA)
目的是为了理解问题,描述软件要干什么,主要关注系统的形为。
包含五个活动:认定对象、组织对象、(描述)对象间的互相作用、(基于)确定对象的操作、认定对象的内部信息。
认定对象
将实际存在的“名词”看作对象,难点在于认定其中的实质性对象。
组织对象
确定对象间的关系,如汉堡由肉+菜+面包组成。
对象间的相互作用
描述对象之间的交互行为。
(6)面向对象的设计(OOD)
将OOA所创建的分析模型转为设计模型,即构造蓝图。侧重理解解决方案。
包含五个活动:识别类及对象、定义属性、定义服务、识别关系、识别包。这五个活动与OOA的五个活动一一对应。
(7)面向对象测试
分为四个层次:算法层、类层、模板层、系统层。
(8)面向对象程序设计(OOP)
是一种程序设计范式,OOP实质是使用面向对象的设计语言,采用类、对象等相关概念进行程序设计,其关键是加入了类和继承来提高抽象性。
UML
又称统一建模语言,能够表达软件设计中的动态和静态信息,其中包含三部分构造块:事物,关系和UML图。
(1)事物
结构事物:表示模型的静态部分(名词),有类、接口、协作、用例、主动类、构件、制品、结点。
形为事物:表示模型的动态部分(动词),有交互、状态机、活动。
分组事物:UML中的组织部分,是一些由模型分解成的“盒子”,最主要的分组事物是包。
注释事物:是UML模型的解释部分,注解是一种主要的注释事物。
(2)关系
依赖
一种语义关系,一个依赖事物A依赖独立事物B,当独立事物发生变化,依赖事物会随之改变。如学生(A)读书(B),书类型改变,学生读的这个形为也改变,读语文书变为读数学书。
画作:A--------->B
关联(聚集)
一种结构关系,它是一种链,链是对象之间的连接。
重复度和角色:代表一个角色A可以对应多少个角色B
关联图可画为:A0..1<——>0..*B,数字在箭头上方,此处箭头也可省略。若将此图中A看作老板,B看作员工,可理解为老板和员工有关联关系,其中一个老板可以对应0到*(多个)员工,一个员工可对应0到1个老板。
聚合:是一种特殊的关联,表示整体和部分的关系,两者生命周期不同,整体消失了,部分仍可单独存在。
聚合画为:A——空心菱形B,表示A是部分,B是整体,如A表示学生B表示班级。
组合:一种特殊的关联,表示部分和整体,不同点是部分和整体生命周期一致,整体消失部分也消失。
组合画为:A——实心菱形B,如A表示部门,B表示公司。
泛化
是一种特殊/一般关系,即特殊元素(子类)和通用元素(父类),子类可替换父类,子类共享父类的属性和行为。
画为:A——空心三角箭头B,A为子类B为父类。
实现
是类元之间的语义关系,即接口和实现的关系或用例和实现的关系。
画作:A------空心三角箭头B,A是接口B是实现。
阶段补充
关系强度:依赖<关联
关联关系的线中间上方可以写关联名,解释两者关系;关联关系两个箭头下方可分别写该箭头指向的对象的角色
关联关系:当A的实例可以重复对应B的实例时,就需要在两者之间添加关联关系类。
直接对象/非直接对象:直接对象指自己本身实例化出的对象,非直接指自己的子类实例化出的对象。
(3)图
一组元素的图形表示,画为顶点(事物)和弧(关系)的连通图,其中序列图和通信图被称为交互图。
类图
展现一组对象、接口、协作和它们之间的关系。包含主动类的类图给出了系统静态进程视图,主要表达系统的功能。当有对系统的词汇建模、对简单的协作建模、对逻辑数据库模式建模这三种情况时,使用类图。
类图中每个单元包含:类命、属性、方法。
对象图
展现了某一时刻一组对象和他们之间的关系,描述了类图中实例的静态快照(静态进程图、静态视图),其中包含对象和链。
对象图中每个单元包含类名、对象名和属性。
用例图
展现用例、参与者和它们之间的关系,用于对系统的语境建模和对系统的需求建模。
关系包括:
拓展关系(用例与用例之间的关系)
一个用例执行时可能会发生一些特殊情况或可选情况,如A拓展B,箭头指向A,做A时可选做不做B,如还书这个动作(A)可能要做支付逾期款(B)这个动作,如果你还书时逾期了的话。
包含关系(用例与用例之间的关系)
一个用例包含另一个用例,A中包含B,箭头指向B,如修改图书信息(A)这个动作中包含了查找图书(B),即做A时必做B。
泛化关系(参与者与参与者、用例与用例之间的关系)
子类和父类之间的关系。如参与者用户(A)可泛化出商家(B1)和会员(B2),空心箭头指向A;又如用例登录(A)可泛化出手机号登陆(B1)或账号密码登录(B2)。
交互图
对系统的动态方面进行建模,由一个用例中一组对象和它们之间的关系组成,包含对象、链和消息。
(1)序列图(顺序图)
强调消息时间顺序,描述按时间顺序排列的对象的交互,对象从左到右排列,发送和接受消息按时间顺序从上到下排列,消息包括同步消息(调用消息)、异步消息、返回消息。
(2)通信图(协作图)
强调发送和接受消息的对象的结构组织,用对象作为图顶点,用链连接对象,用消息修饰链,用来获取对象之间的消息流及其顺序。
阶段补充:
序列图较通信图的特点:序列图有生命线,序列图有控制焦点(动作箭头指向的矩形)。
通信图较序列图的特点:通信图有路径(链末端依附的路径构造型,有local、parameter、global、self)。消息有顺序号,表示一条消息中每条消息的序号。同一个链可能有来自不同方向的消息,且每条消息都有唯一的顺序号。
消息箭头指向的对象需要实现该消息代表的的方法。
序列图和顺序图时同构的,可以相互转换。
状态图
展现了一个状态机,它由状态、活动、事件和转换
组成,关注系统的动态视图,强调对象行为的事件顺序。
状态
是任何可以被观察到的系统的行为模式,既可以是一种形为,也可以是改变状态,还可以是既做行为又改变状态。包括初态(只能有一个)、终态(可以没有也可以有多个)和中间状态。
活动
活动表,由多个事件名+动作表达式组成,事件名有三种标准的(入口、出口和执行)。
事件
是系统在某个特定时刻发生的事情,表示系统的动作或从一个状态转换到另一个状态的抽象。活动可以在状态内执行,也可以在状态转换(迁移)中执行。
活动图
特殊的状态图,表示从一个活动到另一个活动的流程,是动态视图,强调对象间的控制流程。
构件图(组件图)
展示组件之间的组织和依赖。
纠正:图中半圆是需接口,整圆是供接口
部署图
对面向对象系统物理层面建模的方法,物理和软件之间的关系,实施阶段使用,静态,每个节点是一个运行过程中的物理元素。
阶段总结: