面向过程、面向对象、面向组件、面向服务软件架构的分析与比较
- 格式:pdf
- 大小:5.14 MB
- 文档页数:16
今天聊⼀下:什么是⾯向对象?⾯向过程?举例⼦以及:⾯向过程和⾯向对象的优缺点,让你⾯试的时。
⼀、⾯向过程:⾯向过程就是分析出实现需求所需要的步骤,通过函数⼀步⼀步实现这些步骤,接着依次调⽤即可。
⼆、⾯向对象:将数据与函数绑定到⼀起,进⾏封装,这样能够更快速的开发程序,减少了重复代码的重写过程。
1、⾯向对象是⼀种编程风格,⼀切皆对象,把⼀切东西看成是⼀个个对象,⽐如⼈、⽿机、⿏标、⽔杯等,他们各⾃都有属性,⽐如:⽿机是⽩⾊的,⿏标是⿊⾊的,⽔杯是圆柱形的等等,把这些对象拥有的属性变量和操作这些属性变量的函数打包成⼀个类来表⽰2、⾯向对象有三⼤特性:封装,继承,多态。
---- 封装:将⼀类事物的属性和⾏为抽象成⼀个类,使其属性私有化,⾏为公开化,提⾼了数据的隐秘性的同时,使代码模块化。
这样做使得代码的复⽤性更⾼。
意义:将属性和⽅法放到⼀起做为⼀个整体,然后通过实例化对象来处理;隐藏内部实现细节,只需要和对象及其属性和⽅法交互就可以了;对类的属性和⽅法增加访问权限控制。
---- 继承:在程序中,继承描述的是多个类之间的所属关系,如果⼀个类A⾥⾯的属性和⽅法可以复⽤,则可以通过继承的⽅式,传递到类B ⾥,那么类A就是基类,也叫做⽗类;类B就是派⽣类,也叫做⼦类。
继承进⼀步提⾼了代码的复⽤性。
---- 多态:所谓多态:定义时的类型和运⾏时的类型不⼀样,此时就成为多态,多态的概念是应⽤于Java和C#这⼀类强类型语⾔中。
:举例⼦第⼀种⽅式(⾯向过程)1、养鸭⼦2、鸭⼦长成3‘、杀4、作料5、烹饪6、吃7、卒第⼆种⽅式(⾯向对象):1、找个卖啤酒鸭的⼈2、给钱交易3、吃4、胖6⽄⾯向过程和⾯向对象的优缺点:⾯向过程优点:性能上它是优于⾯向对象的,因为类在调⽤的时候需要实例化,开销过⼤。
缺点:不易维护、复⽤、扩展⽤途:单⽚机、嵌⼊式开发、Linux/Unix等对性能要求较⾼的地⽅⾯向对象优点:易维护、易复⽤、易扩展,由于⾯向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护。
第7章面向对象分析•7.1.1 面向对象分析过程面向对象的分析主要以用例模型为基础。
开发人员在收集到的原始需求的基础上,通过构建用例模型从而得到系统的需求。
进而再通过对用例模型的完善,使得需求得到改善。
所谓用例是指系统中的一个功能单元,可以描述为参与者与系统之间的一次交互。
用例常被用来收集用户的需求。
①首先要找到系统的操作者,即用例的参与者。
参与者是在系统之外,透过系统边界与系统进行有意义交互的任何事物。
②可以把参与者执行的每一个系统功能都看作一个用例。
可以说,用例描述了系统的功能,涉及系统为了实现一个功能目标而关联的参与者、对象和行为。
③确定了系统的所有用例之后,就可以开始识别目标系统中的对象和类了。
把具有相似属性和操作的对象定义为一个类。
边界类示意图控制类示意图目标系统的类可以划分为边界类、控制类和实体类。
Ø边界类代表了系统及其操参与者的边界,描述参与者与系统之间的交互。
它更加关注系统的职责,而不是实现职责的具体细节。
通常,界面控制类、系统和设备接口类都属于边界类。
Ø控制类代表了系统的逻辑控制,描述一个用例所具有的事件流的控制行为,实现对用例行为的封装。
通常,可以为每个用例定义一个控制类。
Ø实体类描述了系统中必须存储的信息及相关的行为,通常对应于现实世界中的事物。
确定了系统的类和对象之后,就可以分析类之间的关系了。
对象或类之间的关系有依赖、关联、聚合、组合、泛化和实现。
①依赖关系是“非结构化”的和短暂的关系,表明某个对象会影响另外一个对象的行为或服务。
②关联关系是“结构化”的关系,描述对象之间的连接。
③聚合关系和组合关系是特殊的关联关系,它们强调整体和部分之间的从属性,组合是聚合的一种形式,组合关系对应的整体和部分具有很强的归属关系和一致的生命期。
比如,计算机和显示器就属于聚合关系。
④泛化关系与类间的继承类似。
⑤实现关系是针对类与接口的关系。
明确了对象、类和类之间的层次关系之后,需要进一步识别出对象之间的动态交互行为,即系统响应外部事件或操作的工作过程。
SOA学习总结面向服务的体系结构(Service-Oriented Architecture,SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。
接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。
这使得构建在各种这样的系统中的服务可以一种统一和通用的方式进行交互。
一、什么是面向服务的体系结构我们知道传统的IT程序发展史经历了以下四个阶段:1、面向过程的编程,如C语言。
2、面向对象的编程,如Java、C++。
3、面向组件的编程,如EJB,JMS。
4、标准化的Web Service编程,也属于组件编程。
从本质上讲,面向对象是对面向过程的一次解耦和封装,就是把面向过程的程序进行分解,把逻辑紧密相关的程序结合在一起,发布成独立的对象单元,对象单元里含有API。
面向组件的编程是对面向对象的程序进一步封装,发布成独立的组件,里面含有一些粒度大于API的接口。
面向组件和面向对象的最大区别在于组件是通过传输协议来进行远程调用的,组件是和传输协议绑定、应用服务器和端口绑定在一起的。
理解了上面的编程思想,就可以进一步理解什么是面向服务了,面向服务的编程是对面向组件编程的进一步解耦和封装。
所谓解耦,就是将业务组件和传输协议和端口解耦,也就是说业务组件可以自由的绑定各种传输协议。
作为面向服务编程,由于服务组件可以和各种传输协议自由绑定。
这样作为服务的消费者,就不需要特别关心服务的提供者的具体技术细节。
只需要知道有这么一个完全和技术无关的业务接口。
我们就可以把这种完全和技术无关的接口称为:服务接口。
作为客户,不需要去理解这到底是Web Service 的接口,还是EJB的接口等,这个接口,只和业务相关,而和技术无关。
因此可以这么说:所谓服务,就是只和业务相关,独立于技术业务接口。
所谓面向服务,就是如何实现独立于技术的服务接口。
SOA 是一种IT 体系结构样式,支持将业务作为链接服务或可重复业务任务进行集成,可通过网络访问这些服务和任务。
面向服务的软件体系架构设计与实现面向服务的软件体系架构(Service-Oriented Architecture, SOA)是一种基于服务的软件开发和构建方式,就像Web Services一样,SOA将应用系统划分为一个个松散耦合的服务,这些服务能够相互调用,形成一个可扩展的应用系统。
随着云计算、物联网、大数据等相关技术的普及,SOA也成为了一个相当流行的软件架构设计方式。
本文将从以下几个方面介绍面向服务的软件体系架构设计与实现:SOA核心概念、SOA的优势和劣势、SOA的设计原则、SOA的实现技术、SOA的开发工具以及SOA的应用案例。
一、SOA核心概念面向服务的软件体系架构(SOA)是一种基于服务的软件开发和构建方式,其核心概念包括以下三点:1.服务:SOA中的服务是一个独立的逻辑单元,它封装了某种特定的功能,并可以通过网络进行访问和调用。
SOA中的服务通常包括Web Services、RESTful Services、消息队列等。
2.业务流程:SOA中的业务流程是一系列的服务的有序调用,应用在需要对多个服务进行协调、合作的场景中。
3.服务注册与发现:为了方便调用和管理服务,SOA中引入了服务注册与发现机制。
服务提供者将服务信息注册到服务仓库中,服务调用方可以根据服务描述信息在服务仓库中找到需要的服务。
二、SOA的优势和劣势SOA有以下几个优势:1.松散耦合:面向服务的软件体系架构的服务是松耦合的,即每个服务最好只与其依赖的服务或资源相关。
这种松散耦合的优点在于当某个服务需要更新或替换时,对其他服务的影响相对要小,这样大幅度减少了整体系统部分维护和升级所需的时间和成本。
2.可扩展性:SOA的另一个优点是可扩展性,这意味着可以在系统中动态添加或替换单独的服务,而不会影响整个系统。
这也使得系统更加灵活和可适应变化。
3.平台无关性:SOA 架构实际上是一个独立于平台(如操作系统和编程语言)的技术,可以让系统根据需要进行选择,因此可以将系统部署在不同的平台上。
软件开发必备知识1、软件工程:软件工程是软件开发领域里的一类抽象概念,集成了软件设计、开发、维护和部署等方面的知识,它为软件开发领域提供了一系列的技术手段和技术流程,可以科学管理软件开发过程,提高整个软件开发项目的质量和效率。
2、面向对象编程:面向对象编程,简称OOP,是指以对象为基础的编程范式,它假定每一个功能都是由某个对象实现的,通过多态、继承、封装和其他技术实现代码的重用。
3、设计模式:设计模式是指在特定的情景中,出现的、可复用的和有目的的解决方案。
它们代表了当前软件开发领域最佳实践,可以帮助开发者在开发过程中更加高效地处理软件开发中遇到的各种问题。
4、数据结构与算法:数据结构是指计算机内部存储和管理数据的一种方式,而算法是指对特定问题的求解方案,可以结合数据结构的知识,找出更加高效的求解方案,最大程度地提高软件的运行性能。
5、数据库:数据库是指存储、管理数据的计算机系统。
在软件开发中,如果要应用数据,就必须先建立起一个数据库,它负责存储和管理系统中所有数据,如果系统需要访问数据,就需要通过数据库来访问。
6、软件架构:软件架构是指一种将多个模块集中起来进行统一管理的技术,它为软件开发横向与纵向的技术部署以及内部模块之间的交互,提供了一种可扩展的技术框架,最大限度地提高了软件开发的速度和效率。
7、软件测试:软件测试是对软件产品功能性和质量进行检查,确保系统达到预期的性能效果的过程,它是软件开发的重要环节,通过测试之后,可以确保系统正确地运行,有效地保证软件质量。
8、性能与可伸缩性:性能是指系统的计算能力,它决定了系统处理任务的能力以及处理任务的速度,而可伸缩性则是评估系统可以根据外部环境变化和负载变化而调整自身架构所需要考虑的问题。
在软件开发中,一个好的设计应当既考虑系统的可伸缩性,也考虑其性能。
⾯向对象分析与⾯向结构分析⾯向对象的分析:领域模型、⽤例图、类图、活动图、顺序图、状态图。
⾯向过程或称结构化的:流程图、数据字典、er图。
⼀、什么是需求分析需求分析是先分解,再提炼,并在这个过程中消除⽭盾。
分解:(1)业务流程为主线索的分解——SERU。
⽬标系统——>主题域——>业务事件——>业务活动——>业务步骤。
适⽤于管理信息系统。
按“事”的⾓度进⾏分解,(2)程序结构为主线索的分解结构。
⽬标系统——>⼦系统——>功能模块——>⼦模块——>功能点。
过早的进⼊了程序结构,割裂了与问题域之间的联系,从⽽导致对问题研究不⾜,降低了需求的质量。
适⽤于问题不复杂,或者系统与问题管理性不强的情况下。
(3)基于场景的分解结构。
⽬标系统——>关注点/功能域——>决策场景/使⽤场景——>决策步骤。
适⽤于决策⽀持系统、⾯向⽤户的嵌⼊式系统。
(4)基于数据的分解结构。
⽬标系统——>主题域——>主题类——>企业逻辑数据类——>物理数据类。
适⽤于数据类项⽬。
提炼;分解是⾃顶向下的⽅法,提炼是⾃底向上的⽅法。
⼆、为什么要建模?(1)可视化:帮助我们按照实际情况或按照我们需要的样式对系统进⾏可视化;(2)结构或⾏为:提供⼀种详细说明系统的结构或⾏为的⽅法;(3)给出⼀个指导系统构造的模板;(4)对我们所做出的决策⽂档化;三、什么是结构化分析⽅法,怎么⽤?结构化分析⽅法是以数据为中⼼的结构化分析⽅法,关键点有两个:⼀确定有哪些数据,格式是什么,如何存储,如ER图;⼆是确定数据加⼯、处理过程,如数据流图。
在实际⼯作中,⼀般⽤于对⼯作任务分解结构、公司管理中组织结构分解。
常⽤的建模⽅法有:数据流图、ER图、数据字典。
四、什么是⾯向对象分析⽅法,怎么⽤?以⼈、事(业务流程)的视⾓来分析问题。
常⽤的建模⽅法有:类图、领域模型、⽤例图、类图、活动图、顺序图、状态图、包图等UML中定义的模型。
国开大学软件工程复习选择题第一大题单选题1. 在分析模型内表示协调、顺序、事务处理以及控制其他对象的类是__________。
【A.】控制类【B.】组件类【C.】主函数【D.】事务类参考答案:A2. 面向过程的方法最关心的是__________,而过程实施的__________是作为过程参数传递的。
【A.】过程/对象【B.】数据结构/主体【C.】动作/数据结构【D.】对象/属参考答案:A3. 面向对象分析和设计的界限是__________,从分析到设计是一个逐渐扩充模型的过程。
【A.】清晰的【B.】模糊的【C.】非线性的【D.】确定的参考答案:B4. 一般性的软件其测试工作量大约占整个开发工作量的__________。
【A.】小于10%【B.】40%【C.】90%【D.】大于100参考答案:B5. 程序设计语言的技术特性不应包括__________。
【A.】数据结构的描述性【B.】抽象类型的描述性【C.】数据库的易操作性【D.】软件的可移植性参考答案:D6. 在软件生产的程序系统时代由于软件规模扩大和软件复杂性提高等原因导致了__________ 【A.】软件危机【B.】软件工程【C.】程序设计革命【D.】结构化程序设计参考答案:A7. __________是职业软件工程师的必要条件。
【A.】自律、善于沟通、具有一定的软件技能【B.】编程速度快【C.】熟悉众多的软件环境【D.】语言天赋参考答案:A8. 用户需求描述的是__________。
【A.】用户使用该软件要完成的任务【B.】业务需求【C.】功能需求【D.】软件目标、规模和范围参考答案:A9. __________定义了用户使用该软件要完成的任务。
【A.】用户需求【B.】业务需求【C.】性能需求【D.】功能需求参考答案:A10. 哪种模型分批地逐步向用户提交产品,每次提交一个满足用户需求子集的可运行的产品。
__________【A.】演化模型【B.】喷泉模型【C.】原型模型【D.】螺旋模型参考答案:A11. 数据流程图上的数据流必须封闭在__________之间。
一、概念面向对象编程(OOP):面向对象编程是一种起源于六十年代,发展已经将近三十年的程序设计思想。
其自身理论已十分完善,并被多种面向对象程序设计语言(Object-Oriented Programming Language,以下简称OOPL)实现。
对象是对现实世界实体的模拟,由现实实体的过程或信息牲来定义。
一个对象可被认为是一个把数据(属性)和程序(方法)封装在一起的实体,这个程序产生该对象的动作或对它接受到的外界信号的反应。
这些对象操作有时称为方法。
区别面向对象的开发和传统过程的开发的要素有:对象识别和抽象、封装、多态性和继承。
面向组件编程(COP):面向组件编程是一种组织代码的思路,尤其是服务和组件两个概念。
Spring框架中,就采用了COP的思路,将系统看作一个个的组件,通过定义组件之间的协作关系(通过服务)来完成系统的构建。
这样做的好处是能够隔离变化,合理的划分系统。
而框架的意义就在于定义一个组织组件的方式。
组件不是一个新的概念,Java中的javaBean规范和EJB规范都是典型的组件。
组件的特点在于他定义了一种通用的处理方式。
例如,JavaBean 拥有内视的特性,这样就可以通过工具来实现JavaBean的可视化。
而EJB规范定义了企业服务中的一些特性,使得EJB 容器能够为符合EJB规范的代码增添企业计算所需要的能力,例如事务、持久化、池等。
二、区别1、面向对象中,对象之间的交互是细粒度的,通过单个消息进行交互;面向组件中组件的交互是通过接口连接进行交互,接口内含有多个消息,接口不同则需要适配。
比如,信件一封一封的送,是对象之间的交互,信件一次性送完是组件交互。
2、组件的粒度比对象要大,在面向对象系统设计中,对象是构建系统的基本建筑材料;面向组件系统开发中,组件是系统的基本建筑块;组件有点类似子系统的概念,把一组相关的对象封装起来对外提供服务;组件的存在增加了信息的隐蔽程度,减少了馈入上层信道的信息数量,从而增加了系统的稳定性;2、面向对象中强调封装,继承,多态;对象是类的实例,说到对象,往往是指源代码级的类的定义及其实现;在面向组件强调封装,在复用方面更多的是强调黑盒复用。
面向过程、面向对象、面向组件、面向服务软件架构的分析与比较摘要:软件开发从汇编语言、过程式语言、面向对象、面向组件发展到面向服务,每一步都体现了不断抽象、更加贴近业务实际的发展趋势。
当前软件发展正处于从面向组件思想向面向服务思想的跨越阶段。
本文深入分析了面向过程、面向对象、面向组件、面向服务架构,得出相关的优缺点。
关键字:面向过程,面向对象,面向组件,面向服务1 背景当前,信息系统的发展越来越明显地呈现出以下特征:软件系统越来越庞大,但是软件系统内部组成模块的规模却越来越小;软件系统的功能越来越复杂,但是系统的开放性却越来越好。
信息系统软件正向着不依赖于特定的硬件和操作系统以及具有高度可重用性的方向发展。
在这种情况下,人们对这种大型复杂软件产品的质量和开发速度都有了更严格的要求,传统的开发方法已经难以满足这种需求。
首先,我们来分析一下几种传统的系统开发方法。
1)自底向上法自底向上法出现于早期的计算机管理应用系统,即在进行系统分析和设计时自下而上,先从底层模块做起,然后逐步完成整个系统。
自底向上法使得系统的开发易于适应组织机构真正的需要;有助于发现系统的增长需要,所获得的经验有助于下一阶段的开发,易于控制和管理。
但由于方法的演变性质,自底向上法使系统难以实现其整体性;同时由于系统未进行全局规划,数据一致性和完整性难以保证;而且为了保证系统性能的需求,往往要重新调整,甚至重新设计系统。
2)自顶向下法随着信息系统规划的扩大和对开发经验的总结与归纳,自顶向下的系统分析方法论逐步得到了发展和完善。
自顶向下法要求开发者首先制定系统的总体规划,然后逐步分离出高度结构化的子系统,从上至下实现整个系统。
运用这类方法可以为企业或机构MIS的中期或长期发展规划奠定基础,同时支持信息系统的整体性,为系统的总体规划、子系统的协调和通信提供保证。
但它同样也存在缺点:对系统分析、设计人员要求较高,在大系统中,对下层系统的实施往往缺乏约束力,开发的周期长,系统复杂,成本较高。