第10章 面向对象设计(简化版)

上传人:我*** 文档编号:137617401 上传时间:2020-07-10 格式:PPT 页数:75 大小:864KB
返回 下载 相关 举报
第10章 面向对象设计(简化版)_第1页
第1页 / 共75页
第10章 面向对象设计(简化版)_第2页
第2页 / 共75页
第10章 面向对象设计(简化版)_第3页
第3页 / 共75页
第10章 面向对象设计(简化版)_第4页
第4页 / 共75页
第10章 面向对象设计(简化版)_第5页
第5页 / 共75页
点击查看更多>>
资源描述

《第10章 面向对象设计(简化版)》由会员分享,可在线阅读,更多相关《第10章 面向对象设计(简化版)(75页珍藏版)》请在金锄头文库上搜索。

1、第 10 章,面 向 对 象 设 计,10.1.1 面向对象设计过程,(1) 建立系统环境模型。 下图给出了系统环境图的一般的结构。,(2) 设计系统体系结构。 (3) 对各个子系统进行设计。 (4) 对象设计及优化。,10.1.1 面向对象设计过程,模块化 面向对象方法中的模块是类、对象、接口、构件等。 在面向过程的方法中,数据及在数据上的处理是分离的;而在面向对象方法中,数据及其上的处理是封装在一起的,具有更好的独立性,也能够更好地支持复用。,10.1.2 面向对象设计准则,抽象 面向对象方法不仅支持过程抽象,而且支持数据抽象。 可以将类的抽象分为规格说明抽象及参数化抽象。 类对外开放的公

2、共接口构成了类的规格说明,即协议。这种接口规定了外部可以使用的服务,使用者无需知道这些服务的具体实现算法。通常将这类抽象称为规格说明抽象。 参数化抽象是指当描述类的规格说明时,并不具体指定所要操作的数据类型,而是将数据类型作为参数。,10.1.2 面向对象设计准则,信息隐藏 在面向对象方法中,信息隐藏通过对象的封装性实现。 对于类的用户来说,属性的表示方法和操作的实现算法都应该是隐藏的。 弱耦合 耦合是指软件结构内不同模块之间互连的紧密程度。 在面向对象方法中,对象是最基本的模块,因此,耦合主要指不同对象之间相互关联的紧密程度。 类与对象之间的耦合分为两种:交互耦合与继承耦合。,10.1.2

3、面向对象设计准则,交互耦合 如果对象之间的耦合通过消息连接来实现,则这种耦合就是交互耦合。 为使交互耦合尽可能松散,应该遵守下述准则。 减少对象发送(或接收)的消息数。 尽量降低消息连接的复杂程度。 尽量减少消息中包含的参数个数; 降低参数的复杂程度。,10.1.2 面向对象设计准则,继承耦合 继承是一般化类与特殊类之间的一种耦合形式。 从本质上看,通过继承关系结合起来的基类和派生类,构成了系统中粒度更大的模块。 一般化类与特殊类之间结合得越紧密越好。 与交互耦合相反,应该提高继承耦合程度。,10.1.2 面向对象设计准则,强内聚 内聚是指模块内各个元素彼此结合的紧密程度。 在面向对象设计中,

4、存在以下3种内聚: (1) 服务内聚:一个服务应该完成一个且仅完成一个功能。 (2) 类内聚:设计类的原则是,一个类应该只有一个用途,它的属性和服务应该是高内聚的。如果某个类有多个用途,通常应该把它分解成多个专用的类。 (3) 一般特殊内聚:设计出的一般特殊结构,应该符合多数人的概念,更准确地说,这种结构应该是对相应的领域知识的正确抽取。,10.1.2 面向对象设计准则,可重用 软件重用是提高软件开发生产率和目标系统质量的重要途径。 重用有两方面的含义: 一是尽量使用已有的类(包括开发环境提供的类库,及以往开发类似系统时创建的类); 二是如果确实需要创建新类,则在设计这些新类的协议时,应该考虑

5、将来的可重复使用性。,10.1.2 面向对象设计准则,体系结构设计描述了建立计算机系统所需的数据结构和程序构件。 一个好的体系结构设计要求软件模块的分层及编程标准的执行。 在面向对象软件中,常见的软件模块有类、接口、包和构件。 在设计阶段我们往往关注类、接口和包,在实现阶段关注构件,而在部署阶段则关注构件的部署,也就是将构件部署在哪些结点上。,10.2 体系结构模块及依赖性,在面向对象程序设计中,类和接口是程序的基本组成单元。 类的依赖性 继承依赖性 交互依赖性,10.2.1 类及其依赖性,继承依赖性 继承是一种在父类和子类之间共享属性和行为的方式。 继承会带来类和方法之间的依赖性。 扩展继承

6、:子类继承父类的属性和方法,并增加一些属性和方法,即增量式继承,是恰当的继承方式。 约束继承:子类覆盖了继承来的方法,并对一些继承来的功能进行了限制。可能会给维护带来问题。 从语言实现角度,继承分为编译时继承依赖性(静态绑定)和运行时继承依赖性(动态绑定)。,类及其依赖性,类及其依赖性, 编译时继承依赖性 右图所示的例子说明了一棵树中类之间的编 译时依赖性。在这个例子中,B继承A,但没有 覆盖A中的方法do1( )。因此,B和A之间没有 运行时继承依赖性。也就是说,由于编译时依 赖性的存在,A中do1( )方法的任何变化,都会 被B在编译时(静态地)继承。 一般来说,所有的继承都会引入编译时依

