面向对象的分析与设计简介 - nanjing university ·...

59

Upload: others

Post on 26-Jun-2020

46 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

1

面向对象的分析与设计简介

OOA & OOD: An introduction

Page 2: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

• 引言

• 如何分析发现“类”

• 如何设计“类”

• 小结

2019/3/26

摘要 2

Page 3: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

• 软件固有的复杂性

• 问题域的复杂性

• 功能性非功能性需求之间的平衡、需求描述的不明确、需

求改变等

• 管理开发过程的困难性

• 大规模软件开发人员之间的沟通、协调

• 软件中随处可能出现的灵活性

• 开发者实现功能的灵活性

• 描述离散系统行为的问题

• 程序状态复杂

2019/3/26

为什么需要面向对象的分析与设计方法? 3

在每一种工程实践中,设计都是一种训练有素的方法,可以通过它来创造某个问题的解决方案,从而提供实现需求的途径。

Page 4: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

• 软件工程:将系统化的、规范的、可度量的方法应用于软件的开发、运行和维护的过程,即将工程化应用于软件中。

• 好的设计方法可以为开发过程带来非常必需的实践方法,软件工程界已经发展出了几十种不同的设计方法学。

• 所有这些方法都有一些共同的要素:

• 表示法:表达每个模型的语言(UML)

• 过程:导致有序构建系统模型的过程(RUP, XP, SCRM…)

• 工具:消除建模中的枯燥工作并强制实现模型本身的规则的工具

2019/3/26

为什么需要面向对象的分析与设计方法? 4

Page 5: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

2019/3/26

面向对象软件工程 5

问题域

需求分析

总体设计

详细设计

计算机

OOT

OOP

OOD

OOA

问题域

编程

测试

计算机

自然语言

自然语言

分析与设计的鸿沟

编程语言

自然语言

面向对象的编程语言

传统的软件工程方法

面向对象的软件工程方法

Page 6: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

• 面向对象方法真正意义深远的目标是它适合于解决分析

与设计期间的复杂性并实现分析与设计的复用。

• 面向对象的开发不仅仅是编程,必须在整个软件生命周

期采用一种全新的方法:在软件开发过程所有阶段都运

用面向对象的方法,将OOA,OOD,OOP,OOT有机地集

成在一起,这样有利于系统的稳定性。

2019/3/26

面向对象软件工程 6

Page 7: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

• 喷泉模型

• 以用户需求为动力,以对象为驱动

• 各阶段是相互迭代和无间隙的

• 使用相同的描述方法和模型,使得软件生存期各阶段

所使用的方法、技术具有高度的连续性。

2019/3/26

面向对象软件工程 7

Page 8: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

• Ivar Jacobson 92

• James Rumbaugh 91

• Grady Booch 93

• => Rational公司

• => UML (OMG)

2019/3/26

面向对象方法 8

面向对象方法都支持三种基本的活动

识别类和对象

描述对象和类之间的关系

通过描述每个类的功能定义对象的行为

Page 9: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

• Rational Unified Process (RUP)– Rational统一开发过程

• 提供了在开发组织中分派任务和责任的纪律化方法

• 目标是在可预见的日程和预算前提下,确保满足最终用

户需求的高质量产品

• 迭代式的增量开发

• 用例驱动

• 以软件体系结构为核心

2019/3/26

面向对象方法 9

Page 10: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

• OO方法强调开发过程的连续性

• 构造一系列不断精化的面向对象的模型

• 实际上目前大多倾向于采用迭代式开发

• 类成为分析、设计和实现的基本单元

• 核心问题:

• 如何发现类(不同层面的类)?

• 如何设计类 ?

2019/3/26

面向对象的分析与设计 10

Page 11: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

• Craig Larman: Applying UML and Patterns: An Introduction

to Object-Oriented Analysis and Design and Iterative

Development

2019/3/26

推荐 11

Page 12: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

• OOA是软件开发过程中的问题定义阶段

• 领域分析(Domain Analysis):抽取和整理用户需求

并建立问题域精确模型的过程。以公共对象、类和框

架等形式在特定应用领域中标识、分析和规约公共的

可复用的软件成分的能力。抽象出目标系统的本质属

性,建立问题领域模型。

• 应用分析(Application Analysis):将领域分析建立

起来的问题领域模型,用某种基于计算机系统的语言

来表示。响应时间需求、用户界面需求和数据安全等

特殊的需求也都在这一层分解抽出。

2019/3/26

面向对象分析 12

Page 13: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

• 领域分析

2019/3/26

面向对象分析 13

领域知识源

领域分析模型

领域分析

技术文件

专家建议

已有应用

客户考察

目前/未来的需求

类的分类

