《⾯向对象的计算和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个⽅法是www.doczj/doc/9118a1d7f342336c1eb91a37f111f18583d00c84.html ng.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是怎么实现的?为什么
(1)在进⼊⼀个buffer对象引⽤之前,运⾏时环境检查锁的开关状态。
如果锁是开的(true),线程告诉Monitor.Enter阻塞。堆内存中的对象锁被存储在叫做同步阻塞的表中;如果锁是关的(false),线程告诉Monitor.Enter解锁。在访问缓冲区引⽤的对象时阻⽌其它线程进⼊。(2)如果/it 通过⾃动装箱拆箱的⽅式获得值类型变量,可能会出现语义错误。
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隐含地给出了请求消息和响应消息的相关性。(此处为百度扩充内容:把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)定位指定服务的地址信息
后⾯两个问题我没有到,也没有百度到,但书中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⽬录下的内容,这时直接是⽆法访问的。因为它不属于主⽬录。这时候就可以⽤到虚拟⽬录了,我们可以建⽴⼀个虚拟⽬录,虚拟⽬录名可以随便设置。设置以后我们就要吧通过域名/虚拟⽬录名来访问这个虚拟⽬录了。创建虚拟⽬录的过程是什么?
Web服务器中虚拟⽬录需要在主⽬录的基础上进⾏创建:
第1步,在开始菜单中依次单击“管理⼯具”→“Internet信息服务(IIS)管理器”菜单项,
打开“Internet 信息服务(IIS)管理器”窗⼝。在左窗格中依次展开服务器→“⽹站”⽬录,右键单击Web站点名称,在弹出的快捷菜单中依次选择“新建”→“虚拟⽬录”命令。
第2步,在打开的“虚拟⽬录创建向导”中单击“下⼀步”按钮,打开“虚拟⽬录别名”对话框。然后在“别名”编辑框中输⼊⼀个能够反映该虚拟⽬录⽤途的名称(如MsserverBook),并单击“下⼀步”按钮。
第3步,打开“⽹站内容⽬录”对话框,在此处需要指定虚拟⽬录所在的路径。单击“浏览”按钮,在本
地磁盘或⽹上邻居中选择⽬标⽬录,虚拟⽬录与⽹站的主⽬录可以不在⼀个分区或物理磁盘中。依次单击“确定”→“下⼀步”按钮。
第4步,在打开的“虚拟⽬录访问权限”对话框中,可以设置该虚拟⽬录准备赋予⽤户的访问权限。⽤户可以根据实际需要设置合适的权限,并单击“下⼀步”按钮。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。