软件工程2-11.构件级设计

上传人:宝路 文档编号:47864810 上传时间:2018-07-05 格式:PPT 页数:78 大小:2.58MB
返回 下载 相关 举报
软件工程2-11.构件级设计_第1页
第1页 / 共78页
软件工程2-11.构件级设计_第2页
第2页 / 共78页
软件工程2-11.构件级设计_第3页
第3页 / 共78页
软件工程2-11.构件级设计_第4页
第4页 / 共78页
软件工程2-11.构件级设计_第5页
第5页 / 共78页
点击查看更多>>
资源描述

《软件工程2-11.构件级设计》由会员分享,可在线阅读,更多相关《软件工程2-11.构件级设计(78页珍藏版)》请在金锄头文库上搜索。

1、软件工程第二部分 软件工程实践 第11章 构件级设计Chapter 11 Component-Level Designn在体系结构设计阶段可以定义一套完整 的软件构件。这个阶段的软件构件抽象 层次比较高,没有接近代码抽象级。 n构件级设计定义了数据结构、算法、接 口特征和分配给每个软件构件的通信机 制。构件级设计n 构件是计算机软件中的一个模块化的构造块。 n OMG UML规范对构件的定义:系统中模块化 的、可配置的和可替换的部件,该部件封装了 实现并暴露了一组接口。 nOMG Unified Modeling Language Specification OMG01 defines a c

2、omponent as p“ a modular, deployable, and replaceable part of a system that encapsulates implementation and exposes a set of interfaces.”11.1 什么是构件n 在面向对象软件工程环境中,构件包括一组协 作的类(有时,一个构件只包含一个单独的类)。 nOO view: a component contains a set of collaborating classes。11.1.1 面向对象的观点11.1.1 面向对象的观点 构建分析 模型体系结构 设计构件

3、级设 计可能与 PricingTable 构件协作可能与 JobQueue构 件协作n 与面向对象的构件相似,传统的软件构件也来 自分析模型。不同的是,传统的软件构件是以 分析模型中的数据流要素作为导出构件的基础 。11.1.2 传统的观点11.1.2 传统的观点相当于 PrintJob类定 义的操作相当于 PrintJob类定 义的操作相当于 PrintJob类定 义的操作相当于 PrintJob类定 义的操作相当于 PrintJob类定 义的操作相当于 PrintJob类定 义的操作n 前面有两种构件级设计的观点:面向对象观点 、传统观点。都假定从头开始设计构件。 n 另一种方法:使用已有

4、构件来构造系统。11.1.3 其他相关观点11.1.3 其他相关观点n 一、相关背景的比较 p COM/DCOM/COM+:为了适应更加复杂应用的需要,Microsoft 公司推出了构件对象模型COM,COM支持同一台计算机上不同进 程间对象的调用;由于分布式处理系统的广泛应用和与CORBA竞 争的需要,Microsoft公司于1997年推出了COM的分布式版本,即 DCOM,支持对象间通过网络(包括局域网、广域网、因特网) 进行通信。 p CORBA:CORBA(Common Object Request Broker Architecture公 共对象请求代理体系结构)是由OMG工业集团定

5、义的分布对象计 算模型和系统结构。OMG与1990年提出了一个对象管理结构( OMA),这是CORBA的最原始的构想及基础。在OMA的基础上 ,1991年一些大公司联合提出了CORBA1.1版。目前有不少公司从 事CORBA的实现工作,并推出了基于CORBA的产品。CORBA仅 是一个分布对象规范,没有限定使用何种程序设计语言,其目的 是不使CORBA束缚在某种特定程序设计语言上。用不同语言书写 的对象,只要符合CORBA规范,就可以相互调用。但由于 CORBA规范仅是一个书面的说明,各公司对其理解未必一致,规 范中也有不少部分没有做统一规定,由厂家自行决定,因此各厂 家基于CORBA的产品未

6、必相互兼容。 p Java Beans:Java Beans是于1996年提出的基于Java语言的分布对 象模型,其构件叫Bean。Bean就是以Java语言中的类和对象为基 础定义的。当初,Java Beans主要为一些软件构造工具提供一些可 视化构件。后经不断扩充,发展成为一种通用分布对象模型。11.1.3 其他相关观点n 二、基本概念的比较 p COM/DCOM:COM/DCOM对象模型设计的指导思想是健壮、高效和切实 可行。COM对象具有多个接口,通过每个接口可以访问一组成员函数。成 员函数相当于方法。每个对象拥有自己的数据,表示对象的状态。数据只 能通过接口访问,用户和应用程序不能越

7、过接口访问数据。每个接口仅包 含其所属成员变量函数的调用说明及引用它的指针。成员函数的实现不是 对象的一部分,一般可以有两种方法实现:一是用动态链接库DLL实现, 二是作为一个可执行模块EXE实现。不管哪一种实现,成员函数都可以动 态调用,直接执行,不需要编译连接。甚至调用者所用的程序设计语言与 实现成员函数所用的程序设计语言也可以是不同的。用DLL实现时,在调 用成员函数前必须将DLL加载到本地进程的地址空间,不能跨进程空间进 行访问。而EXE模块不受这个限制,可以跨进程访问。 p 在COM对象的多个接口中,有一个接口是每个对象必备的该接口被命名为 Iunknown,接口名前面加字母I,以便

