面向对象的设计课件

上传人:沈*** 文档编号:241846412 上传时间:2024-07-30 格式:PPT 页数:99 大小:1.50MB
返回 下载 相关 举报
面向对象的设计课件_第1页
第1页 / 共99页
面向对象的设计课件_第2页
第2页 / 共99页
面向对象的设计课件_第3页
第3页 / 共99页
点击查看更多>>
资源描述
第4章 面向对象的设计面向分析面向分析面向设计面向设计做什么?需求及领域的调查如何做?确定逻辑的解决方案114.1 4.1 面向对象设计概述面向对象设计概述4.2 4.2 软件设计的体系结构软件设计的体系结构4.3 4.3 面向对象设计的软件体系结构面向对象设计的软件体系结构4.4 4.4 对象设计对象设计4.5 4.5 数据管理的设计数据管理的设计4.6 4.6 人机交互的设计人机交互的设计4.7 4.7 任务管理的设计任务管理的设计内容内容224.1 4.1 面向对象设计概述面向对象设计概述4.1.1 4.1.1 面向对象设计内容面向对象设计内容4.1.2 4.1.2 面向对象分析与设计的制品面向对象分析与设计的制品4.1.3 4.1.3 面向对象的设计方法面向对象的设计方法33在已建立概念类图在已建立概念类图(对象分析模型对象分析模型)的基础上,进一步的基础上,进一步优化类图优化类图,确定实现的逻辑模型。确定实现的逻辑模型。面向对象的设计包括面向对象的设计包括:体系结构的设计体系结构的设计 对象的设计对象的设计 数据管理的设计数据管理的设计 人机交互的设计人机交互的设计 任务管理的设计任务管理的设计4.1.1 4.1.1 面向对象设计内容面向对象设计内容44分析阶段的制品分析阶段的制品要回答的问题要回答的问题l用例、活动图用例、活动图l对象对象(概念概念)模型模型l动态模型动态模型l功能模型功能模型u领域过程是什么领域过程是什么u领域中的领域中的概念概念和术语和术语是什么是什么u系统事件和系统事件和操作是什么操作是什么u系统操作做了什么系统操作做了什么设计阶段的制品设计阶段的制品要回答的问题要回答的问题l设计类图设计类图u设计软件实现的类图设计软件实现的类图4.1.2 4.1.2 面向对象分析与设计的制品面向对象分析与设计的制品55Dialer拨号器拨号器digitsnDigits概念概念记号记号一个一个Dialer代表了一次代表了一次拨拨号号的事件的事件,它有它有digitsdigits概念的概念的内涵内涵Dialer1Dialer 2Dialer3Dialer 4概念的概念的外延外延分析分析 概念应概念应用的一用的一组实例组实例图图4-1 4-1 分析分析的类图的类图66public class Dialerpublic class Dialer private Vector digits;private Vector digits;int nDigits;int nDigits;public void digit(int public void digit(int n);n);protected boolean protected boolean recordDigit(int n);recordDigit(int n);类名类名属性属性/成员成员变量变量操作操作/方法方法图图4-2 4-2 设计设计的类图的类图Dialer拨号器拨号器-digits:Vector-nDigits:int+digit(n:int)#recordDigit(n:int):boolean软件类软件类,不是概念的一部分不是概念的一部分设计设计 774.1.3 4.1.3 面向对象的两种设计方法面向对象的两种设计方法问题域部分问题域部分数据管理部分数据管理部分 人机交互部分人机交互部分 任务管理部分任务管理部分(1)Coad&yourdon方法方法(COA91)(2)Rumbaugh方法方法(RAM91)系统设计系统设计(SystemDesign)对象设计对象设计(ObjectDesign)884.2.2 4.2.2 为什么要提出为什么要提出“软件体系结构软件体系结构”4.2.3 4.2.3 体系结构风格体系结构风格4.2 4.2 软件设计的体系结构软件设计的体系结构4.2.1 4.2.1 什么是什么是“软件体系结构软件体系结构”99l“体系结构体系结构”一词起源于建筑学一词起源于建筑学如何使用基本的建筑模块构造一座完整的建筑?如何使用基本的建筑模块构造一座完整的建筑?l包含两个因素:包含两个因素:基本基本的建筑的建筑模块模块:砖、瓦、灰、沙、石、预制梁、:砖、瓦、灰、沙、石、预制梁、柱、屋面板柱、屋面板建筑建筑模块之间模块之间的粘接的粘接关系关系:如何把这些:如何把这些“砖、瓦、砖、瓦、灰、沙、石、预制梁、柱、屋面板灰、沙、石、预制梁、柱、屋面板”有机的组合起有机的组合起来形成整体建筑?来形成整体建筑?4.2.1 4.2.1 什么是什么是“体系结构体系结构”(Architecture)(Architecture)1010(1)(1)计算机硬件系统的计算机硬件系统的“体系结构体系结构”如何将设备组装起来形成完整的计算机硬件系统?如何将设备组装起来形成完整的计算机硬件系统?计算机体系结构的风格计算机体系结构的风格以存储程序原理为基础的冯以存储程序原理为基础的冯诺依曼结构诺依曼结构存储系统的层次结构存储系统的层次结构并行处理机结构并行处理机结构两个因素两个因素基本的硬件模块:控制器、运算器、内存储器、外存储基本的硬件模块:控制器、运算器、内存储器、外存储器、输入设备、输出设备器、输入设备、输出设备硬件模块之间的连接关系:总线硬件模块之间的连接关系:总线1111“体系结构体系结构”的共性的共性一组基本的构成要素一组基本的构成要素构件构件要素之间的连接关系要素之间的连接关系连接件连接件要素连接之后形成拓扑结构要素连接之后形成拓扑结构物理分布物理分布作用于要素或连接关系上的限制条件作用于要素或连接关系上的限制条件约束约束质量质量性能性能12(1)(1)计算机硬件系统的计算机硬件系统的“体系结构体系结构”12(2)“(2)“软件体系结构软件体系结构”(Software”(Software Architecture)Architecture)提供了对软件系统的结构、行为和属性的抽象。反映系统开发提供了对软件系统的结构、行为和属性的抽象。反映系统开发中具有重要影响的设计决策中具有重要影响的设计决策,便于各种人员的交流,据此开发便于各种人员的交流,据此开发的系统能完成系统既定的功能和性能需求。的系统能完成系统既定的功能和性能需求。从宏观层次来考虑组成系统的构件、构件之间的连接,以及从宏观层次来考虑组成系统的构件、构件之间的连接,以及由构件与构件交互形成的拓扑结构。由构件与构件交互形成的拓扑结构。这些要素应该满足一定的限制,遵循一定的设计规则。这些要素应该满足一定的限制,遵循一定的设计规则。体系结构体系结构=构件构件+连接件连接件+约束约束Architecture=Components+Connectors+ConstrainsArchitecture=Components+Connectors+Constrains1313构件构件(Component)(Component)l构件是具有某种功能的可复用的软件结构单元,表示构件是具有某种功能的可复用的软件结构单元,表示了系统中主要的计算元素和数据存储。了系统中主要的计算元素和数据存储。ComponentInterfaceServiceCl任何在系统运行中承担一定功能、发挥一定作用的软任何在系统运行中承担一定功能、发挥一定作用的软件体都可看作是构件。件体都可看作是构件。程序函数、模块程序函数、模块对象、类对象、类文件文件相关功能的集合相关功能的集合1414接口接口(Interface)(Interface)l构件作为一个封装的实体,只能通过其接口与外部环构件作为一个封装的实体,只能通过其接口与外部环境交互。如芯片的管脚。境交互。如芯片的管脚。l内部结构则被隐藏起来内部结构则被隐藏起来(Black-box)(Black-box)。l一个构件至少有一个接口。一个构件至少有一个接口。l一个构件可以提供多重接口:接不同的管脚,实现不一个构件可以提供多重接口:接不同的管脚,实现不同的功能。同的功能。l构件接口与构件实现严格分开。构件接口与构件实现严格分开。1515服务服务(Service)(Service)l构件被看作一个构件被看作一个“黑盒黑盒”(Black Box)”(Black Box),其内部具体的,其内部具体的实现机制被封装和隐藏起来。实现机制被封装和隐藏起来。l构件的功能以服务构件的功能以服务(Service)(Service)的形式体现出来,并通过的形式体现出来,并通过接口向外发布,进而产生与其它构件之间的关联。接口向外发布,进而产生与其它构件之间的关联。1616连接件连接件(Connector)(Connector)l连接件连接件(Connector)(Connector):表示构件之间的交互并实现构件:表示构件之间的交互并实现构件之间的连接,如之间的连接,如:管道管道(pipe)(pipe)过程调用过程调用(procedure call)(procedure call)事件广播事件广播(event broadcast)(event broadcast)客户机客户机-服务器服务器(client-server)(client-server)数据库连接数据库连接(SQL)(SQL)l连接件也可看作一类特殊的构件,连接件也可看作一类特殊的构件,区别区别在于:在于:一般一般构件是软件功能设计和实现的承载体构件是软件功能设计和实现的承载体;连接件是负责完成构件之间连接件是负责完成构件之间信息交换和行为联系信息交换和行为联系的专用构件。的专用构件。C1C21717连接的协议连接的协议(Protocol)(Protocol)l协议协议(Protocol)(Protocol)是连接的规约是连接的规约(Specification)(Specification)。l目的:使双方能够互相理解对方所发来的信息的语义。目的:使双方能够互相理解对方所发来的信息的语义。l连接的规约是建立在物理层之上的有意义信息形式的连接的规约是建立在物理层之上的有意义信息形式的表达规定。表达规定。对过程调用对过程调用:参数的个数和类型、参数排列次序参数的个数和类型、参数排列次序对消息传送:对消息传送:消息的格式消息的格式1818连接的种类连接的种类l从连接目的看:从连接目的看:操作操作/过程调用;过程调用;控制控制/事件事件/消息发送;消息发送;数据传输;数据传输;l除了连接机制除了连接机制/协议的实现难易之外,影响连接实现协议的实现难易之外,影响连接实现复杂性的因素之一是复杂性的因素之一是“有无连接的返回信息和返回的有无连接的返回信息和返回的时间时间”,分为:,分为:同步同步(Synchronous)(Synchronous)异步异步(Asynchronous)(Asynchronous)1919u体系结构是对复杂事物的一种抽象。良好的体系结构体系结构是对复杂事物的一种抽象。良好的体系结构是普遍适用的,它可以高效地处理多种多样的个体需是普遍适用的,它可以高效地处理多种多样的个体需求。求。u体系结构在一定的时间内保持稳定。只有在稳定的环体系结构在一定的时间内保持稳定。只有在稳定的环境下,人们才能干点事情。对需求变化,只做些皮皮境下,人们才能干点事情。对需求变化,只做些皮皮毛毛的修改毛毛的修改。4.2.2 4.2.2 为什么要提出为什么要提出“软件体系结构软件体系结构”2020图图4-3 4-3 按父子样式关系组织的构架样式分类简图按父子样式关系组织的构架样式分类简图独立组件独立组件通信进程通信进程事件系统事件系统 隐式调用隐式调用 显式调用显式调用数据流数据流以数据为中心以数据为中心 成批顺序流成批顺序流 管道和过滤器管道和过滤器数据仓库数据仓库 模板模板虚拟机虚拟机调用和返回调用和返回解释器解释器 基于规则的系统基于规则的系统 主程序主程序和子程序和子程序 面向对象面向对象分层分层4.2.3 4.2.3 体系结构风格体系结构风格2121(1)(1)主程序主程序-子程序结构子程序结构 主程序主程序子程序子程序1 1子程序子程序2 2子程序子程序3 3l是结构化程序设计的一是结构化程序设计的一种典型风格。从功能的种典型风格。从功能的观点设计系统,通过逐观点设计系统,通过逐步分解和逐步细化,得步分解和逐步细化,得到系统体系结构。到系统体系结构。构件:主程序、子程序构件:主程序、子程序连接件:调用连接件:调用-返回机制返回机制拓扑结构:层次化结构拓扑结构:层次化结构图图4-4 4-4 主程序主程序-子程序结构子程序结构l本质:将大系统分解为若干模块本质:将大系统分解为若干模块(模块化模块化),),主程序调用主程序调用这些模块实现完整的系统功能。这些模块实现完整的系统功能。2222现实世界里邮政系统现实世界里邮政系统(2)(2)层次结构层次结构通信者活动通信者活动界面界面通信者活动通信者活动界面界面邮局服务业务邮局服务业务邮局服务业务邮局服务业务邮局转运业务邮局转运业务邮局转运业务邮局转运业务运输部门的(邮件)运输业务运输部门的(邮件)运输业务 书写信件书写信件 粘贴邮票粘贴邮票 投递进信箱投递进信箱 收集信件收集信件 加盖邮戳加盖邮戳 邮件分检邮件分检 邮件打包邮件打包 转送运输转送运输 部门部门 选择运输选择运输 路径(路由)路径(路由)转送邮局转送邮局接收邮件接收邮件接收邮件接收邮件邮件拆包邮件拆包邮件投递邮件投递邮件分检邮件分检信箱取信信箱取信阅读邮件阅读邮件发信者发信者收信者收信者图图4-5 4-5 邮政系统邮政系统2323协议协议物理层物理层协议协议网络层网络层协议协议分组流分组流比特流比特流帧流帧流报文流报文流应用层应用层7 74 43 32 21 16 65 5段流段流子子网网内内部部协协议议通信子网通信子网转接节点转接节点转接节点转接节点报文流报文流报文流报文流表示层表示层会话层会话层传输层传输层链路层链路层链路层链路层物理层物理层应用层应用层表示层表示层会话层会话层传输层传输层网络层网络层网络层网络层链路层链路层物理层物理层网络层网络层网络层网络层链路层链路层链路层链路层物理层物理层物理层物理层图图4-6 4-6 网络协议层网络协议层网络的分层模型网络的分层模型2424计算机操作系统的层次结构计算机操作系统的层次结构计计算机硬件算机硬件(CPU、存、存储储器、器、I/O等等)基本基本输输入入输输出出(BIOS)操作系操作系统统内核内核(System kernel)系系统调统调用用语语言言处处理、系理、系统统工具、系工具、系统应统应用程序用程序Shell解解释释运行运行用用户户图图4-7 4-7 计算机操作系统的层次结构计算机操作系统的层次结构2525小学生小学生中学生中学生大学生大学生研究生研究生举出一个层次结构的实例举出一个层次结构的实例图图4-8 4-8 学历层次结构学历层次结构图图4-9 Java4-9 Java的的I/OI/O层次图层次图+write()+write()OutputStreamOutputStream+write()+write()FilterOutputStreamFilterOutputStream+write()+write()DataOutputStreamDataOutputStream+write()+write()BufferedOutputStreamBufferedOutputStream+write()+write()FileOutputStreamFileOutputStream2626两层两层C/SC/S三层三层C/SC/S多层多层C/SC/S客户机客户机/服务器结构(服务器结构(Client/Server,C/SClient/Server,C/S)客户客户界面界面数据库数据库服务器服务器客户客户界面界面客户客户界面界面数据库数据库服务器服务器数据库数据库服务器服务器业务逻辑业务逻辑服务器服务器业务逻辑业务逻辑服务器服务器WebWeb服务器服务器图图4-10 C/S 4-10 C/S 结构结构2727两层两层C/SC/S结构处理流程结构处理流程图图4-11 4-11 两层两层C/SC/S结构处理流程结构处理流程客户机客户机服务器服务器请求请求响应响应显示显示逻辑逻辑事务事务处理处理逻辑逻辑数据数据处理处理逻辑逻辑数据库数据库l专用性、交互性强专用性、交互性强l存取数据安全存取数据安全l网络通讯量低、速度快网络通讯量低、速度快l难以扩展至大型企业广域网或难以扩展至大型企业广域网或InternetInternetl客户端应用程序仍显肥胖客户端应用程序仍显肥胖l易造成网络瓶颈。易造成网络瓶颈。2828客户端客户端数数据据层层功功能能层层表表示示 层层三层三层C/SC/S结构结构表示层是应用的用户接口部分,它担表示层是应用的用户接口部分,它担负着用户与应用间的对话功能。负着用户与应用间的对话功能。将具体的业务处将具体的业务处理逻辑编入程序理逻辑编入程序管理对数据库数管理对数据库数据的读写据的读写 图图4-12 4-12 三层三层C/SC/S结构结构数据库数据库服务器服务器应用服应用服务器务器用户用户1 1用户用户2 2.用户用户n nInternetInternetIntranetIntranet数据库数据库服务器服务器2 2应用服务器应用服务器数据库数据库服务器服务器1 12929三层三层C/SC/S结构处理流程结构处理流程图图图图4-13 4-13 4-13 4-13 三层三层C/S C/S 结构处理流程结构处理流程功功能能层层表表示示层层数据层数据层3030图图4-14 B/S4-14 B/S体系结构体系结构表现层:表现层:l浏览器浏览器逻辑层:逻辑层:lWebWeb服务器服务器l应用服务器应用服务器数据层:数据层:l数据库服务器数据库服务器浏览器浏览器/服务器(服务器(Browser/Server,B/SBrowser/Server,B/S)体系结构)体系结构3131B/SB/S结构处理流程结构处理流程页面页面脚本表现层应用服务器层数据库访问层客户端浏览器表现层Web服务器应用层应用服务器数据层数据服务器数据库图图4-15 B/S 4-15 B/S 结构处理流程结构处理流程在在WebWeb服务器端,程序员要用脚本语言编写响应页面服务器端,程序员要用脚本语言编写响应页面,例如用例如用MicrosoftMicrosoft的的ASPASP语言查询数据库服务器,将结果保存在语言查询数据库服务器,将结果保存在WebWeb页面中,再由浏览页面中,再由浏览器器显示出来。显示出来。用户运行某个应用程序时用户运行某个应用程序时,只需在客户端浏览器中键入相应网址只需在客户端浏览器中键入相应网址(URL),(URL),调用调用WebWeb服务器上的应用程序服务器上的应用程序,对数据库进行操作对数据库进行操作,完成相应处理完成相应处理,结果结果通过浏览器显示给用户。通过浏览器显示给用户。3232B/SB/S结构的优点和缺点结构的优点和缺点nB/SB/S结构的客户端只是提供友好界面的浏览器结构的客户端只是提供友好界面的浏览器,利于推广。利于推广。nB/SB/S成为真正意义上的成为真正意义上的“瘦客户端瘦客户端”,从而具备了很高,从而具备了很高的稳定性、延展性和执行效率。的稳定性、延展性和执行效率。nB/SB/S体系结构缺乏对动态页面的支持能力,没有集成有体系结构缺乏对动态页面的支持能力,没有集成有效的数据库处理功能。效的数据库处理功能。n采用采用B/SB/S体系结构的应用系统,在数据查询等响应速度体系结构的应用系统,在数据查询等响应速度上,要远远地低于上,要远远地低于C/SC/S体系结构。体系结构。B/SB/S结构的缺点是:结构的缺点是:33B/SB/S结构的优点是:结构的优点是:33C/S+B/S C/S+B/S 混合体系结构混合体系结构为了克服为了克服C/SC/S与与B/SB/S各自的缺点,发挥各自的优点,在实际各自的缺点,发挥各自的优点,在实际应用中,通常将二者结合起来。应用中,通常将二者结合起来。企业内部用户通过局域网直接访问数据库服务器企业内部用户通过局域网直接访问数据库服务器lC/SC/S结构;结构;l交互性增强;交互性增强;l数据查询与修改的响应速度高数据查询与修改的响应速度高。企业外部用户通过企业外部用户通过InternetInternet访问访问WebWeb服务器服务器/应用应用 服务器服务器lB/SB/S结构;结构;l用户不直接访问数据,数据安全用户不直接访问数据,数据安全。3434C/S+B/S C/S+B/S 模型模型WebWeb服务器服务器数据数据库库服务器服务器企业内部企业内部企业外部企业外部内部局域网内部局域网C/SC/S结构结构B/SB/S结构结构InternetInternet查询和浏览工作站查询和浏览工作站修改和维护工作站修改和维护工作站查询和浏览查询和浏览工作站工作站修改和维护修改和维护工作站工作站InternetInternet用户用户图图4-16 C/S+B/S 4-16 C/S+B/S 结构结构35354.3 4.3 面向对象设计的软件体系结构面向对象设计的软件体系结构4.3.1 4.3.1 逻辑逻辑结结构构4.3.2 4.3.2 物理结物理结构构36364.3.1 4.3.1 逻辑结构逻辑结构l将功能合理的进行分组将功能合理的进行分组。l说明它们是如何工作的说明它们是如何工作的:哪一个类存在哪一个类存在?类之间如何联系的类之间如何联系的?如何协作来完成系统的功能如何协作来完成系统的功能?有什么约束有什么约束?3737逻辑构架逻辑构架UIActiveX组件组件Microsofte基类基类应用窗口应用窗口业务对象业务对象控制业务对象控制业务对象Facade服务接口服务接口外部业务对象外部业务对象实体业务对象实体业务对象数据库数据库SQL产生器产生器Facade对象到关系转换包对象到关系转换包图图4-17 4-17 设计的逻辑架构设计的逻辑架构3838图图4-18 4-18 客户支持系统的一个包图客户支持系统的一个包图客户支持系统客户支持系统订单输入子系统订单输入子系统库存管理子系统库存管理子系统订单订单 退货条目退货条目订单条目订单条目订单交易订单交易订单执行子系统订单执行子系统发运人发运人运输运输 客户维护子系统客户维护子系统客户客户 目录维护子系统目录维护子系统目录目录 订单订单3939l包图是维护和控制系统总体结构的重要建模工具;包图是维护和控制系统总体结构的重要建模工具;l包图方便理解和处理整个模型。包图方便理解和处理整个模型。(1 1)包图包图:将设计元素分组的通用组织结构将设计元素分组的通用组织结构包拥有的元素包拥有的元素:类、接口、组件、节点、协作、用例图以及其他包类、接口、组件、节点、协作、用例图以及其他包包的依赖关系包的依赖关系:包间的依赖关系包间的依赖关系包层依赖关系包层依赖关系访问与引入依赖关系访问与引入依赖关系4040顶层领域概念包顶层领域概念包ProductsSalesAuthorization Transactions 授权事物授权事物 领域概念领域概念核心核心/混杂混杂Payment图图4-19 4-19 顶层领域概念包顶层领域概念包4141核心包核心包图图4-20 4-20 核心包核心包核心核心/混杂混杂HousesHousesStoreStoreAddressAddressnamenamePOSTPOSTManagerManager1 11.*1.*1.*1.*EmploysEmploys1 1 SalesSalesCapturesCapturesCore Elements:Core Elements:POSTPOSTSaleSale1 11 1图图4-21 4-21 包中的一个引用类型包中的一个引用类型4242支付包(现金、信用卡、支票支付)支付包(现金、信用卡、支票支付)Payment 支付支付图图4-22 4-22 领域支付概念包领域支付概念包CashPaymentCreditPaymentCheckPaymentCreditAuthorizationServiceAuthorizationServiceCheckAuthorizationServiceAccountsReceivableDriversLicenseCreditCardCheck授权授权服务服务4343图图4-23 4-23 产品包图产品包图ProductCatalogSales:SalesLineItemItemDescribed-byProductSpecificationdescriptionpriceUPCCore:StoreDescribesStocksRecordsSale-of1*0.11*1*111.*产品产品产品包产品包4444(2)2)包的接口包的接口Database ServicesIPServerInterfaceIPServercommit()getObject()insert()rollback()包指明与客户端包指明与客户端的接口如何实现的接口如何实现图图4-24 4-24 一个包的接口一个包的接口 4545l“接口接口”(Interface)”(Interface)是是OOOO中一个很重要的概念,它支中一个很重要的概念,它支持对持对OOOO中中“封装封装”的实现:接口与实现分离;的实现:接口与实现分离;l在使用接口的同时,需要为接口定义相应的在使用接口的同时,需要为接口定义相应的“实现实现”,使用使用realizationrealization关系表示。关系表示。l在使用接口的时候,可以和普通类一样使用。在使用接口的时候,可以和普通类一样使用。继承、组合、聚合、关联、依赖继承、组合、聚合、关联、依赖包的接口包的接口4646Policy LayerMechanism LayerUtility Layer图图4-25 4-25 层次化方案层次化方案这种层次化这种层次化(政策政策-机制机制-实现实现)方案高层依赖于底层方案高层依赖于底层,这种这种依赖关系是传递的。依赖关系是传递的。接口通常用于解决不合理的依赖关系接口通常用于解决不合理的依赖关系4747Policy LayerPolicy ServiceInterfacePolicyMechanismPolicy ServiceInterfaceMechanism LayerUtilityUtilityLayer图图4-26 4-26 倒置的层次化方案倒置的层次化方案政策政策高层模块不应依赖低层模块高层模块不应依赖低层模块,都应依赖都应依赖于抽象;抽象不应依赖于细节;于抽象;抽象不应依赖于细节;增加各层模块的独立性。增加各层模块的独立性。机制机制实现实现4848Button.Java代码代码PublicclassButtonprivateLampitsLamp;publicvoidpoll()if(/*somecondition*/)itsLamp.turnOn();高层没有和低层分离;抽象没有和具体细节分离高层没有和低层分离;抽象没有和具体细节分离。p ButtonButton对象感知外部环境对象感知外部环境变化。变化。收到收到pollpoll消息,判断消息,判断是否被用户按下。是否被用户按下。ButtonButton对象控制对象控制LampLamp对象的一个模型对象的一个模型p LampLamp对象会影响外部环境。对象会影响外部环境。Button+poll()Lamp+turnOn()+turnOff()图图4-27 4-27 不成熟的不成熟的ButtonButton和和LampLamp模型模型4949找出潜在的抽象找出潜在的抽象Button+poll()ButtonServer+turnOff()+turnOn()Lamp 图图4-28 4-28 对对LampLamp应用依赖倒置原则应用依赖倒置原则 Lamp Lamp实现了实现了ButtonButton接口,接口,Lamp Lamp依赖依赖ButtonServerButtonServer,但但ButtonServerButtonServer没有依赖于没有依赖于 Button Button,是名字上的依赖,任,是名字上的依赖,任 何知道去操纵何知道去操纵ButtonServerButtonServer 接口的对象都能控制接口的对象都能控制LampLamp。接口没有所有者接口没有所有者,可以被许多不同的客户、服户者使用。可以被许多不同的客户、服户者使用。这样接口需要放一个单独的组这样接口需要放一个单独的组(group)(group)中。中。C+C+中把接口放在一单独中把接口放在一单独的的namespacenamespace和库中。在和库中。在JavaJava中把接口放在一单独的中把接口放在一单独的packagepackage中。中。5050(3)3)包的引入与访问关系包的引入与访问关系l引入(引入(importimport)允许一个包中的元允许一个包中的元素可以单向访问另一素可以单向访问另一包中的元素包中的元素l输出(输出(exportexport)包的公共部分包的公共部分l引入和访问依赖引入和访问依赖不是可传递的不是可传递的 package1package1 +D+D package2package2 +B1+B1-B2-B2 package3package3 +C1+C1#C2#C2 package4package4图图4-29 4-29 包的引入与访问关系包的引入与访问关系 +A+A5151(4)4)包图的设计包图的设计l对概念和语义上相互接近的元素所定义的组块放到对概念和语义上相互接近的元素所定义的组块放到一个包中一个包中l对每一个包找出可以在包外访问的元素,将这些元对每一个包找出可以在包外访问的元素,将这些元素标记为公有的,把其他的元素标记为受保护的或素标记为公有的,把其他的元素标记为受保护的或私有的。如果不确定时,就隐藏该元素。私有的。如果不确定时,就隐藏该元素。l确定包与包之间的依赖关系,特别是引入依赖。确定包与包之间的依赖关系,特别是引入依赖。包包之间的依赖关系展现了应用程序的高层组织结构之间的依赖关系展现了应用程序的高层组织结构,应该对这些关系进行管理。应该对这些关系进行管理。5252l前前3 3个原则个原则,包的内聚性原则包的内聚性原则:是用来指导是用来指导如何把类划如何把类划分到包中的。分到包中的。重用发布等价原则、重用发布等价原则、共同重用原则、共同重用原则、共同封闭原则。共同封闭原则。l后后3 3个原则个原则,包的耦合性原则包的耦合性原则:是用来是用来处理包之间的相处理包之间的相互关系的。互关系的。无环依赖原则、无环依赖原则、稳定依赖原则、稳定依赖原则、稳定抽象原则。稳定抽象原则。53现介绍包的现介绍包的6 6个设计原则,涉及包的创建、相互关系的管个设计原则,涉及包的创建、相互关系的管理以及包的使用。理以及包的使用。53由于重用性必须是基于包的,所以可重用的包必须包含由于重用性必须是基于包的,所以可重用的包必须包含可重用的类。可重用的类。重用的粒度就是发布的粒度重用的粒度就是发布的粒度重用发布等价原则重用发布等价原则 REP(ReuseREP(Reuse-Release Equivalence Principles)-Release Equivalence Principles)5454共同重用原则共同重用原则l一个包中的所有类应该是共同重用的。一个包中的所有类应该是共同重用的。l如果重用了包中的一个类,那么就要重用包中的所有如果重用了包中的一个类,那么就要重用包中的所有类。这个原则规定了趋向于类。这个原则规定了趋向于共同重用的类应该属于同共同重用的类应该属于同一个包。一个包。l例例:容器类容器类以及与它关联的以及与它关联的迭代器类迭代器类。这些类彼此之间紧密耦合在一起,因此必须共同重这些类彼此之间紧密耦合在一起,因此必须共同重用。所以它们应该在同一个包中。用。所以它们应该在同一个包中。CRP(Common-Reuse Principle)CRP(Common-Reuse Principle)5555共同封闭原则共同封闭原则l包中的所有类对于同一类性质的变化应该是共同封闭包中的所有类对于同一类性质的变化应该是共同封闭的。一个变化若对一个包产生影响,则将对的。一个变化若对一个包产生影响,则将对该包中的该包中的所有类产生影响所有类产生影响,而对于其他的包不造成任何影响。,而对于其他的包不造成任何影响。l这条原则规定了这条原则规定了:一个包不应该包含多个引起变化的原因一个包不应该包含多个引起变化的原因。CCP(Common-Closure Principle)CCP(Common-Closure Principle)l如果从如果从可维护性可维护性的角度的角度,一个应用中的代码必须更改,一个应用中的代码必须更改,应应把更改都集中在一个包中把更改都集中在一个包中。5656l如果两个类之间有非常紧密的如果两个类之间有非常紧密的绑定绑定关系,不管是物理关系,不管是物理上的还是概念上的,它们总是会上的还是概念上的,它们总是会一同进行变化一同进行变化,它们它们应该属于同一个包中。应该属于同一个包中。这样做会减少软件的发布、重新验证、重新发布、这样做会减少软件的发布、重新验证、重新发布、重新发行的工作量。重新发行的工作量。l值得注意的是值得注意的是包的划分可能会动态的改变包的划分可能会动态的改变,如当项目如当项目的重心从可开发性向可重用性转变时,包的组成很可的重心从可开发性向可重用性转变时,包的组成很可能会变动并随时间而演化。能会变动并随时间而演化。5757 ADP(Acyclic-Dependencies Principle)ADP(Acyclic-Dependencies Principle)无环依赖原则无环依赖原则l 在包的依赖关系图中不允许存在环。在包的依赖关系图中不允许存在环。l包是节点(包是节点(node),依赖关系是有向边),依赖关系是有向边directed edge)。)。5858MyApplicationMyTasksTaskWindowWindowsTasksMyDialogsDatabaseMessageWindow图图4-30 4-30 包结构是有向无环图包结构是有向无环图无论从哪个包开始,都无法沿着依赖关系而绕回到这个包。无论从哪个包开始,都无法沿着依赖关系而绕回到这个包。该结构中没有环。它是一个有向无环图该结构中没有环。它是一个有向无环图DAG。5959图图4-31 4-31 具有依赖环的包图具有依赖环的包图MyApplicationMyTasksMessageWindowTaskWindowWindowsTasksMyDialogsDatabase如果依赖关系图中存在环,就很难确定包构建的顺序。如果依赖关系图中存在环,就很难确定包构建的顺序。6060XMyDialogsYMyApplicationYMyApplicationMyDialogsXinterfaceXServer解除依赖环解除依赖环把包的依赖环恢复为一个把包的依赖环恢复为一个DAG。有两个主要的方法。有两个主要的方法:#使用依赖倒置原则使用依赖倒置原则 图图4-32 4-32 使用依赖倒置解除依赖环使用依赖倒置解除依赖环6161MyApplicationMyTasksMessageWindowTaskWindowWindowsTasksMyDialogsDatabaseaNewPackage图图4-33 4-33 使用新包解除依赖环使用新包解除依赖环#新创建一个新创建一个MyDialogsMyDialogs和和MyApplicationMyApplication都依赖的包都依赖的包 把把MyDialogsMyDialogs和和MyApplicationMyApplication都依赖的类移到这个新包中。都依赖的类移到这个新包中。创建新的包,致使依赖创建新的包,致使依赖关系结构增长。当需求关系结构增长。当需求改变时这个包的结构是改变时这个包的结构是不稳定的。不稳定的。6262稳定依赖原则稳定依赖原则l稳定性,如果某物稳定性,如果某物“不容易被移动不容易被移动”就认为它是稳定就认为它是稳定的的(韦伯斯特韦伯斯特)。l使软件包难以更改的因素有许多:它的规模、复杂性、使软件包难以更改的因素有许多:它的规模、复杂性、清晰程度等等。清晰程度等等。l要使一个软件包难以改变,一个肯定可行的方法是让要使一个软件包难以改变,一个肯定可行的方法是让许许多其他的软件包依赖于它。多其他的软件包依赖于它。如如,具有很多输入依赖关系的包是非常稳定的,它的包具有很多输入依赖关系的包是非常稳定的,它的包能够相容于对它所做的更改。能够相容于对它所做的更改。朝着稳定的方向进行依赖。朝着稳定的方向进行依赖。SDP(Stable-Dependencies Principle)6363X图图4-34 X:4-34 X:一个稳定的包一个稳定的包X X不依赖于任何包,不依赖于任何包,X X是无是无依赖性的。依赖性的。Y 图图4-35 Y4-35 Y:一个不稳定的包:一个不稳定的包 没有任何其他的包依赖于没有任何其他的包依赖于Y Y;Y Y是不承担责任的,称是不承担责任的,称Y Y是有依赖性的。是有依赖性的。6464p并非所有的包都应该是稳定的并非所有的包都应该是稳定的l如果一个系统中所有的如果一个系统中所有的包都是包都是最大程度稳定最大程度稳定的,的,那么该系统就是那么该系统就是不能改不能改变变的的,这不是所希望。这不是所希望。希望所设计出来的包结希望所设计出来的包结构中,构中,一些包是不稳定一些包是不稳定的的,而另外一些是稳定而另外一些是稳定的。的。InstableStableInstable图图4-36 4-36 理想的包配置理想的包配置 6565l图图4-374-37展示了违反展示了违反稳稳定依赖原则定依赖原则SDPSDP的做法。的做法。l必须要以某种方式解必须要以某种方式解 除除StableStable对对FlexibleFlexible 的依赖。的依赖。为什么会存在这个依为什么会存在这个依 赖关系呢?赖关系呢?StableFlexible图图4-37 4-37 违反了违反了SDPSDP6666StableFlexibleC图图4-38 4-38 糟糕依赖关系糟糕依赖关系假设假设FlexibleFlexible中有中有一个类一个类C C被另一个被另一个StableStable中的类中的类U U使使用(参见图用(参见图4-384-38)U6767图图4-39 4-39 使用使用DIPDIP修正稳定性违规修正稳定性违规p可以使用可以使用DIP(DependencyDIP(Dependency-Inversion Principles)-Inversion Principles)依赖倒置原则来修正这个问题。依赖倒置原则来修正这个问题。StableUUInterfaceinterfaceIUFlexibleC稳定稳定保持它必需保持它必需的不稳定性的不稳定性接口接口IU中中,声明了声明了U要使用的所有方法要使用的所有方法6868稳定抽象原则稳定抽象原则l包的抽象程度应该和其稳定程度一致。包的抽象程度应该和其稳定程度一致。SAP(Stable-Abstractions Principle)l该原则把包的稳定性和抽象性联系起来。该原则把包的稳定性和抽象性联系起来。l它规定,它规定,一个稳定的包应该也是抽象的一个稳定的包应该也是抽象的,这样它的稳,这样它的稳定性就不会使其无法扩展。定性就不会使其无法扩展。l另一方面,它规定,另一方面,它规定,一个不稳定的包应该是具体的一个不稳定的包应该是具体的,因此它的不稳定性使得其内部的具体代码易于更改。因此它的不稳定性使得其内部的具体代码易于更改。6969*重用发布等价原则重用发布等价原则 REP(Reuse-Release Equivalence Principles)REP(Reuse-Release Equivalence Principles)重用的粒度就是发布的粒度。重用的粒度就是发布的粒度。小结:小结:*共同封闭原则共同封闭原则 CCP(Common-Closure Principle)CCP(Common-Closure Principle)包中的所有类对于同一类性质的变化应该是共同封闭的。包中的所有类对于同一类性质的变化应该是共同封闭的。*无环依赖原则无环依赖原则 ADP(Acyclic-Dependencies Principle)ADP(Acyclic-Dependencies Principle)在包的依赖关系图中不允许存在环。在包的依赖关系图中不允许存在环。7070*共同重用原则共同重用原则 CRP(Common-Reuse Principle)CRP(Common-Reuse Principle)一个包中的所有类应该是共同重用的。如果重用了包一个包中的所有类应该是共同重用的。如果重用了包 中的一个类,那么就要重用包中的所有类。中的一个类,那么就要重用包中的所有类。*稳定抽象原则稳定抽象原则 SAP(Stable-Abstractions Principle)SAP(Stable-Abstractions Principle)包的抽象程度与其稳定程度一致。包的抽象程度与其稳定程度一致。*稳定依赖原则稳定依赖原则 SDP(Stable-Dependencies Principle)SDP(Stable-Dependencies Principle)朝着稳定的方向依赖。朝着稳定的方向依赖。71小结:小结:71l不能自顶向下设计包的结构。不能自顶向下设计包的结构。结论:结论:l包的依赖关系图和描绘应用程序的功能之间几乎没有包的依赖关系图和描绘应用程序的功能之间几乎没有关系。相反,它们是应用程序可构建性的映射图。这关系。相反,它们是应用程序可构建性的映射图。这就是为何不在项目开始时设计它们的原因。就是为何不在项目开始时设计它们的原因。l包结构不是设计系统时包结构不是设计系统时,首先考虑的事情。首先考虑的事情。l包结构应该是随着系统的增长、包结构应该是随着系统的增长、变化而逐步演化的。变化而逐步演化的。l随着实现和设计的深入随着实现和设计的深入,累积的类越来越多,对依赖累积的类越来越多,对依赖关系进行管理关系进行管理7272l随着应用程序的不断增长,开始关注创建可重用的元随着应用程序的不断增长,开始关注创建可重用的元素。于是,就开始使用素。于是,就开始使用CRP(CRP(共同重用原则共同重用原则)来指导包来指导包的组合。最后,当环出现时,就会使用的组合。最后,当环出现时,就会使用ADP(ADP(无环依赖无环依赖原则原则)。l包的依赖关系结构是和系统的逻辑设计一起增长和演包的依赖关系结构是和系统的逻辑设计一起增长和演化的。化的。73结论:结论:73回答问题:回答问题:1.1.列出抽象视窗工具列出抽象视窗工具(Abstract Windowing Toolkit)(Abstract Windowing Toolkit)包装包装(即即java.awt)java.awt)中的抽象类型中的抽象类型Component(Component(部件部件),),Container(Container(容器容器),),MenuComponent(MenuComponent(菜单部件菜单部件)74742.java.awt2.java.awt包主要依赖哪几个包包主要依赖哪几个包?画出包图。画出包图。java.langjava.langJavaJava语言基本包语言基本包java.iojava.iojava.awt.eventjava.awt.eventjava.awt.imagejava.awt.imageJavaJava抽象视窗工具图像包抽象视窗工具图像包java.awtjava.awt图图4-40 java.awt4-40 java.awt包的依赖包包的依赖包75753.Java3.Java包的含义包的含义?哪两种包比较重要哪两种包比较重要?l JavaJava包是命名空间。在其中可以声明类包是命名空间。在其中可以声明类,这些类的名这些类的名称不会与别的包同名的类相冲突。称不会与别的包同名的类相冲突。l JavaJava的的packagepackage关键字标识的源代码包。关键字标识的源代码包。consultantSchedulercalendarUtilitiespackage consultantScheduler;import calendarUtilities.*;public class consultantCalendarimplements Calendar 图图4-41 4-41 包的依赖包的依赖7676l包适用于对源代码进行分组,但不适用于对二进制代包适用于对源代码进行分组,但不适用于对二进制代码进行分组。码进行分组。可将二进制代码打包成可将二进制代码打包成.jar.jar文件形式的组件,然后再文件形式的组件,然后再部署到运行系统中。部署到运行系统中。CalendarRenderer图图4-42 4-42 二进制组件二进制组件.jar.jar文件文件Calendar一个组件可包含一个或一个组件可包含一个或多个完整的包多个完整的包7777描述系统软件、硬件描述系统软件、硬件注重实现注重实现描述硬件结构:节点及节点间连接描述硬件结构:节点及节点间连接4.3.2 4.3.2 物理结构物理结构7878(1 1)构件图构件图(Component diagram)(Component diagram)构件:定义了良好接口的物理实现单元构件:定义了良好接口的物理实现单元,是系统中可是系统中可 替换部分。替换部分。构件图:构件图:表示构件类型的组织以及依赖关系的图。表示构件类型的组织以及依赖关系的图。79构件和类的不同点构件和类的不同点l类是逻辑抽象;类是逻辑抽象;构件是物理抽象,即构件可以位于节点(构件是物理抽象,即构件可以位于节点(nodenode)上)上,是是类的物理实现。类的物理实现。l类可以有属性和操作;构件通常只有操作,而且这些类可以有属性和操作;构件通常只有操作,而且这些操作只能通过构件的接口才能使用。操作只能通过构件的接口才能使用。8080l一般说来,构件就是一个实际文件,可以有以下几种一般说来,构件就是一个实际文件,可以有以下几种类型类型:deployment componentdeployment component,如,如 dll dll 文件、文件、exe exe 文件、文件、COM+COM+对象、对象、CORBA CORBA 对象、对象、EJBEJB、动态、动态Web Web 页、数据页、数据库表等;库表等;work product componentwork product component,如源代码文件,数据文,如源代码文件,数据文件等,这些构件可以用来产生件等,这些构件可以用来产生deployment deployment component component;execution componentexecution component,可执行的构件。,可执行的构件。软件构件类型软件构件类型8181窗口处理子程序窗口处理子程序(wnnd.cpp)公共处理子程序公共处理子程序(comhnd.cpp)Main类类(main.cpp)窗口处理子程序窗口处理子程序(wnnd.obj)公共处理子程序公共处理子程序(comhnd.obj)Main类类(main.obj)图形库图形库(graphic.dll)客户程序客户程序(client.dll)图图4-43 4-43 源、二进制、可执行构件及关系源、二进制、可执行构件及关系v 源代码构件源代码构件v 二进制代码构件二进制代码构件v 可执行代码构件可执行代码构件8282接口是被软件或硬件所支持的一个操作集。接口是被软件或硬件所支持的一个操作集。Updatethread.java图图4-44
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!