目录

【对象、属性、方法】

【面向对象分析与设计】

专有名字的缩写

面向对象的分析 OOA

面向对象的设计 OOD

UML介绍

【面向对象设计原则】

SOLID原则

OO设计时需要注意的一些问题

CRC卡片分拣法

【类图 & 类图】

类图的相关概念

类图关系:关联关系

类图关系:聚合关系、组合关系

类图关系:泛化关系

类图关系:依赖关系

类图关系:实现关系

关联类

类图符号总结

类图建模的过程

【用例图】

用例图的相关概念

用例图关系

用例建模的流程

【顺序图】

顺序图的相关概念

顺序图建模的流程

顺序图的组合框

顺序图 VS 用例图

【状态图】

状态图的相关概念

状态图建模的流程

【单元测试题】

选择题

判断题


【对象、属性、方法】

  • 什么是软件对象?

    • 软件也是由不同类型的软件对象组成的.每个软件对象也有自己的状态和行为。

  • 什么是类?

    • 一个蓝图或原型,它定义了某种类型的所有对象通用的变量和方法,具有可重用性以节省开发许多同类对象的工作。

  • 对象的消息传递:

    • 对象不会接受任意的消息传递,对象可接受的消息通常被定义为该对象的一组方法

  • 接口:

    • 方法声明的集合

    • 接口是一个软件对象所能提供的所有功能属性(服务)的集合。

    • 接中的方法定义了服务对象所能实现的各种“服务”

    • 方法(或服务)的产生以及命名,都必须遵循使用该服务的客户对象的需求

    • 设计一应该从客户对象的需求中“提取”服务对象类的接口以及各方法的具体实现,而不是向客户对象“推送”我们认为这个服务对象类应该提供的功能。

  • 对象是软件模块

    • 软件模块只是子程序和数据的一种松散组合


【面向对象分析与设计】

专有名字的缩写

OOAD(Object oriented analysis design),面向对象分析设计

OOP(Object oriented programming),面向对象程序设计

OOD(Object oriented design),面向对象设计

OOA(Object oriented analysis),面向对象分析


面向对象的分析 OOA

面向对象程序设计(OOP):将OOP中的概念上推到分析和设计阶段

数据库设计(Database design):将数据语义建模概念,如实体-关系、泛化、聚合和分类用于系统分析和设计

结构化分析〈Structured Analysis ):将结构化分析方法与技术,如SADT方法等用于系统分析与建模

知识表示(Knowledge Representation):采用基于问题框架和语义网络的知识表示方法


面向对象的设计 OOD

  • 早期OODの特点

    • 不是基于OOA的,大多基于结构化分析结果

    • 是OO编程方法的延伸,多数方法与编程语言有关

    • 不是纯OO的,对某些OO概念缺少支持

    • 不是只针对软件生存周期的设计阶段

    • 早期的OOD可看作现今OOAD方法的雏形。

  • 90年代以后 の OOD的特点

    • 以面向对象的分析为基础

    • 相应的OOA方法共同构成一种OOAD方法体系

    • 较全面地体现面向对象方法的概念与原则

    • 大多数方法独立于编程语言,可以由不同的编程语言实现

    • 面向对象的设计OOD:在OOA模型基础上运用面向对象方法进行系统设计,产生一个符合具体实现条件的OOD模型。

  • 几种典型的面向对象的方法

    • Booch方法、Coad-Yourdon方法、Firesmith方法、Jacobson方法(OOSE)、Martin-odell方法、Rumbaugh方法(OMT)、Seidewitz-Sark方法、

      Shlaer-Mellor方法、Wirfs-Brock方法

    • 方法的异同体现于:概念、表示法、系统模型、开发过程、可用性、技术支持

      • 【Booch方法】微过程:识别类和对象 - 识别类和对象的语义 - 识别类和对象的关系 - 实现类和对象;

      • 【Jacobson方法】特点:通过用例描述用户需求、用交互图描述对象之间的交互、用例驱动的观点言之有过

      • 【OMT方法】特点:概念严谨,阐述清楚 ; 过程具体,可操作性强 ; 包含了许多非面向对象的内容 ; 提出若干扩充概念,偏于复杂