8、识别。 p COM/DDCOM也有类的概念,类也看成是一种对象,称为类对象。由于 COM/DCOM不支持继承的概念,一个对象的所有接口及其成员函数都已 在对象中定义,在引用对象时不必到其所属的类或其祖先类中查询有关的 内容。只有在创建一个对象(即类的一个实例)时,才用到类中的内容。 在COM中,除了类以外,还有类型(type)的概念。类型比类更抽象,它 与实现无关。而类中可含有一些与实现有关的属性,诸如支持它的软件名 称、所用的图表等。例如一个复合文件可以定义成一个类型,但这种类型 可用不动的字处理软件、电子表格软件、多媒体软件来实现,形成不同的 类,可用不同的图表表示。用户可以根据运行环境在

9、同一类型中选择合适 的类。11.1.3 其他相关观点n 二、基本概念的比较 p CORBA p CORBA的对象模型基本上按OMG所定义的公共对象模型COM(不同于微 软的COM),支持类、封装、继承和多态,是一个功能比较完备的对象模 型。对象或类之间可按客户/服务器方式互相调用。每个对象或类即可以作 为客户,也可以作为服务器,有时还可以兼作客户和服务器。 p 客户对象和服务器对象只通过消息交互作用。客户对象向服务器对象发出 请求,服务器对象响应客户对象的请求完成一定的操作,并返回操作结果 和必要的信息。它们只通过消息往来,不必了解与请求无关的功能。即使 客户对象或服务对象重新实现,只要接口的

10、语法和语义不变,不影响用户 的使用。 p 客户和服务器的通信方式一般有两种:常用的是同步方式,即客户提交请 求后,客户要等到服务器放操作执行完毕并返回操作结果或信息后,才继 续运行;另一种方式是异步方式,即客户提交请求后,可继续运行。11.1.3 其他相关观点n 二、基本概念的比较 p Java Beansp 与其它分布对象模型一样,Java Beans是以对象作为基本构件。类是对象 的模板,而对象(即Bean)是有类生成的一个实例。类中可有多种构造对 象的函数。如果生成对象时,不指明具体的构造函数,仅指明类名,则用 下面的接口调用:new ()。这就表示用类中的缺省构造函数 Construc

11、tor()生成对象。在Java Beans中,一组对象相互联系,相互作用, 有公共的接口,服务于某一应用目的,则这组对象组成一个容器。以上的 概念和方法与CORBA、DCOM相类似。11.1.3 其他相关观点n构件级设计基于分析模型、体系结构模 型。面向对象方法中构件级设计主要关 注分析类的细化(特定的问题域类)和 基础类的定义和精化。11.2 设计基于类的构件n四个基本设计原则: p开关原则 pLiskov替换原则p依赖倒置原则 p接口分离原则11.2.1 基本设计原则n 开关原则 p模块应该对外延具有开放性,对修改具有封闭性。 pThe Open-Closed Principle (OCP

12、). “A module component should be open for extension but closed for modification.p包含以下两层意思: 1. 所谓的open就是类,模块,乃至函数对以后扩展 而言是开放的,也就是说类,模块,函数要能方便 以后的功能扩展。 2. 所谓的close就是类,模块,乃至函数对以后的修 改而言是关闭的,也就是说类,模块,函数因需求 变更带来的修改应该是最小的。(当然也有特殊的情况,较 大的需求变更带来的修改也可能是很大的。)11.2.1 基本设计原则/ 违背开关原则的一个例子 class GraphicEditor publi

13、c void drawShape(Shape s) if (s.m_type=1)drawRectangle(s);else if (s.m_type=2)drawCircle(s);public void drawCircle(Circle r) .public void drawRectangle(Rectangle r) . class Shape int m_type; class Rectangle extends Shape Rectangle() super.m_type=1; class Circle extends Shape Circle() super.m_type=2;

14、 在这个例子中,如果现在需求变更了,需要支持其他图形的绘制,如果让你在原有的基础 上增加代码你会怎么做?毋庸置疑,你需要在drawShape中增加if分支来增加对新的图形的 绘制。但如果我们将原来的设计变更如下:/ 符合开关原则的一个好例子 class GraphicEditor public void drawShape(Shape s) s.draw(); class Shape abstract void draw(); class Rectangle extends Shape public void draw() / draw the rectangle class Circle e

15、xtends Shape public void draw() / draw the Circle看看是不是简洁了很多,再来看看原来的drawShape函数,这里它只是调用了s的draw函数 ,原来的 drawCirlcle,drawRectangle也没了。现在如果再增加新的图形就容易多了,我只 要从Shape继承一个新的类,定义好其draw方法, GraphicEditor不用修改,编译的时候也 只用编译新增的图形CPP文件,可使用新增图形类的文件,这里还减少了编译依赖。其实 这里还可以看出另外一个原则就是依赖倒置原则,这里GraphicEditor只依赖于Shape接口, 并不依赖具体的

16、实现类,像Circle,Rectangle等等。n 如何使用开闭原则: p抽象约束 第一,通过接口或者抽象类约束扩展,对扩展 进行边界限定,不允许出现在接口或抽象类中 不存在的public方法; 第二,参数类型、引用对象尽量使用接口或者 抽象类,而不是实现类; 第三,抽象层尽量保持稳定,一旦确定即不允 许修改。 p元数据(metadata)控制模块行为 元数据就是用来描述环境和数据的数据,通俗 地说就是配置参数,参数可以从文件中获得, 也可以从数据库中获得。 Spring容器就是一个典型的元数据控制模块行为 的例子,其中达到极致的就是控制反转( Inversion of Control)11.2.1 基本设计原则n Liskov替换原则 p子类可以替换基类。将子类传递给构件来代替基类 时,使用基类的构件应该仍然能够正确完成其功能 。 pThe Liskov Substitution Principle (LSP). “Subclasses shou

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

当前位置:首页 > 中学教育 > 教学课件

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