软件工程【六】

四、面对对象方法学介绍


1、简介

传统软件工程方法学适用于中小型软件产品开发;

面向对象软件工程方法学适用于大型软件产品开发;

面向对象方法学方程式:OO=对象+类+继承+传递消息实现通信

  • 对象:具有相同状态的一组操作的集合,对状态和操作的封装。

  • 类:是一个抽象数据类型,它对具有相同状态和相同操作的一组相似对象的定义。

  • 实例:实例是由某个特定类所描述的一个具体对象。

  • 消息:要求某对象执行某个操作的规格说明。

    • 接收消息的对象:对象名
    • 消息名:函数名
    • 0或多个变元:函数值
  • 方法:对象执行的操作,即类中定义的服务。

  • 属性:类中所定义数据,对客观世界实体具体性质的抽象。

  • 继承:子类自动共享基类中定义的属性和方法的机制。

  • 多态性:在类等级不同层次可共享一个方法名,不同层次每个类按各自需要实现这个方法。

    • A是基类,B和C是A的派生类,多态函数Test参数是A的指针,Test函数可以引用A、B、C的对象。
  • 重载:在同一作用域内,参数特征不同的函数可使用相同的名字。

  • 运算符重载:同一运算符可施加于不同类型操作数上面。

面向对象方法学与人类习惯思维方法一致,稳定性好软件系统结构根据问题领域模型建立,功能需求变
化不会引起软件结构整体变化,作局部性修改。可重用性好、易开发大型软件产品可维护性好。

2、UML(Unified Modeling Language)统一建模语言介绍

UML 全称为 Unified Modeling Language,是图示化、说明、构造一个软件系统并生成其文档的标准语言。它独立于开发过程,可与大多数面向对象开发过程配合使用。UML独立于程序设计语言,可用C++、Java等任何一种面向对象程序设计语言实现。

UML构成:

九大图:

  • 静态建模

    • 用例图(Use Case Diagrams)
    • 类图(Class Diagrams)
    • 对象图(Object Diagrams)
  • 动态建模

    • 顺序图(Sequence Diagrams)
    • 协作图(Sequence Diagrams)
    • 状态图(State Diagrams)
    • 活动图(Activity Diagrams)
  • 物理建模

    • 配置图(Deployment Diagrams)
    • 构件图(Component Diagrams)

五视图:

  • 用例视图:定义了系统的外部行为,是最终用户、分析人员和测试人员所关心。该视图定义了系统的需求,因此约束了描述系统设计和构造的某些方面的所有其他视图。
  • 设计视图:描述的是支持用例视图中规定的功能需求的逻辑结构。它由程序组件的定义,主要是类、类所包含的数据、类的行为以及类之间交互的说明组成。
  • 实现视图:描述构造系统的物理组件,这些组件包括如可执行文件、代码库和数据库等内容。这个视图中包含的信息与配置管理和系统集成这类活动有关。
  • 进程视图:进程视图包括形成并发和同步机制的进程和线程。
  • 部署视图:部署视图描述物理组件如何在系统运行的实际环境(如计算机网路)中分布。

*不同的视图突出特定的参与群体所关心的系统的不同方面,通过合并所有五个视图中得到的信息就可以形成系统的完整描述 *

3、UML-静态建模

(1)用例图(Use Case Diagrams)

用例图描述外部执行者(actor)与系统的交互,表达系统功能,即系统提供服务。

主要元素:用例和执行者。

如何发现执行者?

提问: 谁使用该系统;谁改变系统的数据;谁从系统获取信息;谁需要系统的支持以完成日常工作任务;谁负责维护、管理并保持系统正常运行;系统需要应付那些硬件设备;系统需要和那些外部系统交互;谁对系统运行产生的结果感兴趣。

如何发现用例?

