版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第八章面向对象设计内容提纲软件体系结构–基本概念与设计文档体系结构风格–仓库体系结构–模型/视图/控制器结构–控制结构–客户机/服务器结构–分层体系结构设计模式–抽象工厂(AbstractFactory)模式–状态(State)模式–外观(Façade)模式–观察者(Observer)模式软件体系结构软件体系结构包括一组软件部件、软件部件的外部的可见特性及其相互关系,其中软件外部的可见特性是指软件部件提供的服务、性能、特性、错误处理、共享资源使用等。–系统的总体组织结构和全局控制结构–通信、同步和数据访问的协议–设计元素的组成与功能分配–非功能需求–系统的物理部署–备选设计方案的选择软件体系结构
包依赖性
•依赖性–PackageA的一些成员引用PackageB的某些成员–PackageB的变化可能会影响到PackageA循环依赖的消除
循环依赖的消除
体系结构风格•软件体系结构风格是描述某一特定应用领域中系统组织方式的惯用模式,它反映了领域中众多系统所共有的结构和语义特性,并指导如何将各个模块和子系统有效地组织成一个完整系统。•典型的软件体系结构风格–仓库或知识库结构–模型/视图/控制器体系结构–控制结构–客户机/服务器结构–分层体系结构仓库结构•仓库或知识库结构(Repositoryarchitecture)仓库结构
仓库结构是一种以数据为中心的体系结构,它包含一个中心数据库和一组相互独立的处理中心数据的子系统,主要适合于数据由一个子系统产生而由其他子系统使用的情形。•优点:在共享数据模型稳定的情况下,扩展新的子系统十分容易•缺点:子系统与共享数据之间的耦合度很高,共享数据将对系统的性能和子系统的修改产生瓶颈。•应用:现代编译器、管理信息系统、CAD系统和CASE工具集等。仓库结构仓库结构
模型/视图/控制器结构(Model/View/ControllerArchitecture)–该结构是为同样的数据提供多个视图的应用程序而设计的,它将交互系统的组成分解成模型、视图、控制器三种部件。•视图是应用程序中用户界面相关的部分,即用户看到并与之交互的界面。•控制器工作就是根据用户的输入,控制用户界面数据显示和更新模型对象的状态。•模型是应用程序的主体部分,表示业务数据或者业务逻辑。–该结构适合于交互式系统,特别是同一个模型需要多个视图的情况。模型/视图/控制器结构
模型/视图/控制器结构控制结构•该结构关心的是子系统之间的控制流–集中式控制
•一个子系统专门负责控制,控制其他子系统的启动和停止。它也可能将控制交给一个子系统,但在控制完成后控制权仍然要归还给它。
–基于事件的控制
•控制信息不是集中于一个子系统中,而是每个子系统都能接收来自外部的事件并对此作出响应。这些事件可能来自其他子系统或来自系统的环境。控制结构控制结构客户机/服务器结构•客户机/服务器结构(Client/ServerArchitecture)
–在客户机/服务器体系结构中,作为服务器的子系统为其他客户机的子系统提供服务,作为客户机的子系统负责与用户的交互。•瘦客户机模型
–所有的应用处理和数据管理都是在服务器上执行,客户机只是负责数据表示部分。–由于繁重的处理负荷全部集中在服务器和网络上,有可能造成性能上的问题。客户机/服务器结构•胖客户机模型–服务器只负责对数据的管理,客户机上的软件实现应用逻辑与用户的交互。–系统管理更加复杂,因为应用程序的改变必须在客户机上重新安装。•三层的客户机/服务器体系结构分层体系结构•层次化是一种概念,它将软件设计组织成为类或组件的层次或集合,在同一个层次上的类或组件完成一个特定的目的。•良好的层次结构可以易于系统的扩展与维护,不同的层次之间通过接口进行通信。•三层体系结构(Three-tierArchitecture)–表示层:窗口、报表等用户界面元素–应用逻辑层:管理业务过程的任务和规则–存储层:持久化存储机构分层体系结构MiniLibrary:软件体系结构设计模式•回顾学过的数据结构–Trees,Stacks,Queues–它们给软件开发带来了什么?•问题–在软件体系结构设计中是否存在一些可重用的解决方案?•答案是肯定的–设计模式使我们可以重用已经成功的经验–Pattern=Documentedexperience设计模式设计模式•设计模式描述了软件系统设计过程中常见问题的解决方案,它是从大量的成功实践中总结出来的且被广泛公认的实践和知识。•设计模式的好处–使人们可以简便地重用已有的良好设计–提供了一套可供开发人员交流的语言–提升了人们看待问题的抽象程度–帮助设计人员更快更好地完成系统设计–模式是经过考验的思想,具有更好的可靠性和扩展性设计模式的风险•设计模式不是万能的–模式可以解决大多数问题,但不可能解决遇到的所有问题–应用一种模式一般会“有得有失”,切记不可盲目应用–滥用设计模式可能会造成过度设计,反而得不偿失•设计模式是有难度和风险的–一个好的设计模式是众多优秀软件设计师集体智慧的结晶–在设计过程中引入模式的成本是很高的–设计模式只适合于经验丰富的开发人员使用设计模式的基本要素•模式名称–一个助记名,便于交流和思考•问题–描述应该在何时使用模式,解释了设计问题和问题存在的前因后果•解决方案–描述设计的组成部分,它们之间的相互关系以及各自的职责和协作方式•效果–描述模式应用的效果以及应权衡的问题设计模式的类型•创建型模式–创建型模式描述了实例化对象的相关技术,解决了与创建对象有关的问题。–创建型模式使用继承来改变被实例化的类,而一个对象创建型模式将实例化委托给另一个对象。•典型的模式–工厂方法(FactoryMethod)、抽象工厂(AbstractFactory)–生成器(Builder)、原型(Prototype)、单件(Singleton)设计模式的类型•结构型模式–结构型模式描述了在软件系统中组织类和对象的常用方法,避免了一个类被赋予过多职责而破坏类的封装性和信息的隐藏,和类之间功能重叠的问题。–结构型模式采用继承机制来组合接口或实现。•典型的模式–适配器Adapter、桥接Bridge、组成Composite–装饰Decorator、外观Facade、享元Flyweight、代理Proxy设计模式的类型行为模式–行为模式负责分配对象的职责,为对象间协作建模提供了有效的策略。–行为模式使用继承机制在类件分配行为。•典型的模式–职责链ChainofResponsibility、命令Command、–解释器Interpreter、迭代器Iterator、中介者Mediator–备忘录Memento、观察者Observer、状态State
–策略Strategy、模板方法TemplateMethod、访问者Visitor设计模式示例•抽象工厂(AbstractFactory)模式–抽象工厂模式是用于封装具体的平台,从而使应用程序可以在不同的平台上运行。•状态(State)模式–状态模式允许一个对象在其内部状态改变时改变自己行为。•外观(Façade)模式–外观模式用简单的统一接口封装子系统,从而降低类之间的相关性。•观察者(Observer)模式–观察者模式用于定义对象之间一对多的依赖关系,当一个对象的状态发生变化时,所有依赖于它的对象都将得到通知而被自动更新。AbstractFactoryAbstractFactoryStateFaçadeObserver面向对象设计的制品–设计类–用例实现(从设计角度)–设计子系统与接口–体系结构描述(从设计角度)–部署图–体系结构描述(从部署角度)设计原则模块化(Modularity)
–将一个复杂的大系统分解成若干个相对简单的较小部分,称为子系统(Subsystem)。耦合(Coupling)–耦合表示两个子系统(或类)之间的关联程度。–当一个子系统(或类)发生变化时对另一个子系统(或类)的影响很小,则称它们是松散耦合的;反之,如果变化的影响很大时,则称它们是紧密耦合的设计原则耦合(Coupling)
设计原则•内聚(Cohesion)–内聚性是子系统内部的相关程度。–当子系统中彼此相关的多个对象执行类似的任务时,则认为该子系统是高内聚的;反之,当子系统内的多个对象彼此不相关时,则认为是低内聚的。–高内聚的方法做且仅做一件事,这会很容易理解与维护。
•举例:如果使用一个方法changeItem()完成书目的读取、增加、修改和删除等若干方法的功能,有什么问题吗?–高内聚的类表示且仅表示一种类型的对象。
•举例:在大学系统中使用Professor而不用Employee,为什么?
面向对象设计的过程MiniLibrary:软件体系结构
MiniLibrary:软件体系结构
MiniLibrary:软件体系结构
识别设计元素
识别设计元素
•确定设计元素的基本原则–如果一个“分析类”比较简单,代表着单一的逻辑抽象,那么可以将其映射为“设计类”。通常,主动参与者对应的边界类、控制类和一般的实体类都可以直接映射成设计类。–如果“分析类”的职责比较复杂,很难由单个“设计类”承担,则应该将其映射成“子系统接口”。通常,被动参与者对应的边界类被映射成子系统接口。–子系统的划分应该符合高内聚低耦合的原则。•问题:MiniLibrary系统的分析类哪些应该直接映射成设计类?哪些应该映射成子系统?MiniLibrary:识别设计元素
MiniLibrary:识别设计元素
识别子系统接口–在确定了设计元素之后,需要描述子系统的行为,也就是准确定义接口操作的集合。同时,还要确定“子系统接口”与其他设计元素之间的依赖关系。数据存储策略
•数据文件–数据文件是由操作系统提供的存储形式,应用系统将数据按字节顺序存储,并定义如何以及何时检索数据。•关系数据库–在关系数据库中,数据是以表的形式存储在预先定义好的成为Schema的类型中。•面向对象数据库–与关系数据库不同的是,面向对象数据库将对象和关系作为数据一起存储。数据存储策略
•何时选择文件?–存储大容量数据、临时数据、低信息密度数据•何时选择数据库?–并发访问要求高、系统跨平台、多个应用程序使用相同数据•何时选择关系数据库?–复杂的数据查询–数据集规模大•何时选择面向对象数据库?–数据集处于中等规模–对象间没有规则联系部署子系统•部署图反映了系统中软件和硬件的物理架构,表示系统运行时的处理节点以及节点中组件的配置。检查系统设计•检查“正确性”–每个子系统都能追溯到一个用例或一个非功能需求吗?–每一个用例都能映射到一个子系统吗?–系统设计模型中是否提到了所有的非功能需求?–每一个参与者都有合适的访问权限吗?–系统设计是否与安全性需求一致?•检查“一致性”–是否将冲突的设计目标进行了排序?–是否有设计目标违背了非功能需求?–是否存在多个子系统或类重名?检查系统设计•检查“完整性”–是否处理边界条件?–是否有用例走查来确定系统设计遗漏的功能?–是否涉及到系统设计的所有方面(如硬件部署、数据存储、访问控制、遗留系统、边界条件)?–是否定义了所有的子系统?•检查“可行性”–系统中是否使用了新的技术或组件?是否对这些技术或组件进行了可行性研究?–在子系统分解环境中检查性能和可靠性需求了吗?–考虑并发问题了吗?方法建模•方法建模的过程
–找出满足基本逻辑要求的操作–补充必要的辅助方法
•初始化类的实例•验证两个实例是否等同•……
–完整地描述操作
•确定方法的名称、参数、返回值、可见性等•应该遵从程序设计语言的命名规则
–简要说明方法的内部实现逻辑方法建模属性建模•定义属性–具体说明属性的名称、类型、缺省值、可见性等•基本原则–将所有属性的可见性设置为private;–仅通过set方法更新属性;–仅通过get方法访问属性;–在属性的set方法中,实现简单的有效性验证,而在独立的验证方法中实现复杂的逻辑验证。属性建模状态建模•在详细设计阶段,状态建模一般只发生在依赖状态展示不同行为的类上。关系建模•在对象设计阶段,需要进一步确定详细的关联关系、依赖关系和聚合关系等。•不同对象之间的可能连接用户界面的设计原则
用户控制式–用户启动行为并取得结果,如果程序取得控制权的话,用户也要获得必要的反馈(一个沙漏、一个等待的指示器或其他类似的东西)。•界面一致性–遵循标准和常规的方式,应该让用户处在一个熟悉的和可预见的环境之中。
•若应用是为Windows开发的,则应采用Windows“外观和感觉”;•菜单、活动按钮、屏幕区域等的命名和编码、对象在屏幕上处于什么位置的标准等的一致性也不能低估。•用户界面的设计原则
•界面容错性–一个好的界面应该以一种宽容的态度允许用户进行实验和出错,用户在出现错误时能够方便地从错误中恢复。•界面可适应性–界面可适应性是指用户界面应该根据用户的个性要求及其对界面的熟知程度而改变,即满足定制化和个性化的要求。–所谓定制化是在程序中声明用户的熟知程度,用户界面可以根据熟知程度改变外观和行为;–所谓个性化是使用户按照自己的习惯和爱好来设置用户界面元素。用户界面的设计原则
•界面美观性–界面美观性是视觉上的吸引力,主要体现在具有平衡和对称性、合适的色彩、各元素具有合理的对齐方式和间隔、相关
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 心理咨询员报考条件
- 二零二四年度股权投资合同标的投资额度3篇
- 二零二四年文化艺术交流与推广合同
- 二零二四年度出版合同
- 2024存量住宅装修设计合同
- 二零二四年度环保产业技术合作合同
- 二零二四年度数据中心装修工程安全标准合同
- 二零二四年智能电网用特种电缆订购合同
- 二零二四年度新能源汽车采购代理合同
- 存量航空器材租赁合同04年专用
- CJT233-2016 建筑小区排水用塑料检查井
- CJJT135-2009 透水水泥混凝土路面技术规程
- (高清版)JTGT 3650-01-2022 公路桥梁施工监控技术规程
- 人工智能基础与应用(第2版)全套教学课件
- 高教版【中职专用】《中国特色社会主义》期末试卷+答案
- 2024年《宪法》知识竞赛必背100题题库带解析附答案(完整版)
- 医药公司质量负责人变更专项内审
- 江苏省2024年中职职教高考文化统考语文答案
- 2024年高考语文标点符号的基本用法大全(新标准)
- 入职申请表(完整版)
- 深基坑土方开挖专家论证方案样本
评论
0/150
提交评论