1.6.2 程序设计方法
程序设计方法学是讨论程序的性质以及程序设计的理论和方法的一门学科,是研究和构造程序的过程的学问,是研究关于问题的分析、环境的模拟、概念的获取、需求定义的描述,以及把这种描述变换细化和编码成机器可以接受的表示的一般方法。
用程序设计方法指导程序设计各阶段工作的原理和原则,以及依此提出设计技术。程序设计方法学的目标是能设计出可靠、易读而且代价合理的程序。程序设计方法学包括程序理论、研制技术、支援环境、工程规范和自动程序设计等课题,使程序设计更加科学化和工程化。
1.结构化程序设计方法
结构化程序设计(Structured Programming)是进行以模块功能和处理过程设计为主的详细设计的基本原则,是采用自顶向下、逐步求精的程序设计方法;使用三种基本控制结构构造程序,任何程序都可由顺序、选择、循环三种基本控制结构构造。是以模块化设计为中心,将待开发的软件系统划分为若干个相互独立的模块,这样使完成每一个模块的工作变单纯而明确,为设计一些较大的软件打下了良好的基础。
由于模块相互独立,因此在设计其中一个模块时,不会受到其他模块的牵连,因而可将原来较为复杂的问题化简为一系列简单模块的设计。模块的独立性还为扩充已有的系统、建立新系统带来了方便,因为可以充分利用现有的模块作积木式的扩展。
按照结构化程序设计的观点,任何算法功能都可以通过由程序模块组成的三种基本程序结构的组合:顺序结构、选择结构和循环结构来实现。
2.面向对象的程序设计
面向对象程序设计(Object-oriented Programming,OOP)是一种程序设计范型,同时也是一种程序开发的方法。对象指的是类的实例。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。
面向对象程序设计可以看作一种在程序中包含各种独立而又互相调用的对象的思想,这与传统的思想刚好相反:传统的程序设计主张将程序看作一系列函数的集合,或者直接就是一系列对电脑下达的指令。面向对象程序设计中的每一个对象都应该能够接收数据、处理数据并将数据传达给其他对象,因此它们都可以被看作一个小型的“机器”,即对象。
目前已经被证实的是,面向对象程序设计推广了程序的灵活性和可维护性,并且在大型项目设计中广为应用。此外,支持者声称面向对象程序设计要比以往的做法更加便于学习,因为它能够让人们更简单地设计并维护程序,使得程序更加便于分析、设计、理解。反对者在某些领域对此予以否认。
3.面向切面程序设计
面向切面程序设计(Aspect Oriented Programming,AOP)是通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。比如人们最常见的就是日志记录了,举个例子,现在提供一个查询学生信息的服务,希望记录有谁进行了这个查询。如果按照传统的OOP来实现,那么实现了一个查询学生信息的服务接口(StudentInfoService)和其实现类(StudentInfoServiceImpl.java),同时为了要进行记录,则在实现类中要添加其实现记录的过程。如果要实现的服务有多个,就要在每个实现的类都添加这些记录过程。这样做显然比较烦琐,而且每个实现类都与记录服务日志的行为紧耦合,违反了面向对象的规则。那么,怎样才能把记录服务的行为从业务处理过程中分离出来呢?看起来就像是查询学生的服务在独立进行,实际上是背后日志记录对这些行为进行记录,并且查询学生的服务不知道存在这些记录过程,这就是讨论AOP的目的所在。AOP的编程,就像是把我们在某个方面的功能提出来与一批对象进行隔离,这样就与一批对象降低了耦合性,从而就某个功能进行独立编程。