提问: 执行者需获取何种功能,需要作什么;执行者需读取、产生、删除、修改或存储系统中某种信息;系统发生事件和执行者间是否需要通信。

  • 用例:执行者与计算机一次典型交互,代表系统某一完整功能。

    • 椭圆形+名字表示

    • ①用例是从用户观点分析而不是系统观点。即联想生活的具体工作过程而不是抽象描述。②用例就是描述一个实际功能,不要太过细化。可理解成就是在找函数名,函数实现是在其内部的,这里不要搞出来。

    • 用例间关联:泛化关系(一般与特殊关系)、扩展关系、包含关系

      • 泛化关系(一般与特殊关系):顶部空心三角的实线表达,由特殊指向一般。A是B和C的父类,B,C具有公共类(父类)A,说明A是B,C的一般化(概括,也称泛化)

      • 扩展关系:虚线箭头+<<extend>>说明表述。允许一个用例扩展另一用例提供的功能,与泛化关联类似,有更多规则限制:基本UseCase必须声明若干“扩展点”,扩展UseCase只能在扩展点上增加新行为。

        • 例如,系统中允许用户对查询的结果进行导出、打印。对于查询而言,能不能导出、打印查询都是一样的,导出、打印是不可见的。导入、打印和查询相对独立,而且为查询添加了新行为。

      • 包含关系:虚线箭头+<<include>>说明表述。一个基本UseCase行为包含另一个UseCase行为。

        • 例如:Check Credit检查输入的信用卡号是否有效,有足够资金。处理Purchase Ticket用例,总运行Check Credit用例

  • 执行者:描述与系统交互的人或物,代表外部实体(如用户、硬件设备或其它软件系统)。

    • 人形+名字表示:

    • 执行者关联:泛化关系(一般与特殊关系)

      • 泛化关系(一般与特殊关系):顶部空心三角的实线表达,由特殊指向一般

例:例:建立一航空公司的机票预定系统,让客户通过电话或网络买票、改变订票、取消订票、预定旅馆、租车等等。

当一个用例使用另一个用例时,这两个用例之间就构成了使用关系.

向一个用例中添加一些动作后构成了另一个用例,这两个用例之间的关系就是扩展关系,
后者称为扩展用例。

(2)类图(Class Diagrams)

1、类图介绍

