




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第五章 系 统 设设 计系统设计计是把需需求转化化为软件件系统的的最重要要的环节节。系统统设计的的优劣在在根本上上决定了了软件系系统的质质量。就就象“一切帝帝国主义义都是纸纸老虎”那样可可以断定定“差的系系统设计计必定产产生差的的软件系系统。”所以我我们要努努力保证证系统设设计“根正苗苗红”,把一一切左倾倾、右倾倾的设计计思潮消消灭在萌萌芽状态态。Winddowss NTT的一位位系统设设计师拥拥有8辆辆法拉利利跑车,让Miicroosofft公司司的一些些程序员员十分眼眼红。但但你只能能羡慕而而不能愤愤恨,因因为并不不是每个个程序员员都有本本事成为为复杂软软件系统统的设计计师。系系统设计计要
2、比纯纯粹的编编程困难难得多。即便你你清楚客客户的需需求,却却未必知知道应该该设计什什么样的的软件系系统既能挣挣最多的的钱又能能让客户户满意。“天下西西湖三十十六,最最美是杭杭州”,千年年前苏东东坡大学学士对西西湖精采采绝伦的的系统设设计,使使杭州荣荣升为“天堂”,让后后人只剩剩下赞叹叹和破坏坏的份了了。本章讲述述系统设设计的四四方面内内容:体体系结构构设计、模块设设计、数数据结构构与算法法设计、用户界界面设计计。如果果将软件件系统比比喻为人人体,那那么:(1)体体系结构构就如同同人的骨骨架。如如果某个个家伙的的骨架是是猴子,那么无无论怎样样喂养和和美容,这家伙伙始终都都是猴子子,不会会成为人人
3、。(2)模模块就如如同人的的器官,具有特特定的功功能。人人体中最最出色的的模块设设计之一一是手,手只有有几种动动作,却却能做无无限多的的事情。人体中中最糟糕糕的模块块设计之之一是嘴嘴巴,嘴嘴巴将最最有价值值但毫无无相干的的几种功功能如吃吃饭、说说话、亲亲吻混为为一体,使之无无法并行行处理,真乃人人类之不不幸。(3)数数据结构构与算法法就如同同人的血血脉和神神经,它它让器官官具有生生命并能能发挥功功能。数数据结构构与算法法分布在在体系结结构和模模块中,它将协协调系统统的各个个功能。人的耳耳朵和嘴嘴巴虽然然是相对对独立的的器官,但如果果耳朵失失聪了,嘴巴就就只能发发出“啊”“呜”的声音音,等于于丧
4、失了了说话的的功能(所以聋聋子天生生就是哑哑巴),可人们们却又能能用手势势代替说说话。人人体的数数据结构构与算法法设计真真是十分分神奇并并且十分分可笑。(4)用用户界面面就如同同人的外外表,最最容易让让人一见见钟情或或一见恶恶心。象象人类追追求心灵灵美和外外表美那那样,软软件系统统也追求求(内在在的)功功能强大大和(外外表的)界面友友好。但但随着生生活节奏奏的加快快,人们们已少有有兴趣去去品味深深藏不露露的内在在美。如如果把UUnixx系统比比作是健健壮的汉汉子和妇妇人,那那么Wiindoows系系统就象象妩媚的的小白脸脸和狐狸狸精。想想不到WWinddowss系统竟竟然能兴兴风作浪浪,占去去
5、大半市市场。有有鉴于此此,我们们应该鼓鼓励女士士多买化化妆品(男士付付钱)以以获得更更好的界界面。在进行系系统设计计时,我我们要深深情地关关注软件件的质量量因素,如正确确性与精精确性、性能与与效率、易用性性、可理理解性与与简法性性、可复复用性与与可扩充充性等等等。即使使把系统统设计做做好了,也并不不意味着着就能产产生好的的软件系系统。在在程序设设计、测测试、维维护等环环节还要要做大量量的工作作,无论论哪个环环节出了了差错,都会把把好事搞搞砸了。据说上上帝把所所有的女女士都设设计成天天使,可可是天使使们在下下凡时有有些双脚脚先着地地,有些些脸先着着地。上上帝的这这一疏忽忽让很多多女孩伤伤透了心心
6、。我们们在开发发软件时时,一定定要吸取取这个教教训。5.1 体系结结构设计计杨叔子院院子曾这这样指点点其弟子子:文学中有有科学,音乐中中有数学学,漫画画中有现现代数学学的拓扑扑学。漫漫画家可可以“几笔”就把一一个人画画出来,不管怎怎么美化化或丑化化,就是是活像。为什么么?因为为那“几笔”不是别别的,而而是拓扑扑学中的的特征不不变量,这是事事物最本本质的东东西。体系结构构是软件件系统中中最本质质的东西西:(1)体体系结构构是对复复杂事物物的一种种抽象。良好的的体系结结构是普普遍适用用的,它它可以高高效地处处理多种种多样的的个体需需求。一一提起“房子”,我们们的脑中中马上就就会出现现房子的的印象(
7、而不是是地洞的的印象)。“房子”是人们们对住宿宿或办公公环境的的一种抽抽象。不不论是办办公楼还还是民房房,同一一类建筑筑物(甚甚至不同同类的建建筑物)之间都都具有非非常相似似的体系系结构和和构造方方式。如如果133亿中国国人民每每个人都都要用特特别的方方式构造造奇异的的房子,那么9960万万平方公公里的土土地将会会变得千千疮百孔孔,终日日不得安安宁。(2)体体系结构构在一定定的时间间内保持持稳定。只有在在稳定的的环境下下,人们们才能干干点事情情,社会会才能发发展。科科学告诉诉我们,宇宙间间万物无无时无刻刻不在运运动、飞飞行。由由于我们们的生活活环境在在地球上上保持相相对稳定定,以致致于我们们可
8、以无无忧无虑虑地吃饭饭和睡觉觉,压根根就意识识不到自自己是活活生生的的导弹。软件开开发最怕怕的就是是需求变变化,但但“需求会会发生变变化”是个无无法逃避避的现实实。人们们希望在在需求发发生变化化时,最最好只对对软件做做些皮皮皮毛毛的的修改,可千万万别改动动软件的的体系结结构。就就如人们们对住宿宿的需求求也会变变动,你你可以经经常改变变房间的的装璜和和摆设,但不会会在每次次变动时时都要去去折墙、拆柱、挖地基基。如果果当需求求发生变变化时,程序员员不得不不去修改改软件的的体系结结构,那那么这个个软件的的系统设设计是失失败的。良好的体体系结构构意味着着普适、高效和和稳定。本节将将论述两两种非常常通用
9、的的软件体体系结构构:层次次结构和和客户机机/服务务器(CClieent/Serrverr)结构构。5.1.1层次结结构层次结构构表达了了这么一一种常识识:有些些事情比比较复杂杂,我们们没法一一口气干干完,就就把事情情分为好好几层,一层一一层地去去做。高高层的工工作总是是建立在在低层的的工作之之上。层层次关系系主要有有两种:上下级级关系和和顺序相相邻关系系。一、上下下级关系系的层次次结构我们从小小学一直直读到博博士研究究生毕业业,要读读20多多年,可可以分为为五个层层次。而而范进的的知识结结构只有有两层:“私塾”和“秀才”,但读读了五十十多年,如图55.1所示示。一般般地处于于较高层层次的学学
10、生应该该懂得所所有低层层次的知知识,而而处于低低层次学学生无法法懂得所所有高层层次的知知识。图图5.1的层层次结构构存在上上下级关关系,如如同在军军队中,上级可可以命令令下级,而下级级不能命命令上级级。如果果把图55.1的层层次结构构当成是是一个软软件系统统的结构构,那么么上层子子系统可可以使用用下层子子系统的的功能,而下层层子系统统不能够够使用上上层子系系统的功功能。二、顺序序相邻关关系的层层次结构构顺序相邻邻关系的的层次结结构表明明通讯只只能在相相邻两层层之间发发生,信信息只能能被一层层一层地地顺序传传递。这这种层次次结构的的经典之之作是计计算机网网络的OOSI参参考模型型,如图图5.2所
11、示示。为了了减少设设计的复复杂性,大多数数网络都都按层(Layyer)或级(Levvel)的方式式组织。每一层层的目的的都是向向它的上上一层提提供一定定的服务务,而把把如何实实现这一一服务的的细节对对上一层层加以屏屏蔽。一一台机器器上的第第n层与另另一台机机器上的的第n层进行行对话。通话的的规则就就是第nn层的协协议。数数据不是是从一台台机器的的第n层直接接传送到到另一台台机器的的第n层。发发送方把把数据和和控制信信息逐层层向下传传递。最最低层是是物理介介质,它它进行实实际的通通讯。接接收方则则将数据据和控制制信息逐逐层向上上传递。每一对相相邻层之之间都有有接口。接口定定义了下下层提供供的原语
12、语操作和和服务。当网络络设计者者在决定定一个网网络应包包含多少少层,每每一层应应当做什什么的时时候,其其中很重重要的工工作是在在相邻层层之间定定义清晰晰的接口口。接口口可以使使得同一一层能轻轻易地用用某一种种实现(Impplemmenttatiion)来替换换另一种种完全不不同的实实现(如如用卫星星信道来来代替所所有的电电话线),只要要新的实实现能向向上层提提供同一一组服务务就可以以了。Tannenbbaumm19998小 学 (5-6年)硕 士(2-3年) 考上上“举人”时已五五十多岁岁了本 科(4年) 复习习报考“举人”用了几几十年秀 才中 学(6年)私 塾博 士(3-4年)图5.11(a
13、)从小小学读到到博士存存在的五五个学习习阶段 图图5.1(b)范进进的知识识结构举人应用层应用层表示层表示层会话层主机A会话层传输层传输层主机B网络层网络层数据链路层数据链路层物理层物理层图5.22 计计算机网网络的OOSI参参考模型型三、其它它的层次次结构目前在大大型商业业应用软软件系统统中还流流行一种种包含中中间件(Midddleewarre)的的层次结结构,如如图5.3所示示Jaacobbsonn 19997。中间间件支持持与平台台无关的的分布式式计算,可以用用DCOOM和CCORBBA对象象来实现现。MiddlewareApplication SystemsBusiness-speci
14、fic ComponentsSystem Software图5.33 包包含中间间件的层层次结构构5.1.2客户机机/服务务器结构构让我们先先回顾一一下早期期的电话话系统。贝尔(Aleexannderr Grrahaam BBelll)于118766年申请请了电话话专利。那时期期的电话话必须一一对一对对地卖,用户自自己在两两个电话话之间拉拉一根线线。如果果一个电电话用户户想和其其它几个个电话用用户通话话,他必必须拉nn根单独独的线到到每个人人的房子子里。于于是在很很短的时时间内,城市里里到处都都是穿过过房屋和和树木的的混乱的的电话线线。很明明显,企企图把所所有的电电话完全全互联(如图55.4(
15、a)所示示)是行行不通的的。贝尔电话话公司在在18778年开开办了第第一个交交换局。公司为为每个客客户架设设一条线线。打电电话时,客户摇摇动电话话的曲柄柄使电话话公司办办公室的的铃响起起来,操操作员听听到铃声声以后根根据要求求将呼叫叫方和被被呼叫方方用跳线线手工连连接起来来。这种种集中交交换式的的模型如如图5.4(b)所示示。很快快地,贝贝尔系统统的交换换局就出出现在各各地。人人们又要要求能打打城市间间的长途途电话,就出现现了二级级交换局局,以后后进一步步发展为为多个二二级交换换局。Tannenbbaumm 19998交换局5.4(a)完全全互联的的电话系系统 5.4(b)集中中交换式式的电话
16、话系统如果将图图5.4(b)中的的电话看看成是客客户程序序,将中中心的交交换局看看成是服服务程序序,那么么图5.4(b)就是是典型的的客户机机/服务务器结构构。注意意这里客客户机和和服务器器都是指指软件而而不是指指硬件(一台计计算机可可以放多多个客户户机和服服务器软软件)。客户机/服务器器结构存存在两个个显然的的优点:(1)以以集中的的方式高高效率地地管理通通讯。前前面讲电电话系统统的故事事就是要要说明这这一点。(2)可可以共享享资源。比如在在信息管管理系统统中,服服务器将将信息集集中起来来,任何何客户机机都可以以通过访访问服务务器而获获得所需需的信息息。客户机和和服务器器之间的的通讯以以“请
17、求响应”的方式式进行。客户机机先向服服务器发发起“请求”(Reqquesst),服务器器再响应应(Reespoonsee)这个个请求,如图55.5所示示。请求服务器客户机响应图5.55 CClieent和和Serrverr之间的的通讯以以“请求响应”的方式式进行采用“请请求响应”这种通通讯方式式的基本本动机是是为了解解决“聚集”(Renndezzvouus)问问题。为为了理解解这一个个问题,设想一一个人试试图在分分离的机机器上启启动两个个程序并并让它们们进行通通讯。还还需记住住,计算算机的运运行速度度要比人人的操作作速度高高出许多多数量级级。在他他启动第第一个程程序后,该程序序开始执执行并向向
18、对等程程序发送送消息。在几个个微秒内内,它便便发现对对等程序序还不存存在,于于是就发发出一条条错误消消息,然然后退出出。此后后,他启启动了第第二个程程序。不不幸的是是,当第第二个程程序开始始执行时时,它也也找不到到第一个个程序(早已退退出)。即使这这两个程程序连续续地重新新试着通通讯,但但由于它它们的执执行速度度那么高高,以致致于它们们在同一一瞬间联联系上的的概率非非常低。在客户户机/服服务器结结构中,服务器器在启动动后必须须(无限限期地)等待客客户机的的“请求”,因此此就形成成了“请求响应”的通讯讯方式。在IInteerneet/IIntrraneet领域域,目前前“浏览器器Webb 服务务
19、器数据库库服务器器” 结构构是一种种非常流流行的客客户机/服务器器结构,如图55.6所所示。这这种结构构最大的的优点是是:客户户机统一一采用浏浏览器,这不仅仅让用户户使用方方便,而而且使得得客户机机端不存存在维护护的问题题。当然然,软件件开发布布和维护护的工作作不是自自动消失失了,而而是转移移到了WWeb 服务器器端。在在Webb 服务务器端,程序员员要用脚脚本语言言编写响响应页面面。例如如用Miicroosofft的ASPP语言查查询数据据库服务务器,将将结果保保存在WWeb 页面中中,再由由浏览器器显示出出来。数据库服务器Web 服务器客户机 ASP Engine浏览器 HTTTP 请请求
20、 查询 HTTTP 响响应图5.66 “浏览器器Webb 服务务器数据库库服务器器”结构5.2 模 块 设设 计在设计好好软件的的体系结结构后,就已经经在宏观观上明确确了各个个模块应应具有什什么功能能,应放放在体系系结构的的哪个位位置。我我们习惯惯地从功功能上划划分模块块,保持持“功能独独立”是模块块化设计计的基本本原则。因为,“功能独独立”的模块块可以降降低开发发、测试试、维护护等阶段段的代价价。但是是“功能独独立”并不意意味着模模块之间间保持绝绝对的孤孤立。一一个系统统要完成成某项任任务,需需要各个个模块相相互配合合才能实实现,此此时模块块之间就就要进行行信息交交流。比如手和和脚是两两个“
21、功能独独立”的模块块。没有有脚时,手照样样能干活活。没有有手时,脚仍可可以走路路。但如如果希望望跑得快快,那么么迈左脚脚时一定定要伸右右臂甩左左臂,迈迈右脚时时则要伸伸左臂甩甩右臂。在设计计一个模模块时不不仅要考考虑“这个模模块就该该提供什什么样的的功能”,还要要考虑“这个模模块应该该怎样与与其它模模块交流流信息”。本节将论论述评价价模块设设计优劣劣的三个个特征因因素:“信息隐隐藏”、“内聚与与耦合”和“封闭开放性性”。5.2.1信息隐隐藏在一节不不和谐的的课堂里里,老师师叹气道道:“要是坐坐在后排排聊天的的同学能能象中间间打牌的的同学那那么安静静,就不不会影响响到前排排睡觉的的同学。”这个故
22、事事告诉我我们,如如果不想想让坏事事传播开开来,就就应该把把坏事隐隐藏起来来,“家丑不不可外扬扬”就是这这个道理理。为了了尽量避避免某个个模块的的行为去去干扰同同一系统统中的其其它模块块,在设设计模块块时就要要注意信信息隐藏藏。应该该让模块块仅仅公公开必须须要让外外界知道道的内容容,而隐隐藏其它它一切内内容。模块的信信息隐藏藏可以通通过接口口设计来来实现。一个模模块仅提提供有限限个接口口(Innterrfacce),执行模模块的功功能或与与模块交交流信息息必须且且只须通通过调用用公有接接口来实实现。如如果模块块是一个个C+对象,那么该该模块的的公有接接口就对对应于对对象的公公有函数数。如果果模
23、块是是一个CCOM对对象,那那么该模模块的公公有接口口就是CCOM对对象的接接口。一一个COOM对象象可以有有多个接接口,而而每个接接口实质质上是一一些函数数的集合合。RRogeersoon 119999 美国也也许是世世界上丑丑闻最多多的国家家,因为为它追求求民主,不懂得得“隐藏信信息”。但美美国又是是软件产产业最发发达的国国家,模模块化设设计的方方法都是是美国人人倡导的的,他们们应该很很懂得“隐藏信信息”。真是是前后矛矛盾,这这些美国国佬! 5.22.2内聚与与耦合 内聚聚(Coohessionn)是一一个模块块内部各各成分之之间相关关联程度度的度量量。耦合合(Cooupllingg)是模
24、模块之间间依赖程程度的度度量。内内聚和耦耦合是密密切相关关的,与与其它模模块存在在强耦合合的模块块通常意意味着弱弱内聚,而强内内聚的模模块通常常意味着着与其它它模块之之间存在在弱耦合合。模块块设计追追求强内内聚,弱弱耦合。一、内聚聚强度内聚按强强度从低低到高有有以下几几种类型型:(1)偶偶然内聚聚。如果果一个模模块的各各成分之之间毫无无关系,则称为为偶然内内聚。(2)逻逻辑内聚聚。几个个逻辑上上相关的的功能被被放在同同一模块块中,则则称为逻逻辑内聚聚。如一一个模块块读取各各种不同同类型外外设的输输入。尽尽管逻辑辑内聚比比偶然内内聚合理理一些,但逻辑辑内聚的的模块各各成分在在功能上上并无关关系,
25、即即使局部部功能的的修改有有时也会会影响全全局,因因此这类类模块的的修改也也比较困困难。(3)时时间内聚聚。如果果一个模模块完成成的功能能必须在在同一时时间内执执行(如如系统初初始化),但这这些功能能只是因因为时间间因素关关联在一一起,则则称为时时间内聚聚。(4)过过程内聚聚。如果果一个模模块内部部的处理理成分是是相关的的,而且且这些处处理必须须以特定定的次序序执行,则称为为过程内内聚。(5)通通信内聚聚。如果果一个模模块的所所有成分分都操作作同一数数据集或或生成同同一数据据集,则则称为通通信内聚聚。(6)顺顺序内聚聚。如果果一个模模块的各各个成分分和同一一个功能能密切相相关,而而且一个个成分
26、的的输出作作为另一一个成分分的输入入,则称称为顺序序内聚。(7)功功能内聚聚。模块块的所有有成分对对于完成成单一的的功能都都是必须须的,则则称为功功能内聚聚。二、耦合合强度耦合的强强度依赖赖于以下下几个因因素:(1)一一个模块块对另一一个模块块的调用用;(22)一个个模块向向另一个个模块传传递的数数据量;(3)一个模模块施加加到另一一个模块块的控制制的多少少;(44)模块块之间接接口的复复杂程度度。耦合按从从强到弱弱的顺序序可分为为以下几几种类型型:(1)内内容耦合合。当一一个模块块直接修修改或操操作另一一个模块块的数据据,或者直直接转入入另一个个模块时时,就发发生了内内容耦合合。此时时,被修
27、修改的模模块完全全依赖于于修改它它的模块块。(2)公公共耦合合。两个个以上的的模块共共同引用用一个全全局数据据项就称称为公共共耦合。(3)控控制耦合合。一个个模块在在界面上上传递一一个信号号(如开开关值、标志量量等)控控制另一一个模块块,接收收信号的的模块的的动作根根据信号号值进行行调整,称为控控制耦合合。(4)标标记耦合合。模块块间通过过参数传传递复杂杂的内部部数据结结构,称称为标记记耦合。此数据据结构的的变化将将使相关关的模块块发生变变化。(5)数数据耦合合。模块块间通过过参数传传递基本本类型的的数据,称为数数据耦合合。(6)非非直接耦耦合。模模块间没没有信息息传递时时,属于于非直接接耦合
28、。如果模块块间必须须存在耦耦合,就就尽量使使用数据据耦合,少用控控制耦合合,限制制公共耦耦合的范范围,坚坚决避免免使用内内容耦合合。5.2.3封闭开放性性如果一个个模块可可以作为为一个独独立体被被其它程程序引用用,则称称模块具具有封闭闭性。如如果一个个模块可可以被扩扩充,则则称模块块具有开开放性。从字面上上看,让让模块具具有“封闭开放性性”是矛盾盾的,但但这种特特征在软软件开发发过程中中是客观观存在的的。当着着手一个个新问题题时,我我们很难难一次性性解决问问题。应应该先纵纵观问题题的一些些重要方方面,同同时作好好以后补补充的准准备。因因此让模模块存在在“开放性性”并不是是坏事情情。“封闭性性”
29、也是需需要的,因为我我们不能能等到完完全掌握握解决问问题的信信息后再再把程序序做成别别人能用用的模块块。模块的“封闭开放性性”实际上上对应于于软件质质量因素素中的可可复用性性和可扩扩充性。采用面面向过程程的方法法进行程程序设计计,很难难开发出出既具有有封闭性性又具有有开放性性的模块块。采用用面向对对象设计计方法可可以较好好地解决决这个问问题。5.3 数据结结构与算算法设计计学会设计计数据结结构与算算法,可可以让我我们编写写出高效效率的程程序。也也许有人人要问,在计算算机速度度日新月月异的今今天,为为什么还还需要高高效率的的程序?因为我们们的雄心心与能力力是一起起增长的的,技术术进步最最快也快快
30、不过人人们欲望望的增长长。计算算速度和和存储容容量上的的革新仅仅仅提供供了处理理更复杂杂问题的的有效工工具,所所以高效效率的程程序永远远不会过过时。设计高效效率的程程序是基基于良好好的数据据结构与与算法,而不是是基于编编程小技技巧。大大多数计计算机科科学系在在设置课课程时,都重视视学习基基本的软软件工程程原理,以及数数据结构构与算法法设计。一般说来来,数据据结构与与算法就就是一类类数据的的表示及及其相关关的操作作(这里里算法不不是指数数值计算算的算法法)。从从数据表表示的观观点来看看,存储储在数组组中的一一个有序序整数表表也是一一种数据据结构。算法是是指对数数据结构构施加的的一些操操作,例例如
31、对一一个线性性表进行行检索、插入、删除等等操作。一个算算法如果果能在所所要求的的资源限限制(RResoourcce CConsstraaintts)范范围内将将问题解解决好,则称这这个算法法是有效效率(EEffiicieent)的。例例如一个个资源限限制可能能是“用于存存储数据据的内存存有限”,或者者“允许执执行每个个子任务务所需的的时间有有限”。一个个算法如如果比其其它已知知算法所所需要的的资源都都少,这这个算法法也被称称为是有有效率的的。算法法的代价价(Coost)是指消消耗的资资源量。一般说说来,代代价是由由一个关关键资源源例如时时间或空空间来评评估的。毋庸置疑疑,人们们编写程程序是为为
32、了解决决问题。只有通通过预先先分析问问题来确确定必须须达到的的性能目目标,才才有希望望挑选出出正确的的数据结结构。有有相当多多的程序序员忽视视了这一一分析过过程,而而直接选选用某一一个他们们习惯使使用的,但是与与问题不不相称的的数据结结构,结结果设计计出一个个低效率率的程序序。如果果使用简简单的设设计就能能够达到到性能目目标时,选用复复杂的数数据结构构也是没没有道理理的。人们对常常用的数数据结构构与算法法的研究究已经相相当透彻彻,可以以归纳出出一些设设计原则则:(1)每每一种数数据结构构与算法法都有其其时间、空间的的开销和和收益。当面临临一个新新的设计计问题时时,设计计者要彻彻底地掌掌握怎样样
33、权衡时时空开销销和算法法有效性性的方法法。这就就需要懂懂得算法法分析的的原理,而且还还需要了了解所使使用的物物理介质质的特性性(例如如,数据据存储在在磁盘上上与存储储在内存存中,就就有不同同的考虑虑)。(2)与与开销和和收益有有关的是是时间空间间的权衡衡。通常常可以用用更大的的时间开开销来换换取空间间的收益益,反之之亦然。时间空间间的权衡衡普遍地地存在于于软件开开发的各各个阶段段中。(3)程程序员应应该充分分地了解解一些常常用的数数据结构构与算法法,避免免不必要要的重复复设计工工作。(4)数数据结构构与算法法为应用用服务。我们必必须先了了解应用用的需求求,再寻寻找或设设计与实实际应用用相匹配配
34、的数据据结构。Shhafffer 199985.4用用户界面设计某个人总总有办法法让自己己保持心心情愉快快、信心心十足。有一天天,他向向一名围围棋九段段和一名名乒乓球球世界冠冠军挑战战,结果果他全胜胜了。因因为他跟跟围棋九九段打乒乒乓球,跟乒乓乓球冠军军下围棋棋。用户户界面的的编程技技术是人人们熟悉悉得不得得了的事事,我决决定讲一一讲比较较陌生的的“用户界界面设计计美学”。有位爱好好书画的的博士后后请我欣欣赏钢琴琴演奏会会。我从从头到尾尾只听到到“叮叮咚咚咚”的声音音,实在在享受不不到“高雅”,就请请这位朋朋友指点点。他虽虽然也不不懂钢琴琴,却从从欣赏书书法的角角度设法法解释如如何欣赏赏音乐。
35、可是我我既不懂懂书法也也不懂音音乐,真真是坐立立不安。“美”似乎真真的不可可言传。我在读读本科时时,特别别喜欢编编写用户户界面程程序,并并且常向向同学演演示、卖卖弄。我我觉得还还不过瘾瘾,就写写了一篇篇“用户界界面设计计美学”的短文文林锐锐 19997。凡是是路过我我实验室室的同学学都被我我逮住,被迫听听完我得得意之极极的朗读读,茫然然者与痛痛苦者居居多。不不久我的的朗读便便所向披披糜,闻闻声者逃逃之夭夭夭。现在在我又把把那篇短短文摘录录至此,请您忍忍着点吧吧。5.4.1界面设设计中美美的需求求与导向向作用人们对美美的向往往和追求求是与生生俱有的的。显然然没有人人愿意丑丑化自己己的程序序,也没
36、没有用户户嗜好丑丑陋的界界面。软软件开发发者要设设计美,用户要要享受美美,所以以界面的的美是开开发者与与用户的的共同需需求。界面美的的概念很很抽象,以致让让人无法法说清楚楚什么是是界面的的美。但但它同时时又很现现实,以以致人人人都可以以去欣赏赏和感受受界面美美,并且且挑剔美美中之不不足。美美学不是是一种量量化的学学问,如如果因此此而轻视视美学指指导,必必将导致致在设计计过程中中光依赖赖程序员员个人的的经验与与感觉。由于程程序员接接受的教教育主要要是如何何使计算算机完成成工作,而不是是人如何何工作,因此仅仅靠程序序员主观观想象设设计而成成的界面面往往得得不到大大众用户户的认可可。美的界面面能消除
37、除用户由由感觉引引起的乏乏味、紧紧张和疲疲劳(情情绪低落落),大大大提高高用户的的工作效效率,从从而进一一步为发发挥用户户技能和和为用户户完成任任务作出出贡献。从人机机界面发发展历史史与趋势势上可以以看出人人们对界界面美的的需求,以及美美在界面面设计中中的导向向作用。界面设计计已经经经历了两两个界限限分明的的时代。第一代代是以文文本为基基础的简简单交互互,如常常见的命命令行,字符菜菜单等。由于第第一代界界面考虑虑人的因因素太少少,用户户兴趣不不高。随随着技术术的发展展,出现现了第二二代直接接操纵的的界面。它大量量使用图图形、语语音和其其它交互互媒介,充分地地考虑了了人对美美的需求求。直接接操纵
38、的的界面使使用视听听、触摸摸等技术术,让人人可以凭凭借生活活常识、经历和和推理来来操纵软软件,愉愉快地完完成任务务。更高高层次的的界面甚甚至模拟拟了人的的生活空空间,例例如虚拟拟现实环环境。界面的美美充分体体现了人人机交互互作用中中人的特特性与意意图,越越来越多多的用户户将通过过具有吸吸引力而而令人愉愉快的人人机界面面与计算算机打交交道。5.4.2界面美美的内涵涵本节从合合适性、风格和和广义美美三个方方面论述述界面美美的内涵涵。一、界面面的合适适性界面的合合适性是是指界面面是否与与软件功功能相融融洽。如如果界面面不适合合于软件件的功能能,那么么界面将将毫无用用处,界界面美的的内涵就就无从谈谈起
39、。所所以界面面的合适适性是界界面美的的首要因因素,它它提醒设设计者不不要片面面追求外外观漂亮亮而导致致失真或或华而不不实。界界面的合合适性既既提倡外外美内秀秀,又强强调恰如如其分。合适性差差的界面面无疑会会混淆软软件意图图,致使使用户产产生误解解。即使使它不损损害软件件功能与与性能,也会使使用户产产生不该该有的情情绪波动动。例如如一些软软件开发发者喜欢欢为其作作品加一一段动画画演示,以便吸吸引更多多用户的的关注。这本是是无可非非议的,问题在在于这演演示是否否合情合合理。如如果运行行一个程程序,它它首先表表演一套套复杂的的动画,在后台台演奏雄雄壮的进进行曲,电闪雷雷鸣之后后出来的的却是一一个普通
40、通的文本本编辑器器。整个个过程让让用户置置身于云云里雾里里,而结结果却让让用户感感到惊谔谔而不是是惊喜。合适性性差的界界面只会会给软件件带来厄厄运。二、界面面的风格格界面的风风格有两两类,一一是“一致性性”,二是是“个性化化”。商业应用用软件的的界面设设计注重重一致性性。设计计者必须须密切注注意在相相同应用用领域中中最流行行的软件件的界面面,必须须尊重用用户使用用这些软软件的习习惯。例例如商业业软件习习惯于设设置F11键为帮帮助热键键,如果果某个设设计者别别出心裁裁地让FF1键成成为程序序终止的的热键,那么在在用户渴渴望得到到帮助而而伸手击击F1键键的一刹刹那,他他的工作作就此完完蛋。相相信这
41、个个用户“一朝被被蛇咬,十年怕怕井绳”。目前流行行的软件件开发工工具如VVisuual C+、Vissuall Baasicc、Dellphii、C+Buiildeer、Powwer Buiildeer等,都能够够快速地地开发出出非常相相似的图图形用户户界面。在Innterrnett/Inntraanett领域,浏览器器几乎成成了唯一一的客户户机程序序,因为为用户希希望用完完全一致致的软件件来完成成千变万万化的应应用任务务。在娱乐领领域的软软件中,有个性性化的界界面自然然比泯然然于众的的界面更更具有吸吸引力。一般说说来,计计算机专专业人员员玩过的的软件不不计其数数。界面面看多了了,真有有种“曾
42、经沧沧海难为为水”的感觉觉。不过过当我看看到一个个叫Sooniqque的的放音乐乐的软件件时,不不禁对其其界面的的创意啧啧啧称赞赞,忍不不住象贴贴美女像像那样把把它贴到到书中,如图55.7所示示。图5.77 SSoniiquee软件的的几种界界面人们经常常搞不清清楚什么么情况下下应该追追求“一致性性”或“个性化化”。在大大白天,当人们们都穿戴戴整齐时时,有些些人喜欢欢只挂几几片遮羞羞布。而而当大家家都赤条条条地在在共公浴浴室洗澡澡时,却却也有人人喜欢穿穿着衣服服。三、界面面的广义义美尽管界面面的美并并没有增增加软件件的功能能与性能能,却又又是必为为可少的的。用户户使用界界面时,除了直直接的感感
43、官美感感外,还还有很大大一部分分美感是是间接的的,它们们存在于于人们的的使用体体验中,例如方方便,实实用等。与图形形用户界界面相比比,命令令行是最最原始的的界面,它难记记又难看看。但对对于熟练练的用户户而言,他们乐乐于使用用命令行行以获得得高效率率。命令令行因具具有高效效率而赢赢得了专专业人士士的喜爱爱,早期期的Unnix系系统就是是彻头彻彻尾的命命令系统统。可以以说,一一切有利利于人机机交互的的界面设设计因素素都具有有广义美美。界面设计计的一些些特殊考考虑也体体现了广广义美,如设法法使残障障人也可可以使用用软件。IBMM公司在在19885年已已经创建建了残障障人国家家支持中中心。AAppll
44、e公司司的专门门教育办办公室则则提供了了一些有有利于残残障人使使用的计计算机信信息产品品。5.5 系统设设计示例例支持持协同工工作的交交互式三三维图形形软件开开发系统统本节论述述“支持协协同工作作的交互互式三维维图形软软件开发发系统”的系统统设计,作为本本章的示示例( 取材于于作者的的博士论论文工作作林锐锐 20000)。5.5.1 设设计背景景图形标准准在图形形领域有有着重要要的地位位,它不不仅加速速了3DD应用程程序的开开发,而而且使33D应用用程序的的可移植植性更好好。历史史上曾出出现的图图形标准准(或AAPI)有Coore、GKSS、PHHIGSS、PEEX、GGL、DDoree、Re
45、nnderrMann、Hooops、OpeenGLL等等。经过竞竞争与淘淘汰,目目前OppenGGL成为为国际上上公认的的3D图图形工业业标准,在Unnix与与PC平台台得到广广泛应用用。OppenGGL提供供了数百百个库函函数,可可以方便便地绘制制具有真真实感的的3D图形。但是在在开发交交互式的的3D图形应应用程序序时,图图形的绘绘制只是是一部分分工作,更多的的工作集集中在场场景数据据结构、图形对对象、三三维交互互和图形形用户界界面的设设计上。由于OppenGGL与窗窗口系统统无关,不提供供任何交交互手段段,必须须由程序序员自己己编写所所有的交交互功能能。并且且OpeenGLL 的编编程接口
46、口是低级级的C函函数,不不提供可可复用的的对象库库或者应应用程序序框架,开发效效率不高高。为了了克服这这些困难难,人们们往往在在图形标标准之上上再建立立更高级级的开发发工具(3D Tooolkiit或3D Engginee)。基基于OppenGGL的著著名的开开发工具具有OppenIInveentoor、IIRISS Peerfoormeer、OOptiimeiizerr/Coosmoo3D以以及GLLUT等等等。OOpennInvventtor被被誉为是是交互式式3D开开发工具具的“事实标标准”,但显显然没有有一个33D开发发工具能能满足所所有的应应用需求求,3DD的广泛泛应用需需要更多多的
47、开发发工具支支持。随着计计算机图图形技术术与网络络技术的的迅猛发发展,两两者的结结合势在在必行。在商业业、科研研、教育育、娱乐乐等领域域,用于于分布式式虚拟环环境(DDisttribbuteed VVirttuall Ennvirronmmentts, DVEEs)和和计算机机支持协协同工作作(Coompuuterr Suuppoorteed CCoopperaativve WWorkk, CCSCWW)的图图形系统统已成为为研究与与应用的的热点。著名的的DVEEs系统统有DIIVE、dVSS、MR、Reppo-33D等。但是这这些DVVEs系系统缺乏乏3D开开发工具具的交互互式图形形功能以以
48、及通用用性,而而通用的的3D开开发工具具如OppenIInveentoor则又又不支持持分布式式计算和和协同工工作。由由于在窗窗口系统统、图形形支撑库库、编程程语言等等方面存存在差异异,上述述DVEEs系统统和3DD开发工工具难以以方便地地结合使使用。我们多方方面分析析了3DD需求及及软硬件件条件,研制完完成运行行于PCC平台,支持协协同工作作的交互互式三维维图形软软件开发发系统,如图55.8所所示。其其中:(1)IIntrra3DD 2.0是基基于OppenGGL的通通用交互互式三维维图形软软件开发发工具,可用于于快速开开发Wiindoow 99x/NNT下的的交互式式三维图图形应用用软件。
49、(2)CCNC11.0是是支持协协同工作作的网络络通讯开开发系统统(Cooopeerattivee Neetwoork Commmunnicaatorr),其其核心是是支持“发布订阅模模式”与“组播模模式”的服务务器与AAPI。结合Inntraa3D 2.00和CNCC 1.0,可可以快速速开发支支持协同同工作的的交互式式三维图图形应用用软件。 支持协同工作的网络通讯开发系统CNC 1.0通用交互式三维图形软件开发工具Intra3D 2.0图5.88 支持持协同工工作的交交互式三三维图形形软件开开发系统统5.5.2 通用用交互式式三维图图形软件件开发工工具Inntraa3D 2.00Intrr
50、a3DD 2.0的核核心是集集成了场场景数据据结构、图形对对象、三三维交互互算法和和图形用用户界面面的C+类库库与COOM(Commponnentt Obbjecct MModeel)对对象库,支持VVisuual C+、Vissuall Baasicc、Dellphii等语言言的应用用编程。Inttra33D的核核心库分分四层创创建:(1)第第一层为为“基础对对象与函函数”(Bassic Objjectts aand Funnctiionss);(2)第第二层为为“图形对对象”(Graaphiicall Obbjeccts);(3)第第三层为为“场景图图与节点点”(Sceene Graaph
51、 andd Noodess);(4)第第四层为为“绘制与与交互”(Rennderringg annd IInteeracctioon)。体系结构构如图55.9所示示,其中中高层构构件可以以引用低低层构件件,但低低层构件件不能引引用高层层构件。 4、 绘制与交互层Intra3DCOM库Intra3DC+类库 3、 场景的图与节点层 2、 图形对象层 1、 基础对象与函数层Window 9x/NT + OpenGL + Visual C+图5.99Inttra33D 22.0 的体系系结构Intrra3DD 2.0是免免费软件件,有配配套书籍籍交互互式三维维图形技技术与程程序设计计。标标准版软软件
52、约225兆,核心库库7万多多行C+代码码全部公公开,用用户可以以方便地地修改内内核以适适应不同同的需求求。5.5.2.1 主要模模块和功功能一、基础础对象与与函数层层(1)定定义了用用于对象象引用计计数的内内存管理理基类;(2)矢矢量、矩矩阵与四四元组运运算,鼠鼠标跟踪踪球算法法;(3)点点阵字体体与三维维矢量字字体输出出,常用用于数据据可视化化图形的的数据标标注;(4)图图像输入入输出以以及纹理理映射,支持BBMP、GIFF、JPPEG、SGII、TGGA等图图像格式式;(5)常常用几何何图元的的绘制,如锥、柱、球球、环等等,并支支持Sweppt形体体,螺旋旋体的绘绘制;(6)提提供4550
53、余种种材质,在第四四层中可可以交互互式编辑辑这些材材质。二、图形形对象层层图形对象象能将数数据转化化为几何何模型并并可以绘绘制出来来。Intrra3DD 2.0版提提供了三三类图形形对象:(1)常常用几何何对象,如长方方体、锥锥体、圆圆柱体、球体、圆环体体、Swweptt形体等等;(2)多多边形模模型对象象,可用用于绘制制Auttodeesk公公司.33ds模模型和WWaveefroont公公司的.objj模型;(3)商商业统计计图形对对象,如如柱形图图、带状状图、条条形图、折线图图、面积积图、饼饼图、塔塔形图、曲线图图、曲面面图、进进程图、股票图图等。图形对象象的开发发与应用用问题密密切相关
54、关,用户户可以使使用继承承方法扩扩充新的的图形对对象,而而不会影影响到其其它三层层的构件件。三、场景景图与节节点场景图(Sceene Graaph)是有向向无环图图,Sccenee Grraphh的主要要节点有有:(11)ScceneeNodde是所所有节点点的基类类。在SScenneNoode中中定义了了局部坐坐标系以以及相应应的图形形变换,这样便便于第四四层以同同样的操操作方式式实现三三维交互互。(22)相机机节点(CammeraaNodde)支支持平行行投影与与透视投投影,支支持多个个相机切切换。(3)光光源节点点有三种种:平行行光源节节点(DDirLLighhtNoode)、点光光源节
55、点点(PoointtLigghtNNodee)和锥锥光源节节点(SSpottLigghtNNodee)。(4)形形体节点点(ShhapeeNodde)用用于引用用图形对对象,有有关图形形对象的的三维交交互均由由ShaapeNNodee处理。四、绘制制与交互互层Intrra3DD的交互互分两类类:一类类是对形形体、光光源和相相机的直直接操作作,另一一类是真真实感属属性的编编辑。IIntrra3DD的场景景视图构构件(SScenneViiew)封装了了交互式式绘制的的所有细细节,如如消息处处理、场场景节点点的遍历历绘制、多重采采样消锯锯齿、鼠鼠标交互互等。为为了便于于编辑真真实感属属性,IIntr
56、ra3DD定制了了一些常常用对话话:矢量量字体对对话(FFonttDiaalogg)、颜颜色对话话(CoolorrDiaalogg)、材材质库对对话(MMateeriaalLiibDiialoog)、材质对对话(MMateeriaalDiialoog)与与光源对对话(DDirLLighhtDiialoog, PoiintLLighhtDiialoog, SpootLiighttDiaalogg)。5.5.2.2 用户界界面设计计Intrra3DD的场景景视图构构件ScceneeVieew用于于快速创创建交互互式3DD应用程程序的主主界面。SceeneVVieww支持sseleectiing、s
57、caalinng、rottatiing、traansllatiing、creeatiing、delletiing等等三十余余种操作作,并提提供工具具条方便便于交互互,如图图5.110所示示。为了编辑辑真实感感属性,常需在在对话框框中绘制制3D 图形。Miccrossoftt的窗口口系统不不提供33D的对对话窗口口。使用用Inttra33D的Winndoww3D构构件可在在对话框框中创建建多个33D视图,图5.11的的材质对对话和图图5.112的材材质库对对话都使使用了WWinddow33D构件件。颜色色编辑是是3D图形形程序中中最常用用的交互互,材质质与光源源的编辑辑实际上上是通过过改变颜颜色
58、分量量来实现现的。需需要进行行颜色编编辑的交交互均涉涉及HSSV与RGBB模式的的颜色转转换。IIntrra3DD的“绘制与与交互层层”实现了了这些计计算,并并且提供供彩色的的滑动条条用于鼠鼠标交互互。图55.133、图5.14分分别为点点光源对对话和颜颜色对话话。图5.110 用于直直接操作作的三维维交互工工具条图5.111 材材质对话话 图5.112材质质库对话话 图5.13 点光源源对话图5.114 颜色对对话5.5.3 支支持协同同工作的的网络通通讯开发发系统 CNCC 1.0最简单单的协同同工作模模式是让让两个客客户机直直接通讯讯,可以以用Soockeet编程程实现。假设有有 n 个
59、客户户机参加加协同工工作,每每个客户户机将与与所有其其它的客客户机通通讯。那那么总共共存在nn(n-1)/2 个个Socckett直接通通讯,并并且每个个客户机机的变动动将导致致其它客客户机的的修改。这种SSockket直直接通讯讯使得协协同工作作的管理理和客户户机的程程序设计计变得非非常困难难。CNNC系统统提供了了支持“发布订阅(Pubblissh-SSubsscriibe)”与“组播(Mullticcastt)” 模式式的服务务器与AAPI,可以高高效地管管理多个个组群的的协同工工作,并并使得客客户机的的程序设设计十分分简单。CNCC 1.0的系系统结构构如图55.155所示。CNC 服
60、务器器将客户户机分组组管理。在“发布订阅”模式中中,将产产生数据据的进程程称为生生产者(Prooduccer),将接接受数据据的进程程称为消消费者(Connsummer)。生产产者可以以向服务务器发布布数据,服务器器保存这这些数据据。消费费者可以以向服务务器订阅阅数据。每个客客户机可可能是很很多数据据的生产产者或消消费者。同一时时刻,CCNC系系统允许许有任意意多个生生产者和和消费者者存在。CNCC的“发布订阅” 功能能是用TTCP协协议实现现的。在“组组播” 模式式中,服服务器动动态地分分配每个个组的组组播地址址。客户户机可以以向服务务器申请请加入任任意组,允许向向任意组组播放消消息,服服务
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025装饰设计工程合同范本
- 2025成都写字楼租赁合同
- 2025年股权转让合同范本2
- 2025汽车租赁合同范本 汽车租赁合同模板
- 债权债务三方协议
- 2025租房合同范本下载+标准版本
- 2025发展股份有限公司与大连天成大厦有限公司代建合同纠纷案
- 2025年四川货运从业资格考试答案大全
- 土地流转农户与农业合作社协议书
- 国际商法合同法重点考题解析
- 第18课《在长江源头各拉丹东》课件+2023-2024学年统编版语文八年级下册
- 造纸化学品3课件
- 《电力建设工程起重施工技术规范》
- 小学校教材教辅读物自查自纠排查表
- 诗歌25种表现手法及诗歌鉴赏艺术手法题(二)
- 广东省省级政务信息化(2024年第一批)项目需求-广东省财政厅业务系统运维运营服务(2024年)项目
- 寄拍行业分析
- 培训地坪漆课件
- 电子商务的区块链与加密货币
- 边缘人格障碍患者辩证行为治疗的疗效研究
- 江苏开放大学2024年春《毛泽东思想和中国特色社会主义理论体系概论060878》实践作业参考答案
评论
0/150
提交评论