庾 佳
(苏州健雄职业技术学院,江苏 太仓 215400)
软件开发人员在寻求问题的合格解决方案时通常会遵循某些软件开发方法。这些解决方案作为计算机软件来实现。
处理软件复杂性的一种熟悉而且自然的方式是将系统划分(或分解)为可管理的模块(片段或组建)。将系统分解陈模块由许多方式。有一些原则可以帮助我们获得所期望的分解结果。
软件开发人员通过使用模块化[3](modularity)原则来控制系统的复杂性。在系统开发的早期,系统被分解为一组模块,这些模块由过程和函数组成。通常,一种自上而下(top-down)的开发策略将系统不断地分解为更小的模块。一般而言,高层次模块指定需要进行什么操作,而低层次模块则解决如何实现这些操作。图1说明了将一个用于解决某个问题的系统进行了层次化分解的示意图。
图1 将系统分解成模块Fig. 1 Decompose the system into modules
解决问题人员通常使用抽象来处理系统的复杂性。使用抽象的重点在于定义系统的某个部分或组建,使得该组建能够被看成是一个黑箱[5]。所有早期的编程语言都是通过子过程构造(即过程和函数)来支持都想,称为过程抽象(procedural abstraction)。进一些年来,面向对象语言所推崇的OOP技术,支持数据抽象(data abstraction),其目的在于将每种数据结构或对象看作是由数据属性以及针对这些属性的操作所组成。
信息隐藏的目的在于使一些不会影响到系统中的其他模块的细节不可访问,这样,数据类型和它的操作便组成了一个封闭的系统。其中的细节对于其他的模块是隐藏的。
拥有一个松散耦合度的系统有两个优点:第一,使用其他的模块来替换某个模块,这样只有很少的模块会受这一变化的影响;第二,追踪某个错误并隔离导致该错误的有缺陷模块。
模块的内在强度——模块各个部分的相关性有多强——称为内聚度。如果模块的组成部分之间关联性很强,而且都与该模块的用途和目的密切相关,则称该模块具有很强的内聚度,即高内聚度。高内聚是指一个软件模块是由相关性很强的代码组成,只负责一项任务,也就是常说的单一责任原则。
面向对象程序设计(Object Oriented Programming)方法简称 OOP方法[6-8],是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法。相比较传统的开发方法,面向对象的程序设计方法采用了自底向上的归纳、自顶向下的分解的方法相结合,通过对对象模型的建立,能够真正建立基于用户的需求,而且系统的可维护性大大改善。它是归纳和演绎思想的综合体现,对于软件设计起到了很好的作用。
(1)对象:对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。
(2)对象的状态和行为:对象具有状态,一个对象用数据值来描述它的状态。对象还有操作,用于改变对象的状态,对象及其操作就是对象的行为。对象实现了数据和操作的结合,使数据和操作封装于对象的统一体中。
(3)类:具有相同或相似性质的对象的抽象就是类。因此,对象的抽象是类,类的实体化就是对象。类具有属性,它是对象的状态的抽象,用数据结构来描述类的属性。 类具有操作,它是对象的行为的抽象,用操作名和实现该操作的方法来描述。
(4)消息和方法:对象之间进行通信的结构叫做消息。在对象的操作中,当一个消息发送给某个对象时,消息包含接收对象去执行某种操作的信息。类中操作的实现过程叫做方法,一个方法有方法名。
(1)对象唯一性:每个对象都有自身唯一的标识,通过这种标识,可找到相应的对象。 在对象的整个生命期中,它的标识都不改变,不同的对象不能有相同的标识。
(2)继承性:继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。 在类层次中,子类只继承一个父类的数据结构和方法,则称为单重继承。在类层次中,子类继承了多个父类的数据结构和方法,则称为多重继承。
(3)多态性:多态性使指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果。
所谓面向对象就是基于对象概念,以对象为中心,以类和继承为构造机制,来认识、 理解、刻画客观世界和设计、构建相应的软件系统。
建模是一个确定外部世界的某些特性或方面与某个特定问题或应用相关的过程,是抽象的一种形式。基于本文 1.2所提及的抽象形式,即过程抽象和数据抽象,在面向对象开发中,着眼点在于对象和他们之间的交互作用。
OOP方法首先是确定对象的数据,然后确定针对数据的操作。因此,对应用进行面向对象建模的基本着眼点是确定显示世界对象以及它们与应用相关的交互作用。
(1)与人类的思维习惯一致:面向对象的思维方式是从人类考虑问题的角度出发,把人类解决问题的思维过程转变为程序能够理解的过程。面向对象程序设计能够让我们使用“类”来模拟世界中的抽象概念,用“对象”来模拟现实世界中的实体,从而用计算机解决现实问题。
(2)提高了程序的可重复性:一个类可以创建多个对象实例,增加了重用性。
(3)易维护:采用面向对象思想设计的结构,可读性高,由于继承的存在,即使改变需求,那么维护也只是在局部模块,所以维护起来是非常方便和较低成本的。
(4)质量高[10]:在设计时,可重用现有的,在以前的项目的领域中已被测试过的类使系统满足业务需求并具有较高的质量。
(5)效率高:在软件开发时,根据设计的需要对现实世界的事物进行抽象,产生类。使用这样的方法解决问题,接近于日常生活和自然的思考方式,势必提高软件开发的效率和质量。
(6)易扩展:由于继承、封装、多态的特性,自然设计出高内聚、低耦合的系统结构,使得系统更灵活、更容易扩展,而且成本较低。
OOP面向对象的核心概念是封装了属性和方法的类,以数据为中心,实现了类级别的代码重用,同时因为采用了类,具有集成和多态特征,可以进一步重用代码和简化编程。面向对象程序设计技术必将应用到软件设计中。