面向过程和面向对象解析

时间:2022-10-10 02:06:36

摘要:本文从软件分析、设计的角度,讨论了面向过程和面向对象思想的特点及分析方法。面向过程和面向对象都是对软件分析、设计的一种认识思想,它指导着人们以不同的方式去分析和设计软件。软件的分析和设计在软件的生命周期中是非常重要的,它决定着将产生什么样的软件,这会涉及到编程语言的选择、软件的结构、可扩展性等多个方面。本文结合实际的案例,简要讨论了面向过程和面向对象的分析和设计方法,其中也涉及到多种工具(即DFD图,UML图)的使用,以说明不同的分析、设计思想的特点。

关键词:面向过程;自上而下;面向对象

中图分类号TP31 文献标识码A 文章编号 1674-6708(2012)66-0213-02

面向过程是一种以过程为中心的编程思想。面向过程也可称之为“面向记录”的编程思想,他们不支持丰富的“面向对象”特性(比如继承、多态等等),并且它们不允许混合持久化状态和域逻辑。面向过程的思想,我们一般归纳为结构化分析方法。根据软件生命周期的不同阶段,结构化分析方法分为结构化分析(SA)、结构化设计(SD)、结构化程序设计(SP)等,主要的工具有DFD图、E-R图、结构化语言等,其精髓是自顶向下、逐步求精和模块化设计。比如:某个单位的商品订单处理软件。我们在运用结构化分析方法分析时,会根据数据是怎样一步步在各个处理序列中流动的,归结出所需要的处理模块,通常这些处理模块会用一个函数或一个过程来描述,然后再按从上到下的顺序把这些处理模块组织起来,形成完整的过程执行序列。通常数据流图在结构化分析中可以很直观地帮我们表达出这种形态。

结构化分析方法是从功能角度来看待系统的,它展示了系统中端到端的处理过程,所以它在需求分析中显得尤为重要。但从上例中我们也发现,这种自上而下的功能分解,意味着整体的采购过程将首先被分析,分解出各子过程的依赖关系,然后才是对订购子过程的分析。实际上,分析过程往往不是这样,通常同时需要各个不同层次上的系统信息,较低层的模型可能先被描述,然后经过抽象最后产生一个总模型。特别对一些大型的项目,需求不明确,结构复杂,因果关系无法分辨清楚,再把这种清晰的过程模拟出来实在是太困难了,在这种情况下面向过程就不再适用。

在实际应用中,以上的矛盾目前已经被解决,同时也产生了很多新的方法论,面向对象就是现在比较常用的方法论之一。

面向对象(Object Oriented,简称OO)方法认为,世界是由一个个独立的“对象”组成的,一切皆对象,每个对象都有自己的状态和动作。具有相似状态和动作的对象抽象出“类”,而这些“对象”就是这个“类”的一个实例。繁杂的对象可以由简单的对象以某种方式组合而成,不同的对象相互作用就形成了系统。

面向对象的四大特性就是抽象、继承、封装、多态。这也是区别于面向过程的主要方面。

1)抽象:是指将具有一致的状态和行为的对象抽象成类。所以类就是一组具有相同属性和方法的对象的集合,比如:小明这个人-对象,人类-类。其殊的是抽象类,它不能被实例化,抽象方法只需声明,而不需实现;

2)继承:是子类自动共享父类属性和方法的一种机制,是面向对象方法区别于其他方法的一个核心思想。继承性规范了类的等级结构,实现了公共特性的共享,提高了软件的重用性;

3)封装:封装的目的是使对象的定义和实现分离,减少耦合。对象之间只能通过接口进行信息交流,对象外部不能对对象中的数据随意进行访问和修改;

4)多态:指同一操作作用于不同对象时可以有不同的执行结果。

与结构化方法类似,面向对象方法也包括面向对象分析(OOA)、面向对象设计(OOD)、面向对象的程序设计(OOP)三个阶段,常用的辅助工具有UML、CASE工具等。

我们同样以一个例子来运用一下面向对象方法。例:对于一个图书管理系统来说,它具有两类用户,一类具有借阅权限,而另一类只能在馆内阅读。

面向对象的一个任务就是找出其中的对象,然后根据这些对象抽象出所具有的类和类与类之间的关系。对象分类就是描述对象类与对象类之间是如何通过共有属性和服务相互关联。在本例中,只有阅读权限的用户是一类用户,具有借阅权限的用户是另一类用户,他们具有不同的权限,但也可以抽象出他们都是用户,他们都有用户名、地址、电话等共有属性,具有注册和取销注册的动作,所以在这两个类之上,又可以抽象出一个用户类,它是这两个类的父类,具有这两个类的共有属性。这两个类继承用户类,便具有了这些共有属性,同时,这两个类又可以增加自己各自的属性和方法。在某些需要下,还可以对这两个分类再进行细分,加入更多的不同的属性和方法形成下一级的子类,这些子类同样继承于这两个类之一,并间接继承于用户类,具有其相应父类及父类的父类的属性和方法。

面向对象的思想更符合人类认识世界的过程,人类认识世界是以客体为视角的,客体的属性反应客体在某一时刻的状态,客体的行为反映客体所能从事的活动。客体和客体之间没有直接的关系,它们是通过某种刺激才发生连接。就像人类的个体,人与人无直接的关系,当一个人需要另一个人帮助时,两个个体才发生关系。面向过程更加注重功能,分化了个体,背离了人们认识世界的方式。面向对象将属性和方法绑定在一起形成了相对稳定的个体,如果需要改变也只是这个类对象个体的变化,不会像面向过程一样,牵一发而动全身,一个变化就引起很多部分跟着变化,这使得安全性及扩展性都得到了提高。再有就是重用性,它是衡量一个软件产品成功与否的重要标志。面向过程的设计,每个过程都是针对某个项目某个处理的特定过程,它无法实现大力度的复用,而面向对象的设计有高度的抽象,它把功能的实现封装在组件的内部,对外提供统一的接口,只要调用这个组件时,符合这些接口的要求,就可以把该组件放在相似的项目中使用。基于以上的优势,面向对象的分析方法越来越多的被人们使用,成为现在分析和设计方法中的主流。

参考文献

[1]圣安德鲁斯大学著.软件工程[M].8版.程成,陈霞,译.机械工业出版社.

[2]张友生著.系统分析师教程[M].清华大学出版社.

[3]面向对象.百度百科..

上一篇:Socket数据缓冲队列设计 下一篇:GSM-R网络区间切换优化讨论