复用标准

功能模型

领域语言

Page 14: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

• 具体步骤

2019/3/26

面向对象分析 14

获取用户基本需求

标识类和对象

定义类的结构和层次

表示类(对象)间的关系

为对象行为建模

常用用例来收集和描述用户的需求

标识类及类的属性和服务

描述系统的静态结构

描述系统的动态行为

Page 15: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

• FURPS+

• Functional功能性• features, capabilities, security

• Usability易用性• human factors, help, documentation

• Reliability可靠性• frequency of failure, recoverability, predictability

• Performance性能• response times, throughput, accuracy, availability, resource usage.

• Supportability可支持性• adaptability, maintainability, internationalization, configurability.

• “+”• Implementation, Interface, Operations, Packaging, Legal

2019/3/26

Requirement checklist 16

Page 16: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

• OOD是面向对象方法在软件设计阶段应用与扩展的结果,

通常分为两个阶段

• 高层设计:建立应用的体系结构

• 低层设计:集中于类的详细设计

• OOD的准则

• 抽象,信息隐藏,模块化,弱耦合,强内聚,可重用

2019/3/26

面向对象设计 17

Page 17: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

• OOD具体内容

• 按实现条件对OOA模型进行调整,并补充几个新的组

成部分:

• 设计问题域组元:设计构造一组为底层应用建立模型的类

和对象,细化分析结果

• 设计人机交互组元:设计一组有关类接口视图的用户模型

的类和对象,设计用户界面

• 设计任务管理组元:确定系统资源的分配,设计用于系统

中类的行为控制的对象、类

• 设计数据管理组元:确定持久对象的存储,将对象转换成

数据库记录或表格

2019/3/26

面向对象设计 18

Page 18: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

• OO方法强调开发过程的连续性

• 构造一系列不断精化的面向对象的模型

• 实际上目前大多倾向于采用迭代式开发

• 类成为分析、设计和实现的基本单元

• 核心问题:

• 如何发现类(不同层面的类)?

• 如何设计类 ?

2019/3/26

面向对象的分析与设计 19

Page 19: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

• 引言

• 如何分析发现“类”

• 如何设计“类”

• 小结

2019/3/26

摘要 20

Page 20: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

• Three worlds

2019/3/26

回顾:三个世界 21

问题世界现实世界

软件世界

Page 21: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

2019/3/26

22

现实世界

问题世界

软件世界

Reality

抽象

Page 22: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

• 用例

• 基于需求文档

• Use-case model: writing requirements in context

2019/3/26

问题:如何发现类? 23

Page 23: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

• 用例是一个叙述性文档,用来描述参与者(actor)使用系

统完成某个过程时的事件发生顺序。

• 用例乃是对过程的描述。

• 过程描述事件、动作和事务处理自始至终的发生顺序。

• Use cases are text documents, not diagrams, and use-case

modeling is primarily an act of writing text, not drawing

diagrams.

2019/3/26

用例(Use Cases) 24

Page 24: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

• Process Sale:

• A customer arrives at a checkout with items to purchase.

顾客带着商品到收银台结算购买商品

• The cashier uses the POS system to record each purchased item.

收银员采用POS系统记录每件购买的商品

• The system presents a running total and line-item details.

系统提供一个流水单以及商品明细

• The customer enters payment information, which the system validates and records.

顾客输入付款信息,系统核实并记录

• The system updates inventory.

系统更新存货

• The customer receives a receipt from the system and then leaves with the items.

顾客收到发票并带着商品离开

2019/3/26

Use Case例子: 25

Page 25: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

• 简单地说,

• an actor is something with behavior,

• such as a person (identified by role), computer system, or organization; for example, a cashier.

• a scenario is a specific sequence of actions and interactions between actors and the system; it is also called a use case instance.

• It is one particular story of using a system, or one path through the use case; for example, the scenario of successfully purchasing items with cash, or the scenario of failing to purchase items because of a credit payment denial.

• a use case is a collection of related success and failure scenarios that describe an actor using a system to support a goal. For example, here is a casual format use case with alternate scenarios:

2019/3/26

Actor, Scenario, Use Case 26

Page 26: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

2019/3/26

Process Sale 27

Page 27: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

2019/3/26

28

Page 28: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

• Ivar Jacobson: A set of use-case instances, where each

instance is a sequence of actions a system performs that

yields an observable result of value to a particular actor.

• 软件工程师容易犯的错误:自认为所做的是客户/

用户需要的。

• 不能代替客户/用户假想其价值所在。

2019/3/26

Actor有Goal 29

Page 29: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

• 用例可以是一个场景,包括动作和交互。