7、赖 性。依赖性是可传递的,也就是说,如果C依赖 B,B依赖A,那么C也依赖A。,a.do2();, 运行时继承依赖性 类B的do1( )方法是从父类A继承来的,因此Test与B没有运行时继承依赖性,只是一个静态依赖性,通过从Test到A的关联来表明。如果在doTest方法中调用的是do2( )方法,或者在B中覆盖了A的do1( )方法,则从Test到A和B就会存在运行时依赖性。,类及其依赖性,滥用继承的问题,类及其依赖性,交互依赖性 交互依赖性也称为方法依赖性,是通过消息连接产生的。,类及其依赖性,接口是不可直接实例化的特性集合的声明,即其对象不能直接实例化,需要通过类来实现,实现接口的类需要

8、实现接口中声明的方法。 接口和抽象类很相似,但其实有着本质的区别。在只支持单继承的语言中,一个类只能有一个直接父类,但是却可以实现多个接口。 接口的依赖性分为实现依赖性和使用依赖性。,接口及其依赖性,实现依赖性 在UML2.0中,将一个类和该类实现的接口之间的依赖性称为实现依赖性。,接口及其依赖性,使用依赖性 一个接口所需要的其他接口所提供的服务称为这个类的需求接口。需求接口详细说明一个类或接口需要的服务,从而可以为其客户提供服务。在UML2.0中,通过类(接口)和它所需接口之间的依赖关系来说明需求接口,这称为使用依赖性。 下图所示为使用依赖性的UML符号,在箭头尾部的类或接口使用在箭头头部的

9、接口。Class1使用Interface1,Interface1使用Interface2。在Java语言中,不允许接口之间的使用,只允许接口间的扩展继承。,接口及其依赖性,Class1包含方法do1( ),而do1( )调用操作op1( )。在静态代码中,并不清楚需求接口的哪个实现提供了所需的服务,可以是实现Interface1的任何一个类实例。当Class1的一个执行实例设置数据成员myInterface的值时,具体实例才能确定,从而可以引用具体类的一个具体对象。,接口及其依赖性,包(package)又称为层或子系统,是组织类的一种方式,用于划分应用程序的逻辑模型。 包可以嵌套。外层包可以直

10、接访问内嵌包中的任何类。 包可以导入其他包。 在包A中导入了包B,这意味着包A或者包A的元素可以引用包B或者包B的元素。 包的导入操作会引入包之间的依赖性以及它们的元素之间的依赖性。,包及其依赖性,包之间的依赖性来自于两个包中类之间的依赖性。 如果包A的一些成员引用了包B的某些成员(包A导入了包B的一些成员),这隐含着双重含义。 包A只能和包B一起使用。 包B的变化可能会影响包A,通常需要对包A重新进行编译和测试。,包及其依赖性,包及其依赖性,包的循环依赖 包之间的循环依赖是特别棘手的问题,好在大多数情况下可以通过重新设计避免循环依赖性。,通过在上图中增加新包可以消除包之间的循环依赖性。 方法

11、为:在第1个例子中将包B依赖的包A的元素从包A中分离出来,组成包C,使得包B不再依赖包A,而是依赖包C;,包及其依赖性,在第2个例子中,将包F所依赖的包D中的元素从包D中分离出来,组成包G。消除循环依赖性后如下图所示。,包及其依赖性,10.3 系统分解,子系统和类 在大型和复杂的软件系统情形,首先根据需求的功能模型(用例模型),将系统分解成若干个部分,每一部分又可分解为若干子系统或类,每个子系统还可以由更小的子系统或类组成。,系统结构的类图,10.3 系统分解,Coad (3) 检查每一个类及其设置; (4) 将每一类包转换成Scheme中的表; (5) 执行正向工程生成DDL文件或直接生成数

12、据库中的表。,使用Rose将对象模型转换成数据模型(详解),(1) 在Component View中建立数据库,(2) 在Logical View中的每个类包建立一个Schema,(3) 检查每一个类及其设置 包括持久性设置及对象标识的设置。,设置持久性,设置对象标识,设置的结果,(4) 将每一类包转换成Scheme中的表,(5) 执行正向工程生成DDL文件或直接生成数据库中的表,点击“next”生成 .ddl 文件。,点击“next”,自动生成数据库productDB中的表。,CREATE TABLE T_成绩 ( 学号 INT NOT NULL, 课程 VARCHAR ( 255 ) NO

13、T NULL, 成绩 INT NOT NULL, T_成绩_ID INT IDENTITY NOT NULL, T_学生_ID INT, ) CREATE TABLE T_学生 ( 学号 INT NOT NULL, 姓名 VARCHAR ( 255 ) NOT NULL, 出生日期 DATETIME NOT NULL, 专业班级 VARCHAR ( 255 ) NOT NULL, T_学生_ID INT IDENTITY NOT NULL, CONSTRAINT PK_T_学生1 PRIMARY KEY NONCLUSTERED (T_学生_ID) ),阅读顺序图,构件建模登录系统行为分析,Thats All!,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号