2.6计算机语言&&2.7 多媒体
2.6计算机语言
2.6.1计算机语言的组成
计算机语言 (Computer Language) 是指用于人与计算机之间交流的一种语言,是人与计算机之间传递信息的媒介。计算机语言主要由一套指令组成,而这种指令一般包括表达式、流程控制和集合三大部分内容。
表达式又包含变量、常量、字面量和运算符。流程控制有分支、循环、函数和异常。集合包括字符串、数组、散列表等数据结构。编程人员可以通过这些指令来指挥计算机进行各种工作。
2.6.2计算机语言的分类
计算机语言的种类繁多,早期人们把计算机语言分成机器语言、汇编语言和高级语言三大类,而针对不同的处理器架构,机器语言和汇编语言又存在着许多种语言类。近年来,随着计算机语言的不断发展,涌现出了众多其他语言,这里主要分别介绍机器语言、汇编语言、高级语言、建模语言和形式化语言等。
1.机器语言
机器语言是最早使用的程序设计语言,是第一代计算机语言,是计算机自身具有的“本地语”。在计算机设计时,围绕的中心是指令,指令是一种基本的操作。一台计算机处理功能的大小与指令的功能以及指令的多少有关。所有指令的集合称为指令系统,也就是机器语言。机器语言是计算机能够直接接收并能识别和执行操作的语言,其优点是可以被计算机直接理解和执行,而且执行速度快、占用内存少。
由于每条机器指令就是一个0、1串,使用机器语言编程十分烦琐,且不易学、不易记、不易用、不易调试和维护,而且由于每台计算机的指令系统往往各不相同,所以,在一台计算机上执行的程序,要想在另一台计算机上执行必须另编程序,造成了重复工作。因此,机器语言是不可或缺的,但它又阻碍了计算机应用的发展,使计算机仅为少数专业人员所使用。
1)机器语言的指令格式
机器语言指令是一种二进制代码,由操作码和操作数两部分组成。计算机是通过执行指令来处理各种数据的。为了指出数据的来源、操作结果的去向及所执行的操作,一条指令必须包含下列信息。
(1)操作码。它具体说明了操作的性质及功能。一台计算机可能有几十条至几百条指令,每一条指令都有一个相应的操作码,计算机通过识别该操作码来完成不同的操作。
(2)操作数的地址。CPU 通过该地址就可以取得所需的操作数。
(3)操作结果的存储地址。把对操作数的处理所产生的结果保存在该地址中,以便再次使用。
(4)下条指令的地址。执行程序时,大多数指令按顺序依次从主存中取出执行,只有在遇到转移指令时,程序指令的执行顺序才会改变。为了压缩指令的长度,可以用一个程序计数器(Program Counter,PC) 存放指令地址。每执行一条指令, P C 的指令地址就自动+1(设该指令只占一个主存单元),指出将要执行的下一条指令的地址。当遇到执行转移指令时,则用转移地址修改P C的内容。由于使用了PC, 指令中就不必明显地给出下一条将要执行指令的地址。
一条指令实际上包括两种信息即操作码和地址码。操作码用来表示该指令所要完成的操作(如加、减、乘、除、数据传送等),其长度取决于指令系统中的指令条数。地址码用来描述该指令的操作对象,它或者直接给出操作数,或者指出操作数的存储器地址或寄存器地址(即寄存器名)。
指令包括操作码域和地址域两部分。根据地址域所涉及的地址数量,常见的指令格式有以下几种。
(1)三地址指令。一般地址域中A1、A2分别确定第1、第2操作数地址, A 3确定结果地址。下一条指令的地址通常由程序计数器按顺序给出。
(2)二地址指令。地址域中A l 确定第1操作数地址, A 2 同时确定第2操作数地址和结果地址。
(3)单地址指令。地址域中A 确定第1操作数地址。固定使用某个寄存器存放第2操作数和操作结果。因而在指令中隐含了它们的地址。
(4)零地址指令。在堆栈型计算机中,操作数一般存放在堆栈顶的两个单元中,结果又放入栈顶,地址均被隐含,因而大多数指令只有操作码而没有地址域。(5)可变地址数指令。地址域所涉及的地址的数量随操作定义而改变。如有的计算机的指令中的地址数可少至0个,多至6个。
2.汇编语言
为了降低使用机器语言编程的难度,人们进行了一种有益的改进,即用一些简洁的英文字母、符号串来替代一个特定指令的二进制串,例如,用ADD代表加法, MOV代表数据传递等,这样一来,人们很容易读懂并理解程序在做什么,编程、纠错及维护都变得方便了,这种程序设计语言就称为汇编语言,即第二代计算机语言。
与机器语言相比,汇编语言有许多优点。程序设计人员用汇编语言写出的程序,代码短、省空间、效率高。但是汇编语言仍是一种面向机器的语言,通用性差。它要求程序设计人员详细了解计算机的硬件结构,如计算机的指令系统、 CPU 中寄存器的结构及存储单元的寻址方式等,并且要求程序设计人员具有较高的编程技巧。
汇编语言是机器语言的符号化描述,所以也是面向机器的程序设计语言。然而,计算机并不认识这些符号,这就需要一个专门的程序,专门负责将这些符号翻译成二进制的机器语言,这种翻译程序被称为汇编程序。汇编语言同样十分依赖于机器硬件,可移植性不好,但效率十分高,针对计算机特定硬件编制的汇编语言程序,能准确发挥计算机硬件的功能和特长,程序精炼且质量高,所以至今仍是一种常用的强有力的软件开发工具。
1)汇编语言的语句格式
语句 (Statements) 是汇编语言程序的基本组成单位。在汇编语言源程序中有3种语句:指令语句、伪指令语句和宏指令语句(或宏调用语句)。
(1)指令语句。指令语句又称为机器指令语句,将其汇编后能产生相应的机器代码,这些代码能被CPU直接识别并执行相应的操作。基本的指令有ADD、SUB和 AND 等,书写指令语句时必须遵循指令的格式要求。
指令语句可分为传送指令、算术运算指令、逻辑运算指令、移位指令、转移指令和处理机控制指令等类型。
(2)伪指令语句。伪指令语句指示汇编程序在汇编源程序时完成某些工作,例如为变量分配存储单元地址,给某个符号赋一个值等。伪指令语句与指令语句的区别是:伪指令语句经汇编后不产生机器代码,而指令语句经汇编后要产生相应的机器代码。另外,伪指令语句所指示的操作是在源程序被汇编时完成的,而指令语句的操作必须在程序运行时完成。
(3)宏指令语句。在汇编语言中,还允许用户将多次重复使用的程序段定义为宏。宏的定义必须按照相应的规定进行,每个宏都有相应的宏名。在程序的任意位置,若需要使用这段程序,只要在相应的位置使用宏名,即相当于使用了这段程序。因此,宏指令语句就是宏的引用。
2)指令语句和伪指令语句格式
指令语句和伪指令语句有相同的语句格式,每条语句均由如下4个字段 (Fields) 组成:名字、操作符、操作数和注释。其中,每个字段的意义如下。
(1)名字字段 (Name Field)。除少数伪指令语句必选外,其他多数语句是一个任选字段。在指令语句中,这个字段的名字叫标号,且一定是用冒号“:”作为名字字段的结束符。标号是一条指令的符号地址,它代表该指令代码的第1个字节单元地址。通常在一个程序段的入口指令语句处选用标号。当程序需要转入这个程序时,就可直接引用这个标号。在伪指令语句中,对于不同的伪指令这个字段的名字有所不同,它们可以是常量名、变量名、段名、过程名等。指令语句的名字字段后面用空格作为结束符,不得使用冒号,这是它与指令语句的一个重要区别。伪指令语句的这些名字,有的代表一个具体常数值,有的作为存储单元的符号地址。它们都可以在指令语句和伪指令语句的操作数字段中直接加以引用。
(2)操作符字段 (Operator Field)。这是一条语句不可缺少的主要字段,它反映了这个语句的操作要求。在指令语句中,这个字段就是指令助记符,如MOV、ADD和 SUB等,它表示程序在运行时CPU完成的操作功能。在伪指令语句中,这个字段就是本章后面将要介绍的各种伪指令,如数据定义伪指令 DB、DW、DD; 段定义伪指令SEGMENT; 过程定义伪指令PROC等,它表示汇编程序如何汇编(翻译)源程序各条语句。这些伪指令的操作要求都是由汇编程序在汇编源程序时完成的。
(3)操作数字段 (Operand Field)。在一条语句中,本字段是否需要、需要几个以及需要什么形式的操作数等都由该语句的操作符字段(指令助记符/伪指令)确定。如果需要本字段,那么本字段与操作符字段用空格或制表符Tab 作为分界符。如果本字段要求有两个或两个以上操作数,那么各操作数之间用逗号“,”或空格分隔。
(4)注释字段 (Comment Field)。这是一个任选字段。如选用本字段,必须以分号“;”作为字段的开始符。本字段可由程序设计人员编写任意字符串,其内容不影响程序和指令的功能,它们也不出现在目标程序中。这个字段为提高程序的可读性和可维护性提供了方便,它对某些程序段或指令加以注解,说明它们的功能和意义。当需要进行较多的文字说明时,一条语句可以只有注释字段,这时该语句的第1个有效字符必须是分号。
3.高级语言
由于汇编语言依赖于硬件,使得程序的可移植性极差,而且编程人员在使用新的计算机时还需学习新的汇编指令,大大增加了编程人员的工作量,为此诞生计算机高级语言。高级语言不是一门语言,而是一类语言的统称,它比汇编语言更贴近于人类使用的语言,易于理解、记忆和使用。由于高级语言和计算机的架构、指令集无关,因此它具有良好的可移植性。高级语言应用非常广泛,世界上绝大多数编程人员都在使用高级语言进行程序开发。常见的高级语言包括C、C++、Java、VB、C#、Python、Ruby等。下面介绍几种常见的高级语言。
1)C
C 语言是20世纪70年代由美国 Bell 实验室为描述UNIX 操作系统而开发的一种系统描述语言。C 语言同时具有汇编语言和高级语言的优点:语言简洁紧凑,使用方便灵活,运算符极其丰富,可移植性好,可以直接操作硬件,生成的目标代码质量高,程序执行效率高。因此, C语言一出现便在国际上广泛流行起来。
20世纪80年代初,随着微型计算机的日益普及,出现了许多 C 语言版本。由于没有统一的标准,所以这些C 语言之间出现了一些不兼容的地方。美国国家标准学会 (ANSI) 于1989年发布了第1个完整的 C 语言标准,称为ANSI C 标准,简称 C89。1990年 C89 被国际标准化组织 (International Standard Organization,ISO) 采纳,称为ISO/IEC 9899:1990 (简称为 C90)标准。1999年,在对C 语言做了一些必要的修正和完善后,发布命名为 ISO/IEC 9899:1999 (简称为C99)C 语言新标准。之后还有2011年发布的ISO/IEC 9899:2011 (简称为 C11), 最新的C 语言标准是ISO/IEC 9899:2018 (简称为C18)。
2)C++
美国Bell实验室于1980年开始对 C 语言进行改进和扩充,引入面向对象程序设计思想,并于1983年将这个扩充的C 语言正式命名为 C++。C++不仅保持了 C 语言简洁、高效和可取代汇编语言等优点,而且还在模块化结构的基础上增加了对面向对象程序设计的支持。美国国家标准化协会ANSI 和国际标准化组织ISO一起对C++语言进行了标准化工作,并于1998年正式发布了 C++语言的第1个国际标准ISO/IEC 14882:1998 (简称为 C++98)。此后,在C++98的基础上增加了许多新特性后,发布了ISO/IEC 14882:2011 (简称为 C++11) 标准,进一步改进后依次发布了 ISO/IEC 14882:2014(C++14)、ISO/IEC 14882:2017(C++17)、ISO/IEC14882:2020(C++20),C++20 中引入了更多特性,以更简单地编写和维护代码。
面向对象程序设计是软件开发方法的一场革命,它代表了计算机程序设计的新的思维方法。该方法与通常的结构化程序设计不同,它支持一种概念,即旨在使计算机问题的求解更接近人的思维活动,人们能够利用 C++语言充分挖掘硬件的潜力,在减少开销的前提下提供更有力的软件开发工具。
3)Java
Java语言是1991年美国 SUN公司提出的面向计算机网络、完全面向对象的程序设计语言。Java语言的口号是“一次编写,处处运行”。随着 Internet/Intranet 的发展,加上 Java语言本身结构的新颖、能实时操作、可靠又安全、最适合于浏览器编程的特点, Java语言被公认为Internet上的“世界语”。
Java是纯面向对象的语言,其可重用性好,编程效率高,安全性好,程序运行时系统不容易崩溃。更重要的是其跨平台的特性, Java语言新颖的、完全开放的软件技术思路,做到了与硬/软件平台无关,使 Java程序可以在网络上任何装有Java解释器的计算机上运行。
4)Python
Python是一种结合了解释性、编译性、互动性和面向对象的脚本语言,由荷兰人吉多·范罗苏姆 (Guido van Rossum) 于1989年设计,1991年公开发布了Python 的第1个版本。
Python是纯粹的自由软件,具有简洁、易学、易读、易维护、可移植、可嵌入、可扩展、互动等特点,特别是具有强大的标准库,提供了系统管理、网络通信、文本处理、数据库接口、图形系统、 XML处理等额外的功能。Python 的主要应用包括Web 应用、科学计算、大数据分析处理等。
4.建模语言
软件开发技术和模型的表现手法层出不穷,但在目前的软件开发方法中,面向对象的方法占据着主导地位。面向对象方法的主导地位也决定着软件开发过程模型化技术的发展,面向对象的建模技术方法也就成为主导的方法。
公认的面向对象建模语言出现于20世纪70年代中期。从1989年到1994年,其数量从不到10种增加到了50多种。20世纪90年代中期,一批新方法出现了,其中最引人注目的是Booch1993、OOSE 和 OMT-2 等。面对众多的建模语言,用户由于没有能力区别不同语言之间的差别,因此很难找到一种比较适合其应用特点的语言;其次,众多的建模语言实际上各有千秋,极大地妨碍了用户之间的交流。因此,在客观上有必要在精心比较不同的建模语言优缺点及总结面向对象技术应用实践的基础上,组织联合设计小组,根据应用需求,取其精华,去其糟粕,求同存异,统一建模语言工作,之后先后推出了 UML的多个版本。UML 的发展历史如图2-24所示。
在美国,截至1996年10月, UML获得了工业界、科技界和应用界的广泛支持,已有700多个公司表示支持采用 UML作为建模语言。1997年10月17日, OMG采 纳UML1.1 作为面向对象技术的标准建模语言。在我国, UML 也成为广大软件公司的建模语言。1999年底, UML已稳占面向对象技术市场的90%,成为可视化建模语言事实上的工业标准。