• 用例可以是一组场景,描述不同场景下的行为。这种书写格式可以在任何时候描述有变体的行为,例如黑盒需求,业务流程,系统设计说明。

• 用例里不要有系统设计,用例里不要有界面设计,用例里不要有特性列表,用例里不要有测试。

• 用例应该描述行为需求。

• 用例的主场景不要超过九步。可以在适当的层次上得到子目标和移除设计说明。

• 用例的最大价值不在于主场景,而是在于备选行为。主场景可能只占用例长度的四分之一到十分之一。

2019/3/26

创建USE CASE的一些原则 30

Page 30: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

• 界定系统边界

• 基于参与者

• 先识别参与者

• 对每个参与者,找出其所发起和参与的过程

• 基于事件

• 识别系统必须响应的外部事件

• 把事件与参与者和用例联系起来

2019/3/26

用例的识别 31

Page 31: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

2019/3/26

边界,Actors,Goals 32

Page 32: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

除了明显的Actors之外,还要问问诸如以下这些问题:

• 谁启动和停止系统?

• 谁管理系统?

• 谁进行用户和安全管理?

• 系统失败时是否有监管进程对系统进行重启操作?

• 谁负责评价系统行为和性能?

• 如何处理软件更新?采用PUSH还是PULL的方式?

• 谁评价日志?日志是否可以远程获取?

• 主要角色除了人,是否还有外部软件或机器人系统会访问系统服务?

• 当出现错误或失败时,谁会得到通知?

• ……

识别Actors及其Goals 33

Page 33: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

• “The nouns and the verbs”

• 启发:类与方法;

• 基本原则:ADT

• 没有机械的办法。

• 基于经验的启发性、指导性的原则:

• 哪些东西是可能的类;

• 哪些形式的类不理想,可考虑从模型中去除。

2019/3/26

Find the classes 34

Page 34: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

• 明确的抽象

• 类名是名词或形容词,刻画该抽象

• 形容词常用于表达接口

• 代表一系列运行时刻的对象。

• (允许特意的singleton)

• 有修改操作(或作用式操作)

• 形式或非形式地刻画性质:不变式前后置断言

2019/3/26

The ideal class 35

Page 35: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

• 分析类

• 直接对应于问题域

• 设计类

• 为得到优雅的、可扩展的结构而引入

• 实现类

• 满足软件系统实现算法所需。如LinkedList; Array等

2019/3/26

三种类 36

Page 36: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

• 分析类代表了关于系统责任和行为的概念早期模型

• 分析类用来捕捉系统对象模型的“初稿”

• 分析类处理主要的功能需求

• 分析类从问题领域进行对象建模

2019/3/26

分析类 37

Page 37: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

• 系统最可能改变的方面:

• 系统和它的角色之间的边界 (boundary)

• 系统使用的信息 (entity)

• 系统的控制逻辑(control)

2019/3/26

分析类 38

behaviour

information

boundary

延伸思考:MVC

Page 38: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

• 寻找分析类

• 外部世界某些方面的Operational Model

• 仿真/模拟

• 不一定是客观实体,也可能是抽象概念

2019/3/26

Heuristics for finding classes 39

Page 39: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

• 寻找设计类

• 创造性工作

• 设计模式的用武之地

• 其他途径

• 旧系统

• Adaptation through inheritance

2019/3/26

Heuristics for finding classes 40

Page 40: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

• 寻找实现类

• 实现难

• 多复用

• 数据结构与算法知识

• 延迟实现类

• 如”Queue”

• 类层次组织多种不同实现

2019/3/26

Heuristics for finding classes 41

Page 41: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

2019/3/26

42

Page 42: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

• 领域模型可以被看作是一个系统的概念模型,用于以可视化的形式描

述系统中的各个实体及其之间的关系。领域模型记录了一个系统中的

关键概念和词汇表,显示出了系统中的主要实体之间的关系,并确定

了它们的重要的方法和属性。因此,对应于用例所描述的动态视图,

领域模型提供了一种对整个系统的结构化的视图。领域模型的一个好

处是描述并限制了系统边界。

• 领域模型设计是需求分析的关键步骤。它帮助用户及需求分析人员建

立业务概念,确定用户业务的问题域,系统涉及的业务范围等等。

• 领域模型的语义可以被用在源代码中,因此领域模型可以被应用在底

层的软件开发阶段中。实体可以演化为类,方法和属性可以直接演化

至代码之中。

2019/3/26

Domain Model 领域模型 43

Page 43: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

• 领域模型设计的步骤为:

• 1. 从业务描述中提取名词;

• 2. 从提取出来的名词中总结业务实体,区分名词中的属性、角

色、实体、实例,形成问题域中操作实体的集合;