UML介绍

  • UML简介

    • 什么是UML?UML-Unified Modeling Language 统一建模语言,又称标准建模语言。是用来对软件密集系统进行可视化建模的一种语言

    • UML是一个开放的标准、一种描述性语言:严格的形式语法(如编程)、一种说明性语言:由用法和约定塑造

    • UML包含很多语言:用例图、类图、顺序图、状态图等等

  • 使用UML

    • 草图:交流系统的各个方面,通常在白板或纸上完成用于获得粗略的选择性想法

    • 蓝图:要实现的完整设计,有时用CASE(计算机辅助软件工程)工具完成

    • 正向设计:在编码之前使用

    • UML逆向设计:在编码为文档之后进行UML建模

    • 作为一种编程语言:使用正确的工具,可以从UML自动生成和执行代码


【面向对象设计原则】

SOLID原则


OO设计时需要注意的一些问题

  • 不同类中相似方法的名字应该相同

  • 遵守已有的约定俗成的习惯

  • 尽量减少消息模式的数目。只要可能,就使消息具有一致的模式,以利于理解。

  • 设计简单的类。类的职责要明确,应该从类名就可以较容易地推断出类的用途。

  • 定义简单的操作、方法

  • 定义简单的交互协议

  • 泛化结构的深度要适当

  • 把设计变动的副作用减至最少


CRC卡片分拣法

  • CRC卡片分拣法的作用是 根据用例描述中的名词确定类的候选者,根据用例描述中的名词确定类的候选者

  • 具体方法:

    • 由名词寻找实体类 由动词寻找职责也要从字面去发现职责

    • 根据边界类,控制类,实体类的划分来帮助发现系统中的类

    • 对领域进行分析,或利用已有的领域分析结果得到类

    • 参考分析,设计模式来确定类


【类图 & 类图

参考资料:类图六大关系总结_大音希声_的博客-CSDN博客_类图关系

类图的相关概念

什么是类和对象?

  • 类:具有相同性质、行为、对象关系、语义的对象集合

  • 对象:类的实例,两个不同对象可以有相同的属性值

类的分类

边界类,控制类,实体类

  • 边界类位于系统与外界的交界处

  • 实体类保存要放进持久存储体的信息。通常每个实体类在数据库中有相应的表,实体类中的属性对应数据库表中的字段。

  • 控制类是控制其他类工作的类。每个用例通常有一个控制类,控制用例中的事件顺序,控制类也可以在多个用例间共用。其他类并不向控制类发送很多消息,而是由控制类发出很多消息。

类图的表示

  • 类图显示了软件系统中实体类的存在及其关系。

  • 类图显示模型的静态结构,特别是存在的事物,如类、它们的内部结构,以及它们与其他类的关系。

  • 它是一个系统的静态视图,主要支持系统的功能需求。


类图关系:关联关系

  • 单项关系示例

public class Phone {private User user;
}
public class User {
}

  • 双向关系示例

public class Person {private IDCard idCard;
}
public class IDCard {private Person person;
}

  • 一个完整的关联关系应该包含的元素:关联关系名、导航性、多样性、角色

  • 关联关系的种类:自返(递归)关联、二元关联、N元关联

类图关系:聚合关系、组合关系

聚合关系

  • 聚合关系表示的是整体与部分之间的关系,整体与部分可以分开

  • 聚合关系是关联关系的特例,所以它具有关联的导航性和多重性。聚合关系使用带空心菱形的实现来表示

示例:

public class Computer {private Mouse mouse;private Monitor monitor;public void setMonitor(Monitor monitor) {this.monitor = monitor;}public void setMouse(Mouse mouse) {this.mouse = mouse;}
}
public class Mouse {
}
public class Monitor {
}

组合关系

  • 组合关系也是整体与部分的关系,但是整体与部分不可以分开即:整体与部分是同生共死的关系。

  • 组合关系使用实心菱形表示。

  • 聚合和组合的区别:聚合是将类作为属性;组合是将对象作为属性

示例

public class Computer {private Mouse mouse=new Mouse();private Monitor monitor=new Monitor();
}
public class Mouse {
}
public class Monitor {
}


类图关系:泛化关系

泛化关系 Generalization

  • 泛化关系其实就是继承关系,它是依赖关系的特例。这个很简单,如果A类继承了B类,那么A和B就存在泛化关系。

  • 使用实线白色三角箭头表示泛化关系。子类指向父类

示例

public abstract class DaoSupport {public void save(Object entity){    }public void delete(Object id){    }
}
public class PersonServiceBean extends DaoSupport {}