UML 是一种定义良好、易于表达、功能强大且普遍适用的建模语言。它的作用不限于支持面向对象的分析与设计,还支持从需求分析开始的软件开发的全过程。UML 成为“标准”建模语言的原因之一在于与程序设计语言无关。而且, UML 符号集只是一种语言而不是一种方法学,不需要任何正式的工作产品。因为语言与方法学不同,它可以在不做任何更改的情况下很容易地适应任何公司的业务运作方式。
1)UML组成要素
UML 由3个要素构成:UML 的基本构造块(事物、关系)、图(支配基本构造块如何放置在一起的规则)和运用于整个语言的公用机制。
(1)事物。UML 中有4种事物:结构事物、行为事物、分组事物和注释事物。
①结构事物。结构事物是UML模型中的名词。它们通常是模型的静态部分,描述概念或物理元素。结构事物包括类 (Class)、 接口 (Interface)、 协 作 (Collaboration)、 用 例 (UseCase)、 主动类 (Active Class)、 构件 (Component)、 制 品 (Artifact) 和结点 (Node)。
各种结构事物的图形化表示如图2-25所示。

②行为事物。行为事物是 UML模型的动态部分。它们是模型中的动词,描述了跨越时间和空间
的行为。行为事物包括交互 (Interaction)、 状态机(State Machine) 和活动 (Activity)。各种行为事物的图形化表示如图2-26所示。
状态机描述了一个对象或一个交互在生命期内响应事件所经历的状态序列。单个类或一组类之间协作的行为可以用状态机来描述。一个状态机涉及一些其他元素,包括状态、转换(从一个状态到另一个状态的流)、事件(触发转换的事物)和活动(对一个转换的响应)。在图形上,把状态表示为一个圆角矩形,通常在圆角矩形中含有状态的名称及其子状态。
活动是描述计算机过程执行的步骤序列,注重步骤之间的流而不关心哪个对象执行哪个步骤。活动的一个步骤称为一个动作。在图形上,把动作画成一个圆角矩形,在其中含有指明其用途的名字。状态和动作通过不同的语境来区别。
交互、状态机和活动是可以包含在UML 模型中的基本行为事物。在语义上,这些元素通常与各种结构元素(主要是类、协作和对象)相关。
③分组事物。分组事物是UML模型的组织部分,是一些由模型分解成的“盒子”。在所有的分组事物中,最主要的分组事物是包 (Package)。包是把元素组织成组的机制,这种机制具有多种用途。结构事物、行为事物甚至其他分组事物都可以放进包内。包与构件(仅在运行时存在)不同,它纯粹是概念上的,即它仅在开发时存在。包的图形化表示如图2-27所示。
④注释事物。注释事物是 UML模型的解释部分。这些注释事物用来描述、说明和标注模型的任何元素。注解 (Note) 是一种主要的注释事物。注解是一个依附于一个元素或者一组元素之上,对它进行约束或解释的简单符号。注解的图形化表示如图2-28所示。
(2)关系。UML中有4种关系:依赖、关联、泛化和实现。
①依赖是两个事物间的语义关系,其中一个事物(独立事物)发生变化会影响另一个事物(依赖事物)的语义。在图形上,把一个依赖画成一条可能有方向的虚线,如图2-29所示。②关联是一种结构关系,它描述了一组链,链是对象之间的连接。聚集是一种特殊类型的关联,它描述了整体和部分间的结构关系。关联和聚集的图形化表示如图2-30和图2-31所示。在关联上可以标注重复度和角色。
③泛化是一种特殊/一般关系,特殊元素(子元素)的对象可替代一般元素(父元素)的对象。用这种方法,子元素共享了父元素的结构和行为。在图形上,把一个泛化关系画成一条带有空心箭头的实线,它指向父元素,如图2-32所示。
④实现是类元之间的语义关系,其中一个类元指定了由另一个类元保证执行的契约。在两种情况下会使用实现关系:一种是在接口和实现它们的类或构件之间;另一种是在用例和实现它们的协作之间。在图形上,把一个实现关系画成一条带有空心箭头的虚线,如图2-33所示。

