1、软件设计软件设计什么是设计?什么是设计?把问题转化为解决方案的创造性过程;把问题转化为解决方案的创造性过程;解决方案的描述也称为设计。解决方案的描述也称为设计。设计和需求有什么不同?设计和需求有什么不同?张君和李丽想做一栋新房子。他们的需求如下:张君和李丽想做一栋新房子。他们的需求如下: 三个小孩有玩耍的空间,并独立拥有各自的睡房 一间主人卧房 一个厨房 冬天可取暖,夏天可制冷 室内通水通电 等等设计和需求有什么不同?设计和需求有什么不同?设计师的方案设计师的方案: 屋子的楼上有四间睡房,楼下有一间客房,一间厨房,一个玩具房和一个杂物室等等。还有其他方案吗?还有其他方案吗?软件设计的任务软件设
2、计的任务分析模型分析模型 设计模型设计模型 设计文档设计文档回答回答How to do?可以分为概要设计、详细设计可以分为概要设计、详细设计软件设计软件设计目录目录面向对象设计概述面向对象设计概述类设计类设计动态模型设计动态模型设计用户界面设计用户界面设计面向对象设计概述面向对象设计概述面向对象设计过程的步骤面向对象设计过程的步骤 1.系统设计 系统整体结构的设计 2.对象设计 对OOA模型中类/对象模型的具体化和细化 3.消息设计 从对象关系模型,设计出消息模型 4.设计模型复审OODOOD遵循的原则遵循的原则(一)模块化(一)模块化 对象就是模块,把数据和方法结合在一起(二)抽象(二)抽象
3、 过程抽象 数据抽象 参数化抽象(某些PDL)OODOOD遵循的原则遵循的原则(三)信息隐藏(三)信息隐藏 通过对象的封装性实现(四)弱耦合(四)弱耦合 降低交互耦合 提高继承耦合OODOOD遵循的原则遵循的原则(五)强内聚(五)强内聚 服务内聚 类内聚 一般-特殊内聚(六)可重用(六)可重用 尽量使用已有的类 创建新类时,考虑将来的可重用性子子 系系 统统 设设 计计类及对象设计类及对象设计消息设计消息设计责任设计责任设计分析模型设计模型将OO分析模型转换为OO设计模型软件设计软件设计目录目录面向对象设计概述面向对象设计概述类设计类设计动态模型设计动态模型设计用户界面设计用户界面设计v关键抽
4、象是在系统范围上的一些重要概念,主要关键抽象是在系统范围上的一些重要概念,主要是从需求中得到(例如词汇表、业务规约以及用是从需求中得到(例如词汇表、业务规约以及用例模型),这些概念也会涉及到系统所针对的业例模型),这些概念也会涉及到系统所针对的业务领域知识。关键抽象通常表现为系统的实体务领域知识。关键抽象通常表现为系统的实体 ,其重要的原因为:其重要的原因为:关键抽象关键抽象 在线拍卖拍卖和拍卖物项信用卡 竞拍 分类 用户帐户和未付款项 关键抽象业务实体 实体之间的关系例如:一个拍卖就包含一个拍卖物项强调与系统设计有关的实体 排除系统外部多余的实体 最后,关键抽象成为分析模型中的类 候选类候选
5、类 在分析的初始过程中阐明的类称为候选类在分析的初始过程中阐明的类称为候选类 冗余类冗余类 无关类无关类 标识类的角色标识类的角色 多个类定义同一个实体 任何不属于应用程序域的类都需去除 保留基类,而排除所有作为角色的类 标识候选类 模糊类模糊类 没有明确功能的类称为模糊类识别类识别类 3-1 v 类是一组对象,这些对象具有共同的属性和共同的行为类是一组对象,这些对象具有共同的属性和共同的行为v 类是创建对象的模板类是创建对象的模板 类可捕获对象的本质对象是类的实例化识别类识别类 3-2 3-2 v在标识类时,需查找:在标识类时,需查找: 有形事物 事件 扮演的角色 交互 位置 组织单位 识别
6、类识别类 3-3 3-3标识的类也称为候选类。可从以下方面标识类:标识的类也称为候选类。可从以下方面标识类: 需求说明需求说明 用例用例 应用程序专家应用程序专家 研究系统研究系统 v 分析以下方面可标识其他候选类:分析以下方面可标识其他候选类: 相似的系统 以前的系统 用例 应用程序专家 需求说明以前的系统相似的系统 候选类 类图类图 2-12-1结构结构说明说明语法语法类对一组对象的描述,这些对象具有相同的属性、操作、方法、关系和语义v 类是对一组对象的描述,这些对象具有相似的属性、操作、关系类是对一组对象的描述,这些对象具有相似的属性、操作、关系和行为。和行为。Window size:
7、Size visibility: boolean display() hide()类名称属性操作类名称 属性 方法 类图类图 2-2 2-2v 类名称通常可对应于现实生活中的实体类名称通常可对应于现实生活中的实体类名称类属性类方法属性(:特性,特征)属性(:特性,特征)属性是进一步描述对象实例的数据。操作(:方法、服务和行为)操作是对象可执行的过程。AccountHolder-Name: String-Age: Integer+Status: Boolean# Hobby : String AccountHolder-Name : String-Age : Integer+Status : B
8、oolean# Hobby : String+GetName(): String+SetName(sName : String)类图示例类图示例类关系类关系 类不是孤立存在的类不是孤立存在的因此,类与类之间创建了一种关系:因此,类与类之间创建了一种关系: 类关系可能指明某种共享关系 类关系可能指明某种类型的语义连接关联 接口与实现 组合 泛化与继承 聚合 依赖 类关系关联关联结构结构说明说明语法语法关联 两个或多个类符之间的一种关系,此关系涉及类的各个实例之间的连接v 识别类之后,需要识别关联识别类之后,需要识别关联v 多重性(多重性(multiplicity)定义有多少对象参与了某个)定义有
9、多少对象参与了某个关系关系 v 各个类都可能与自身有关联各个类都可能与自身有关联公司部门雇员示例:“雇员为公司工作”泛化泛化结构结构说明说明语法语法泛化泛化 它是较一般类和较具体类之间的分类关系v 泛化:标识各个类之间的共同性。泛化:标识各个类之间的共同性。 v 指明特化类(子类)的对象可取代泛化类(父类)的对象。指明特化类(子类)的对象可取代泛化类(父类)的对象。v 是是“is-a”关系。关系。形状 抽象圆圈父类子类抽象类泛化关系依赖依赖结构结构说明说明语法语法依存如果一个类依靠另一个类的服务来完成其角色,则它们之间的关系称为依存关系v 依赖关系指明两个或多个类之间的语义关系,尽管两个类之间
10、没有明确依赖关系指明两个或多个类之间的语义关系,尽管两个类之间没有明确的关联,一个类发生变化也会导致另一个类发生变化。的关联,一个类发生变化也会导致另一个类发生变化。v 可用一种构造型来表示依赖的类型。可用一种构造型来表示依赖的类型。聚合聚合结构结构说明说明语法语法聚合一种特殊形式的关联,指定了聚合(整体)和组件部分之间的整体 - 部分关系v 共享聚合(空心菱形)意味着在组合端的多重性有多个。共享聚合(空心菱形)意味着在组合端的多重性有多个。v 模拟模拟“整体整体-部分部分”关系。关系。整体部分门门房子房子1.*2.*汽车汽车组合组合结构结构说明说明语法语法组合 一种特殊形式的关联,指定了聚合
11、(整体)和组件部分之间的整体-部分关系v 这是一种更强的聚合,表达了类与类之间更强的耦合这是一种更强的聚合,表达了类与类之间更强的耦合v 组合的图形为实心菱形。组合的图形为实心菱形。v 容器负责创建和删除各个部分。容器负责创建和删除各个部分。圆圈点多边形点圆圈接口和实现接口和实现 符号符号 类接口用于描述类的外部可见行为。 它呈现为一个圆圈与名称一同出现。验证 类的实现是其内部视类的实现是其内部视图,涵盖了其行为的图,涵盖了其行为的秘密秘密 类的接口提供了其外类的接口提供了其外部视图,因此在隐藏部视图,因此在隐藏其结构以及其行为的其结构以及其行为的秘密时,强调了抽象秘密时,强调了抽象绘制绘制”图书管理图书管理”系统的类图系统的类图 接口和实现接口和实现 符号符号 类接口用于描述类的外部可见行为。 它呈现为一个圆圈与名称一同出现。验证 类的实现是其内部视类的实现是其内部视图,涵盖了其行为的图,涵盖了其行为的秘密秘密 类的接口提供了其外类的接口提供了其外部视图,因此在隐藏部视图,因此在隐藏其结构以及其行为的其结构以及其行为的秘密时,强调了抽象秘密时,强调了抽象绘制绘制”图书管理图书管理”系统的类图系统的类图