10、面向对象设计

合集下载

第10章 面向对象分析

第10章 面向对象分析
软件工程
第10章 面向对象分析
第10章 面向对象分析
• 面向对象软件开发技术
– 面向对象分析(OOA) – 面向对象设计(OOD) – 面向对象实现(OOP)
面向对象技术是一个有全新概念 的开发模式,其特点是:
(1)方法是对软件开发过程所有阶段进 行综合考虑而得到的; (2)从生存期的一个阶段到下一个阶段 所使用的方法与技术具有高度的连 续性;
取消交易
顾客可在按下选择键前任何一个时刻,拉动退币杆取 消交易收回硬币。
自动售货系统系统
-端1 * -端2
自动售货系统::售货
*
顾客
-端2
-端1 *
自动售货系统::供货
*
供货人
-端1 * -端2
自动售货系统::取货款
*
收银员
自动售货系统系统
-端1 *
-端2
售货
*
<<extends>>
售散装饮料
顾客
• 业务中的执行者扮演什么角色?这些角色可以 看作类,如客户、操作员等。
(2)筛选对象类,确定最终对象类 我们可以用以下选择特征来确定最终的对象: 1) 保留的信息:仅当必须记住有关潜在对象的 信息,系统才能运作时,则该潜在对象在分 析阶段是有用的; 2) 需要的服务:潜在对象必须拥有一组可标识 的操作,它们可以按某种方式修改对象属性 的值; 3) 多个属性:在分析阶段,关注点应该是“较 大的”信息(仅具有单个属性的对象在设计 时可能有用,但在分析阶段,最好把它表示 为另一对象的属性);
定义服务
• 对象=属性+操作(服务) • 因为在动态模型和功能模型中更明确地描 述了每个类中应该提供哪些服务,所以在 建立了这两个模型后才能最终确定类中应 有的服务。 • 事实上,在确定类中应有的服务时,既要 考虑该类实体的常规行为,又要考虑在本 系统中特殊需要的服务。

面向对象程序设计的重点是什么的设计

面向对象程序设计的重点是什么的设计

面向对象程序设计的重点是什么的设计面向对象程序设计 (Object-Oriented Programming, OOP) 是一种软件开发方法,通过将现实世界的事物抽象为对象,并建立对象之间的关系来实现系统的设计和开发。

在进行面向对象程序设计时,有一些重要的设计原则和重点需要遵循和关注。

首先,面向对象程序设计的重点之一是封装性。

封装是将数据和方法封装在一个对象内部,以便于对外部隐藏实现细节,并提供对外的接口来访问和操作数据。

这样可以降低程序的耦合度,提高代码的可维护性和可重用性。

通过封装,类的设计者可以将复杂的操作封装成简单的方法,使得使用者只需关注方法的调用,而无需了解方法的实现细节。

另一个重点是继承性。

继承是指一个类从另一个类继承属性和方法的机制,通过继承可以减少代码的重复,提高代码的复用性。

通过继承,我们可以定义一个通用的父类,然后通过子类继承父类的属性和方法,并可以在子类中添加额外的属性和方法,以满足特定的需求。

继承使得程序设计具有层次结构,可以更好地组织和管理代码。

多态性是面向对象程序设计中的另一个重点。

多态是指同一种操作在不同的对象上可以有不同的行为。

通过多态,一个方法可以在不同的对象上具有不同的实现。

多态可以提高代码的灵活性和可扩展性。

通过定义抽象类和接口,程序可以针对接口编程,而无需关注具体的实现细节。

这样可以使得程序具有更好的扩展性,可以根据需要进行替换和改造。

还有一个重点是关注问题领域的建模,将现实世界的概念和关系转化为程序中的类和对象。

在面向对象程序设计中,类表示一组具有相同属性和行为的对象,对象是类的一个实例。

通过分析问题领域中的关系和行为,可以将问题拆解为一组相互关联的类和对象,然后通过定义和实现类和对象之间的关系来解决问题。

面向对象程序设计的思维方式强调了问题领域与程序之间的联系,使得程序更贴近实际需求。

此外,面向对象程序设计还强调代码的可维护性和可扩展性。

