软考中级-面向对象

面向对象基础

(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)。消息有顺序号,表示一条消息中每条消息的序号。同一个链可能有来自不同方向的消息,且每条消息都有唯一的顺序号。

消息箭头指向的对象需要实现该消息代表的的方法。

序列图和顺序图时同构的,可以相互转换。

  • 状态图

展现了一个状态机,它由状态、活动、事件和转换

组成,关注系统的动态视图,强调对象行为的事件顺序。

  • 状态

是任何可以被观察到的系统的行为模式,既可以是一种形为,也可以是改变状态,还可以是既做行为又改变状态。包括初态(只能有一个)、终态(可以没有也可以有多个)和中间状态。

  • 活动

活动表,由多个事件名+动作表达式组成,事件名有三种标准的(入口、出口和执行)。

  • 事件

是系统在某个特定时刻发生的事情,表示系统的动作或从一个状态转换到另一个状态的抽象。活动可以在状态内执行,也可以在状态转换(迁移)中执行。

  • 活动图

特殊的状态图,表示从一个活动到另一个活动的流程,是动态视图,强调对象间的控制流程。

  • 构件图(组件图)

展示组件之间的组织和依赖。

纠正:图中半圆是需接口,整圆是供接口

  • 部署图

对面向对象系统物理层面建模的方法,物理和软件之间的关系,实施阶段使用,静态,每个节点是一个运行过程中的物理元素。

阶段总结:

设计模式

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值