面向对象的计算和Web数据管理课后习题答案.docx
《面向对象的计算和Web数据管理课后习题答案.docx》由会员分享,可在线阅读,更多相关《面向对象的计算和Web数据管理课后习题答案.docx(27页珍藏版)》请在冰豆网上搜索。
![面向对象的计算和Web数据管理课后习题答案.docx](https://file1.bdocx.com/fileroot1/2023-2/24/85e2d82c-7268-46b5-b8be-37710be69fee/85e2d82c-7268-46b5-b8be-37710be69fee1.gif)
面向对象的计算和Web数据管理课后习题答案
第一章
2.SOA:
(面向服务体系结构)是一个分布式软件体系结构,它是通过松散耦合的服务构建的系统软件这些服务通过标准接口,例如WSDL(Web服务描述语言)接口,以及标准的消息交换协议,例如SOAP(简单对象访问协议)互相通信。
这些服务是自治和独立于平台的。
它们驻留在不同的计算机上并且为了实现期望的目标和最终结果使用彼此的服务。
SOC:
(面向服务计算)是基于SOA模型的计算范型。
它包括三个并发进程中表示的计算概念、原理以及方法。
这三个并发进程是服务开发、服务发布以及使用发开出的服务进行应用组合。
SOD:
(面向服务开发)是基于SOA概念和SOC范型的整个软件开发周期,包括需求、问题定义、概念模型、规格说明、体系结构设计、组合、服务发现、服务实现、测试、评估、部署和维护,这些活动将实现可运行的软件。
SOE:
(面向服务企业)是一个通过SOA系统实现的一个并能外向展示业务过程的一系列技术。
SOE为管理采用SOA技术的业务过程提供了一个框架。
SOI:
(面向服务的基础设施)①支持SOC的硬件和软件。
②一个硬件系统可以像软件系统那样按面向服务的方式组织起来。
SOSE:
(面向服务的系统工程)是系统工程、软件工程和面向服务计算的一个组合,它建议在系统工程原则下开发面向服务的软件和硬件,这些原则包括需求、建模、规格说明、验证、设计、实现、确认、运行以及维护。
3.OOC范型和SOC范型在需求分析上有什么区别。
面向对象的需求分析基于面向对象的思想,以用例模型为基础。
开发人员在获取需求的基础上,建立目标系统的用例模型。
所谓用例是指系统中的一个功能单元,可以描述为操作者与系统之间的一次交互。
用例常被用来收集用户的需求。
(P5)
(1) SOC强调的是分布式服务(包含可能的服务数据)而不是分布式对象。
(2) SOC明确区分开发责任、软件提供服务、服务中介,通过服务消费者构建应用。
(3) SOC支持库(公共和私有)中重用服务的匹配、发现和调用(远程或本地) (4) 在SOC中,服务通过独立于平台和供应商的开发标准和协议通信。
(P16 表1.1)
4.把服务提供者和应用构建者分开的主要优点是什么?
SOC这种范型把开发者分成独立但相互协作的三方:
应用构建者、服务中介、服务提供者。
服务提供者的职责是开发具有标准接口的软件服务。
服务中介发布或市场化可用服务。
应用构建者通过服务中介发现可用的服务并使用服务开发新的应用,通过发现和组合而不是传统的设计和编码来开发应用。
换言之,应用开发是三方协作的结果。
服务和平台无关并且松散耦合,因此在组合服务时,可以使用不同提供者开发的服务。
因此,把服务提供者和应用构建者分开的主要优点是:
这种面向服务的体系机构给应用构建者最大的灵活性去选择最好的服务中介以及服务。
5.SOSE的主要技术是什么?
对于每一项技术,用一两句话描述它的目的。
(P18 表1.2)
6.比较传统软件开发过程和面向服务软件开发过程。
描述开发过程中的每一步的目的、职责和功能。
在传统的软件开发过程中,整个过程往往由开发者所在组织管理。
面向服务软件的开发分为三个平行的过程:
服务开发,服务发布到服务中介,应用构建(组合)。
①一个面向对象(OOC)应用由同一个团队使用相同的语言开发,而一个面向服务(SOC)应用是通过已开发好的服务创建,这些开发好的服务由独立的服务供应商开发。
应用构建者通过服务目录和服务库,查询所需服务。
如果服务无法找到,应用者可以发布需求或自己开发。
服务提供者则根据自己的需求分析或查询目录中发布的需求来开发服务。
②(P20 图1.13)
7.什么是服务注册中心?
什么是服务库?
它们有什么区别?
(不太准确) 服务注册中心是服务发现的支持者。
它包含一个可用服务的存储库,并允许感兴趣的服务使用者查找服务提供者接口。
服务数据库:
包含系统中所有服务的信息和一个注册中心服务。
服务注册中心实现的基础是一个服务数据库,注册中心服务封装了这个数据库并提供了一套访问这些信息的“标准”APIs。
8.要开发电子旅行社。
如果你分别是下面这些角色,你的职责是什么:
(1)服务提供商?
(2)服务中介?
(3)应用构建者?
服务提供者的职责是开发具有标准接口的电子旅行社相关软件服务。
服务中介发布或市场化可用服务。
应用构建者通过服务中介发现可用的电子旅行社相关服务并使用服务开发新的应用,通过发现和组合而不是传统的设计和编码来开发应用。
9.你计划开发一种在线游戏:
(1)作为应用构建者你必须做什么?
你希望服务提供者为你做什么?
(2)描述你的想法,并列出作为应用建设者你该做的每一件事。
(3)列出你可能通过服务中介找到的服务。
(1)应用构建者通过服务中介发现可用的相关服务并使用服务开发新的应用,通过发现和组合。
服务提供者开发具有标准接口的软件服务,他们需要使用编程语言如C++、C#和JAVA以及面向服务的软件开发环境开发软构建以提供不同的服务,这些软构建类似于OOC中的类和对象。
(2)应用构建者通过互联网查找中介服务注册中心,寻找需要的服务以及如何使用服务所需的说明。
服务中介中的本体和分类法可以帮助在请求和注册的服务之间自动匹配。
应用构建者使用可获得的服务进行组合以生成所需的应用。
这是使用服务模块构建大型应用程序的更高层次的编程。
(3)例如:
游戏装备商场服务、网银服务、聊天室服务。
10.列出几个你认为SOC比OOC更适合的应用领域,并说明你的理由。
SOC更适合的应用领域:
电子商务:
在电子商务中有许多服务都是动态的,而且可以通过因特网远程调用。
例如,旅行社可以远程调用航空公司、酒店、和汽车租赁公司提供服务。
银行、医疗保健:
这些领域,来自不同部门的服务松耦合,给客户提供协作服务。
11.SOC范型对IT市场和计算机科学专业的学生有什么影响?
增大就业面。
第二章
2. 程序/方法与进程/线程有什么不同?
(53页第四段)
答:
一个程序/方法是由程序员写的一段代码,它是静态的。
进程/线程是由执行的程序/方法、当前值、状态信息和用于支持它执行的资源构成,资源是它执行时的动态因素。
换言之,一个进程/线程是一个动态实体,只有当程序或函数执行时才会存在。
3. 比较多进程(多任务)操作系统和多线程编程环境。
(53页5、6、7段)
答:
为了真正并行执行多个进程/线程,必须存在多个处理器。
如果系统中只有一个处理器,表面上多个进程/线程执行,实际上实在分时模式下顺序执行。
从同一代码块可以创建多个进程/线程。
默认情况下,包含在不同进程/线程中的代码和数据是分离的,每一个都有它自己执行代码的副本、局部变量的栈、对象数据区以及其他数据元素。
通常情况下,一个分布式操作系统可以由不同电脑上的多个实例或副本构成,每一个实例或副本都可以管理多个进程。
同样,每个进程可以是由多个线程组成的一个多线程程序。
4. 什么是临界操作?
用什么方法可以来保护临界操作?
(54页第1段)
答:
对共享资源的访问称为临界操作。
虽然一个简单的锁定可以防止共享资源被访问,但是也消除了并行处理的可能性。
更理想的方法是不锁定并行读操作,而锁定并行读-写和写-写组合。
5. 什么是死锁?
哪些策略可以用来解决死锁问题?
(55页)
答:
死锁的情况是两个或多个竞争操作等待对方完成,导致都不能完成。
解决方法:
(1) 死锁预防:
使用一种算法可以保证不会发生死锁。
(2) 死锁避免:
使用一种算法,能够遇见死锁的发生从而拒绝资源
请求、
(3) 死锁检测和恢复:
用一种算法来检测死锁的发生,强迫线程释
放资源、挂起等待。
6. 改进哲学家就餐问题使其不会产生死锁?
答:
每一次最多只能有4个哲学家(共有5个哲学家)申请就餐,这样其中的一个哲学家就能申请到两只筷子,就能够进餐,再将筷子释放给其他哲学家就餐,直到所有哲学家就餐完毕。
7. Java中睡眠使用:
sleep()方法;等待使用wait()方法;挂起使用join()方法。
sleep()
调用sleep()方法使线程暂时停止一段执行时间,该时间由给定的毫秒数决定 ,线程在指定时间内不会运行,会自动唤醒,不会让出控制权。
join() 方法使线程挂起,使当前执行的线程停下来等待,直至join()方法所调用的那个线程结束,再恢复执行 。
例如:
当有a和b两个线程,启用b.join();方法时,a线程就会被挂起,直到b线程结束,a线程才继续执行。
wait()
使线程等待,直到线程得到了notify()和notifyAll()消息,线程才会进入“可执行”状态。
wait()、notify()、notifyAll()不同于其他线程方法,这3个方法是java.lang.Object类的一部分,所以在定义自己类时会继承下来。
8. 创建子进程:
int fork(); 启动子进程:
exec(参数列表);
9. 在java中,几个线程方法wait(),notify(),notifyALL()用于协调对共享资源的访问。
C#的Monitor类具有执行相同功能的方法,它们是
Monitor.Wait(),Monitor.Pulse(),Monitor.PulseALL()。
完全等价的有:
start();run()。
独有的是:
sleep()方法。
10. 比较C#和Java中创建和启动线程的进程?
C#和java启动线程是一样的,都使用:
Thread.Start()方法。
C#中创建线程:
Thread t = new Thread(new ThreadStart
(FunctionName)); java中创建线程:
方法一:
继承Thread类创建线程
(1)继承Thread类;
(2)覆盖run()方法;
(3)用new MyThread(...)创建一个线程 (4)通过调用start()方法启动线程 方法二:
实现Runnable接口创建线程
(1)实现Runnable接口;
(2)覆盖run()方法;
(3)用new MyThread(...)创建一个线程 (5)通过调用start()方法启动线程
11. 解释monitor是怎么实现的?
为什么
monitor.enter/monitor.exit不能通过自动装箱拆箱的方式获得值类型变量?
(P79) 答:
(1) 在进入一个buffer对象引用之前,运行时环境检查锁的开关状态。
如果锁是开的(true),线程告诉Monitor.Enter阻塞。
堆内存中的对象锁被存储在叫做同步阻塞的表中;如果锁是关的(false),线程告诉Monitor.Enter解锁。
在访问缓冲区引用的对象时阻止其它线程进入。
(2) 如果monitor.enter/monitor.exit通过自动装箱拆箱的方式获得值类型变量,可能会出现语义错误。
12. 为什么C#中的reader/writer锁比Monitor锁更有效率?
(P84)
答:
ReaderWriterLock类允许读-读重叠,而Monitor类阻止任何重叠;
ReaderWriterLock类的锁定方法有一个超时的参数,指定放弃前等待多长时间。
而如果对象被锁定,Monitor.Enter永远等待,Monitor.TryEnter立刻放弃。
13. 当线程正在执行被锁操作保护的代码时,是否可以中断?
(从执行状态转换到就绪状态)?
为什么?
答:
不能。
因为被加锁的代码段就是一段互斥段,互斥段在一个时刻内只允许一个线程进入执行,其它线程必须等待。
14. 如何通过同步/监视机制保护共享对象?
(1)lock 关键字将语句块标记为临界区,方法是获取给定对象的互斥锁,执行语句,然后释放该锁。
lock 确保当一个线程位于代码的临界区时,另一个线程不进入临界区。
如果其他线程试图进入锁定的代码,则它将一直等待(即被阻止),直到该对象被释放
(2)与 lock 关键字类似,监视器防止多个线程同时执行代码块。
Enter 方法允许一个且仅一个线程继续执行后面的语句;其他所有线程都将被阻止,直到执行语句的线程调用 Exit。
这与使用 lock 关键字一样。
事实上,lock 关键字就是用 Monitor 类来实现的
15. 什么是事件?
事件与锁之间的主要区别是什么?
AutoResetEvent与ManualResetEvent之间的区别是什么?
(P86和P87)
答:
在C#中,事件是某一受关注的事件发生后的通知,每一个事件包含了关于这一特定事件的信息。
16. 异常处理与事件驱动编程的主要区别是什么?
答:
异常处理用于处理计算过程中发生的异常情况,是用来处理非正常情况的;而基于事件驱动的编程时用于处理特殊的令人关注的事件,比如单击鼠标。
17. 基于控制流的编程与事件编程的主要区别是什么?
(P95)
答:
控制流驱动方法有唯一的程序入口,输入数据来自不同时间不同地点,只有当控制流返回这一地点时输入数据才被处理;在基于事件驱动的方法中,提供了事件板和报警板机制,事件板记录少量的紧迫请求,报警板负责更加迫切的请求。
在事件驱动中,方法作为事件处理,而不是控制流的一部分。
18. 代理与类有什么不同?
(P96)
答:
代理是类型安全的,不执行隐式类型转换。
(1) 代理允许方法名作为参数„„
(2) 通过把事件处理的名字„„
19. 代理与方法有什么不同?
答:
代理声明定义了一个引用类型,它可以封装一个带有特定签名的方法。
代理类似于C++中的函数指针。
方法是一个可以被其它程序调用或者重用的代码块,方法通过名字、参数列表和返回类型来定义,编程时,方法作为程序的一个构件和控制流的一部分。
第三章
2、列出并讨论现有SOC软件开发环境各自的特点。
第一部分P115(×表示各开发环境可适用于)
3、什么是代理?
代理和它代表的服务之间有什么不同?
如何创建一个代理?
一个代理包含一组端点引用,端点引用往往被定义为虚拟的对象。
在面向对象计算中,对象具有抽象的方法。
代理创建一个从服务客户到远程服务的管道,因此就像访问本地对象一样访问远程服务。
客户端通过调用代理的抽象方法访问服务的操作。
给应用添加远程web服务(创建代理),鼠标右键单击应用文件夹或者项目中的“引用”文件夹,然后选择“添加服务引用”或者选择“添加web引用”。
P145
4、描述SOC软件开发中的SOAP的作用。
第一部分P137(底下一整段)
5、SOAP是否支持双向通信?
如果不,响应消息如何与发送者建立相关性?
SOAP是一个无状态的单向的信息交换协议不支持双向通信。
SOAP依赖于HTTP把返回消息和请求消息连接起来,HTTP隐含地给出了请求消息和响应消息的相关性。
(此处为XX扩充内容:
把 SOAP 绑定到 HTTP,在使用 HTTP 作为协议绑定的场合中, RPC 请求映射到 HTTP 请求上,而 RPC 应答映射到 HTTP 应答。
然而,在 RPC 上使用 SOAP 并不仅限于 HTTP 协议绑定。
SOAP也可以绑定到TCP和UDP协议上。
)
6、在SOAP协议中,哪些信息包含在头部?
哪些信息包含在正文?
标头部分包含零个或多个SOAP头块,每个标头都确定了SOAP消息路径上的接收者。
正文包含零个获多个元素信息项,确定了SOAP消息路径上最终的SOAP接收者。
7、描述SOC软件开发中的WSDL的作用。
WSDL(Web Service Description Language )是一种用通用的SML语法描述WEB服务的语言。
WSDL描述了WEB服务的四个关键方面:
(1) 服务的功能
(2) 参数值的数据类型以及函数(服务)调用的返回类型 (3) 所使用的传输协议的绑定信息,一般都用SOAP协议 (4) 定位指定服务的地址信息
换句话说,WSDL表示了服务请求者和服务提供者之间的契约。
这类似于面向对象语言中类中方法(成员函数)的接口,在面向对象语言中用户可以使用类中定义的函数的接口。
关键的区别是,WSDL是平台和语言无关的,主要用于SOAP调用(虽然不是独有的)。
通过WSDL。
客户可以找到web服务并调用其公开的任何功能,使用WSDL相关工具可以自动化这一过程,使新服务很容易集成到应用中,而很少或根本不用编码。
因此,WSDL在web服务体系结构中很重要,因为它不但是用于描述服务的通用语言,而且是一个把服务自动集成到应用的平台。
潜在的,这一特征允许应用进行自动的重新配置和重新组合。
重新配置就是用具有相同功能,但性能和可靠性更稳定的WEB服务替换应用中的服务。
重新组合是指改变应用的结构和功能。
8、WSDL描述了WEB服务的哪些关键方面?
WSDL没有描述哪些方面?
这些元素如何组织?
WSDL描述了WEB服务的四个关键方面:
(5) 服务的功能6) 参数值的数据类型以及函数(服务)调用的返回类型 (7) 所使用的传输协议的绑定信息,一般都用SOAP协议 (8) 定位指定服务的地址信息
后面两个问题我没有找到,也没有XX到,但书中141页有关于WSDL文档中的元素的介绍和结构。
9、什么是服务端点?
端点必须包括哪些信息?
一个端点是一个暴露在外的服务接口(方法名和参数),因此客户可以访问服务中的操作(方法)。
一个端点包含地址(入口点)、操作名称、返回值类型和参数以及其类型等。
10、在开发过程中托管Web服务,可获得哪种托管服务?
有三种不同的方式托管服务,并允许远程方位windows环境下创建的服务:
.Net开发服务器、Windows下的IIS和web服务器。
(1).Net开发服务器
.Net包括一个开发服务器,它允许在同一台计算机上测试并访问Web服务,而无需连接互联网或安装IIS。
(2)Windows下的IIS IIS可以将计算机上的任何一个文件夹(目录)作为服务器。
(3)WEB服务器或windows服务器 如果正在服务器(例如Windows Server 2008)上开发Web或Windows服务,当测试服务时,将会在窗口中创建完整的Web地址。
11、什么是IIS?
在基于web服务的应用中,IIS的作用是什么?
IIS即INTERNET信息服务,是windowsXP的一个可选组件。
在大多数WEB服务器上,IIS是一个服务运行环境,它可以安装在windows操作系统中,使得部分文件系统成为服务器。
IIS一直在运行,监听请求并处理请求排队。
当远程客户激活服务器上的共享服务时,IIS把远程客户端的请求重定向到它托管的正确服务上。
IIS管理服务之间的共享资源。
IIS使用安全套接字(SSL)验证远程调用者并保障服务器上数据的安全。
12、什么是虚拟目录?
为什么我们需要虚拟目录?
创建虚拟目录的过程是什么?
答:
虚拟目录的定义每个Inernet服务可以从多个目录中发布。
通过以通用命名约定(UNC)名、用户名及用于访问权限的密码制定目录,可将每个目录定位在本地驱动器或网络上。
虚拟服务器可拥有一个宿主目录和任意数量的其他发布目录。
其他发布目录称为虚拟目录。
为什么我们需要虚拟目录?
所谓主目录,就是你IIS里设置的网站目录。
而虚拟目录则可以是任何目录,可以在主目录下面,也可以不在主目录下面,不过虚拟目录一般都是指的非主目录的文件夹。
设置虚拟目录的目的就是把非主目录下的文件夹虚拟成主目录下的文件夹。
比如你的主目录指定为D盘下的wwwroot文件夹,有时候为了一些特殊目的,我们需要通过网站访问D盘下面的security目录下的内容,这时直接是无法访问的。
因为它不属于主目录。
这时候就可以用到虚拟目录了,我们可以建立一个虚拟目录,虚拟目录名可以随便设置。
设置以后我们就要吧通过http:
//域名/虚拟目录名 来访问这个虚拟目录了。
创建虚拟目录的过程是什么?
Web服务器中虚拟目录需要在主目录的基础上进行创建:
第1步,在开始菜单中依次单击“管理工具”→“Internet信息服务(IIS)管理器”菜单项,
打开“Internet 信息服务(IIS)管理器”窗口。
在左窗格中依次展开服务器→“网站”目录,右键单击Web站点名称,在弹出的快捷菜单中依次选择“新建”→“虚拟目录”命令。
第2步,在打开的“虚拟目录创建向导”中单击“下一步”按钮,打开“虚拟目录别名”对话框。
然后在“别名”编辑框中输入一个能够反映该虚拟目录用途的名称(如MsserverBook),并单击“下一步”按钮。
第3步,打开“网站内容目录”对话框,在此处需要指定虚拟目录所在的路径。
单击“浏览”按钮,在本地磁盘或网上邻居中选择目标目录,虚拟目录与网站的主目录可以不在一个分区或物理磁盘中。
依次单击“确定”→“下一步”按钮。
第4步,在打开的“虚拟目录访问权限”对话框中,可以设置该虚拟目录准备赋予用户的访问权限。
用户可以根据实际需要设置合适的权限,并单击“下一步”按钮。
第5步,打开完成创建虚拟目录对话框,单击“完成”按钮关闭虚拟目录创建向导。
[1]
13、理想的服务中介应该提供哪些特征?
目前的服务中介(UDDI、ebXML、临时登记表)提供了哪些功能?
答:
理想的服务中介应该具备的特征:
n 服务注册:
这是服务中介的基本功能,它允许服务提供者注册他们服务的类型、描述、
联系信息、访问点(如URL),并允许服务请求者基于它们拥有的部分信息发现他们想要的服务;
n 服务存储:
托管服务的执行。
为了支持大批量访问,托管服务器必须具有超级计算能力
和高速的互联网连接;
n 服务规范和需求:
如果某个服务请求者不能发现服务,可以发布规范或者需求,从而使
服务提供者可以开发以满足规范或者需求的服务。
服务需求使用自然语言书写,而服务规范用规格语言或者接口定义语言如WSDL编写;
n 应用模板:
不仅是服务,由多个服务和图形用户界面(GUI)组成的应用也可以使用
SOC规范。
应用模板指定了应用的工作流、参与服务的描述、服务接受的标准以及应用集成标准。
应用构建者采用应用模板开发应用;
n GUI模板:
GUI是一个软件产品成功的关键。
GUI模板的发布可以帮助应用构建者通
过使用现有的GUI设计创建用户友好的高效率的GUI; n 合作协议和模板:
合作协议和模板定义了应该用什么语言定义合作以及服务之间如何通
信。
合作协议和模板的发布规范了服务提供者如何定义应用、GUI模板和服务接口。
因为合作协议和模板提供了可重用的工作模式,这种模式可在应用和服务开发中采用,因而缩短了开发周期; n 策略:
基于策略的计算建议把数据和计算分离。
用来反映策略变化的数据项存储在配置
文件或者策略数据库中。
策略的修改可以在运行时完成,无需中断程序的执行。
为了重用,可以发布策略。
另一方面,为了满足对服务中介的动态需求,服务中介应该用基于策略的计算实现; n 数据库和本体论:
服务中介是一个为它的客户提供各种不同服务的服务。
为了存储和管
理大量数据和服务,数据库的支持是必不可少的。
自动发现服务和应用模板是服务中介的需求。
具有语义属性和推理能力的本体可以扩展传统数据库的能力,更好的支持自动化的服务发现;
n 集成测试和评估工具:
测试和评估,包括测试用例生成、测试结果、验证、确认、可靠
性评估和安全性评估,都是软件开发中的关键而又苦难的步骤。
服务中介可以提供工具,在绑定服务到应用之前,帮助应用构建者测试服务; n 服务质量:
服务中介可以跟踪并保存服务的性能和可信性数据是一项期望的功能。
这些数据包括响应时间、吞吐量、可靠性、外部安全性以及成本效益。
UDDI所提供的功能:
UDDI(统一描述,发现和集成协议),它的主要功能是服