type
status
date
slug
summary
tags
category
icon
password
😀
这里写文章的前言: 一个简单的开头,简述这篇文章讨论的问题、目标、人物、背景是什么?并简述你给出的答案。
可以说说你的故事:阻碍、努力、结果成果,意外与转折。
 

📝 软考专项:上午题 #7 面向对象

一、面向过程与面向对象

区别

对于问题把大象装进冰箱,需要几步?
  • 面向过程
    • 关心的是我该怎么做
    • 我打开冰箱
    • 我把大象装进冰箱
    • 我关上冰箱
  • 面向对象
    • 关心的是我该让谁去做,调用对象的操作来实现这个功能
    • 对象:大象
    • 大象打开冰箱
    • 大象钻进冰箱
    • 大象关上冰箱

方法重载

  • 方法名相同 参数个数不同
  • 或者 参数类型不同
  • 或者 参数类型顺序不同

方法重写/覆盖

  • 方法名相同 参数个数相同
  • 参数类型相同
  • 方法体不同

多态

  • 参数多态:最纯的多态
  • 包含多态:子类型化
  • 过载多态:上下文同名不同表现
  • 强制多态:无过多介绍

动态绑定与静态绑定

  • 左编译 右执行
  • 绑定在执行时进行,叫动态绑定,因此一个给定的过程调用和代码的结合直到调用发生时才进行。动态绑定是和类的继承以及多态相联系的
  • 绑定在编译时进行,叫静态绑定

二、面向对象的设计原则

单一责任原则(Single Responsibility Principle,SRP)

  • 就一个类而言,应该仅有一个引起它变化的原因,即当需要修改某个类的时候原因有且只有一个,让一个类只做一种类型责任。
  • 对一个类来说仅有一个使他变化的原因

开放-封闭原则(Open & Close Principle,OCP)

  • 软件实体(类,模块,函数等)应该是可以扩展的,即开放的;但是不可修改的,即封闭的。
  • 扩展开放,修改关闭

里氏替换原则(Liskov Substitution Principle,LSP)

  • 子类型必须能够替换掉他们的基类型。即,在任何父类可以出现的地方,都可以用子类的实例来赋值给父类型的引用。当一个子类的实例应该能够替换任何其超类的实例时,他们之间才具有是一个(is - a )的关系。
  • (基)父类可以出现的地方,子类一定可以出现

依赖倒置原则(Dependence Inversion Principle,DIP)

  • 抽象不应该依赖于细节,细节应该依赖于抽象。即,高层模块不应该依赖于底层模块,二者都应该依赖于抽象
  • 依赖于抽象而不依赖于细节(实现)

接口分离原则(Interface Segregation Principle,ISP)

  • 不应该强迫客户依赖于他们不用的方法。接口属于客户,不属于它所在的类层次结构,即:依赖于抽象,不要依赖于具体,同时在抽象级别不应该有对于细节的依赖。这样做的好处就在于可以最大限度地应对可能的变化。
  • 依赖于抽象而不依赖于具体

共同重用原则(Common Reuse Principle,CRP)

  • 一个包中所有类应该是共同重用的。如果重用了包中的一个类,那么就要重用包中的所有类
  • 一个类被重用,那么整个包中的类都要被重用

共同封闭原则(Common Closure Principle,REP)

  • 包中的所有类对于同一类性质的变化应该是共同封闭的。一个变化若对一个包产生影响,则将对该包中的所有类产生影响,而对于其他的包不造成任何影响
  • 一个变化若对一个包产生影响,则将对该包中的所有类产生影响,而对于其他的包不造成任何影响

面向对象测试

  • 算法层
    • 测试类中定义的每个方法,基本上相当于传统软件测试的单元测试
  • 类层
    • 测试封装在同一个类中的所有方法和属性之间的相互作用。在面向对象软件中类是基本模块,因此可以认为这是在面向对象测试中所特有的模块测试
  • 模板层
    • 测试一组协同工作的类之间的相互作用,大体上相当于软件测试中的集成测试
  • 系统层
    • 把各个子系统组装成完整的面向对象软件系统,在组装过程中同时进行测试。

三、UML

关系

UML中有4种关系:依赖、关联、泛化、实现。

依赖关系

  • 依赖是两个事物间的语义关系,其中一个事物(独立事物)发生变化会影响另一个事物(依赖事物)的语义。在图形上,把一个依赖画成一条可能有方向的虚线。
notion image
  • A是依赖事物,B是独立事物

关联、聚合和组合关系

  • 一种结构关系,它描述了一组链,链是对象之间的连接。聚集是一种特殊类型的关联,它描述了整体与部分间的结构关系。在关联上可以标注重复度和角色。
  • 聚合和组合
    • 聚合:部分和整体的生命周期不一致,整体消失了,部分仍然存在。(部分可以脱离整体存在)
      • 如员工与公司,空心实线菱形头
    • 组合:部分和整体的生命周期一致,整体消失,部分也消失。
      • 如大脑与人类,实心实线菱形头

