您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 设计及方案 > 第7章软件设计与实现
1第7章软件设计与实现面向对象设计实现中有关问题开源开发嵌入式系统的设计与实现2软件设计和实现是软件工程过程中的一个阶段。设计和实现活动是交叉进行的。设计是创造性活动,基于客户的需求识别出系统组件及其关系,实现将设计转变为程序。设计的细节层次取决于待开发系统的类型以及是否使用计划驱动或敏捷开发方法。本章主要介绍如何使用面向对象方法进行设计以及实现中的有关重要问题。嵌入式软件不一般的特性也是软件设计涉及到的一个重要方面。37.1面向对象设计面向对象设计将面向对象分析创建的分析模型变换为设计模型,它将作为软件实现的蓝图。但由于面向对象分析与设计活动是一个迭代与演化的过程,概念与表示方法的一致性使得分析与设计阶段平滑过渡。传统的设计方法将问题域分解成一系列功能模块来完成,这些模块形成过程式软件的基本结构。面向对象方法把问题域分解为一系列相互作用的对象,在此基础上构造出基于对象及其交互的软件系统结构。4本教材作者Sommerville认为面向对象设计的一般过程应有以下几个阶段:(1)了解并定义系统上下文和与系统的外部交互(2)设计系统体系结构(3)识别出系统中的主要对象(4)开发设计模型(5)定义对象接口上述活动交替进行,彼此影响,不断精化。以下通过一个例子介绍面向对象的设计过程。57.1.1系统上下文与交互例:气象站系统:气象站部署在远程的区域,每个气象站记录当地的气象信息,并通过卫星将这些信息定期传输给气象信息系统。软件设计首先了解待开发系统与外部环境之间的关系,帮助确定系统提供哪些功能以便有效地与外部环境进行通信。有两个模型可以表达系统与环境之间的关系:6•系统上下文模型,是结构模型,描述系统环境中的实体及其关联。上下文模型可用关联(ER)图来表示,方框表示系统或子系统。也可用UML的包图来表示。下图说明了每个气象站所在环境中都包含一个气象信息系统,一个机载卫星系统和一个控制系统。气象站气象信息系统卫星系统控制系统11111nnn1气象站系统上下文7•交互模型,描述系统与外部角色有哪些交互。UML的用例模型是使用抽象方法表示系统与外部角色之间的交互。重新启动关闭气象站重新配置软件设定节电模式控制系统远程控制其他气象站气象信息系统报告气象数据报告设备状态气象站系统用例图(图7-2)教材图7-3给出了该用例的模版描述气象站气象站87.1.2体系结构设计系统与环境间交互的定义可以作为系统体系结构设计的基础,还要结合业务知识和设计的一般知识进行体系结构的设计。首先识别出系统的主要组件及它们之间的关系,然后运用一种体系结构模式来组织这些组件。气象站系统运用了广播模型。9«subsystem»缺陷管理«subsystem»配置管理«subsystem»电源管理«subsystem»通信控制«subsystem»数据采集«subsystem»仪器通信链路气象站系统高层体系结构当该子系统接收到“关机”命令,其它与该命令相关的子系统也能关机107.1.3对象识别面向对象分析识别问题域的对象,面向对象设计是识别求解域的对象。求解域的对象一部分来自于问题域,一部分来自于与设计相关的系统描述。如何识别对象?方法同面向对象分析.根据以上思想识别出的对象见下图。11气象站identifierreportWeather()reportStatus()powerSave(instruments)remoteControl(commands)reconfigure(commands)restart(instruments)shutdown(instruments)气象数据airTemperaturesgroundTemperatureswindSpeedswindDirectionspressuresrainfallcollect()summarise()地表温度计temperatureget()test()风速计windSpeedwindDirectionget()test()气压计pressureHeightget()test()气象站系统的对象(类)gt-identan-identbar-ident提供了与环境交互的接口12气象站类提供与环境之间的接口,它的操作反映了用例模型中给出的交互。气象数据类负责处理报告气象数据指令,它的相关操作包括对数据的收集和汇总,源数据是不同仪器采集到的。其他三个类与系统中的仪器直接对应,操作就是对这些硬件的控制。这些对象以某些特定频率自动采集数据并在本地存储,在得到请求时将数据传输给“气象数据”对象。137.1.4开发设计模型设计模型包含了对象类以及它们之间不同类型的关系,是系统需求和系统实现之间的桥梁。设计过程中的一个重要活动是决定需要什么样的设计模型和设计模型的细节层次,依赖所开发的系统类型。不一定为系统建立所有的模型.一般要进行两类模型的设计:•静态模型描述系统的静态结构(如气象站系统的类图)•动态模型描述系统的动态结构(交互、状态变化)。14本教材作者认为有以下3个模型有助于为用例和体系结构模型增加细节:•子系统模型:给出系统的逻辑分组,每个分组构成一个子系统,可使用包图来表示。子系统模型说明如何能将设计组织成逻辑上相关的对象群。•时序模型:说明对象交互的时序,使用时序图或协作图来表示。•状态机模型:说明某个对象如何响应事件来改变它们的状态,使用状态图来表示。下图给出了气象站系统包图以及关系。包图加上类图描述了系统的逻辑分组。15«subsystem»通信控制气象站«subsystem»数据采集气象数据仪器状态«subsystem»仪器空气温度计地表温度计雨量计气压计风速计风向标气象站系统(包图加上类图描述了系统逻辑分组)下图给出了气象信息系统向气象站请求汇总数据时发生的的交互序列:通信控制器16:通信控制器:气象站:气象数据request(report)reportWeather()summarise()send(report)reply(report)acknowledge设计的时候,应该为每个重要的交互(用例模型中的用例)创建一个时序图或协作图。应答表示消息发送者不等待回复气象信息系统acknowledgeacknowledgeacknowledge17时序图用来对一组对象的交互行为建模,状态机模型表示某个对象对不同事件的响应行为。下图是气象站对象的状态图,给出了该对象如何响应各种不同服务的请求。shutdownRunningtransmittingtestingsummarizingCollectingrestart()shutdown()clockcollectiondonereportWeather()weathersummarycompletetestcompletetransmissiondonereportStatus()remoteControl()operationConfiguringreconfigure()powerSave()configurationdoneControlled响应远程控制的另一组消息187.1.5接口描述接口提供了一种方法,把组件基于操作的功能说明与具体实现区分开来,使得任何依赖和使用接口的客户程序不必依赖于接口的具体实现,有利于接口实现的替换。接口要精确的定义,以便能由其他对象使用。接口描述可以用UML类图模板,省略属性说明,《interface》要包含在类名部分中。也可以用程序设计语言来定义接口,以便用编译器来发现接口描述中的错误和不一致。19对象与接口不是一对一的关系,一个对象会有若干接口。同样,一组对象可以通过同一个接口访问。下图是气象站系统中定义的两个接口:«interface»ReportingreportWeather(WS-Ident):WreportreportStatus(WS-Ident):Sreport«interface»RemoteControlstartInstrument(Instrument):iStatusstopInstrument(Instrument):iStatuscollectData(Instrument):iStatusprovideData(Instrument):string报告接口远程控制接口直接映射到气象站对象中的操作每一个操作都编码成气象站对象中remoteControl方法所关联的一个命令字符串207.2设计模式模式(Pattern)的概念最初来自于建筑学领域,用模式描述建筑物的建筑元素(Alexander,1977),概括了被认为是好的设计的实践经验。模式是对问题和解决方案的基本内容的描述。模式是积累的经验和智慧的描述,可以帮助人们在软件开发过程中对于经常重复出现的问题制定成功解决的方案,即解决方案可以在不同的设置下被复用。2194年Gamma等4人(简称“GangofFour”)合著的《设计模式:可复用面向对象软件的基础》提出了用设计模式解决重复出现的软件设计问题,并对设计模式进行了分类描述和解释。96年由Buschmann等5人合著的《面向模式的软件体系结构》将模式跨越不同的抽象层次,提出了高层的体系结构模式、中层的设计模式和低层的习惯用法。本节主要针对设计模式进行讨论。22Gamma等人定义了模式的四个基本要素:(1)模式名称(2)问题描述描述设计模式所解决的问题,什么情况下可以应用该模式,或者说使用该模式可以在设计中避免的一些缺点。(3)解决方案通常以图形的方式描述设计方案的组成成分(对象)以及它们之间的关系、职责和协作方式。它不是一个具体的设计描述,而是一个设计方案的模版,可以用不同的方式实例化。(4)结果陈述说明应用该模式的结果和副作用,帮助设计者了解该模式在特定的环境条件下用是否有效。教材P121图7-10展示了观察者模式的定义。23例1:观察者模式定义对象间的一种一对多的依赖关系,当一个对象的状态发生变化时,所有依赖它的对象都得到通知并被自动更新。主体A:40B:25C:15D:20ABCD50250ABCD观察者1观察者1一个数据集的两个图形显示24«interface»SubjectAttach(observer)Detach(observer)Notify()«interface»ObserverUpdate()ConcreteSubjectSubjectStateGetState()ConcreteObserverObserverStateUpdate()1*观察者模式的UML模型25Observer将自己注册到主体对象Subject中,主体对象将观察者存放在一个容器(Container)里。主体对象状态发生了变化,从容器中得到所有注册过的观察者,将变化通知观察者。观察者模式通常与MVC模式有关系。观察者模式可被用来降低model与view的耦合程度,主体便是模型加控制器,而观察者便是视图。当一个对象数据更新时需要通知其他对象,不知道具体有多少个对象或者不希望互相间形成紧耦合,适合使用该模式。26设计模式的使用是一个非常有用的复用形式。由于模式的复杂性,为了有效的使用,设计者需要对许多设计模式有详细的了解。使用一个模式时,主要复用该模式的思想,根据所开发系统中需要解决的问题调整自己的实现方案。模式不是一个可执行组件,不像组件那样只需了解组件的接口。有经验的程序员才能辨别出一个模式所能适用的一般条件。因此,有效地使用设计模式需要积累经验。277.3实现问题复用开发软件时,尽可能的考虑现有组件或系统的复用。配置管理开发软件是一个团队进行的项目,每个生成的组件都会有很多版本,若不很好的管理这些版本,将会造成混乱。基于宿主机(hostcomputer)-目标机开发宿主机开发的软件运行在目标机上经常有完全不同的环境。开发平台与运行平台的问题。287.3.1复用(参考第16、17章)软件复用的好处是降低总体开发成本、增加了系统的可靠性并可与标准兼容,加快了软件开发速度。软件复用可以
本文标题:第7章软件设计与实现
链接地址:https://www.777doc.com/doc-2198682 .html