软件工程 面向对象设计
软件工程 第八章 面向对象的设计方法

第八章面向对象的设计方法本章采用基于UML的面向对象设计方法的将分析模型转换为设计模型。
如第五章所述,面向对象的分析模型主要由顶层架构图、用例与用例图、领域概念模型构成;设计模型则包含以包图表示的软件体系结构图、以交互图表示的用例实现图、完整精确的类图、针对复杂对象的状态图和用以描述流程化处理过程的活动图等。
为完成这一转换过程,设计人员必须处理以下任务:(1)针对分析模型中的用例,设计实现方案。
实现方案用UML交互图表示。
(2)设计技术支撑设施。
在大型软件项目中,往往需要一些技术支撑设施来帮助业务需求层面的类或子系统完成其功能。
这些设施本身并非业务需求的一部分,但却为多种业务需求的实现提供公共服务。
例如,数据的持久存储服务、安全控制服务和远程访问服务等。
在面向对象设计中,需要研究这些技术支撑设施的实现方式以及它们与业务需求层面的类及子系统之间的关系。
(3)设计用户界面。
(4)针对分析模型中的领域概念模型以及第(2)、(3)两个步骤引进的新类,完整、精确地确定每个类的属性和操作,并完整地标示类之间的关系。
此外,为了实现软件重用和强内聚、松耦合等软件设计原则,还可以对前面形成的类图进行各种微调,最终形成足以构成面向对象程序设计的基础和依据的详尽类图。
面向对象的软件设计过程如图8-1-1所示。
图8-1-1 面向对象的软件设计过程第一节设计用例实现方案UML 的交互图(顺序图、协作图)适于用例实现方案的表示。
因此,本节首先介绍交互图的语言机制,然后探讨用例实现方案的设计方法。
该设计方法包含如下3个步骤:(1)提取边界类、实体类和控制类;(2)构造交互图;(3)根据交互图精华类图。
一、顺序图顺序图用来描述对象之间动态的交互关系,着重表现对象间消息传递的时间顺序。
在顺序图中,参与交互的对象位于顶端的水平轴上,垂直轴表示时间,时间推移的方向是自上而下的。
顺序图中的对象一般以“对象名:类名”的方式标识,但也可以仅采用缩写形式“对象名”或者“:类名”。
软件工程第十一章面向对象设计

THANKS
感谢观看
01
抽象类是一种不能被实例化的 类,它只能被其他类继承。
02
抽象类可以包含抽象方法和具 体方法。抽象方法是没有具体 实现的方法,需要在继承抽象 类的子类中实现。
03
通过继承抽象类,子类可以继 承抽象类的属性和方法,并且 可以重写或实现抽象类中的方 法。
接口与抽象类的选择
在设计软件时,选择使用接口还是抽象类取决于具体需求和设计目标。
关系
关系描述了对象之间的交互和联系。 常见的关系包括关联、聚合和继承。
继承与多态的设计
继承
继承是一种实现代码重用的方式,子类可以继承父类的属性和方法,并可以扩展或覆盖它们。通过继承,可以建 立类之间的层次结构,使得代码更加清晰和易于维护。
多态
多态是指一个接口可以有多种实现方式,或者一个对象可以有多种形态。多态可以提高代码的灵活性和可扩展性, 使得程序更加易于维护和修改。
02
类与对象的设计
类的定义与属性
类的定义
类是对象的抽象,它描述了一组具有相同属性和行为的对象。类定义了对象的结构、行为和关系。
属性
属性是类中用于描述对象状态的变量。每个对象都有其自己的属性值,这些属性值决定了对象的状态 。
对象的行为与关系
行为
行为是类中定义的方法,用于描述对 象可以执行的操作。方法定义了对象 的行为和功能。
高层模块不应该依赖于低层模块,它们都应 该依赖于抽象。
面向对象设计的优势
提高代码可重用性
通过类和继承实现代码重用,减少重 复代码。
提高代码可维护性
面向对象设计使得代码结构更加清晰, 易于理解和维护。
提高开发效率
通过快速原型开发,快速构建软件系 统。
《实用软件工程》第9章 面向对象设计