通过将代码组织为模块化的类和对象,可以使得程序更易于理解、修改和扩展。

面向对象设计

面向对象设计

面向对象设计面向对象设计(Object-oriented design,简称OOD)是一种软件设计方法,强调将现实世界中的事物抽象成对象并建立对象间的关系来解决问题。

面向对象设计是面向对象编程(OOP)的基础,它通过封装、继承和多态等机制,提供了一种灵活、可扩展和易于维护的软件设计方法。

面向对象设计的基本原则是封装、继承和多态。

封装将数据和操作封装在一个对象中,通过接口暴露对象的行为,隐藏内部实现细节。

继承通过派生新的类扩展或修改现有类的功能,提高代码的复用性和扩展性。

多态通过定义一组相同的接口,不同的对象可以根据自身的类型实现不同的行为,提高代码的灵活性和扩展性。

在面向对象设计中,首先要分析问题,确定问题空间中的对象及其关系。

然后,根据对象的属性和行为,设计对象的类。

类是对象的抽象,包含了对象的属性和方法。

接着,定义对象间的交互方式和协作关系,包括对象之间的消息传递和方法调用。

最后,实现类的具体代码,通过创建对象、调用对象的方法来解决问题。

面向对象设计有许多优点。

首先,它提供了一种自然的方式来描述问题空间,使得软件设计更加直观和易于理解。

其次,面向对象设计具有高内聚、低耦合的特点,可以减少软件的复杂性,提高代码的可维护性和可扩展性。

此外,面向对象设计也能够提高代码的重用性,通过继承和多态的机制,可以更好地复用已有的代码。

然而,面向对象设计也存在一些挑战。

首先,面向对象设计需要进行全局的系统分析和设计,涉及多个对象和类的交互,需要耗费大量的时间和精力。

其次,面向对象设计需要合理地划分对象和类的职责,避免出现职责不清晰和耦合度过高的情况。

最后,面向对象设计需要谨慎地选择继承和多态的使用方式,以避免出现冗余的代码和复杂的继承关系。

综上所述,面向对象设计是一种强调对象和类的关系和交互的软件设计方法,通过封装、继承和多态等机制,提供了一种灵活、可扩展和易于维护的软件设计方法。

面向对象设计能够提高代码的可维护性、可扩展性和重用性,但也需要进行全局的系统分析和设计,并且需要合理地划分职责和选择继承和多态的使用方式。

java 面向对象的常用设计模式

java 面向对象的常用设计模式

java 面向对象的常用设计模式java 面向对象的常用设计模式有:1、观察者模式观察者模式又称为发布-订阅模式,定义了对象之间一对多依赖关系,当目标对象(被观察者)的状态发生改变时,它的所有依赖者(观察者)都会收到通知。

2、抽象工厂模式抽象工厂模式主要用于创建相关对象的家族。

当一个产品族中需要被设计在一起工作时,通过抽象工厂模式,能够保证客户端始终只使用同一个产品族中的对象;并且通过隔离具体类的生成,使得客户端不需要明确指定具体生成类;所有的具体工厂都实现了抽象工厂中定义的公共接口,因此只需要改变具体工厂的实例,就可以在某种程度上改变整个软件系统的行为。

3、单例设计模式单例设计模式可以确保系统中某个类只有一个实例,该类自行实例化并向整个系统提供这个实例的公共访问点,除了该公共访问点,不能通过其他途径访问该实例。

4、策略模式将类中经常改变或者可能改变的部分提取为作为一个抽象策略接口类,然后在类中包含这个对象的实例,这样类实例在运行时就可以随意调用实现了这个接口的类的行为。

比如定义一系列的算法,把每一个算法封装起来,并且使它们可相互替换,使得算法可独立于使用它的客户而变化,这就是策略模式。

5、适配器模式适配器模式主要用于将一个类或者接口转化成客户端希望的格式,使得原本不兼容的类可以在一起工作,将目标类和适配者类解耦;同时也符合“开闭原则”,可以在不修改原代码的基础上增加新的适配器类;将具体的实现封装在适配者类中,对于客户端类来说是透明的,而且提高了适配者的复用性,但是缺点在于更换适配器的实现过程比较复杂。

