软考中级-软件设计师-7.上午题-面向对象(3-4分)

2 阅读5分钟

7.1 面向对象基础

7.1.1 面向对象基本概念

7.1.1.1 类

类是在对象之上的抽象,对象是类的具体化,类定义了一组大体相似的对象结构,定义了数据和行为。包括:

  • 实体类:表示现实世界中真实的实体;
  • 接口类(边界类):为用户提供一种与系统交互的方式;
  • 控制类:用来控制活动流,充当协调者。

7.1.1.2 对象

对象是基本的运行时的实体,它既包括数据(属性,状态),也包括作用于数据的操作(行为);一个对象通常由对象名、属性和方法组成;

对象具有清晰的边界、良好定义的行为和可扩展性。

7.1.1.3 消息

对象之间进行通信的一种构造称为消息;

7.1.1.4 方法重载

三种重载的情况:

  1. 方法名称相同,方法的参数个数不同;
  2. 方法名称相同,方法的参数类型不同;
  3. 方法名称相同,方法的参数类型顺序不同;

7.1.1.5 封装

一个对象把它的属性以及行为封装成一个整体;从程序设计者来看,对象是一个程序模块;从使用者来看,对象为他们提供了所希望的行为;

7.1.1.6 继承

继承是父类和子类之间共享数据和方法的机制。

一个父类可以有多个子类,这些子类都是父类的特例,父类描述了这些子类的公共属性和方法。一个子类可以继承它的父类(或祖先类)中的非私有属性和方法,这些属性和方法在子类中不必定义,子类还可以定义自己的属性和方法;

方法覆盖、方法重写:子类重写父类中已存在的方法;

两个以上的类作为一个类的父类时,称为继承,使用它可能造成子类中存在二义性成员。

7.1.1.7 多态

不同的对象收到同一个消息时产生完全不同的反应。

  • 参数多态(不同类型参数多种结构类型) :使用最多,最纯的多态
  • 包含多态(父子类型关系):子类型化,一个类型是另一个类型的子类型
  • 过载多态(类似于重载,一个名字不同含义):同一个名字在不同的上下文中所代表的含义不同
  • 强制多态(强制类型转换)

多态是由继承机制来支持;

动态绑定:指对象类型在运行时才能确定;

静态绑定:指对象类型在编译时才能确定;

7.1.2 面向对象

7.1.2.1 面向对象设计原则

  1. 单一责任原则:就一个类而言,应该仅有一个引起他变化的原因;
  2. 开发-封闭原则:软件实体应该是可扩展的,即开放的;但是不可修改的,即封闭的;
  3. 里氏替换原则:子类必须能够替换他们的基类型;在任何父类可以出现的地方,都可以用子类的实例来赋值给父类型的引用;
  4. 依赖倒置原则:抽象不应该依赖于细节,细节应该依赖于抽象;高层模块不应该依赖低层模块,二者应该依赖于抽象;
  5. 接口分离原则:不应该强迫客户依赖于他们不用的方法;依赖于抽象,不要依赖于具体,同时在抽象级别不应该有对细节的依赖;
  6. 共同封闭原则:包中的所有类对于同一类性质的变化应该是共同封闭的。一个变化若对一个包产生影响,则对该包中所有的类产生影响,而不对其他包中的类产生任何影响;
  7. 共同重用原则:一个包中的所有类应该是共同重用的;如果重用了包中的一个类,那么就要重用包中所有的类。

7.1.2.2 面向对象分析

理解问题,软件要做什么

包含五个活动:认定对象、组织对象、描述对象间的相互作用、确定对象的操作、定义对象的内部信息;

  1. 认定对象:按自然存在的实体确定对象;
  2. 组织对象:分析对象间关系,将相关对象抽象成类;
  3. 对象间的相互作用:描述各对象在应用系统中的关系;
  4. 基于对象操作:操作,如创建增加删除等;
  5. 定义对象的内部信息:属性。

7.1.2.3 面向对象设计

解决方案

将面向对象分析所创建的分析模型转化为设计模型;

与OOA对应的五个活动:识别类及对象、定义属性、定义服务、识别关系、识别包

7.1.2.4 面向对象程序设计

利用面向对象程序语言来实现设计方案;

7.1.2.5 面向对象测试

四个层次:算法层、类层、模版层、系统层

  • 算法层(测试类中定义的每个方法,类似单元测试)
  • 类层(测试同一个类中所有方法与属性的相互作用,特有的模块测试)
  • 模板层(测试一组协同工作的类之间的相互作用,类似集成测试)
  • 系统层(类似系统测试)

7.1.3 其他

  1. 在领域类模式中包括属性、操作、关联;
  2. 采用面向对象方法进行软件开发,在分析阶段,架构师主要关注系统的行为;