• 信息隐藏:对于类而言,其内部信息如属性的表示方法和操作的实现算法,对 外界是隐藏的。外界通过有限的接口来访问类的内部信息。
17
9.3.2 面向对象设计的原则
• 低耦合:在面向对象设计中,耦合主要指对象之间相互关联的紧密程度,低耦 合有利于降低一个模块改变对其他模块的影响。
• 高内聚:内聚与耦合密切相关,低耦合往往意味着高内聚,高内聚有助于提高 系统独立性。
但随着需求理解的加深,以及对系统认识程度的逐步 提高,设计人员还要对模型进行修正和完善。 • 设计任务管理子系统包括确定任务,分配任务,还包 括权衡一致性、成本、性能等因素以及未来可扩充性。 • 设计数据管理子系统,需要设计数据格式以及相应的 服务,设计数据格式的方法与所用的数据存储管理模 式密切相关,不同数据存储管理模式时,属性和服务 的设计方法是不同的。
9.2 面向对象设计与面向对象分析的关系
• 设计阶段的任务是及时把分析阶段得到的需求转变成符合各项要求的 系统实现方案。与传统的软件工程方法不同的是,面向对象的方法不强调 需求分析和软件设计的严格区分。实际上,面向对象的需求分析和面向对 象的设计活动是一个反复迭代的过程,从分析到设计的过渡,是一个逐渐 扩充、细化和完善分析阶段所得到的各种模型的过程。严格的意义上来讲, 从面向对象分析到面向对象设计不存在转换问题,而是同一种表示方法在 不同范围的运用。面向对象设计也不仅仅是对面向对象分析模型进行细化。
• (2)人机交互子系统包括有效的人机交互所需的显示和输入,这些类在很大程度上 依赖于所用的图形用户界面环境,例如Windows、Delphi、C++,而且可能包括“窗 口”、“菜单”、“滚动条”、“按钮”等针对项目的特殊类。
25
9.5.1 系统分解
软件工程 第三部分 软件设计与建模--面向对象设计

(2) 块状组织 把系统垂直地分解成若干个相对独立的、弱耦 合的子系统/块,每块提供一种类型的服务。
采用层次与块状的混合结构
3. 设计(分布式)系统的拓扑结构 由子系统组成完整的系统时,典型的拓扑结构 有管道形、树形、星形等。设计者应该采用与问题 结构相适应的、尽可能简单的拓扑结构,以减少子 系统之间的交互数量。
3. 设计简单的类 小而简单的类便于开发和管理(高内聚)。为使 类保持简单,应该注意以下几点。 (1) 避免包含过多的属性:完成的功能可能太多了。 (2) 有明确的定义:任务应该简单。 (3) 简化对象之间的合作关系。如果需要多个对象 协同配合才能做好一件事,则破坏了类的简明性和 清晰性。 (4) 不要提供太多服务。典型地,一个类提供的公 共服务不超过7个。
层次图、结 构图、流程 图、N-S图、 PAD图、判 定表、判定 树等
面向对象设计方法比结构化设计方法更具有优势, 9/71 使用范围更广。
内容摘要
• • • • • 面向对象设计方法概述 面向对象设计原则 面向对象设计的启发规则 系统设计 对象设计
10/237
面向对象设计原则
• 强调模块化、抽象化、信息隐蔽、高内聚低耦合、复用性等 设计准则。
4/71
什么是面向对象设计(OOD)?
(二)现今(90年代后)的OOD • 面向对象的设计(OOD)就是在OOA模型的基础上运 用面向对象方法进行系统设计,目标是产生一个符合具 体实现条件的OOD模型。
OOD的特点: • 1、以面向对象的分析为基础,一般不依赖结构化分析。 • 2、与相应的OOA方法共同构成一种OOA&D方法体系。 OOA和OOD采用一致的概念和原则,但属于软件生命 周期的不同阶段,有不同的目标及策略。 • 3、较全面地体现面向对象方法的概念与原则。 • 4、大多数方法独立于编程语言,通过OOA&D所得到 的系统模型可以由不同的编程语言实现。
面向对象设计模型