类图关系:依赖关系

依赖关系 Dependency

  • 定义:只要在类中用到了对方(注意:若在类中定义了另外的类或者类的对象,则属于聚合或组合关系),那么它们之间就存在依赖关系。如果没有对方,则编译不能通过。

  • 使用普通箭头表示依赖关系

示例

public class PersonServiceBean {private PersonDao personDao;//这里只是用于理解依赖关系,没有具体实现public void save(Person person){ }public IDCard getIDCard(Integer personid){return null;}public void modify(){//注意:局部变量是类对象,不符合迪米特法则,这里只是用于理解依赖关系Department department=new Department();}
}
public class PersonDao {
}
public class IDCard {
}
public class Person {
}
public class Department {
}


类图关系:实现关系

实现关系 Realization

  • 实现关系就是A类实现B接口,它是依赖关系的特例。

  • 使用虚线的白色三角箭头表示实现关系

示例

public interface PersonService {public void delete(Integer id);
}
public class PersonServiceBean implements PersonService{@Overridepublic void delete(Integer id) {}
}


关联类

  • 有时要为关联相关信息的存储定义一个专门的类,称为“关联类”

  • 保存与关联关系本身相关的信息,这些信息不属于关联所连接的两端的类。

  • 关联类通过一条虚线连接至关联。

示例:

public class Company {private String companyName;public Person employee[];
}public class Contract {peuvate Double salary;
}public class Person {private String personName;protected Company employer;
}


类图符号总结


类图建模的过程

定义类名 → 定义类属性 → 定义类的操作 → 建立类和类之间的关系 → 定义关联关系的多样性、方向和名字

示例:


【用例图】

用例图的相关概念

  • 用例建模的目的:关联干系人需求以及软件需求、确认与系统交互的人或对象(参与者)、定义系统的边界、捕捉和传达系统的理想行为(用例)

  • 用例图(use case diagram ):由参与者、用例以及它们之间的关系构成的,用于描述系统功能的动态视图。

  • 用例建模的概要:概要描述、参与者Actor列表、用例Use-case列表

  • 用例图的主要元素:参与者、用例、关联、系统边界

  • 参与者:与系统交互的人、与系统交互的外部系统、硬件设备

    • 如顾客通过在信息管理系统的支持下运行的web购物系统购物,则参与者是:顾客、信息管理系统;用例是:web购物系统

    • 参与者是一个角色,而不是具体的人:如A、B、C都是老师

    • 一个人不一定只有一个角色:如A是店长,也是店员

  • 用例:作为外部实体的参与者与系统的交互序列;即系统的一系列行为,为参与者提供有价值且可观测的结果

    • 用例不是功能分解的过程!

    • 常见用例:参与者要用到的系统功能、系统为实现参与者价值所开展的行为序列、交互活动、事件流

  • 关联:参与者与用例之间的交互通道

    • 有箭头:指出是谁发起的交互

    • 没箭头:双方都可以发起的交互

  • 系统边界:包含的所有系统成分与系统以外各种事物的分界线

    • 系统边界会对用例以及Actor的定义有所影响


用例图关系

参考资料:用例建模_万事胜意L的博客-CSDN博客_用例建模

注意一下指向: 泛化:子用例→父用例 ; 包含:基用例→包含用例 ; 扩展:扩展用例→基用例

  • 关联关系:表示参与者与用例之间的通信。

  • 泛化关系:参与者之间可以有共同的属性和行为,因此可使用泛化关系来描述多个参与者之间的公共行为。它们之间有特殊和一般的关系。

    • 示例:电话订票、网络订票,都包含于”订票“

  • 包含关系:指一个用例可以包含其他用例具有的行为,并把它所包含的用例行为作为自身用例的一部分。其实就是基础用例中一个不得不执行的用例部分。

    • 示例:下订单 包含 提供用户信息

扩展关系:一个用例也可以被定义为基础用例的增量扩展,这称作扩展关系,扩展关系是把新行为插入到已有用例的方法。

  • 示例:”取消订单“ 是 ”检查订单状态“ 的扩展


用例建模的流程

画系统边界 → 列出actor-goal lists → 找到参与者 → 找到用例 → 按照时间流程和用例关系画出关系


Step1.找出参与者和外部系统、画出 actor-goal lists,找到参与者和用例

actor-goal lists

Step2.按照actor-goal lists画出用例图