泛化关系

  • 泛化是一种特殊/一般关系,特殊元素(子元素)的对象可替代一般元素(父元素)的对象。用这种方法,子元素共享了父元素的结构和行为,在图像上泛化是一条带有空心箭头的实线
notion image

实现关系

  • 实现是类元之间的语义关系,其中一个类元指定了由另一个类元保证执行的契约。在两种情况下会使用实现关系;一种是在接口和实现它们的类或构件之间;另一种是在用例和实现它们的协作之间。在图形上,把一个实现关系画成一条带有空心箭头的虚线。
notion image

四、UML类图

图是一组元素的图形表示,大多数情况下把图画成顶点(代表事物)和弧(代表关系)的连通图。

类图

  • 展现了一组对象、接口、协作和它们之间的关系。
    • +:public
    • :private
    • #:protected
    • ~:package
    • notion image

五、用例图(类图、对象图、用例图都是对于系统静态)

用例图展现了一组用例、参与者以及它们之间的关系。用例图可用于对系统的语境建模,对系统的需求建模
notion image
  • 用例
  • 参与者
  • 用例之间的扩展关系(《extend》)和包含关系(《include》),参与和用例之间的关联关系,用例和用例以及参与者和参与者之间的泛化关系

包含关系(基本用例指向被包含用例)

  • 用例和用例之间的关系,一个用例包含另一个用例,当基本用例发生时,被包含用例一定发生。
notion image

扩展关系(扩展用例(特殊/可选)指向基本用例)

  • 用例和用例之间的关系,一个用例执行的时候,可能会发生一些特殊的情况或可选的情况,这种情况就是这个用例的扩展用例,UML的扩展是extend,Java 的继承是extends
notion image

泛化关系(特殊参与者/用例指向基本参与者/用例)

  • 子类指向父类,空心实线箭头
notion image

六、交互图(对于系统的动态方面建模)

由一组对象和它们之间的关系组成,包含它们之间可能传递的消息。交互图表现为序列图、通信图、交互概览图和计时图
  • 交互图一般包含对象、链和消息

序列图(顺序图)

  • 序列图是场景的图形化表示,描述了以时间顺序组织的对象之间的交互活动。
notion image

通信图(协作图)

  • 通信图强调收发消息的对象的结构组织,在早期的版本中也被称作协作图。通信图强调参加交互的对象的组织。产生一张通信图,首先要将参加交互的对象作为图的顶点,然后把连接这些对象的链表示为图的弧,最后用对象发送和接收的消息来修饰这些链。
notion image
  • 通信图有顺序号,为表示一个消息的时间顺序,可以给消息加一个数字前缀(从1号消息开始),在控制流中,每个新消息的顺序号单调增加(如2、3等)。为了显示嵌套,可使用带小数点的号码(1表示第一个消息;1.1表示嵌套在消息1中的第一个消息。)嵌套可为任意深度。还要注意的是,沿同一个链可以显示许多消息(可能发自不同的方向),并且每个消息都有唯一的顺序号。
  • 序列图和通信图是同构的,它们之间可以相互转换

状态图

  • 状态图展现了一个状态机,它有状态、转换、事件和活动组成。状态图关注系统的动态视图,对于接口、类和协作的行为建模尤为重要,强调对象行为的事件顺序。
  • 状态图包括简单状态和组合状态、转换(事件和动作)
    • 状态是指对象的生命周期中某个条件或者某个状态,在此期间对象将满足某些条件、执行某些活动或等待某些事件,是对象执行了一系列活动的结果,当某个事件发生后没对象的状态将发送变化。
      • 嵌套在另外一个状态中的状态叫子状态,含有子状态的状态称为组合状态。
    • 转换是两个状态之间的一种关系,表示对象将在源状态中执行一定的动作,并在某个特定事件发生而且某个特定的警戒(监护)条件满足时进入目标状态。

状态和活动(里面包含事件[监护条件]/动作)

  • 活动(动作)可以在状态内执行,也可以在状态转换(迁移)时执行
notion image

转换(迁移)和事件

notion image
  • 转换包括两个状态(源状态和目标状态)它上面有事件,监护条件,动作
  • 事件触发转换(迁移)
notion image

七、UML图总和

静态建模

  • 类图、对象图、用例图

动态建模

  • 序列图(顺序图,时序图)、通信图(协作图)、状态图、活动图

物理建模

  • 构件图(组件图)、部署图

交互图

  • 序列图、通信图、交互关联图
相关文章
软考专项:上午题 #8 设计模式软考专项:上午题 #6 数据库
Loading...
poze624
poze624
天行健,君子以自强不息
公告
🎉Poze小站已经上线🎉
--- 哈喽 ---
👏欢迎浏览阅读👏
待补充(欢迎关注我的公众号)
notion image