面向对象设计模型引言面向对象设计模型是软件工程中一种常用的设计方法,通过将事物抽象为对象,然后通过对象之间的交互来解决问题。
面向对象设计模型有助于构建可维护、可重用和可扩展的软件系统。
本文将介绍面向对象设计模型的基本概念,以及如何应用它来设计高质量的软件系统。
什么是面向对象设计模型面向对象设计模型是一种软件设计方法,它将事物抽象为对象,对象之间通过消息传递来进行通信和协作。
面向对象设计模型的核心概念包括封装、继承和多态。
•封装:封装是将数据和行为组合到一个对象中,并对外部隐藏对象的内部细节。
通过封装,可以将复杂的系统拆分为多个简单的对象,每个对象只需关注自身的责任和行为。
•继承:继承是一种机制,允许在现有的类基础上创建新的类,并且继承原有类的属性和方法。
通过继承,可以实现代码的复用,减少重复编写类似的代码。
•多态:多态是指同一种方法可以根据接收到的不同对象所属的类而表现出不同的行为。
通过多态,可以提高代码的灵活性和可扩展性。
面向对象设计模型的目标是创建易于理解、可重用、可扩展和可维护的软件系统。
它强调将系统分解为小而简单的对象,每个对象都有明确的职责和行为。
通过对象之间的交互,可以实现系统的功能。
面向对象设计模型的设计原则面向对象设计模型遵循一些设计原则,这些原则有助于创建高质量的软件系统。
下面介绍几个常用的设计原则:1.单一职责原则(SRP):一个类应该只有一个责任,在软件设计中,应该将不同的职责分离到不同的类中。
这样可以提高类的内聚性和代码的可读性。
2.开放封闭原则(OCP):软件系统的设计应该对扩展开放,对修改关闭。
这意味着通过添加新的代码来扩展系统的功能,而不是修改已有的代码。
这样可以减少系统的风险,提高可维护性。
3.里氏替换原则(LSP):子类型必须能够替换掉它们的父类型。
这意味着在使用继承时,子类不应该破坏父类的特性和约束。
这样可以使得系统更加灵活,可扩展。
4.接口隔离原则(ISP):使用多个专门的接口,而不是一个总接口。
软件工程 软件设计方法

软件工程软件设计方法
软件工程软件设计方法
软件设计方法是软件工程中的重要组成部分,它是指在软件开发过程中,通过采用一定的方法论和技术,对软件系统进行设计的过程。
1. 结构化设计方法
结构化设计方法是指将软件系统划分为多个模块,在每个模块中定义合适的数据结构和算法,以实现系统的功能需求。
典型的结构化设计方法包括层次设计、数据流图和结构图等。
2. 面向对象设计方法
面向对象设计方法是基于面向对象编程思想的软件设计方法,它以对象作为软件开发的基本单位,通过定义对象之间的关系和交互,实现系统的功能需求。
常用的面向对象设计方法包括UML建模和设计模式等。
3. 原型设计方法
原型设计方法是通过快速构建系统原型来验证和改进需求,从而指导软件的设计和开发过程。
原型设计方法可以快速获取用户反馈,识别和修复潜在问题,缩短开发周期和降低开发风险。
4. 数据驱动设计方法
数据驱动设计方法强调以数据为中心进行软件设计,通过分析和理解数据的结构、特征和关系,设计出合适的数据模型和处理逻辑,以实现数据的有效管理和利用。
5. 敏捷设计方法
敏捷设计方法是一种迭代、协作和自适应的软件设计方法,其核心理念是响应变化、积极交付和持续改进。
敏捷设计方法通常采用迭代开发模式,强调团队合作和高效沟通,以快速、灵活地满足用户需求。
以上是几种常用的软件设计方法,不同的方法在不同的场景下有其适用性和优劣势。
软件工程师需要根据具体项目需求和团队情况,选取合适的设计方法,并结合实践经验进行不断改进和优化。
面向对象设计知识点

面向对象设计知识点面向对象设计(Object-Oriented Design,简称OOD)是软件工程领域中的重要概念,它是一种以对象为基本构建单元的设计方法。
对象是由数据属性(属性)和操作方法(方法)组成的封装体,通过类的定义来创建对象。
面向对象设计具有灵活、模块化、易维护等优点,被广泛应用于各种软件系统开发场景。
本文将介绍面向对象设计中的一些重要知识点,包括封装、继承、多态和抽象等。
一、封装封装是面向对象设计的核心概念之一,它将数据和行为封装在一个对象内部,对象对外部隐藏了具体的实现细节,只暴露出一组接口供其他对象使用。
封装可以有效地保护对象的数据,提高了代码的可维护性和可重用性。
在封装中,我们需要关注以下几点:1. 数据隐藏:将对象的数据设置为私有(private)属性,通过公有(public)方法来获取和修改数据,确保对象数据的访问受到限制。
2. 隐藏实现细节:对象应该将内部的实现细节隐藏起来,只提供有限的接口给外部使用,这样可以避免外部对对象的依赖,同时也方便后续对实现进行修改和优化。
二、继承继承是面向对象设计中实现代码重用的一种方式。
通过继承,一个类可以继承另一个类的属性和方法,并在此基础上进行扩展或修改。
被继承的类称为父类或基类,继承的类称为子类或派生类。
继承有以下特点:1. 单继承和多继承:单继承表示一个子类只能继承自一个父类,而多继承允许一个子类同时继承自多个父类。
2. 继承关系:子类继承了父类的属性和方法,并可以添加新的属性和方法或覆盖父类的方法。
3. 代码复用:继承可以避免重复编写相同的代码,提高代码的可维护性和可读性。
三、多态多态是面向对象设计的重要特性,它允许子类对象对父类的方法进行不同的实现。
多态性使得我们可以通过父类引用指向不同子类的对象,并根据实际的子类类型来调用相应的方法。
多态性的特点包括:1. 重写(覆盖):子类可以重写父类的方法,实现自己的特定逻辑。
2. 动态绑定:运行时根据对象的实际类型来动态地调用方法,而不是根据引用类型来确定调用哪个方法。
面向对象的软件设计实践