这4种关系是UML模型中可以包含的基本关系事物。它们也有变体,例如,依赖的变体有精化、跟踪、包含和延伸。
(3)UML中的图。图是一组元素的图形表示,大多数情况下把图画成顶点(代表事物)和弧(代表关系)的连通图。为了对系统进行可视化,可以从不同的角度画图,这样图是对系统的投影。
UML 2.0 提供了13种图,分别是类图、对象图、用例图、序列图、通信图、状态图、活动图、构件图、部署图、组合结构图、包图、交互概览图和计时图。序列图、通信图、交互概览图和计时图均被称为交互图。
用例图 (Use Case Diagram) 展现了一组用例、参与者 (Actor) 以及它们之间的关系。用例图通常包括用例和参与者以及它们之间的关系,如图2-34所示。

用例之间有扩展关系(<<extend>>) 和包含关系(<<include>>), 参与者和用例之间有关联关系,用例与用例、参与者与参与者之间有泛化关系。用例图用于对系统的静态用例视图进行建模。这个视图主要支持系统的行为,即该系统在它的周边环境的语境中所提供的外部可见服务。当对系统的静态用例视图建模时,可以用下列两种方式来使用用例图。
①对系统的语境建模。对一个系统的语境进行建模,包括围绕整个系统画一条线,并声明有哪些参与者位于系统之外并与系统进行交互。在这里,用例图说明了参与者以及他们所扮演的角色的含义。
②对系统的需求建模。对一个系统的需求进行建模,包括说明这个系统应该做什么(从系统外部的一个视点出发),而不考虑系统应该怎样做。在这里,用例图说明了系统想要的行为。通过这种方式,用例图使人们能够把整个系统看作一个黑盒子,采用矩形框表示系统边界;可以观察到系统外部有什么,系统怎样与哪些外部事物相互作用,但却看不到系统内部是如何工作的。
2)UML 5种视图
对于同一个系统,不同人员所关心的内容并不一样。因此一个系统应从不同的角度进行描述,从一个角度观察到的系统称为一个视图 (View), 每个视图表示系统的一个特殊的方面。按照图本身具有的特点,可以把图形划分为5类视图,分别是用例视图、逻辑视图、进程视图、实现视图和部署视图,其中的用例视图居于中心地位。
(1)用例视图:描述系统的功能需求,方便找出用例和执行者;它展示了一个外部用户能够观察到的系统功能模型,主要包括用例图。对此关心的开发团队成员主要包括客户、分析者、设计者、开发者和测试者。
(2)逻辑视图:描述如何实现系统内部的功能;系统的静态结构和因发送消息而出现的动态协作关系。逻辑视图包含类图和对象图、状态图、顺序图、合作图和活动图。
(3)进程视图:描述系统的并发性,并处理这些线程间的通信和同步;它将系统分割成并发执行的控制线程及处理这些线程的通信和同步。进程视图主要包括状态图、顺序图、合作图、活动图、构件图和配置图;对此关心的开发团队成员主要包括开发者和系统集成者。
(4)实现视图:描述系统代码构件组织和实现模块及它们之间的依赖关系;实现视图主要包括构件图;对此关心的开发团队成员主要有设计者、开发者和测试者。
(5)部署视图:定义系统中软硬件的物理体系结构及连接、哪个程序或对象驻留在哪台计算机上执行;主要包括配置图;对此关心的开发团队成员主要包括开发者、系统集成者和测试者。
5.形式化语言
形式化方法是把概念、判断、推理转化成特定的形式符号后,对形式符号表达系统进行研究的方法,是用具有精确语义的形式语言书写的程序功能描述,它是设计和编制程序的出发点,也是验证程序是否正确的依据。形式化方法就是用符号化的数学变换把需求分析准确地表述出来,这样可以确保和需求的一致性,并能用于分析和验证应用程序。毕竟,一个程序本身就是一个正式的规范化语言。
1)形式化规格说明语言
为了书写形式化的规格说明,许多计算机科学家从不同的角度,提出了多种不同的形式化规格说明语言。由于所根据的数学基础不同,方法与途径不同,形成了以下几个主要流派。(1)公理方法,利用前置条件与后置条件描述程序的行为,这个学派的代表人物有 Floyd、Hoare和 Dijkstra。
(2)基于集合论和一阶谓词演算的meta-IV 语言和 Z 语言,这种语言已广泛用于书写大型软件的规格说明与设计。在描述程序语言的指称语义时,利用这类语言可以方便地定义高阶函数,并由此定义程序语言的复杂控制构造的意义。利用 meta-IV 描述的形式化软件开发方法,称为维也纳开发方法,简称VDM。
(3)代数规格说明,是关于抽象数据类型的代数描述,语言有 OBJ及 ACT。
(4)进程描述语言,用于描述开发进程的行为。主要有Hoare 的顺序通信进程CSP及R.Milner的通信系统理论CCS。
专用的规格说明语言已有大量的成功实例,例如,在计算机网络与通信系统中,广泛地使用形式化方法来研制与开发各种网络协议。目前国际标准化组织认可的形式化规格说明语言有ISO LOTOS、ISO ESTELLE、ISO SDL、CCITT Z.100和 CCITT SDL等。
2)形式化方法的分类
针对不同的系统,需要采用不同的形式化方法,每一种形式化方法都有不同的数学定义,可通过类型分析决定应用程序采用何种形式化方法。一是面向对象的形式化方法,通过定义状态和操作进行建模,如 Z 语言、 VDM、B、Object-Z 等方法;二是面向属性的形式化方法,如OBJ3、Larch等方法;三是基于并发性的形式化方法,如CCS、ACP、CSP、LOTOS 等;四是基于实时性的形式化方法,如TRIO、RTOZ 等方法。
(1)根据描述方式,可将形式化方法归为模型描述的形式化方法和性质描述的形式化方法两类。模型描述的形式化方法通过构造一个数学模型来直接描述系统或程序;性质描述的形式化方法通过对目标软件系统中不同性质的描述来间接描述系统或程序。
(2)根据表达能力,可将形式化方法大致分为模型方法、代数方法、进程代数方法、逻辑方法和网络模型方法5类。
模型方法对系统状态和改变系统状态的动作直接给出抽象定义,并进行显式描述。该方法的缺陷是不能显式地表示并发。
代数方法通过定义不同操作系统的关系,隐式地描述操作。代数方法也不能显式地表示并发。
进程代数方法通过一个显式模型来描述并发过程,将并发性归为非确定性,通过交错语义来表示系统行为。
逻辑方法通过描述程序状态规范和时间状态规范的逻辑方法来描述系统特性,如CSS、CSP和 ACP 等。
网络模型方法通过独立描述网络中每一个结点,显式地给出系统的并发模型。如 Petri 网。
3)形式化方法的开发过程
按照软件工程“自顶向下、逐步求精”的原则,软件生命周期可分为可行性分析、需求分析、体系结构设计、详细设计、编码和测试发布6个阶段,形式化方法贯穿软件工程整个生命周期。
(1)可行性分析。可行性分析是对待开发系统提供一种综合性的分析方法。综合各方面因素论证待开发系统是否可行,为开发过程提出综合评价和决策依据。由于形式化方法的符号演算系统仍不能完全表达自然语言,所以在此阶段的应用仍是一项巨大挑战。
(2)需求分析。需求分析是在软件开发过程的早期阶段,将用户需求转换为说明文档。一般非形式化的描述可能导致描述的不明确和需求的不一致,可能导致编程错误,影响程序的使用和可靠性。形式化方法则要求明确描述用户需求。
(3)体系结构设计。体系结构设计阶段的根本目的是将用户需求转换为计算机可以实现的目标系统。本阶段侧重描述软件系统的接口、功能和结构。形式化方法对于软件需求描述的优点同样适用于软件设计的描述。由于需求阶段功能描述并不能完全实现,所以形式化方法在此阶段的应用仍存在问题。使用者可采用半形式化方法来完成此阶段的工作。
(4)详细设计。详细设计阶段的形式化是以体系结构规范为基础进行精化描述的过程。通过此阶段的形式化描述能够检验需求描述和用户需求是否一致。为使形式化方法更适用于详细设计和精化过程,可将各种形式的规范联系起来。
(5)编码。自动代码生成器目前能将一些规模较小软件系统的形式化描述直接转换成可执行程序。在简化软件开发过程的同时不仅节约了资源,还增强了软件的可靠性。
(6)测试发布。软件开发的最后阶段是测试发布。在软件投入运行前,需要对软件开发各阶段的文档以及程序源代码进行检查。对于测试来讲,形式化方法可用于测试用例的自动生成,保证测试用例的覆盖率。
4)形式化规格语言——Z 语言
Z 语言是一种形式化语言,它是具有“状态一操作”风格的形式化规格说明语言,在很多大型软件项目中获得成功应用。它以一阶逻辑和集合论作为形式语义基础,将函数、映射、关系等教学方法用于规格说明。Z 语言借助模式来表达系统结构,它提供了一种能独立于实现的、可推理的系统数学模型,具有精确、简洁、无二义性的优点,有利于保证程序的正确性,尤其是适用于无法进行现场调试的高安全性系统的开发。Z 语言最主要的结构是模式,一个模式由变量说明和谓词约束两部分组成,可用来描述系统状态和操作。
Z 语言建立于集合论和数理逻辑的基础上。集合论包括标准的集合运算符、笛卡尔积和幂集,数理逻辑包括一阶谓词演算,二者合二为一,形成了一个易学易用的数学语言。
Z 语言具备将数学进行结构化的方式。数学对象与它上面的操作结合起来形成构型(Schema)。构型语言可被用来描述系统的状态及改变系统的性质,对一个设计的可能求精细化进行推理。
Z 语言是一个强类型系统。数学语言中的每个对象都有唯一的类型,类型作为当前的规格说明中一个最大集合来表示。类型在程序设计实践中是非常有用的概念,据此可以检查一个规格说明中每个对象的类型的一致性。
Z 语言可以使用自然语言。人们用数学陈述问题,发掘解法,证明所做的设计满足规格说明的要求。同时,人们可以使用自然语言将数学与现实世界中的对象相关联,因为人们可以选择富有含义的变量名和辅以注文。一个好的规格说明应当是读者一看就懂的白话文。
Z 语言可以进行求精。通过构造一项设计的模型,利用简单的数学类型标识所需的行为,可以开发一个系统。通过构造关于一个系统设计决策的另一个模型,作为第1个模型的一个实现,就是一次求精。这种求精的过程可以一直继续到产生可执行的代码。
Z 语言是具有强大构造机构的数学语言,同自然语言结合起来,它可被用来产生形式化的规格说明。利用数理逻辑的证明技术,可以对执行规格说明进行推理。对一个规格说明进行求精,得到接近于可执行代码的另一个描述。但是, Z 语言没有提供关于计时的或并发的行为的描述,而有些语言适于做这样的描述,如CSP和 CCS。可以将Z 语言与这些形式化方法结合起来,产生含并发行为的系统的规格说明。
2.7 多媒体
2.7.1 多媒体概述
媒体 (Media) 是承载信息的载体,即信息的表现形式(或者传播形式),如文字、声音、图像、动画和视频等。按照 ITU-T建议的定义,媒体可分为感觉媒体、表示媒体、显示媒体、存储媒体和传输媒体。
(1)感觉媒体 (Perception Medium), 指的是用户接触信息的感觉形式,如视觉、听觉和触觉等。
(2)表示媒体 (Representation Medium), 指的是信息的表示形式,如图像、声音、视频等。
(3)表现媒体 (Presentation Medium) 也称为显示媒体,指表现和获取信息的物理设备,如键盘、鼠标、扫描仪、话筒和摄像机等为输入媒体;显示器、打印机和音箱等为输出媒体。
(4)存储媒体 (Storage Medium), 指用于存储表示媒体的物理介质,如硬盘、软盘、磁盘、光盘、ROM及RAM等。
(5)传输媒体 (Transmission Medium), 指传输表示媒体的物理介质,如电缆、光缆和电磁波等。
多媒体 (Multimedia) 就是指利用计算机技术把文本、图形、图像、声音、动画和电视等多种媒体综合起来,使多种信息建立逻辑连接,并能对它们进行获取、压缩、加工处理和存储,集成为一个具有交互性的系统。当前,多媒体技术已被广泛应用于工业、医疗、军事、轨道交通、办公、教学、娱乐和智能家电等领域。
1.多媒体的重要特征
多媒体有4个重要的特征。
(1)多维化。多维化是指媒体的多样化。它提供了多维化信息空间下的交互能力和获得多维化信息空间的方法,如输入、输出、传输、存储和处理的手段与方法等。
(2)集成性。集成性不仅指多媒体设备集成,而且指多媒体信息集成或表现集成。
(3)交互性。交互性是人们获取和使用信息时变被动为主动的最重要的标志。交互性可向用户提供更有效地控制和使用信息的手段,可增加人们对信息的注意和理解。
(4)实时性。实时性是指多媒体技术中涉及的一些媒体。例如,音频和视频信息具有很强的时间特性,会随着时间的变化而变化。
多媒体技术主要包括感觉媒体的表示技术、数据压缩技术、多媒体存储技术、多媒体数据库技术、超文本与超媒体技术、多媒体信息检索技术、多媒体通信技术、人机交互技术以及多媒体计算机及外部设备等。
2.多媒体系统的基本组成
多媒体系统通常由硬件和软件组成。其中,多媒体硬件主要包括计算机主要配置和外部设备以及与各种外部设备的控制接口。多媒体软件主要包括多媒体驱动软件、多媒体操作系统、多媒体数据处理软件、多媒体创作工具软件和多媒体应用软件等。图2-35给出了多媒体系统的基本组成。

