面向对象的计算和Web数据管理课后习题答案.docx
- 文档编号:807327
- 上传时间:2022-10-13
- 格式:DOCX
- 页数:20
- 大小:104.14KB
面向对象的计算和Web数据管理课后习题答案.docx
《面向对象的计算和Web数据管理课后习题答案.docx》由会员分享,可在线阅读,更多相关《面向对象的计算和Web数据管理课后习题答案.docx(20页珍藏版)》请在冰豆网上搜索。
面向对象的计算和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 确保当一个线程位于代码的临界区
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 计算 Web 数据管理 课后 习题 答案