6、命令模式命令模式的本质是将请求封装成对象,将发出命令与执行命令的责任分开,命令的发送者和接收者完全解耦,发送者只需知道如何发送命令,不需要关心命令是如何实现的,甚至是否执行成功都不需要理会。

命令模式的关键在于引入了抽象命令接口,发送者针对抽象命令接口编程,只有实现了抽象命令接口的具体命令才能与接收者相关联。

面向对象程序设计总结

面向对象程序设计总结

面向对象程序设计总结面向对象程序设计(Object-Oriented Programming, OOP)是一种以对象为基础,将数据和操作整合在一起的编程范式。

在面向对象程序设计中,我们通过定义类来创建对象,对象之间通过消息传递的方式进行交互。

本文将总结面向对象程序设计的重要概念和优势,并介绍如何使用面向对象编程来解决实际问题。

面向对象程序设计的基本概念面向对象程序设计的核心思想是将程序中的所有内容抽象为对象,并将对象分为类和实例。

类是一种抽象的数据类型,它定义了对象的属性和方法。

实例则是类的具体表现,拥有类定义的属性和方法。

面向对象程序设计具有以下基本概念:1.封装(Encapsulation):封装是通过将数据和操作封装在一个单独的实体中,从而将数据的访问限制在特定的范围内。

这样可以保护数据的完整性,同时也提供了对数据的统一操作接口。

2.继承(Inheritance):继承是指一个类可以派生出其他子类,并且继承了父类的属性和方法。

通过继承可以实现代码的复用,并且可以在不同的层次结构中定义不同的行为。

3.多态(Polymorphism):多态是指在不同的上下文中,对象可以表现出多种形态。

通过多态,可以实现灵活而智能的程序结构,并增强了程序的可扩展性和可维护性。

面向对象程序设计的优点面向对象程序设计具有以下优点:1.可靠性(Reliability):面向对象程序设计的封装特性可以降低代码之间的耦合度,从而提高代码的可靠性和可维护性。

封装可以隐藏内部实现细节,使得程序更加稳定和可靠。

2.可复用性(Reusability):通过继承和多态,可以实现代码的复用和模块化。

面向对象程序设计旨在提供可扩展的解决方案,这使得开发人员可以更快速地编写新的程序,减少了开发时间和成本。

3.可维护性(Maintainability):面向对象程序设计的模块化特性使得代码更易于维护。

当需要修改或扩展程序时,只需关注特定模块的实现细节,而不会影响其他模块。

面向对象程序设计思想

面向对象程序设计思想

面向对象程序设计思想面向对象程序设计(Object-Oriented Programming,简称OOP)是一种以对象为中心的编程范式,它将现实世界中的事物抽象为对象,并通过对象之间的交互来实现程序的运行。

面向对象程序设计的核心思想包括封装、继承和多态。

封装封装是面向对象程序设计中最基本的概念之一。

它指的是将数据(属性)和操作数据的方法(行为)组合在一起,形成一个对象。

封装的目的是隐藏对象的内部细节,只暴露出一个可以被外界访问的接口。

这样,对象的使用者不需要了解对象内部的实现细节,只需要通过接口与对象进行交互。

例如,在一个银行系统中,我们可以创建一个`Account`类,该类封装了账户的基本信息(如账号、余额)和对账户的操作(如存款、取款)。

用户在使用`Account`类时,只需要调用相应的方法,而不需要关心这些方法是如何实现的。

继承继承是面向对象程序设计中另一个重要的概念。

它允许一个类(子类)继承另一个类(父类)的属性和方法。

通过继承,子类可以扩展或修改父类的行为,而不需要重新编写代码。

继承支持代码的复用,使得程序设计更加简洁和高效。

例如,假设我们有一个`Animal`类,它定义了所有动物共有的属性和方法。

我们可以创建一个`Dog`类,它继承自`Animal`类。

`Dog`类将继承`Animal`类的所有属性和方法,并且可以添加一些特有的属性和方法,如`bark`。

多态多态是面向对象程序设计中的一个重要特性,它允许不同类的对象对同一消息做出响应,但具体的行为会根据对象的实际类型而有所不同。