由actor的目标来确定用例

Step3.写出用例详细规约

包含 不同的场景(成功、失败)、用例建模详细规约

用例建模详细规约的编写:找出用例的执行者和目标、撰写用例概述和主成功场景、考虑操作失败的场景、列出所有可替换场景


【顺序图】

顺序图的相关概念


顺序图建模的流程

① 从用例中识别交互过程;

② 获取要画顺序图对应的参与者,并把它放在最开始的位置。然后识别参与交互过程的对象;

③ 为每一个对象设置生命线,并确定对象的存在期限;

④ 从引发交互的初始消息开始,在对象生命线上依次画出交互的消息;

⑤ 如果需要,可以给消息增加时间约束,以及前置条件和后置条件。

示例:


顺序图的组合框


顺序图 VS 用例图

  • 顺序图往往和用例图绑定使用

  • 顺序图表达用例的单个场景实例的行为。

  • 顺序图表达对象间如何协作完成用例所描述的功能。

  • 顺序图可用于开发周期的不同阶段,服务于不同目的,描述不同粒度的行为

    • 用于表示为完成用例而在系统边界输入输出的数据以及消息

    • 用于表示系统内部对象间的消息传递。


【状态图】

状态图的相关概念

  • 有限状态机的主要元素:状态和转移、事件和行为

  • 所有的对象 都有状态!! 对象的存在 / 不存在 也是一种状态

  • 状态图用于表示【一个】类对象的全生命周期过程

  • 描述状态图的图符元素有:状态图符、迁移图符、起始状态、终止状态、条件判定、发出信号、接收信号和并发等。

    • 【起始、终止】必须要有起始和结束状态

    • 【迁移】包含的元素:原状态、触发事件、动作表达式(每个状态迁移都对应一个触发事件,同时满足一定警戒条件)

    • 【迁移】的最终结果一定只能达到一个。即:若有多个分支,则这几个分支间的条件应该是互斥的

    • 【事件】状态图中,事件仅需和系统或当前建模对象相关,在OOD中通过传递消息的方式实现事件

    • 【事件】四类事件:变更事件、调用事件、时间事件、信号事件

    • 变更事件(Changeevents):当给定条件成立时就会发生变更事件

      调用事件(Callevents):当给定对象的操作被调用执行时会发生调用事件

      时间事件(Elapsed-timeevents):表明时间段过去,或某个特殊时间点的触发

      信号事件(Signalevents):当给定对象收到某实时信号

    • 【动作】在状态内部或者状态间迁移时执行的原子操作,两种特殊的动作:入口动作、出口动作


状态图建模的流程

①找出适合用模型描述其行为的类。

②确定对象可能存在的状态。

③确定引起状态迁移的事件。

④确定迁移进行时对象执行的相应动作。

⑤对建模的结果进行相应的精化和细化。

示例:


【单元测试题】

选择题


判断题

1.用户界面设计对于一个系统的成功是至关重要的,一个设计得很差的用户界面可能导致用户拒绝使用该系统。 F

2.系统设计的主要任务是细化分析模型,最终形成系统的设计模型。 F

辨析:系统设计的主要任务是在系统分析的基础上,按照逻辑模型的要求,科学合理地进行系统的总体设计和具体的物理设计,为下一阶段系统提供实施提供必要的技术资料。而不是【最终】形成系统的设计模型

3.面向对象设计是在分析模型的基础上,运用面向对象技术生成软件实现环境下的设计模型。 T