• 3. 从业务实体集合中抽象业务模型,建立问题域的概念(例如

在前面的例子中,我们把容易变质的水果称之为“短期保持水

果”,当然也可以是其它说法,只要能跟用户达成共识即可);

• 4. 用UML提供的方法和图例进行领域模型设计、确定模型之间

的关系

2019/3/26

Domain Model 44

Page 44: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

2019/3/26

Domain Model 45

Page 45: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

• 识别系统事件

• 定义系统操作

• 给出这些操作的Contracts

2019/3/26

System Sequence Diagrams 46

Page 46: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周
Page 47: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

Contract CO2: enterItem

Operation: enterItem(itemID: ItemID, quantity: integer)

Cross References: Use Cases: Process Sale

Preconditions: There is a sale underway.

Postconditions: - A SalesLineItem instance sli was created (instance

creation).

- sli was associated with the current Sale (association

formed).

- sli.quantity became quantity (attribute modification).

- sli was associated with a ProductDescription, based

on itemID match (association formed).

2019/3/26

48

Page 48: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

• 建立系统类模型类图

• 在类之间分配职责

2019/3/26

接下来 49

Page 49: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

• 引言

• 如何发现“类”

• 如何设计“类”

• 小结

2019/3/26

摘要 50

Page 50: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

• OO设计是一个迭代的过程!

• 把分析类直接带入设计阶段

• 如果在设计阶段合并了分析模型,那么在演化的时候,

保持分析和设计模型的一致性会更容易

• 类设计:增加细节和执行精细决策

2019/3/26

Class Design 51

Page 51: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

• 填补从高层需求到低层服务之间的空白

• 用操作实现用例

• 阐述每个操作的算法

• 选择算法;数据结构;设计内部类和操作

• 向下递归到支持更高层操作的设计操作

• 功能分层;机制分层

• 把模型重构成更简洁的设计

2019/3/26

Class Design 52

Page 52: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

• 设计优化

• 效率问题

• 具体化必须操作的行为

• Command, Strategy模式

• 调整类的结构以增加继承

• 重新调整类和操作;提取公共行为;使用委托来共享行为

• 组织类和关联

• 信息隐藏;内聚性;微调包

2019/3/26

Class Design 53

Page 53: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

• 创建初始设计类

• 定义操作

• 定义方法

• 定义状态

• 定义属性

• 定义依赖

• 定义关联

2019/3/26

Class Design 54

Page 54: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

• 大部分,简单的类意味着每一个类

• 封装较少的整个系统的智能

• 更易被复用

• 更易实现

• 少部分,复杂的类意味着每个类

• 封装较多的整个系统的智能

• 不太会被复用

• 更难实现

2019/3/26

How Many Classes Are Needed? 55

A class should have a single well focused purpose. A class should do

one thing and do it well!

Page 55: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

• 面向对象分析和设计

• 特点,过程,任务

• 如何发现类

• 用例

• 领域模型

• 如何设计类

2019/3/26

小结 56

Page 56: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

2019/3/26

UML - Books 57

Page 57: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

2019/3/26

UML - Tools 58

Page 58: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

需要开发的流程图绘制软件的基本功能可以参照PPT或者Visio中的图

形以及流程图绘制功能。

基础功能需求:

1. 设计良好的图形用户界面,界面中要求至少有默认大小的方框、圆形、连接线三个

元素可供用户选择后,单击绘制到画布上;

2. 支持拖拽绘制方框、圆形、连接线;

3. 允许用户对一个图形添加文字描述;

4. 单击可以选中图形,并允许对图形的拷贝复制;

5. 支持撤销上一步操作的功能。

扩展功能需求:

1. 选中图形后可对图形的尺寸进行拖拽调整图形大小;

2. 支持个性化界面,包括设置界面字体大小、界面皮肤等;

3. 支持撤销多步的功能;

4. 设计一种硬盘文件存储格式可以保存用户绘制的图形,并可以加载。

2019/3/26

流程图绘制软件-开发需求 59

Page 59: 面向对象的分析与设计简介 - Nanjing University · 与设计期间的复杂性并实现分析与设计的复用。 •面向对象的开发不仅仅是编程,必须在整个软件生命周

• 对上述给定的软件开发问题,完成分析设计文档

• 首先采用面向对象分析的方法,给出用例文本,用例

图,领域模型,系统顺序图,操作契约

(其中图的绘制可以采用绘制软件如Visio, StarUML或一些免费的网

站https://www.processon.com/,学习使用其中UML图绘制的功能)

• 结合上述分析结果,给出面向对象设计中的类结构详

细设计,给出系统的类图,类与类之间的结构关系图

2019/3/26

作业 60

4月8号24点截止提交,提交到邮箱[email protected]