3.多媒体技术应用
目前,多媒体技术主要涉及以下几个方面,且在这些方面具有非常广阔的应用前景。首先是对图像信息的处理,通过多媒体的压缩功能,能够将图像信息进行各种形式的转换,从而保证图像信息的传递性。其次是对音频信息的处理,多媒体技术能够通过音频的合成产生人们需要的一些特定语音信息。此外,当前非常流行的语音转换功能能够实现语音信息和文本信息之间的良好转换,从而极大地方便人们的生活和工作。
2.7.2多媒体系统的关键技术
1.视音频技术
视频技术包括视频数字化和视频编码技术两个方面。视频数字化是将模拟视频信号经模数转换变换为计算机可处理的数字信号,使计算机可以显示和处理视频信号。视频编码技术是将数字化的视频信号经过编码成为视频信号,从而可以录制或播放。
音频技术包括音频数字化、语音处理、语音合成及语音识别4个方面。随着计算机的普及,如何给不熟悉计算机的人提供一个友好的人机交互手段,是人们感兴趣的问题,而语音识别技术就是其中自然的一种交流手段。
1)视音频编码
编解码器指的是能够对一个信号或者一个数据流进行变换的设备或者程序。视音频编码的目的是对视音频数据进行传输和存储,在很多多媒体数据流中,往往需要同时包含音频数据和视频数据,这时通常会加入一些用于音频和视频数据同步的元数据(如字幕)。通常,这种编码后的封装是通过视频文件格式来实现的,如常见的*.mpg、*.avi、*.mov、*mp4、*.rm、*ogg和 *tta等。
2)视音频压缩方法
目前,视音频压缩方法有上百种,这些方法总体上可归类为有损 (Lossy ) 压缩和无损(Lossless) 压缩两类。无损压缩也即压缩前和解压缩后的数据完全一致。多数的无损压缩都采用RLE行程编码算法。而有损压缩意味着解压缩后的数据与压缩前的数据不一致,在压缩的过程中要丢失一些人眼和人耳不敏感的图像或音频信息,这些丢失的信息是不可恢复的。无损压缩常见的格式有WAV、PCM、TTA、FLAC、AU、APE、TAK和 WavPack(WV) 等;有损压缩常见的格式有MP3、Windows Media Audio(WMA)、Ogg Vorbis(OGG) 等。
2.通信技术
通信技术是多媒体系统中的一项关键技术,是指将信息从一个地点传送到另一个地点所采取的方法和措施。这里所说的通信技术仅仅涵盖多媒体系统采用的通信方法。
通信技术通常包括了数据传输信道技术和数据传输技术。数据传输信道是指通信的物理介质,包括同轴电缆、双绞线、光纤、越洋海底电缆、微波信道、短波信道、无线通信和卫星通信等。数据传输技术是指在物理介质上如何组织、传送数据的方法,包括基带传输、频带传输及调制技术、同步技术、多路复用技术、数据交换技术、编码、加密、差错控制技术和数据通信网、设备、协议等。
3.数据压缩技术
在多媒体系统中,由于所涉及的各种媒体信息主要是非常规数据类型,如图形、图像、视频和音频等,这些数据所需要的存储空间是十分巨大的。为了使多媒体技术达到实用水平,除了采用新技术手段增加存储空间和通信带宽外,对数据进行有效压缩将是多媒体发展中必须解决的最关键技术之一。
数据压缩的算法非常多,不同特点的数据有不同的数据压缩算法(也就是编码方式),按类别分主要存在以下3类。
(1)即时压缩和非即时压缩。即时/非即时压缩的区别在于信息在传输过程中被压缩还是信息压缩后再传输。即时压缩一般应用在影像、声音数据的传送中。即时压缩常用到专门的硬件设备,如压缩卡等。
(2)数据压缩和文件压缩。数据压缩是专指一些具有时间性的数据,这些数据常常是即时采集、即时处理或传输的。而文件压缩是指对将要保存在磁盘等物理介质的数据进行压缩。(3)无损压缩与有损压缩。无损压缩是利用数据的统计冗余进行压缩,通常无损压缩的压缩比比较低。而有损压缩是利用了人类对视觉、听觉对图像、声音中的某些频率成分不敏感的特性,允许压缩的过程中损失一定的信息。
国际上已广泛使用数据压缩技术处理各类图形、图像、视频数据,比较流行的几种编码格式已形成国际编码标准。
(1)静态图像压缩编码的国际标准。
联合图像专家小组标准 (Joint Photographic Experts Group,JPEG) 是一种对静态图像压缩的编码算法。“联合”的含义是:国际电报电话咨询委员会 (Consultative Committee onInternational Telephone and Telegraph,CCITT) 和国际标准化协会联合组成的图像专家小组。静态图像压缩标准有JPEG、JPEG 2000。
(2)动态图像视频编码标准 (MPEG)。
运动图像专家组 (Moving Picture Experts Group,MPEG) 是专门制定多媒体领域内的国际标准的一个组织。该组织成立于1988年,由全世界大约300名多媒体技术专家组成。MPEG标准是面向运动图像压缩的一个系列标准。目前有MPEG-1、MPEG-2、MPEG-4、MPEG-7、MPEG-21、DVI。
(3)视频编解码器标准 (H.26L)。
H.26L标准最初是由 ITU-T 的VCEG(Video Coding Experts Group) 在1997年制定的一个视频编码标准, ISO/IEC MPEG 和 ITU-T VCEG联合组成了新的组织Joint Video Team(JVT)的H.26L 研究,在2002年第H.26L标准正式确定。H.26L 旨在提供更高的压缩效率和更灵活的网络适应性,以及增强对于差错的健壮性,适用于可视电话和视频会议等实时视频通信应用。
4.虚拟现实 (VR)/增强现实 (AR) 技术
虚拟现实 (Virtual Reality,VR) 又称人工现实、临境等,是近年来十分活跃的技术领域,是多媒体发展的更高境界, V R 技术涵盖了传统多媒体技术的所有内容。V R是一种可以创建和体验虚拟世界的计算机仿真系统,它利用计算机生成一种模拟环境,使用户沉浸到该环境中,让人有种身临其境的感觉。
V R采用计算机技术生成一个逼真的视觉、听觉、触觉、味觉及嗅觉的感知系统,用户可以用人的自然技能与这个生成的虚拟实体进行交互操作,其概念包含3层含义。
● 虚拟实体是用计算机生成的一个逼真的实体。
● 用户可以通过人的自然技能(头部转动、眼动、手势或其他身体动作)与该环境交互。
● 要借助一些三维传感设备来完成交互动作,常用的有头盔立体显示器、数据手套、数据服装和三维鼠标等。
增强现实 (Augmented Reality,AR) 技术是指把原本在现实世界的一定时间和空间范围内很难体验到的实体信息(视觉信息、声音、味道和触觉等),通过模拟仿真后,再叠加到现实世界中被人类感官所感知,从而达到超越现实的感官体验。增强现实的出现与计算机图形图像技术、空间定位技术和人文智能 (Humanistic Intelligence) 等技术的发展密切相关。
(1)计算机图形图像技术。增强现实的用户可以戴上透明的护目镜,透过它看到整个世界,连同计算机生成而投射到这一世界表面的图像,从而使物理世界的景象超出用户的日常经验之外。这种增强的信息可以是在真实环境中与之共存的虚拟物体,也可以是实际存在的物体的非几何信息。
(2)空间定位技术。为了改善效果,增强现实所投射的图像必须在空间定位上与用户相关。当用户转动或移动头部时,视野变动,计算机产生的增强信息随之做相应的变化。
(3)人文智能。该技术以将处理设备和人的身心能力结合起来为特点,并非仿真人的智能,而是试图发挥传感器、可穿戴计算等技术的优势,使人们能够捕获自己的日常经历、记忆及所见所闻,并与他人进行更有效的交流。
随着计算机图形学、人机接口技术、多媒体技术、传感技术和网络技术等快速发展,虚拟现实和增强现实技术已进入应用阶段,开始对教育、工业生产、旅游、建筑、医疗等领域带来颠覆性影响。
VR/AR 技术主要分为桌面式、分布式、沉浸式和增强式4种。表2-7给出了这4类 VR/AR的具体定义和特点。

VR/AR技术发展至今,虽然被广泛应用,其主要关键技术还有待深入研究,这些关键技术主要包括:
(1)数据采集与优化传输技术。数据采集主要解决如何获取光照、火焰、动态地形等自然现象的数据问题,通常用3种设备获取,即全向相机、高速摄像机和激光设备。优化数据传输技术是要满足低功耗、低延时、高效率等特点,保证数据传输的可靠性。
(2)交互与情形实时再现技术。交互技术的接触方式可分为力觉反馈和触觉反馈两种。力觉反馈是指借助操作控制杆的反作用力效果将虚拟物体的运动轨迹转换成真实物体的机械运动;触觉反馈是指通过手戴3D 数据手套获取手掌和手指的形态和温度等信息,来满足用户对虚拟物体的移动、抓取和触摸等操作。情形实时再现包含了跟踪定位技术、高效可靠的渲染技术和逼真的显示技术等。
浙公网安备 33010602011771号