多态性使得程序设计更加灵活和可扩展。

多态性通常通过抽象类和接口来实现。

抽象类定义了一个或多个抽象方法,而具体的子类则提供了这些抽象方法的实现。

接口则定义了一组方法规范,不同的类可以实现同一个接口,但提供不同的实现。

例如,假设我们有一个`Shape`接口,它定义了一个`draw`方法。

我们可以创建`Circle`、`Square`等类,它们都实现了`Shape`接口。

UML-面向对象的分析和设计

目录 首页 末页
面向对象分析与设计
15/180
注意,执行者与用户是不同的两个概念, 注意,执行者与用户是不同的两个概念,一个用 户可以扮演几个角色(执行者), ),一个执行者可以是 户可以扮演几个角色(执行者),一个执行者可以是 用户,也可以是其他系统(应用程序或设备)。 )。得到 用户,也可以是其他系统(应用程序或设备)。得到 的用例必须进行复审,以使需求完整。 的用例必须进行复审,以使需求完整。
构成类图的元素所表达的模型信息, 构成类图的元素所表达的模型信息, 对象层 分为三个层次: 分为三个层次: 三个层次 对象层—给出系统中所有反映问题域 对象层 给出系统中所有反映问题域 特征层 系统责任的对象。 和系统责任的对象。 特征层—给出类 对象)的内部特征, 给出类( 特征层 给出类(对象)的内部特征, 关系层 即类的属性和操作。 即类的属性和操作。 关系层—给出各类 对象) 给出各类( 关系层 给出各类(对象)之间的关 图 OOA基本模型 基本模型 包括继承、组装、一般—特殊 系,包括继承、组装、一般 特殊 、整 体—部分、属性的静态依赖关系,操作的 部分、属性的静态依赖关系, 部分 动态依赖关系。 动态依赖关系。
目录
首页
末页
面向对象分析与设计
6/180
抽象类与子类示例
Shape { abstract } draw ( ) { abstract }
Abstract class Abstract operation
Circle draw ( )
Rectangle draw ( )
目录
首页
末页
面向对象分析与设计
目录 首页 末页
面向对象分析与设计
18/180
构造对象—关系模型 4. 构造对象 关系模型

面向对象程序设计的基本概念

面向对象程序设计的基本概念面向对象程序设计是一种基于“对象”概念的编程范式,它是一种在程序中实现数据结构和操作的方法。

在面向对象程序设计中,我们通过将状态(即数据)与行为(即操作)捆绑在一起,来封装对象,并通过对象之间的交互来实现程序的功能。

面向对象程序设计的基本概念主要包括:类、对象、封装、继承和多态等。

1. 类类是面向对象程序设计中最基本的概念之一。

类是用来描述应用程序中的对象的模板。

在定义一个类时,我们可以定义它所包含的属性和方法。

属性可以理解为该类的数据成员,而方法则是对该类的行为进行定义和描述。

例如,在一个汽车的类中,它的属性可以包括车长、车宽、车高等,而方法可以包括加速、刹车、转向等。

2. 对象对象是类的一个实例。

例如,在上面提到的汽车类中,一辆具体的汽车就是这个类的一个对象。

我们通过创建类的对象来访问和操作该类中定义的属性和方法。

3. 封装封装是将数据(属性)和行为(方法)组合在一起,形成一个独立的单元。

这个单元可以在程序中作为对象进行调用。

封装的好处是提供了一个良好的抽象层次,将内部的细节隐藏起来,使得外部无法访问对象的内部实现细节,从而保证了对象本身的安全和完整性。

例如,在一个人的类中,我们可以将这个人的私人信息封装起来,使外部无法获取到这些信息。

4. 继承继承是一种面向对象编程中定义新类的重要方式。

通过继承,我们可以使一个类获取父类的属性和方法,并且可以在自己的类中进行扩展和重写。

这样,我们就可以通过复用代码来减少程序的冗余代码,提高程序的可维护性和可读性。

5. 多态多态是面向对象编程中的一个重要概念,指的是使用一个基类定义一种通用的类型,然后通过这个基类来处理具有不同特征的子类对象。

在多态中,一个父类可以有多个子类,并且每个子类可以具有不同的实现。

例如,在一组具有不同形状的图形中,我们可以使用一个基类 Shape 来定义一个通用类型,而具体的子类可以包括 Square、Circle、Triangle 等不同的形状。

面向对象程序设计的四个基本特征

面向对象程序设计的四个基本特征面向对象程序设计(Object-Oriented Programming,简称OOP)是一种常用的编程范式,它以对象作为程序的基本单元,通过封装、继承和多态来实现代码的重用、可扩展和易维护。

面向对象程序设计具有以下四个基本特征:封装、继承、多态和抽象。

一、封装封装是面向对象程序设计的基本特征之一,它将数据和方法组合在一个对象中,并对外部用户隐藏对象的内部实现细节。

封装通过定义类的成员访问权限来实现信息的隐藏和保护。

对外部用户而言,只需要了解对象的公共接口,而无需关心对象的内部实现。

封装提供了良好的模块化和信息隐藏机制,有助于提高代码的可维护性和可重用性。

二、继承继承是面向对象程序设计的另一个基本特征,它允许一个类从另一个类派生出来,并继承父类的属性和方法。

通过继承,子类可以重用父类的代码,并在此基础上进行扩展或修改。

继承提供了一种层次化的组织结构,有助于代码的重用和扩展。

同时,继承也体现了面向对象程序设计中的"is-a"关系,即子类是父类的一种特殊情况。

三、多态多态是面向对象程序设计的第三个基本特征,它允许不同的对象对相同的消息作出不同的响应。

多态通过方法的重写(覆盖)和方法的重载(重载)来实现。

方法的重写是指子类覆盖父类的方法,以实现自己的特定行为;方法的重载是指在同一个类中定义多个具有相同名字但参数列表不同的方法,以根据不同的参数类型选择合适的方法。

多态提供了一种灵活的方式来处理不同类型的对象,提高了代码的可扩展性和可维护性。

四、抽象抽象是面向对象程序设计的第四个基本特征,它通过接口和抽象类来定义对象的行为和属性,而无需关注具体的实现细节。

抽象类是一种无法实例化的类,它定义了一组抽象方法,子类必须实现这些抽象方法才能被实例化。

接口是一种纯粹的抽象类型,它只包含方法的声明而不包含具体的实现。

抽象类和接口提供了一种规范和约束,有助于代码的模块化和扩展。

Chapter10 -2 面向对象设计May 27-2015


⒉ 实体类
实体类来源于领域模型中的类。其反映的信息需要在系统中进行处理,并常常需要 有持久化存储的需要
<<boundary>> :借书用户界面 :图书管理员 验证 <<entity>> :读者
⒊ 控制类
控制类代表协调、排序、事务处理以及对其它对象的控制,常用于封装与某个具体 用例有关的控制流。它们还可用来表示复杂的派生与演算。系统的动态特性通过控 制类来建模
五、设计关系
⒈ 泛化设计
泛化在OOP中用继承来实现,继承机制实现了子类拥有父类特性的这一过程。 泛化设计的另一目的在于实现多态性,简言之,多态性就是对同一种行为不 同的类型的对象具有不同的实现
Disc
Overdue
FineRule
10.4.2 设计属性
• 属性类型和初值:应该在设计模型中表现出来
– 类型和属性名之间用冒号隔开,等号之后写初值
• 属性的可见性:类中的每个属性的可见性定义 指定该属性可以被其它类利用的程度,UML定 义了四种属性可见性:
– 公有(public, +)。公有属性可以在任何类中访问到 – 私有(private, -)。私有属性只能在该属性所在类中 使用 – 受保护(protected, #)。受保护属性可以在该属性所 在类及其子孙类中使用 – 包(package, ~)。具有包可见性的属性可以由所属类 的同一个包中的其它类使用
Overdue
- overDays: Integer - chargeFine: double
FineRule
- overdueFine: Single - destroyFine: Single - loseFine: Single
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

持久存储
© 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
6
10.2.1 用户界面层

用户界面层指与用户进行交互的部分,包含应用 程序中用户界面部分的代码。 系统与用户的用户界面可以以多种形式出现:


图形用户界面GUI 命令行界面

其他交互界面(语音等)

尽量将用户界面层与系统的业务逻辑分离离,专 门处理系统与用户ห้องสมุดไป่ตู้交互。
继承复用只能在一个具有相似语义类层次的上下文环 境中使用。

© 2008 BUPT TSEG
北京邮电大学 通信软件工程中心
25
10.3.7迪米特法则(Law of Demeter, LoD)

软件实体(类、模块、函数等)应该是可以扩展、 但是不可修改的。

当需求改变时,可以对模块进行扩展,以满足需求的 变化。 对模块行为进行扩展时,不必改动客户端模块的源代 码或者二进制代码。


符合OCP原则的程序只通过增加代码来变化,而 不是通过更改现有代码来变化。

实现OCP的关键是使用抽象来识别不同类之间的 共性和变化点,利用封装技术对变化点进行封装 。
GUI Computation alGeometry Application GeometryR ectangle +getArea()
© 2008 BUPT TSEG
GraphicalAp plication
Rectangle +draw()
GUI
15
北京邮电大学 通信软件工程中心
10.3.2开闭原则OCP(Open Closed Principle)
© 2008 BUPT TSEG 北京邮电大学 通信软件工程中心

3
面向对象的设计过程
分析模型
用例描述及用例文本 领域概念模型 系统顺序图
设计过程
设计软件体系结构 设计用例实现方案 设计用户界面
设计模型
软件体系结构图 交互图 类图 其他(状态图、活 动图等)
系统操作契约
© 2008 BUPT TSEG




缺点:


© 2008 BUPT TSEG
北京邮电大学 通信软件工程中心
24
继承的优缺点

优点:

子类容易实现。 子类容易扩展。

缺点:


继承复用破坏了封装性。
如果父类发生改变,那么子类的实现也不得不发生改 变。

从父类继承而来的实现是静态的,不可能在运行时刻 发生改变,没有足够的灵活性。
北京邮电大学 通信软件工程中心
13
10.3.1单一职责原则SRP (Single Responsibility Principle)

就一个类而言,应该仅有一个引起它变化的原因 。 职责定义为“变化的原因”。如果你能够想到多 于一个的原因去改变一个类,那么这个类就具有 多于一个的职责。 类承担了多个职责,等于这些职责都耦合在了一 起。一个职责的变化可能会影响这个类完成其他 职责的能力。

持久类

用户界面类实现了系统的主要 用户界面元素。 业务/领域类实现与业务领域相 关的概念,源于领域模型 。 控制器/处理类作为完成用例 任务的责任承担者,用于协调 、控制其他类共同完成用例规 定的功能或行为。 持久类把永久存储、检索、更 新和删除对象的能力封装起来 ,使底层的存储技术不暴露出 来。 系统类为应用提供操作系统相 关的功能,通过把特定于操作 系统的特性包装起来,使软件 与操作系统分离,增加应用的 可移植性。
北京邮电大学 通信软件工程中心
4
10.2 模型的层次化

10.2.1 用户界面层


10.2.2 控制器/处理层
10.2.3 业务/领域层


10.2.4 持久化层
10.2.5 系统层
© 2008 BUPT TSEG
北京邮电大学 通信软件工程中心
5
层次化模型
用户界面类

控制器/处理类

系统类 业务/领域类

用户与系统的交互方式发生变化,系统的基本业 务逻辑不需改变;系统业务逻辑变化,在交互内 容不变的情况下,用户界面不需要进行改变。
© 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
7
10.2.2 控制器/处理层

当用户通过用户界面使用系统时,用户界 面类会产生系统事件传递给控制器类,后 者负责该系统事件的处理。 在系统事件的处理过程中,控制器类可能 会调用领域类、系统类甚至其他的控制器 类。
• 一种是继承; • 一种是组合/聚合。
CARP原则告诉我们:实现复用时应首先使用组合/聚合,其次 才考虑继承。
© 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
23
组合/聚合的优缺点

优点:

新对象访问已有对象的唯一方法是通过已有对象的接口,因此,新 对象无法知道已有对象内部实现细节,从而支持了对象封装性。 由于新对象将大部分职责委托给已有对象完成,因此,新对象可以 将焦点集中在一个任务上,从而遵循SRP原则。 组合/聚合复用可以在运行时刻动态进行,新对象可以动态引用与 已有对象接口相同的对象。 作为复用手段可以应用到几乎任何环境中。 当新对象已经形成后,需要将另外的已有对象扩充到该新对象中比 较困难,只能重新采用组合/聚合方法生成另外的新对象实现扩充 。 采用组合/聚合方法实现复用时会产生大量的新对象,给对象管理 带来困难。
软件工程模型与方法 Models & Methods of Software Engineering
第十章 面向对象设计 修佳鹏 xiujiapeng@
© 2008 BUPT TSEG
本章内容

10.1 面向对象设计综述


10.2 模型的层次化
10.3 面向对象设计原则

10.4 设计用例实现方案

持久层将对数据库的操作类封装起来,提供专门数据管理 功能,向业务/领域对象提供持久化服务,从而使数据库变 化对业务领域的影响的范围局部化。 无论持久存储策略如何变化,业务/领域类都不会受影响, 从而增加了应用程序的可维护性、可扩展性和可移植性。

© 2008 BUPT TSEG
北京邮电大学 通信软件工程中心
© 2008 BUPT TSEG
北京邮电大学 通信软件工程中心
2
10.1 面向对象设计综述

面向对象的设计就是在OOA模型基础上运 用面向对象方法进行系统设计,目标是产 生一个符合具体实现条件的面向对象设计 (OOD)模型。与实现条件有关的因素有 :图形用户界面、硬件、操作系统、网络 、数据库管理系统、编程语言和可复用的 类库等。 OOD的成果是以UML包图等表示的软件体 系结构、以交互图和类图表示的用例实现 、针对复杂对象的状态图和用以描述流程 化处理过程的活动图等。
应用程序中所编写的大多数具体类都是不 稳定的。通过把它们隐藏在抽象接口的后 面,可以隔离它们的不稳定性。
© 2008 BUPT TSEG 北京邮电大学 通信软件工程中心

19
DIP举例
Policy
Mechanism
Utility
每个较高层次都为它所需要的服 务声明一个抽象接口,较低的层 次实现了这些抽象接口,每个高 层类都通过该抽象接口使用下一 层的服务,这样高层就不依赖于 低层。低层反而依赖于在高层中 声明的抽象服务接口。

© 2008 BUPT TSEG
北京邮电大学 通信软件工程中心
18
10.3.4依赖倒置原则DIP (Dependency Inversion Principle)

a.高层模块不应该依赖于低层模决。二者 都应该依赖于抽象。 b.抽象不应该依赖于细节。细节应该依赖 于抽象。


DIP揭示启发式规则是:依赖于抽象,而不 是具体的类。也就是说,程序中所有的依 赖关系应该终止于抽象类或者接口。



因此,在构造对象时,应该将对象的不同职责分 离至两个或多个类中,确保引起该类变化的原因 只有一个,从而提高类的内聚度。
© 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
14
SRP举例
Computation alGeometry Application Rectangle +draw() +getArea() GraphicalAp plication
© 2008 BUPT TSEG 北京邮电大学 通信软件工程中心


9
10.2.4 持久化层

对象持久化:将对象状态永久保存到物理 存储介质中。 持久化层提供了存储、检索、更新和删除 对象的基础结构。 持久层封装对永久存储介质的访问,但其 本身并不是永久存储机制。例如,持久层 可能封装了对关系数据库的访问,但本身 不是数据库,而是完成持久化功能的类的 集合。
© 2008 BUPT TSEG 北京邮电大学 通信软件工程中心


10
为何引入持久化类

引入持久层的目的在于当数据存储机制或策略发生变化的 时候,能减少维护工作。 目前大部分系统都是采用数据库作为存储介质。但数据库 肯定会改变,包括:


数据库升级
从一种数据库移动到另一种数据库
数据模式变化,如增加字段、修改字段名称、改变字段类型等
© 2008 BUPT TSEG 北京邮电大学 通信软件工程中心
12
10.3 面向对象设计原则

10.3.1单一职责原则SRP (Single Responsibility Principle)
相关文档
最新文档