「武汉理工大学 软件工程复习」第四章 | 面向对象 UML建模相关推荐

  1. 「武汉理工大学 软件工程复习」第一章 | 软件工程概述

    目录 第一章 | 软件工程概述 [软件的特性] [软件危机] [软件工程] [软件开发基本策略(要素)] [软件工程基本原理] [单元测试题] 选择题 判断题 第一章 | 软件工程概述 [软件的特性] ...

  2. 软件工程复习提纲——第四章

    软件工程复习提纲,期末.考研的学霸笔记 第四章--总体设计 第四章总体设计 1.总体设计/概要设计/初步设计的目的:"概括地说,系统应该如何实现?"How to do?   启发规 ...

  3. linux utf8转gbk_「正点原子Linux连载」第四章开发环境搭建(2)

    1)实验平台:正点原子Linux开发板 2)摘自<正点原子I.MX6U嵌入式Linux驱动开发指南> 关注官方微信号公众号,获取更多资料:正点原子 4.5 Visual Studio Co ...

  4. 计算机网络教学重点突破,武汉理工大学计算机网络复习重点教学内容(34页)-原创力文档...

    武汉理工大学计算机网络复习重点 精品文档 精品文档 收集于网络,如有侵权请联系管理员删除 收集于网络,如有侵权请联系管理员删除 精品文档 收集于网络,如有侵权请联系管理员删除 第二章 1.数字信号与模 ...

  5. 《通信原理》复习笔记4----第四章信道

    系列文章链接目录 一.<通信原理>复习笔记1----第一章绪论 二.<通信原理>复习笔记1----第一章绪论相关例题 三.<通信原理>复习笔记3----第三章随机过 ...

  6. 计算机图形学期末复习之第四章:基本图形生成算法

    可能这会是图形学期末复习最后一个整理了, 感觉其实不如直接看PPT. 1.填空20+选择20+判断10+简答20+综合30 2.没有编程题 3.复习PPT上的基本概念和算法 计算机图形学期末复习之第四 ...

  7. 「Python爬虫系列讲解」十四、基于开发者工具 Network 的数据抓包技术

    本专栏是以杨秀璋老师爬虫著作<Python网络数据爬取及分析「从入门到精通」>为主线.个人学习理解为主要内容,以学习笔记形式编写的. 本专栏不光是自己的一个学习分享,也希望能给您普及一些关 ...

  8. 武汉理工大学 操作系统复习

    第一章 1. 操作系统的地位:紧贴硬件之上,并在所有其他软件之下.提供其他软件的支撑环境,是计算机资源的管理者 2. 定义:是管理和控制计算机系统中各种硬件和软件资源.合理地组织计算机工作流程的系统软 ...

  9. 嵌入式linux系统蜂鸣器实验,「正点原子Linux连载」第四十六章Linux蜂鸣器实验

    1)实验平台:正点原子Linux开发板 2)摘自<正点原子I.MX6U嵌入式Linux驱动开发指南> 关注官方微信号公众号,获取更多资料:正点原子 大家将imx35_gpio_hwdata ...

最新文章

  1. cartographer 配置过程
  2. oracle 11g ocfs,Oracle 将不再提供ASMlib和OCFS2软件和支持给红帽 RedHat 6的新发行版
  3. shell下输出字体颜色
  4. mysql配置向导文件_Mysql的安全配置向导命令mysql_secure_installation
  5. 数据库升级后,准备使用原有数据文件启动数据库
  6. 我们为什么要搞长沙.NET技术社区(三)
  7. 本机Android应用程序教程:WhatsApp克隆
  8. kali linux工具pyrit,在Kali Linux上安装cuda、pyritcuda以及optimus -电脑资料
  9. glibc:fd_set机制
  10. 文科生必备计算机知识点,文科生计算机知识点调查报告.docx
  11. webview 模拟点击_Android如何基于坐标对View进行模拟点击事件详解
  12. 三菱plc pwm指令_2020福建三菱PLCFX3GA60MT回收回收厂家回收气动元件回收
  13. 最像windows的linux系统,盘点酷似Windows的Linux发行版
  14. 计算机基础 软件系统与硬件系统
  15. 简约实用个人简历自我介绍PPT模板
  16. spring JDBCTemplate实现批量插入及返回id
  17. python微控制器编程从零开始 开发板_Python微控制器编程从零开始 使用MicroPython 文轩网正版图书...
  18. D3 JS study notes
  19. dnf服务器维护11.12,【原来DNF这么多BUG】 12月11日版本维护后其他内容修改
  20. 剑指offerQ24二叉树中和为某一值的路径

热门文章

  1. java | (二十五)Servlet(1)req,resp,重定向,请求转发,数据共享
  2. 安利这几个epub文件转txt软件给你,一起来看看吧
  3. Castle Winsor在Asp.net MVC中应用
  4. Excel-SUMIF和SUMIFS函数的使用方法
  5. 少时诵诗书少时诵诗书
  6. 亮剑“威胁情报”,锐捷、腾讯联手打造“狙击手”
  7. 龙应台:我们为什么要学习文史哲?
  8. 据廖雪峰python3教程----python学习第八天
  9. INVE锁仓增值DApp上线
  10. python生成泊松分布随机数_生成满足泊松分布的随机数,以及python实现