类图是面向对象建模最常用的图,描述类与类间的静态关系。

  • 类属性的语法:[可见性] 属性名[:类型] [=初值](带[]说明可省略。)

    • 可见性:公有(+)、私有(-)、保护(#)
    • 公有:可被外部对象访问
    • 私有:不可为外部对象访问,只能为本类对象使用
    • 保护:可为本类对象和子类对象访问。
  • 类操作的语法:[可见性]操作名[(参数列表)] [:返回类型]

  • 例:

2、类的版型:边界类、控制类、实体类、接口类
  • 边界类:位于系统与外界的交界处
    • 用户接口边界类User interface boundary class:窗体(form)、对话框(dialog box)、报表(report)
    • 外部系统边界类External system boundary class:表示通讯协议(如TCP/IP)的类、直接与外部设备交互的类、直接与外部系统交互的类
  • 控制类:每个用例通常有一个控制类,控制用例中的事件顺序,控制类也可以在多个用例间共用。
  • 实体类:用于对必须存储的信息和相关行为建模的类。
  • 接口类:描述一个类或构件服务的操作集,不含属性,只包含方法的声明。
  • 表示:
3、类图的关系

四种:关联、泛化(继承)、依赖、实现。

用重数表示关联中的数量关系:n表示多;0..0 表示0; 0..1表示0或1;0..n表示0或多;1..1表示1; 1..n 表示 1或多;

  • (1)关联关系:普通关联、导航关联、限定关联、关联类、聚合、组合

    • ①普通关联:普通关联:双向,用实线连接两个类。
      • 例如:一个作家可以有1个或多个计算机,一个计算机可以属于多个作家。
    • ②导航关联:关联是单向的,用实线箭头和导航关系连接两个类。
      • 例如:人拥有汽车
    • ③限定关联:限定符放在关联关系末端的矩形内。
      • 本来是多对多的关系,但是现在需要制定一个产品订货,限定产品ID为xx的产品只能用唯一的订货作业线订货。
    • ④关联类:如果关联需要有一些信息需要记录的话,用关联类记录关联附加信息。
      • 例:公司雇佣人,使用job记录雇佣产生的信息。
    • ⑤聚合(Aggregation):整体与部分关系,较弱情况。 空心菱形端代表整体事物类;代表部分事物类可属于整体事物类。
      • 聚合关系中代表部分事物对象与代表聚合事物对象生存期无关,删除聚合对象不一定删除代表部分事物对象。
    • ⑥组合(Composition):是整体与部分较强关系,实心菱形端代表整体事物类,代表部分类完全隶属于整体类。
      • 组合中删除组合对象,同时也就删除代表部分事物对象。
  • (2)泛化关系,是指类间的“一般-特殊”关系。也就是继承。顶部空心三角的实线表达,由特殊指向一般。

  • (3)依赖关系:一模型元素变化必影响另一模型元素。虚线箭头表述,依赖的类指向独立的类

  • (4)实现:是指一个类描述了另一个类保证实现的合约。顶部是空心三角的虚线箭头表示。由一个类指向实现的类。

    • 系统设计视图中的类AccountBusinessRules(帐户商业规则)由接口类IRuleAgent(规则代理)实现。

(3)对象图(Object Diagrams)

​ *对象图表示一组对象之间联系,对象图是类图的实例。 *

类图和对象图是建立对象模型主要工具,用于各类系统:信息管理系统、数据库系统、Web应用系统、实时控制系统。

(4)包

UML中包是对模型元素成组组织的通用机制。 把语言相近,可能一起变更模型元素组织在包里,便于理解复杂系统。包图由包和包间联系构成,包的联系:依赖、泛化。

包依赖:一个元素定义改变引起另一元素发生相应改变,用虚线箭头表示包间依赖关系,虚箭线从依赖包指向独立包。

包泛化:两个包间有一般特殊关系,实线+空心三角箭头表示包间泛化关系。

4、UML-动态建模

(1)消息

  • 简单消息:没有描述通信的细节。实线箭头表示。
  • 同步消息:调用者发出消息后等待消息返回后再继续执行。实线箭头结尾加×表示
  • 异步消息:调用者发出消息后不等待消息返回就继续执行。
  • 返回消息:代表从过程调用的返回。虚线箭头表示
    • 过程控制流:可省,隐含每个调用有配对返回
    • 非过程控制流(如异步):不可省

(2)顺序图(Sequence Diagrams)

顺序图(sequence diagram) 描述对象间交互关系。对象用矩形框表示,框内标对象名;
矩形框下的竖线代表对象的生命线;对象生命线上的细长矩形框表示对象被激活;对象间通信用对象间水平消息线表示,箭头形状表明消息类型(同步、异步或简单)。

注:已经声明的对象可以将其图像表示代替矩形框更加清晰。

(3)协作图(Sequence Diagrams)

协作图(Collaboration diagram) 描述相互协作对象间交互关系和链接关系。顺序图着重表现交互时间顺序;协作图着重表现交互对象的静态链接消息;协作图显示对象间处理过程的分布。

顺序图着重表现交互时间顺序;协作图着重表现交互对象的静态链接消息。协作图可以由顺序图转化。

(4)活动图(Activity Diagrams)

活动图(Activity diagram)描述为完成某一个用例需要做的活动以及这些活动的执行顺序。活动图由状态图变化而来,各自用于不同目的。状态图着重描述对象的状态变化以及触发状态变化的事件。活动图着重描述各种活动的执行顺序。

  • 业务活动流的分劈和接合用粗短线(同步杆)表示。一入多出为分劈; 多入单出为接合。
    • 注意区分同步杆和分支,分支是选择一个路,同步杆是两者均做。
  • 泳道:对象对活动的责任,泳道把活动分成若干组,把组指定给对象,对象履行该组活动。
    • 泳道说明了是哪个对象履行功能

(5)状态图(State Diagrams)查看行为模型。不再赘述

-----------------------本文结束 感谢阅读-----------------------
坚持原创技术分享,您的支持将鼓励我继续创作!恰饭^.^~