欢迎来到课桌文档! | 帮助中心 课桌文档-建筑工程资料库
课桌文档
全部分类
  • 党建之窗>
  • 感悟体会>
  • 百家争鸣>
  • 教育整顿>
  • 文笔提升>
  • 热门分类>
  • 计划总结>
  • 致辞演讲>
  • 在线阅读>
  • ImageVerifierCode 换一换
    首页 课桌文档 > 资源分类 > DOCX文档下载  

    [软件工程学]5.docx

    • 资源ID:1562830       资源大小:47.58KB        全文页数:14页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    [软件工程学]5.docx

    第五章系统设计系统设计是把需求转化为软件系统的最虫要的环节,系统设计的优劣在根本上决定了软件系统的侦业。就象“一切帝国主义都是纸老虎”那样可以断定“差的系统设计必定产生差的软件系统,"所以我们要努力保证系统设计“根正苗红”,把一切左倾、右帧的设计思潮消灭在萌芽状态。Wind”SNT的一位系统设it师拥有8辆法拉利胞车,让MiCroSor1.公司的一线程序员I分黑红,但你只旎蛋翳而不能愤怒,因为并不足俗个程序员都有本领成为焚杂软件系统的设计师.系统设计要比纯粹的编程困难得多.即便你清是客户的需求,却未必知道应该设计什么样的软件系统一一既能挣最多的钱又旎让客户满意-“天下西湖三十六,最美是杭州",千年前苏东坡大学士对西湖精果绝伦的系统设计,使杭州荣升为“天堂”,让后人只剩下酊叹和破坏的份了.木章讲述系统设计的四方面内容:体系结构设计、模块设计、数据结构与算法设计、用户界面设计。如果将软件系统比喻为人体,那么:(1)体系结构就如同人的竹架,如果某个家伙的什架是般子,那么无论怎样喂养和美容,这家伙始终都是赛子,不会成为人。(2)模块就如同人的湍宫.具有特定的功能.人体中最出色的模块设计之一是手,手只有几种动作,却能做无限多的事情.人体中最碉糕的模块设计之一是嘴巴,嘛巴符最有价值但意无相干的几种功能如吃饭、说话、亲吻混为一体,使之无法并行处理,真乃人类之不幸.(3)数据结构与匏法就如同人的血脉和神经,它让器官具有生命并能发挥功能.数据消构与究法分布在体系结构和模块中,它将协调系统的各个功能,人的耳朵和嘴巴虽然是相对独立的器官,但如果耳朵失聪了,联巴就只能发出"明""呜"的声音,等于丧失了说话的功能(所以注子天生就是哑巴,可人们却又使用手势代替说话,人体的数据结恸与算法设计JX是I分神奇并且I分可笑。(4)用户界面就如同人的外表,最容易让人一见钟情或一见恶心,象人类追求心灵美和外表美那样,软件系统也追求(内在的)功能强大和(外表的)界面友好.但的着生活节奏的加快,人们已少有兴趣去品味深微不露的内在美.如果把1.nix系统比作是健壮的汉子和妇人,那么Windows系统就象妩媚的小白脸和我狸新.想不到WindgS系统竟然能兴风作浪,占去大半市场.有鉴于此,我力应该鼓励女士多买化装品(男士付钱)以获得更好的界面.在诳行系统设计时,我们要深情地关注软件的旗心因素,如正确性与精确性、性能与效率、易用性、可理解性与简法性、可配用性与可扩充性等等。即使把系统设计做好了,也并不意味着就能产生好的软件系统。在程序设计、测试、维护等环节还要整大麻的工作,无论哪个环节出了过杷,都会把好事搞砸了。据说上帝把所有的女士都设计成天使,可是天使们在下凡时有线双脚先荷地,有"脸先着地。上帝的这一疏忽让很多女孩伤透了心.我们在开发软件时,一定要吸收这个教训.5.1 体系结构设计杨叔子院子曾这样指点其弟子:文学中有科学,音乐中有数学,漫画中有现代教学的拓扑学,漫画家可以“儿簿”就把一个人画出来,不管怎么美化或H化,就是活像.为什么?因为那“几笔”不是别的,而是拓扑学中的特征不变城,这是事物最本质的东西.体系结构是软件系统中最本质的东西:(1)体系结构是对红杂事物的一种抽象.良好的体系结构是普的适用的,它可以高效地处理多种多样的个体需求.一提起“房子”,我们的腑中q上就会出现房子的印象(而不是地洞的印象r"房子”是人们对住宿或办公环境的一种抽象,不管是办公楼还是民房,同一类建筑物(甚至不同类的建筑物)之间都具有非常相似的体系结构和构造方式.如果13亿中国人民每个人都要用特别的方式构造奇异的房子,那么960万平方公里的土地将会变得庵百孔,终11不得安宁。(2)体系结构在一定的时间内保持校定。只有在稔定的环境下,人们才能干点少情,社会才能开展科学告诉我们,宇宙间万物无时无刻不在运动、飞行。由于我的的生活环境在地球上保持相财佬定,以致于我们可以无忧无虑地吃饭和M觉,压根就意识不到自己是活生牛的导弹.软件开发最伯的就是需求变化,但“需求会发生变化.是个无法逃避的现实.人的希望在IS求发生变化时,最好只对软件做些皮皮毛毛的修改,可千万别改动软件的体系结构.就如人们对住宿的需求也会变动,你可以经常改变房间的奘璜和摆设.但不会在每次变动时都要去折墙、拆柱、挖地基.如果当需求发生变化时,程序员不得不去修改软件的体系结树,那么这个软件的系统谀计毡失败的.良好的体系结构意味希普适、诲效和稳定,本节将论述两种非常通用的软件体系结构:层次结构和客户机/效劳器(C1.ientZServer)结构.5.1.1 层次结构层次结构表达了这么一种常识:有些事情比较复杂.我的没法一口气干完,就把事情分为好几层,一层一层地去做.高层的工作总是建立在低层的工作之上.层次关系主要行两种:上下级关系和顺序相邻关系.一、上下fii关系的层次结构我们从小学一百读到博士研究生毕业,要读20多年,可以分为五个层次。而范进的知识结构只有两层:“私票”和"秀才*,但读了五十多年,如图5.1所示.一般地处于较御层次的学生应该怖得所有低层次的知识,而处于低层次学生无法怪得所有高层次的知识。图5.1的层次结构存在上下缎关系,如同在军队中,上级可以命令卜级,而卜级不能命令上拨。如果把图5.1的层次结构当成是一个软件系统的结构,那么上层子系统可以使用下层子系统的功能.而下层子系统不能修使用上层子系统的功能.二、序相邻关系的层次结构顺序相邻关系的层次结构说明通讯只能在相邻两层之间发生,信息只能被一层-层地顺序传递.这种层次结构的经典之作是计算机网络的OS1.参考模型,如图5.2所示.为了减少设计的笈杂性,大多数网络都按层(1.ayer)或级(1.eve1.)的方式组织,好一层的目的都是向它的上一层提供一定的效劳,而把如何实现这一效劳的细节对上一层加以屏被,一台机器上的第n层与另一台机器上的第n层进行对话.通话的规则就是第n层的协议。数据不是从一台机器的第n层立接传送到另一台机器的第n层。发送方把数据和控制信息逐层向卜传递。最低层是物理介质,它进行实际的通讯。接收方则将数据和控制信息逐层向上传递.每一对相邻层之间都有接口。接口定义了下层提供的原语操作和效劳“当网络设计者在决定一个网络应包含多少层,每一层应当做什么的时候,其中很用:要的工作是在相邻层之间定义法斯的接1.接口可以使褥同一层能轻易地用某一种实现(Imp1.ementation)来替换另一种完全不同的实现(如用R星信道来代侨所有的电话线),只要新的实现能向上层提供同一机效劳就可以了。Tanenbaun1998考上“举人”时已五十多岁了乂习报考“举人”用了几十年H5.1(b而进的知识结构图5.1(八)从小学读到博t:存在的五个学习阶段图5.2计算机网络的OS1.专考模型三、其它的层次结构目前在大型商业应用软件系统中还流行一种包含中间件(ZiddIeWare)的层次结构,如图5.3所示Jacobson】997。中间件支持与平台无关的分布式计算,可以用DeO相和CORBA对象来实现。It1.S.3包含中间件的层次结构5.1.2 客户机/效劳号结构让我们先回忆一下早期的电话系统.贝尔(A1.exanderGrahamBe1.1.)于1876年申请了电话专利.爆时期的电话必须一对一对地卖.用户自己在两个电话之间拉一根线.如果一个电话用户想和其它几个电话用户通话,他必须拉n根胞独的纹到每个人的房子里.于是在很短的时间内,城市里到处都是穿过房屋和树木的混乱的电话线.很明显,企图把所有的电话完全互联(如图5.4(八)所示)是行不通的.贝尔电话公司在1878年开办了第一个交换局.公司为每个客户柒设一条战,打电话时,客户摇动电话的曲柄使电话公司办公室的启响起来,操作员听到铃比以后根据要求将呼叫方和被呼叫方刖跳税手工连接起来。这种集中交换式的模型如图5.1(b>所示。很快地,贝尔系统的交换局就出现在各地。人们又要求能打城市间的长途电话,就出现了:级交换局,以后进一步开展为多个:锹交换局,Tonenbnun199815.4(n)完全互联的电话系统5.4(b)条中交换式的电话系统如果将图54(b)中的电话看成是客户程序,将中心的交换局柠成足效劳程序,那么图5.4<b)就是典型的客户机/效劳湍结构.注意这里客户机和效劳器都是指软件而不足指硬件(一台计算机可以放多个客户机和效劳器软件.客户机/效劳器结构存在两个显然的优点:(1)以集中的方式高效率地管理通讯。前面讲电话系统的故M就是要说明这一点.(2)可以共享资源.比方在信息管理系统中,效劳器将信息集中起来,任何客户机都可以通过访问效劳潞而获得所需的信息。客户机和效劳器之间的通讯以请求一一响应”的方式进行。客户机先向效劳器发起“请求”(Request).效劳再响应(Response)这个请求,如图5.5所示.请求科应图5.5CHcnt和SCrVCr之何的通讯以“请求一一晌应”的方式进行采用“请求-响应”这种通讯方式的根本动机是为了解决“聚集"(Rendezvous)问盅.为了理耨这一个问他.设想一个人试图在别离的机涔上启动两个程序并让它们进行通讯,还需记住.计修机的运行速度要比人的操作速度高出许多数玳级.在他后动第一个程序后,该程序开始执行并向对等程序发送消息.在几个微秒内,它便发现对等程序还不存在,于是就发出一条错误消息,然后退出.此后,他启动了第二个程序,不幸的是,当笫二个程序开始执行时,它也找不到第一个程序早已退出)。即使这两个程序连续地Hi新武希通讯,但由于它们的执行速度那么高,以致于它们在向瞬间联系上的概率作常低。在客户机/效劳器结构中,效劳器在启动后必须(无限期地)等待客户机的“谛求”,因此就形成了“请求一一响应”的通讯方式。在InternetZIntranct银域,目前“浏览潺-Web效劳器一数据库效劳器”结构是一种非常流行的客户机/效劳耦结构,如图5.6所示.这种结构最大的优点是:客户机统一采用浏览器,这不仅让用户使用方便,而此使得客户机端不存在维护的何越“当然.软件开发布和维护的工作不足自动消失了,而是转移到了"eb效劳器端.在Ieb效劳;端.程序员要川脚本谱音媪写响应页面例如用MiCroSOft的ASP谱方查沏数据库效劳器,物结果保存在Beb页面中,再由浏览器显示出来.HTP请求ftittHrTP响应图5.6.浏览戕-Neb效劳:S一敢找碑效劳战结构5.2 模块设计在设计好软件的体系结构后,就1.i经在宏观上明确了各个模块应具有什么功能,应放在体系结构的哪个位置.我们习惯地从功能上划分模块,保持“功能独立”是模块化设计的根本原则.因为,“功能独立"的模块可以降低开发、测试、维护等阶段的代价.但是“功能独立”并不意味着模块之间保持绝对的孤立.一个系统要完成某项任务,寓要各个模块相互花合才能实现.此时模块之间就要进行信息交流.比方手和脚抽两个“功能独立”的模块.没有脚时.手照样能干活.没有手时.脚仍可以走路.但如果希里跑得快,那么迈左脚时一定要伸右将用左F3迈右脚时则要伸左臂用右肾.在设计一个模块时不仅要考虑“这个模块就该提供什么样的功能",还要考虑“这个模块应该怎样与其它模块交流信息.本节将论述评价模块设计优劣的三个特征因洪:“信息除畿"、"内墩与耦合”和"封闭一一开放性".5.2.1 信息*1«在一节不和谐的课堂里,老帅叹气道:“要是坐在后排聊天的同学能象中间打牌的同学那么安静.就不会影响到前排瞳觉的同学."这个故事告诉我们,如果不想让坏事传播开来,就应该把坏事Ra藏起来,“家丑不可外扬”就是这个道理,为了尽吊防止某个模块的行为去干扰同一系统中的其它模块,在设计模块时就要注意信息的凝,应该让模块仅仪公开必须要让外界知道的内容,而隐藏其它一切内容。模块的信息除被可以通过接口设计来实现,一个模块仅提供有限个接口(Interface),执行模块的功能或与模块交流信息必须且只须通过调用公有接口来实现。如果模块是一个C+对象,那么该模块的公有接U就对应于对象的公有函数.如果模块是一个COM对象,那么该模块的公有接口就是COM对象的接口.一个COM对象可以有多个接口,而每个接口实质上是一些函数的集合.!Rogrsonggg)美国也许是世界上丑阿最多的国家,因为它追求民主,不慌得“隐藏怙息”.但美国又是软件产业最兴旺的国家,模块化设计的方法都是美国人倡导的,他们应该很懂得“隐藏倍息”.真是的后矛啊,这些美国佬!5.2.2 内聚与合内聚(CUheSion)是一个模块内部各成分之间相关联程度的度量。鞠合(Coupiin)是模块之间依赖程度的度量.内聚和稿合是密切相关的,与其它模块存在强柚合的模块通常意味着弱内聚而强内聚的模块通常意味着与其它模块之间存在弱朋合.模块设计追求强内聚,弱耦合.一、内聚强度内班按强度从低到高有以下几种类型:<1)偶然内聚.如果一个模块的各成分之间案无关系,则称为偶然内聚.2逻辑内聚.几个逻辑上相关的功能被放在同一模块中,则称为逻辑内M1.如一个模块读取各种不同类型外设的输入,尽管逻辑内聚比偶然内理合理一些,但逻辑内蜃的模块各成分在功能上并无美系,即使同部功能的修改有时也会影响金局,因此这类模块的修改也比较困难,(3)时间内如果一个模块完成的功能必须在同一时间内执行(如系统初始化,但这屿功能只是因为时间因泰关联在一起,则称为时间内聚,(4)过程内聚.如果一个模块内部的处理成分是相关的.而且这些处理必须以特定的次序执行.则称为过程内聚.(5)通信内聚.如果一个模块的所有成分都操作同一致据集或生成同一数据集,则称为通信内聚.<6)顺序内聚.如果一个模块的各个成分和同一个功能容切相关,而且一个成分的输出作为另一个成分的输入,则称为顺序内聚。(7)功能内聚。模块的所有成分对于完成单一的功能都是必须的,则称为功能内聚,二、箱合SI度根合的强度依赖于以下几个因索:(1)一个模块对另一个模块的调用:(2一个模块向另一个模块传递的数据Sh<3>一个模块施加到另一个模块的控制的多少:(4模块之间接口的复杂程度.照合按从强到弱的顺序可分为以下几种类型:<1)内容相合,当一个模块互接惨改或操作为一个模块的数据,或者直接转入另一个模块时,我发生了内容相合。此时,被修改的模块完全依赖f修改它的模块,(2)公共超合,两个以上的模块共同引用一个全局数据项就称为公共1«合。(3)控制耦合。一个模块在界面上传递一个信号(如开关值、标志量等控制另一个模块,按收信号的模块的动作根据信号值进行调整,林为控制耦合.(4)标记他合.模块间通过参数传递复杂的内部数据结构,称为标记稿合.此数楙结构的变化将使相关的模块发生变化.(5)数据相合.模块间通过参数传递根本类组的数据,称为数据耦合”<6)非直接帮合.模块间没有伯恩传递时,阑于非直接烟合.如果模块间必须存在耦合,就层量使用数据耦合,少用控制耦合,限制公共揭合的范国,坚袂防止使用内容耦合。5.2.3 封闭一开放性如果一个模块可以作为一个独立体被其它程序引用,则称模块具有封闭性.如果一个模块可以被扩充.则称模块具有开放性.从字面上看,让模块具有“封闭一一开放性”是矛盾的.但这种特征在软件开发过程中是客观存在的.当岩手一个新何超时,我们很难一次性解决时题,应该先纵观何超的一些重要方面,同时作好以后补充的准备。因此让模块存在“开放性”并不是坏犷情,”封闭性”也是需要的,因为我们不能等到完全掌握解决问题的信息后再把程序做成别人能用的模块,模块的“封闭一一开放性”实际上对应于软件质量因素中的可支用性和可扩充性。采用面向过程的方法进行程序设计,很难开发出既具有封用性又具有开放性的模块。采用面向对象设计方法可以较好地解决这个问跑.5.3 数据结构与算法设计学会设计数据结构与算法,可以让我们能写出高效率的程序,也许有人要何,在计算机速度11新月异的今天,为什么还需要高效率的程序?因为我们的雄心与能力是一起增长的,技术进步最快也快不过人们欲望的增长。计蚱速度和存储容录上的革新仅仅提供了处理更更杂问题的有效工具,所以高效率的程序永远不会过时.设计高效率的程序是基于良好的数据结构与算法,而不足基于编程小技巧.大多数计算机科学系在设置课程时,都重视学习根本的软件工程原理,以及数据结构与算法设计.一般说来,数据结构与算法就是一类数据的表示及其相关的操作(这里算法不是指数值计算的算法.从数据表示的观点来看,存储在数组中的一个有序整数我也是一种数据结构.算法是指对数据结构施加的一些操作,例如对一个践性表迸行检索、插入、删除等掾作,一个算法如果能在所要求的资源限制(ResourceConstraints)范国内将同时解决好,则称这个算法是有效率(EffiCient)的,例如一个资源限制可能是“用于存储数据的内存有限",或者"允许执行每个子任务所需的时间有限"。一个算法如果比其它笄法所需要的资源都少,这个算法也被称为是有效率的.算法的代价(Cosi)是指消耗的资源瑙,一般说来,代价由一个关犍资源例如时间或空间来评估的.力席置fef.人们端写程序是为了解决问题.只有通过预先分析问遨来确定必须到达的性能目标.才有布里挑选出正确的数据结构.有相当多的程序员无视了这分析过程,而直接选用某一个他们习惯使用的,但是与同区不相称的数据结构,结果设计出一个低效率的程序.如果使用简电的设计就能够到达性能目标时,选用更杂的数据结构也是没有道理的。人们对常用的数据结构与算法的研究己经相当透彻,可以归纳出一些设计原则:(I)每一种数据结构与算法都有其时间、空间的开销和收益。当面临一个新的设计问题时,设计者要彻底地掌握怎样权衡时空开销和蚱法有效性的方法.这就需要懂得算法分析的原理,而且还需要了解所使用的物理介质的特性(例如.数据存储在磁盘上与存谛在内存中就有不同的考虑儿<2)与开怕和收益有关的是时间一一空间的权衡.通常可以用更大的时间开销来换取空间的收益.反之亦然时间一一空间的权衡普遍地存在于软件开发的各个阶段中.(3)程序员应该充分地了解一些常用的数据结构与算法,防止不必要的来复设计工作.<!>数据结构与优法为应用效劳,我们必须先了解应用的御求,再寻找或设计与实际应用相匹配的数据结构。Shaffer19985.4 用户界面设计某个人总有方法让自己保持心情愉快、信心十足.有一天,他向一名围棋九段和一名乒乓球世界冠军挑战,结果他全胜了.因为他跟围根九段打乒乓球,圾乒乓球冠军下围棋,用户界面的编程技术是人们熟悉得不得了的那,我决定讲一讲比较陌生的“用户界面设计美学”,有位爱好书画的博士后请我欣本钢写演空会.我从头到尾只听到“叮叮咚咚”的再音,实在享受不到“高雅*,就i青这位朋友指点。他虽然也不懂铜等,却从欣赏打法的角度设法解择如何欣赏音乐。可是我既不懂巧法也不懂音乐,真是坐立不安.“美"似乎我的不可言传,我在读本科时,特别喜欢编写用户界面程序.并且常向同学演示、卖弄.我觉得还不过箱,就写了一鲸“用户界面设计美学”的短文林蜕1997.但凡路过我实验室的同学都被我逑住,被迫听完我得意之极的期读,茫然者与痛苦者居多.不久我的朗读使所向披摩.闻声者逃之天天.现在我乂把JE篇短文摘录至此,请您忍着点吧.1.1 .1界面设计中美的需求与导向作用人们对美的向往利追求是与生俱有的.显然没有人愿意I1.化自己的程序,也没有用户唔好E聃的界面.软件开发者要设计灵,用户要享受美,所以界面的美是开发者与用户的共同符求.界面美的概念很抽象,以致让人无法说清楚什么是界面的美。但它同时又很现实,以致人人都可以去欣班和感受界面美,并且挑利美中之缺乏。美学不是一种量:化的学问,如果因此而轻视美学指导,必将导致在设计过程中光依赖程序员个人的经验与感觉,,由于程序员接受的教育主饕是如何使计算机完成工作.而不足人如何工作,因此仅旅程序员主观想象设计而成的界面往往得不到群众用户的认可.美的界而能消除用户中感觉引起的乏味、紧张和疲劳(情绪低落).大大提高用户的工作效率,从而进一步为发挥用户技能和为用户完成任务作出奉献.从人机界面开展历史与趋势上可以看出人的对界面关的需求,以及关在界面设计中的导向作用.界面设计己经经历了两个界限清他的时代.第一代是以文本为地础的司单交互,如常见的命令行,字符菜单等。由于第一代界面考虑人的因素太少,用户兴趣不高,随节技术的开展,出现了笫二代直接操板的界面。它大量使用图形、语音和其它交互媒介,充分地考虑了人对美的需求。自接操纵的界面使用视听、触摸等技术,让人可以凭借生活常识、经历和推理来操纵软件,愉快地完成任务,更高层次的界面甚至模拟了人的生活空间.例如虚拟现实环境.界面的美充分表达了人机交互作用中人的特性与意图.越来越多的用户制通过具有吸引力而令人愉快的人机界面与计算机打交道.5.4 2界面美的内涵木节从适宜性、风格和广义关三个方面论述界面美的内涵,一、界面的适宜性界面的适宜性是指界面是否与软件功能相融洽.如果界面不适合于软件的功能,那么界面将亳无用处,界面美的内涵就无从谈起。所以界面的适宜性是界面美的首要因索.它提解设计者不要片面追求外观漂亮而导致失真或华而不实.界面的适宜性既提倡外美内秀.又强词恰如其分.适宜性差的界面无疑会混满软件意图,致使用户产生误解.即使它不损害软件功能与性能,也会使用户产生不该有的情绪波动.例如一些软件开发者点取为其作品加一段动画演示,以便吸引更多用户的关注.这本是无可非议的,何珊在于这演示是否合情合理,如果运行一个程序,它首先去演一套复杂的动画,在后台演奏雄壮的进行曲,电闪雷呜之后出来的却是一个普通的文本编辑器。整个过程让用户置身于公里零里,而结果却让用户感到惊部而不是惊喜。适宜性差的界面只会给软件带来厄运.二、界面的风格界面的风格有两类一是“一致性",二是"个性化”.商业应用软件的界面设计注更一致性,设计者必须密切注意在相同应用领域中最流行的软件的界面,必须尊重用户使用这些软件的习惯.例如商业软件习惯于设慰F1.键为帮助热谊,如果某个设计省别出心优地让FI键成为程序终止的热键,那么在用户渴艰得到帮助而伸手击F1.键的一刹那,他的工作就此完蛋,相信这个用户“一的被蛇咬,十年怕井纯.。目漪流行的软件开发工具如YiSUa1.C+、Visua1.Basic.De1.phi«C+Bui1.der.PowerBUiIder等,都能够快速地开发出非常相似的图形用户界面。在IntcrnetZIntranet领域,浏览器几乎成了咱一的客户机程序,W为用户布望用完全一致的软件来完成千变万化的应用任务.在娱乐额域的软件中,有个性化的界面自然比泯然于众的界面更具有吸引力.一般说来计算机专业人员玩过的软件不计其数.界面存多了,真有种“曾经沧海难为水”的感觉.不过当我行到一个叫Sonique的放许乐的软件时不禁对其界面的创意喷啧称赞,忍不住象贴美女像那样把它贴到书中.如图5.7所示.图S.7SOniqUe软件的几种界面人们经常挤不清是什么情况下应该追求“一致性*或“个性化”.在大白天,当人们都穿戴整齐时.有线人喜欢只挂几片遮羞布.而当大家都赤条条地在共公浴室洗澡时,却也有人喜秋穿着衣服三、界面的广义美尽管界面的关弁没有增加软件的功能与性能,却又是必为可少的,用户使用界面时,除了直接的迷官关感外,还有很大一同部美感是间接的,它们存在于人们的使用体验中,例如方便.实用等,与图形用户界面相比,命令行是以原始的界面,它难记又难看,但对于熟练的用户而言,他们乐于使用命令行以获得高效率,命令行因具有高效率而标得了专业人士的喜爱,早期的UniX系统就是彻头彻尾的命令系统,可以说,一切有利于人机交互的界面设计因素都具有广义美。界面设计的一些特殊考虑也表达了广义美,如设法使残障人也可以使用软件.IBN公司在1985年已经创立了残障人国家支持中心.App1.e公司的专门教育办公室则提供了一些有利于残障人使用的计算机信息产品.5.5 系统设计例如一一支持协同工作的交互式三维图形软件开发系统本节论述“支持协同工作的交互式三维图形软件开发系统"的系统设计,作为本率的例如(取材于作者的博士论文工作林猊2000).5.5.1 设计背景图形标准在图形领域有着中要的地位,它不仅加速了3D应用程序的开发,而口使3D应用程序的可移植性更好。历史上的出现的图形标准(BKAP1.)有COre、GKS,PUIGS.PEX,C1.Dore、RenderMan、Hoops、OPenG1.等等。经过竞争与淘汰,目前OpenG1.成为国际上公认的3D图形工业标准,在UniX与PC平台褥到广泛应用.OPCnG1.提供了数百个库函数,可以方便地绘制具有JX实感的3D图形。但是在开发交互式的3D图形应用程序时,图形的绘制只是一局部工作,更多的工作集中在场景数据结构、图形对象、三维交互和图形用户界面的设计上.由于OPenG1.与窗1.1.系统无关,不提供任何交互手段,必须由程序员自己编写所有的交互功能.并且OPenG1.的编程接口地低级的C函数,不提供可任用的对型库或者应用程序框架,开发效率不再.为了克服这些困碓,人们往往在图形标准之上再建立更高汲的开发工具(3DToo1.kit或3DEngine),基于OpenGI.的著名的开发工具有OpenInventorIRISPerformer,0ptieizerCos三o3D以及G1.UT等等,OpenInventor被誉为是交互式3D开发工具的“W实标准”,但显然没有一个3D开发工具能涌足所有的应用需求,3D的广泛应用衢要更多的开发工具支持。随芾计算机图形技术与网络技术的迅猛开展,两者的结合势在必行.在商业、科研、教开、娱乐等领域,用于分布式虚拟环境(DistributedVirtua1.Environments,DVEs和计算机支持协同工作(ComputerSupportedCooperativeIork1CSCW)的图形系统已成为研究与应用的热点.著名的DVES系统有DIVE、dVS.MR.Repo3D等.但是这些DYES系统映乏3D开发工具的交互式图形功能以及通用性,而通用的3D开发工具如OPenInVentor则又不支持分布式计算和仍同工作.由于在窗口系统、图形支撑库、编程谙吉等方面存在基异,上述DVEs系统和31)开发工具碓以方便地结合使用.我们多方面分析了3D需求及软硬件条件,研制完成运行于PC平台,支持协同_E作的交互式三维图形软件开发系统,如图5.8所示。其中:(1) Intra3D2.0是携于OPenG1.的通用交互式三维图形软件开发工具,可用于快速开发Window9xNT下的交互式三维图形应用软件.(2) CNC1.0是支持协同工作的网络通讯开发系统(CooperativeNetworkComunicator>»其核心是支持“发布,订1模式”与"组播模式”的效劳器与API.结合Intra3D2.0和合C1.0,可以快速开发支持协同工作的交互式三维图形应用软件。m支持协同工作的交互式三淮图形轨件开发系统5.5.2通用交互式三维图形软件开发工具Intra3D2.0Intra3D2.0的核心是集成了场景数据结构、图形对象、三维交互算法和图形用户界面的CI类库与COM(ComponentObjectMode1.>对象库.支持YiSUaIC+、Visua1Basic,De1.phi等语古的应用编程.IntraBD的核心库分四层创立:(1)笫一层为“范础X寸象与函数.(BasicObjectsandFunctions);(2)第二层为“图形对象(Graphica1.Objects);(3)第三层为“场景图与节点”(SceneGraphandNodes):(4)笫四层为"绘制与交互”(RenderingandInteraction).体系结构如图5.9所示,其中高层构件可以引用低层构件,但低层构件不能引用高层构件.图5.9IIHra3D2.0的体膜结构Intra3D2.0是免混软件,有况套书籍交互式三维图形技术与程序设计标准版软件妁25兆,核心库7万多行C+代码全部公开,用户可以方便地修改内核以适应不同的需求。5.5.2.1主要模块和功帼一、基础对象与函数层<1)定义了用于对象引用计数的内存管理基类:(2)矢量、矩阵与四元组运算.取标跟踪球算法:(3)点阵字体与二:维矢或字体输出,常用于数据可视化图形的数据标注:4图像蜡入输出以及纹理映射,支持BMP、GIF、JPE6、SGkTGA等图像格式:(5)行用几何图元的绘制,如锥、柱、球、环等,并支持SWeIH形体,蝶旋体的绘制:(6)提供长。余种材质,在第四层中可以交互式编辑这些材侦,二、图形对象层图形对象能将数据转化为几何模型并可以绘制出来,In1.ra3D2.O版提供了三类图形对象:(1)常用几何对象.加长方体、推体'网柱体、球体、回环体、Swept形体等:<2)多边形模型对象,可用于绘制RUtOdeSk公n.3ds模型和WaVefront公司的.obj模型:(3)商业统计图形对双,如柱形图、带状图、条形图、折级图、面枳图、饼图、塔形图、曲规图、曲面图、进程图、股票图等.图形对象的开发与应用闫题密切相关,用户可以使用维承方法扩充新的图形对象,而不会影响到其它三层的构件。三、场景图与节点场景图<SceneGraph)是有向无环图,SceneGraPh的主要节点有r(1)SCeneNOd(J是所有节点的西类.在SCeneNOde中定义了局部坐标系以及相应的图形变换.这样便于第四层以同样的操作方式实现三维交互.(2)相机节点(CameraNode)支挣平行投影与透视投影.支持多个相机切换.(3)光源节点有三种:平行光源节点(Dir1.ightNode)、点光源节点(POint1.ightNOde)和锥光源节点(SPOt1.ightNode).<4>形体节点(ShapeNode)用于引用图形对象,有关图形对藤的三维交互均由ShaPeNode处理.四、绘制与交互层InIra3D的交互分两类:一类是对形体、光源和相机的£1接操作,另一类是我实心属性的编辑,Intra3D的场景视图构件(SCenCYieW)封装了交耳式绘制的所有细节,如消刖处理、场景节点的遍历绘制、多重来样消锯齿、取标交互等.为了便于编辑4X实感属性,In1.ra3D定制了一些常用对话:矢地字体对话(FontDia1.og),颜色对话(Co1.orDia1.og)、材质库对话(MateriaI1.ibDiaIOg)、材质对话(MateriaIDia1.og)与光淑对话(Dir1.ightDia1.og1Point1.ightDia1.og,Spot1.ightDia1.og).5.5.2.2用户界面设计Intra3D的场景视图构件SceneView用于快速创立交互式3D应用程序的主界面,SceneView支持se1.ecting,sca1.ing,rotating,trans1.ating,creating,de1.eting等三十余种操作,并提供工具条方便于交互,如图5.10所示。为了编轼口实感属性,常需在对话板中绘制3D图形,MiCrosori的窗口系统不提供3D的对话窗口。使用Intra3D的WindOW3D构件可在对话框中创立多个3D视图,图5.I1.的材质对话和图5.12的材质库对话都使用了Wind”3D构件,窿色编辑是3D图形程序中最常用的交互.材质与光源的编辑实际上是通过改变颜色分家来实现的.需要进行颜色编辑的交互均涉及HSV与RGB模式的颜色转换,Intra3D的“绘制与交互层”实现了这些计算,并且提供彩色的滑动条用于鼠标交互.图5.13、图5.M分别为点光源对话和颜色对话。ff1.5.10Mr,直接操作的三犍交互工具条ff1.5.1.1.材朋对话图5.12材质库对话图5.13点光海对话IBS.M颜色对话5.5.3支持的同工作的网络通讯开发系统CNC1.0最简华的协同工作模式是让两个客户机直接逋iR可以用SoCket编程实现.假设有n个客户机参加协同工作,每个客户机辂与所有其它的客户机通讯.那么总共存在n(n-1.)2个SOCket直接通讯,并且每个客户机的变动将导致其它客户机的修改.这种SoCket宜接通讯使窗协同工作的管埋和客户机的程序设计变得非常困难CNC系统提供了支持“发布一订回(Pub1.ish-Subscribe)”与"组播(Mu1.ticast)*模式的效劳器与API,可以而效地管理多个组群的协同工作,并使得客户机的程序设计十分简单,CNC1.0的系统结构如图5.15所示。CNC效劳器将客户机分如管理.在“发布一订阅"模式中,将产生数据的进程称为生产者(PrUdUCer),将接受数据的进程称为消费者(Consumer).生产者可以向效劳器发布数据.效劳潺保存这些数据.消费者可以向效劳订阅数据.每个客户机可能是很多数据的生产者或消费者.同一时刻,CNC系统允许有任意多个生产者和消费者存在.CNC的“发布一订阅"功能是用TCP协议实现的.在“组播”模式中,效劳器动态地分配每个组的组播地址.客户机可以向效劳器申请参加任意组,允许向任意组播放消息,效劳器不保存这些组播消息,CNC的“殂播”功能是用UDP协议实现的,5.15CVC1.O的系统结构5.5.3.1CNC客户机的API设计类CNCeIient客户机用来实现“发布一订阅"和"组播”功能.主要接口(公有函数)如下:c1.assCNCC1.ien1.(pub1.ic:B1.Connect():连接效劳编B1.DisconnectO;与效劳制断开连接BW1.pUbIiShDHIn();/向效劳器发布数据WX>.Query1.)atn(一);/向收劳港爽加数据WX)1.SUbSCribeDaIR();向牧劳SKiJ便数幅GRWPiPQueryGroupIP();向效丹!Sft询飙播堆址DWDMu1.ticastMessae(一):/发送组播Jf1.患virtua1.voidMessageResponse():/响应组播消息):一、客户程序的“发布”协议客户机向效劳器发布的每个数据报均含有数据类型、工作组名称、数据名称、生命期和数据长度的信息.报文格式如图5.16所示.数据结构见DataPub1.ish:structDataPub1.ishBY1.EiIhtaType;/2个字节数据类型,宏定义为DATA.PUB1.ISHCharStrCroupNaiie16:/】6个字节的工作组名字CharStrDataNane16:/16个字节的数据名字DM>RDdv1.ifeTine:Ht个字IY的数鼎生命期.以杪为的位IW(WDdv1.rnjth;/1个字节的数粼内容的长境chnr*pchCt;/数粼内容2字节16字节16字节4字节4字节图5.16用F发布的投文格式二、客户程序的“订阅"协议客户机向效劳渊订阅数据分两步实现:<1)先谢用函数QUeryData向效劳器发送一个DataQUery格式的报文,用于查询要订阅的数据是否存在。structDataQ

    注意事项

    本文([软件工程学]5.docx)为本站会员(夺命阿水)主动上传,课桌文档仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知课桌文档(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-1

    经营许可证:宁B2-20210002

    宁公网安备 64010402000986号

    课桌文档
    收起
    展开