第三部分_面向对象分析与设计(9-11)讲述.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
对象标识符 记录和对象的相互映射都通过对象标识符(OID)来实现。 OID的值通常由字母和数字组成,每个对象具有惟一的OID。 有各种方法可以生成惟一的OID,包括对于一个数据库的惟一OID乃至全局性的惟一OID。这些方法包括: 数据库序列生成器 High-Low键生成策略等。 在对象领域,OID由封装实际值及其表示的OID接口或类来表示; 在关系数据库中,OID通常被存储为固定长度的字符串值。每个表都有一个OID作为主键,每个对象也(直接或间接的有一个OID)。 持久性框架的设计 持久性框架是一组通用的、可复用的、可扩展的类型,它提供支持持久性对象的功能,即提供持久性服务。 在持久化设计中,可以通过外观来访问持久化服务。 根据指定的OID提取对象的操作,当然子系统还必须知道具体化对象的类型,所以在这里要提供具体化后类的类型。 例如,在POS机系统中使用外观访问持久服务。 持久化设计两种具体化和虚化对象的方式: 直接映射:持久性对象类本身定义了自己存储到数据库中的代码。但是这种方式使类的耦合性增加了,同时对象类的内聚性也降低。 间接映射:使用了数据库代理模式,即创建一个类来负责对象的具体化和虚化。 使用模板设计持久性框架 使用模板设计持久性框架的思想是,在超类中定义一种方法,这种方法叫模板方法。 超类中定义了算法的框架,其中既有固定的部分也有可变的部分。 通过模板方法调用其他一些方法,这些方法中有些可能会被子类覆盖。 子类覆盖这些变化的方法,增加自己特有的行为。 11.7 部署设计与构件图 部署图表示的是如何将具体软件制品(例如可执行文件)分配到计算节点(具有处理服务的某种事物)上。 部署图表示了软件元素在物理架构上的部署,以及物理元素之间的通信。 部署图有助于沟通物理或者部署架构。部署图中最基本的元素是节点,有两种类型的节点: 设备节点:具有处理和存储能力,可执行软件的物理计算资源,例如典型的计算机或者移动电话。 执行环境节点:在外部节点中运行的软件计算资源,其自身可以容纳和执行其他可执行软件元素。 构件图 构件是系统中用来描述客观事物的一个实体,它是构成系统的、支持即插即用的基本组成单位,一个构件由一个或多个对象经过包装构成,通过接口独立地时外提供服务。 一个构件由四部分组成: 构件 名是构件的唯一标识,采用118位全局唯一标识符GUID来表示。 属性是用来描述构件静态特征的一个数据项。 服务是用来描述构件动态特征的一个操作序列。 接口是用来描述构件对外界提供服务的图形界面。 UML构件是设计级别的视图,并不存在于具体软件视图,但是可以映射为具体的软件制品。 实例分析:POS机系统 两级客户端缓存 在内存中的ProductCatalog对象保存着从产品信息服务中读取的一些ProductDescription对象的内存集合,例如Java的HashMap。依据本地可用内存的大小,可以调整该集合的大小。 本地产品服务可以维护一个较大的持久化缓存,例如基于硬盘文件存储,用于维护一定数量的产品信息。该持久化缓存对于容错很重要,即使POS机应用程序崩溃,内存中的ProductCatalog对象丢失,但持久化缓存依然有效。 异常处理 由于产品价格经常变动,缓存价格信息会导致数据失效。 解决的方案是增加远程服务操作,来查询当日更新的数据。 LocalProducts对象定期地查询并更新它的缓存。如果这样做,将LocalProducts对象设计为拥有控制线程的主动对象。 线程休眠一段时间,唤醒后读取数据,再次休眠,如此反复。 异常处理 采用对象缓存文件的方案可以提高系统效率,但是本地缓存没有产品信息时访问外部产品服务失败时,系统如何处理? 通知故障的最直接的方法是抛出一个异常。当访问外部产品数据库失败时,持久化子系统可能抛出异常。 常用的异常处理模式称为“转换异常”模式。转换异常模式的原则是:在一个子系统中,避免直接抛出来自较低层子系统或服务的异常。应该将较低层的异常转换成在本层子系统中有意义的异常。较高层的异常包裹较低层的异常并添加一些信息,使得该异常在较高层的子系统语境中有意义。 支付实现 结束销售后就是获取总额的操作。由控制器发出getTotal()操作并要求返回总额tot。 总额计算得出后就可以进行makePayment()操作。 最后是计算找零的系统操作,将Sale对象与Payment对象相结合。 容错处理 系统的使用过程是首先尝试本地服务,如果没有命中,然后进行尝试外部服务。但这种方案并不是对所有服务都适用,例如账务服务过程中的记录销售,希望快速实时地追踪商店和终端的活动。 代理(Proxy)模式是解决这个问题较好的方案。代理模式的变体称为远程代理(Remote Proxy)模式。 代理模式的另一种变体称为重定向代理(R

文档评论(0)

6952225 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档