第7章 面向对象设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
7.4 数据层设计
• 数据库设计 :将UML类图映射到关系数据库
关联关系的映射
多对多关联的映射:由于记录的一个外键最多只能引用 另一条记录的一个主键值,因此关系数据库模型不能在 表之间直接维护一个多对多关联。 为了表示多对多关联,关系模型必须引入一个关联表, 将两个类之间的多对多关联转换成表上的两个一对多关 联。
7.2 问题域设计
• 增加控制类
处理业务逻辑的常见方法是在底层的业务逻辑 模型之上增加控制类。 表示层与业务逻辑层的交互完全通过控制类。 在最简单的情况下,可以根据用例来组织控制 类。
7.2 问题域设计
• 增加控制类
例如,在校内书店管理系统中,针对三个子系 统可以增加三个控制类:
习题
(2) 用面向对象方法设计网上购书系统的软件结构,网上购 书系统的业务如下: 某书店为方便顾客通过Internet购买相关图书,开发一个 “网上购书系统”,顾客可以通过Web页面注册并登录 “网上购书系统”,通过Web页面查看、选择图书,系统 根据用户选择的图书单价、数量,系统自动生成订单,并 计算总价格。 顾客在提交订单之前,必须填写关于寄送地址和发票及付 款方式等细节,一旦订单被提交,系统显示确认信息,并 附上订单的详细信息。顾客可以在线查询订单的状态。 系统管理人员查看顾客的订单,验证顾客的信用和付款方 式,向仓库请求所购图书,打印发票并发货。 (3) 设计网上购书系统问题域的类图。
第7章 面向对象设计
• • • • 子系统分解 问题域设计 界面层设计 数据层设计
7.1 子系统分解
子系统分解的实质是进行体系结构设计; 对于传统的软件,通常就是功能模块的分解; 对于面向对象系统,通常在水平方向和垂直方 向进行分解。
7.1 子系统分解
• 水平方向的分解
水平方向的分解即是 通常所说的分层。 一种比较普遍的做法 是采用三层体系结构, 即表示层、业务逻辑 层及数据层。
7.1 子系统分解
• 各层的职责
表示层的职责
表示层的主要职责是向用户显示信息,并将从 用户那里获取的信息解释成业务逻辑层或数据 源层上的各种动作。 当前的用户界面往往是功能完善的图形用户界 面(GUI)或者是基于HTML的浏览器界面。
7.1 子系统分解
• 各层的职责
业务逻辑层的职责
业务逻辑层是整个系统的核心。包括根据输入 数据或已有数据进行计算,对从表示层输入的 数据进行验证,以及根据从表示层接收的命令 来确定调用哪些操作。
7.1 子系统分解
• 校内书店管理系统体系结构
7.2 问题域设计
• • 面向对象设计是以面向对象分析模型为基础的。 面向对象分析所得到的问题域模型可以直接应 用于系统问题域部分的设计。
7.2 问题域设计
• 对分析类图进行调整与细化
在设计阶段,可能需求发生了变化,也可能是 分析与设计者对问题本身有了更进一步的理解 等原因,一般需要对系统分析的结果进行改进 和增补。
7.3 界面层设计
• 书店管理系统界面设计方案
界面设计时考虑了以下几个方面: 界面简洁,功能访问便捷,方便用户快速进入 所需的业务处理界面; 界面布局保持Windows系统界面风格,符合用户 使用习惯,例如通过标题栏缩放和关闭应用系 统,将菜单栏放置在标题栏下面; 设计快捷键,可通过键盘方式快速进入业务处 理界面。
7.2 问题域设计
• 对分析类图进行调整与细化
Baidu Nhomakorabea
补充类的属性和方法
例如,由于标题相同的书可以有多本,为了进行区分, 对于图书(Book)类应增加书号(bookNo)属性,可以 使用书本身的ISBN号再加顺序号作为书号。 书店可以增加营业时间(open)和关门时间(close)。 另外,根据用例及顺序图来定义类的方法,使得用例图、 类图及顺序图保持一致性。
7.4 数据层设计
• 数据库设计 :将UML类图映射到关系数据库
7.4 数据层设计
• 数据库设计 :将UML类图映射到关系数据库
7.4 数据层设计
• 数据访问类设计
将对数据的访问(如SQL访问)从业务逻辑层中 分离出来,并将其放到独立的数据访问类中; 以数据库中的表结构为基础,每一个数据库表 对应一个数据访问类;这些类为数据表建立了 一个入口。 应用程序的其他部分不需要了解任何与SQL有关 的事情,而且很容易就能找到所有访问数据库 的操作。
7.1 子系统分解
• 各层的职责
数据访问层的职责
数据访问层的主要职责是与数据源交互,这里 的数据源可能是数据文件、数据库、消息系统 或其他应用系统。 对于大多数企业应用来说,最主要的数据源就 是数据库,它的主要职责是存储持久数据。
7.1 子系统分解
• 垂直方向的分解
垂直方向的分解与具体的应用领域及应用需求 有关; 通常根据主题将系统分解成若干个部分,每一 部分又可分解为若干个子系统或类,每个子系 统还可以由更小的子系统或类组成。 初始子系统的分解可以从功能性需求中导出, 往往是将功能相关的类进行分组,进而明确标 识出子系统。
习题
• (1) 考虑数据库设计的其他方案,由于Teacher 、 Student、Other类定义中增加的属性不多,因此, 在设计数据库时,可以使用单表继承方式,即将 Teacher 、Student、Other类与其父类Customer 合在一起,建立一张表,而不是建立四张表。试 给出具体的表结构设计方案。
7.4 数据层设计
• 数据库设计 :将UML类图映射到关系数据库
继承关系的映射
单表继承:为基类及其子类建立一张表。这种方法比较 容易实现,并且易于重构。 子类表继承:将每个子类映射到一张表,没有基类表。 在每个子类的表中包括基类的所有属性。这种方法适用 于子类的个数不多,基类属性比较少的情况。 所有类表继承:将基类映射到一张表,每个子类都映射 为一张表。在基类对应的表中定义主键,而在子类对应 的表中定义外键。
7.4 数据层设计
• 数据库设计 :将UML类图映射到关系数据库
关联关系的映射
一对一关联的映射:对于一对一关联,可以在两个表中 都引入外键,这样两个表之间可以进行双向导航。也可 以根据具体情况,将类组合成一张单独的表。 一对多关联的映射:可以将关联中的“一”端毫无变化 地映射到一张表,将关联中“多”端上的类映射到带有 外键的另一张表,使外键满足关系引用的完整性。
7.3 界面层设计
• 主界面设计方案
7.3 界面层设计
• 图书管理界面设计
7.4 数据层设计
• 数据库设计 :将UML类图映射到关系数据库
一个普通的类可以映射为一个表或多个表
当分解为多个表时,可以采用横切和竖切的方法。 竖切常用于实例较少而属性很多的对象,将不同分类的属 性映射成不同的表。通常将经常使用的属性放在主表中, 而将其他一些次要的属性放到其他表中。 横切常常用于记录与时间相关的对象,如成绩记录、运行 记录等。
继承关系的映射举例:根据继承关系映射的第三 种方法来设计数据库表,将采用4张表来存储;
7.4 数据层设计
7.4 数据层设计
• 数据库设计 :将UML类图映射到关系数据库
Lease类及其子类可采用一张表存储; BookStore、Bookshelf及Book各用一张表存储。
7.4 数据层设计
7.2 问题域设计
• 将对象分组归入子系统
根据上面的规则,可以将BookStore、 Bookshelf及Book三个类归入图书管理子系统; 将Customer、Student、Teacher和Other四个类 归入顾客管理子系统; 将Lease、DailyLease及BookLease三个类归入 租书管理子系统。
7.2 问题域设计
• 对分析类图进行调整与细化
对类进行调整:考虑校内书店管理系统的初始类图 可以将顾客(Customer)分为学生(Student)、 教师(Teacher)、校外顾客(Other),学生 和教师享有不同的折扣,校外顾客租书则需要 缴纳押金。 租约(Lease)分为日租约(DailyLease)、本 租约(BookLease)两种。
7.4 数据层设计
• 数据库设计 :将UML类图映射到关系数据库
继承关系的映射 以上三种选择并不是相互排斥的,在一个类层次 结构中可以混合使用多种模式。 7.4 数据层设计 例如,可以用单表继承将几个类映射到一张表, 并且使用类表继承来处理一些特殊情况。
7.4 数据层设计
• 数据库设计 :将UML类图映射到关系数据库
图书管理(BookManagement) 顾客管理(CustomerManagement) 租书管理(LeaseManagement)
每个类针对每个用例提供相应的方法。
7.2 问题域设计
• 增加控制类
7.3 界面层设计
• 界面设计方法和原则
用户操纵控制 减轻用户的记忆负担 保持界面一致
7.2 问题域设计
• 对分 析类 图进 行调 整与 细化
7.2 问题域设计
• 调整 类图
7.2 问题域设计
• 将对象分组归入子系统
将对象分组归入子系统的规则:
将在同一个用例中所明确的对象归入同一个子 系统; 尽量减少跨越子系统边界的关联数目; 同一个子系统中的所有对象应该是功能相关的。
7.4 数据层设计
• 数据访问类设计
使用入口的方法主要有两种: 行数据入口:用面向对象的方式来看待数据, 为查询语句返回的每一行产生一个实例。 表数据入口 :许多开发环境提供记录集,这是 表和数据行的一种通用数据结构,用来模拟数 据库的表格式属性。表数据入口提供了查询数 据库的方法,返回一个记录集。
7.4 数据层设计
• 行数据入口
7.4 数据层设计
• 表数据入口
本章小结
• 本章结合实例介绍了面向对象设计的一般方法。 • 通常要从水平和垂直两个方向对系统进行分解。 • 水平方向的分解一般为三层,即界面层、业务逻 辑层及数据层。 • 垂直方向的分解与应用领域及功能需求直接相关, 分解的原则是各部分相对独立,保持高内聚、低 耦合。
7.4 数据层设计
• 数据库设计 :将UML类图映射到关系数据库
7.4 数据层设计
• 数据库设计 :将UML类图映射到关系数据库
7.4 数据层设计
• 数据库设计 :将UML类图映射到关系数据库
7.4 数据层设计
• 数据库设计 :将UML类图映射到关系数据库
7.4 数据层设计
• 数据库设计 :将UML类图映射到关系数据库