面向对象的软件设计实践随着现代信息技术的高速发展,软件开发已经成为了人们生活和工作中不可或缺的一部分。
而面向对象的软件设计方法已经成为了一种被广泛采用的设计方法,它可以有效地提高软件的可维护性、可扩展性和可重用性。
面向对象的软件设计方法以对象为中心,将实体的抽象化作为核心思想,利用类、继承、多态等概念,来描述系统中的各种实体对象及其相互关系。
采用这些概念,可以将系统中的复杂对象进行有效地分解,并将它们之间的关系以及行为特性进行描述,然后将这些描述用软件工具来实现。
面向对象的软件设计方法是一个非常重要的概念,也是软件开发工程学科中的基础概念。
下面,本文将从各个方面来介绍面向对象的软件设计实践。
一、面向对象的设计原则在进行面向对象的软件设计时,我们需要尊重一些基本原则。
这些原则可以提高我们软件设计的质量和效率。
以下是一些重要的面向对象的设计原则:1、单一职责原则(SRP)这一原则也叫“单一功能原则”。
它指出一个类应该只有一个单一的职责。
也就是说,一个类只应该有一个引起它变化的原因。
SRP原则可以帮助我们提高代码的可重用性和可维护性。
2、开闭原则(OCP)这一原则指出“开放-封闭”原则。
软件的设计应该是开放扩展的但是封闭修改的。
换句话说,对于那些高度可变的需求,我们应该保持系统的灵活性以使之适应这些变化,但是我们不应该去打破那些已经运作良好的模块。
3、接口隔离原则(ISP)这一原则指出,应该为每一个客户端定制一个接口,而不是为一个类定制一个庞大而臃肿的接口。
这个原则可以帮助我们提高系统的可扩展性和可维护性。
4、依赖倒置原则(DIP)这一原则指出,应该依赖于抽象而不是具体的实现。
通过DIP原则,我们可以减小不同模块之间的关联度,从而提高系统的模块化程度。
二、面向对象的设计模式面向对象的设计方法是建立在设计模式之上的,设计模式可以视为软件设计界的调配图谱。
在面向对象软件设计中,有很多模式可以提高我们的设计效率和质量。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
联想A2000 WEB应用 服务器 图书查询 图书查询 图书预订 图书预订 „„
内部用户1
内部用户2
内部用户N
配置图中
考虑到图书馆内部用户如果也通过互联网使用 系统,效率会受影响。 这个系统中设计了三种访问模式:一种是远程 读者,通过Internet访问系统,实现查询图书、 预借图书的功能;第二种是本单位其他部门的 读者,通过单位局域网查询、预借图书;第三 种是图书馆内部工作人员,在局域网上完成日 常的借还书、采编、图书管理等工作。
面向对象设计的四个层次:
确定系统的总体结构和风格,构造系统的物理 模型,将系统划分成不同的子系统。 中层设计:对每个用例进行设计,规划实现用 例功能的关键类,确定类之间的关系。 进行底层设计:对每个类进行详细设计,设计 类的属性和操作,优化类之间的关系。 补充实现非功能性需求所需要的类。
设计一个可重用的软件比设计一个普通软件的代价 要高,但是随着这些软件被重用次数的增加,分摊 到它的设计和实现成本就会降低。
框架
框架是一组可用于不同应用的类的集合。框 架中的类通常是一些抽象类并且相互有联系, 可以通过继承的方式使用这些类。例如, Java应用程序接口(API)就是一个成功的 框架包,为众多的应用提供服务,但一个应 用程序通常只需要其中的部分服务,可以采 用继承或聚合的方式将应用包与框架包关联 在一起来获得需要的服务。一般不会直接去 修改框架的类,而是通过继承或聚合为应用 创建合适的GUI类。
第1步:通过扫描用例中所有的交互图识别参与用 例解决方案的类。在设计阶段完善类、属性和方法。 例如,每个用例至少应该有一个控制类,它通常没 有属性而只有方法,它本身不完成什么具体的功能, 只是起协调和控制作用。 每个类的方法都可以通过分析交互图得到,一般地 检查所有的交互图发送给某个类的所有消息,这表 明了该类必须定义的方法。例如“借书控制”类向 “读者”类发送“检查读者(读者编号)”消息, 那么“检查读者”就作为“读者”类应该提供的方 法。
图书馆内部用户
办公室PC 收费管理 采编部PC 图书信息加工 处罚 远程读者 PC机
借阅部PC 借还书
预订/查询
* Sonicwal l防火墙
《TCP/IP》
交换机 Cisco C2924M -XL
《TCP/IP》
《TCP/IP》
路由器
单位内部用户
交换机 Cisco 24M
联想A3000 数据库 服务器 数据库
注意:
如果两个子系统之间的关系过于密切,则说 明一个子系统的变化会导致另一个子系统变 化,这种子系统理解和维护都会比较困难。 解决子系统之间关系过于密切的办法基本上 有两个:
重新划分子系统,这种方法比较简单,将子系 统的粒度减少,或者重新规划子系统的内容, 将相互依赖的元素划归到同一个子系统之中; 定义子系统的接口,将依赖关系定义到接口上;
专用软件层是每个项目中特殊的应用部分, 它们被复用的可能性很小。在开发时可以适 当地减小软件元素的粒度,以便分离出更多 的可复用构件,减少专用软件层的规模。
通用软件层是由一些公共构件组成,这类软 构件的可复用性很好。在设计应用软件时首 先要将软件的特殊部分和通用部分分离,根 据通用部分的功能检查现有的构件库。如果 有可用的构件,则复用已有的构件会极大地 提高软件的开发效率和质量。如果没有可复 用的构件,则尽可能设计可复用的构件并且 添加到构件库中,以备今后复用。
2)定义子系统之间的关系: 划分子系统后,要确定子系统之间的关系。子系统之 间的关系:
“请求-服务”关系,“请求”子系统调用“服务”子系 统,“服务”子系统完成一些服务,并且将结果返回给 “请求”子系统。 平等关系,每个子系统都可以调用其它子系统。 如果子系统的内容相互有关联,就应该定义它们之间的依 赖关系。在设计时,相关的子系统之间应该定义接口,依 赖关系应该指向接口而不要指向子系统的内容。
面向对象设计的活动
系统构架设计 用例设计 类设计 数据库设计 用户界面设计。
7.2 构架设计
构架设计的目的是要勾画出系统的总体结构, 这项工作由经验丰富的构架设计师主持完成。 该活动以用例模型、分析模型为输入。 输出:物理结构、子系统及其接口、概要的 设计类。
构架工程师
耦合(续)
交互耦合——如果对象之间的耦合是通过消 息连接来实现的,则这种耦合就是交互耦合。 在设计时应该尽量减少对象之间发送的消息 数和消息中的参数个数继承耦合是一般化类与特殊化 类之间的一种关联形式,设计时应该适当使 用这种耦合。在设计时要特别认真分析一般 化类与特殊化类之间继承关系,如果抽象层 次不合理,可能会造成对特殊化类的修改影 响到一般化类,使得系统的稳定性降低。另 外,在设计时特殊化类应该尽可能多地继承 和使用一般化类的属性和服务,充分利用继 承的优势。
第2步:添加属性的类型、方法的参数类型 和方法的返回类型。 第3步:添加类之间的关系,包括关联、依 赖、继承。
“借书”用例中的各个类的关系图,因为类 有三种类型即界面类、控制类和实体类,为 了清晰起见,我们用粗线框表示控制类,斜 体字表示界面类,正常的表示实体类。
读者无效
读者
借书规则
弱耦合
在面向对象设计中,耦合主要指不同对象之 间相互关联的程度。如果一个对象过多地依 赖于其它对象来完成自己的工作,则不仅使 该对象的可理解性下降,而且还会增加测试、 修改的难度,同时降低了类的可重用性和可 移植性。 对象不可能是完全孤立的,当两个对象必须 相互联系时,应该通过类的公共接口实现耦 合,不应该依赖于类的具体实现细节。
第7章 面向对象设计
4学时
引言面向对象的设计
子系统层次设计
设计模型
物理结构设计
分析模型
按照规范把分析模 型转化为设计模型
功能模型
用例设计
数据库设计
对象模型
类设计
界面设计
设计规范/模版
动态模型
第7章 面向对象设计
要求
理解 1)面向对象设计方法和步骤 了解 2)面向对象设计的概念 3)面向对象设计规格说明书的主要内容 了解
可重用性
软件重用是从设计阶段开始的,所有的设计工作都 是为了使系统完成预期的任务,为了提高工作效率、 减少错误、降低成本,就要充分考虑软件元素的重 用性。重用性有两个方面的含义:
尽量使用已有的类,包括开发环境提供的类库和已有的 相似的类; 如果确实需要创建新类,则在设计这些新类时考虑将来 的可重用性。
因此在进行面向对象设计时要尽量考虑接口 封装机制、抽象机制和多态技术。
按键式收音机 老式收音机
旋钮式收音机
问题描述:开关、调台、音量
不同收音机,实现的细节不同 处理方式:
用一个类来处理各种不同类型收音机的操作方式 定义一个接口类,提供开机、关机、增加频率、降低频 率、增加音量、降低音量这六个抽象方法。不同的收音 机继承并实现这六个抽象方法。
借还记录 检查读者
图书
组合
借书窗口 确认按纽
借书处理 控制类 借书处理
图书
检查图书
预订记录 预订图书
图书无效
预订按纽
说明
“借书”用例的控制类是“借书处理控制 类”:
①发送消息给“检查读者”类,命令其检查读 者的有效性 ②发送消息给“检查图书”类 ③发送消息给“借书处理”类,进行借书处理
一般情况下,一个用例有2-3个控制类比较 合适
7.4 详细设计一个类
由构件工程师详细设计每个类的属性、方法 和关系。
7.4.1类的设计原则
追求的设计理念以不变应万变
1.
开闭原则(Open Closed Principle)简称 OCP
一个模块在扩展性方面是开放的,而对内部的 更改应该是封闭的(外部看不到)。
子系统 用例模型 概要 接口 补充需求 构 架 设 计 设计类
分析模型
构架描述 分析模型的说明
系统构架
设计模型和实施模型
第1步:构造系统的物理模型 首先用UML的配置图描述系统的物理构架 将需求分析阶段捕获的系统功能分配到这些 物理节点上。 配置图上可以显示计算节点的拓扑结构、硬 件设备配置、通信路径、各个节点上运行的 系统软件配置、应用软件配置。 一个图书馆信息管理系统的物理模型如图示
第2步 设计子系统
对于一个复杂的软件系统来说,将其分解成 若干个子系统,子系统内还可以继续划分子 系统或包,这种自顶向下、逐步细化的组织 结构非常符合人类分析问题的思路。 每个子系统与其它子系统之间应该定义接口, 在接口上说明交互信息,注意这时还不要描 述子系统的内部实现。
1)划分各个子系统的方式:按照功能划分,将 相似的功能组织在一个子系统中;按照系统 的物理布局划分,将在同一个物理区域内的 软件组织为一个子系统;按照软件层次划分 子系统,软件层次通常可划分为用户界面层、 专用软件层、通用软件层、中间层和数据层, 具体的表达方式见图。
点评:
前者要新增一中收音机的控制方式时,需要整个程序都 读一遍,整体的修改; 后者新增收音机类型不会影响其它原有的收音机类型, 收音机类型扩展极为方便。已存在的收音机类型在修改 其操作方法时也不会影响到其它类型的收音机。
面向对象设计与结构化设计的过程和方法完 全不同,要设计出高质量的软件系统,记住:
对接口进行设计 发现变化并且封装它 先考虑聚合然后考虑继承
强内聚
类内聚——设计类的原则是一个类的属性和 操作全部都是完成某个任务所必须的,其中 不包括无用的属性和操作。
例如设计一个平衡二叉树类,该类的目的就是 要解决平衡二叉树的访问,其中所有的属性和 操作都与解决这个问题相关,其他无关的属性 和操作在这里都是垃圾,应该清除。
用户界面层
图书查询 界面
借书界面