概述
软件实现(Software Implementation)不等同于纯粹的编程,它是“编程、内部测试、代码审查、调试改错、优化”的综合表述。软件实现是人员最多、时间最长、工作量最大的开发阶段。
软件设计思路和方法的一般过程,包括设计软件的功能及实现的算法和方法,软件的总体结构设计和模块设计,编程和调试,程序联调和测试以及编写、提交程序。
软件编码是指把软件设计转换成计算机可以接受的程序,即写成以某一程序设计语言表示的“源程序清单”。充分了解软件开发语言、工具的特性和编程风格,有助于开发工具的选择以及保证软件产品的开发质量。
当前软件开发中,除在专用场合外,已经很少使用20世纪80年代的高级语言了,取而代之的是面向对象的开发语言,而且面向对象的开发语言和开发环境大都合为一体,大大提高了开发的速度。1
程序设计语言的分类程序设计语言种类很多,可从不同的角度对其进行分类。
1)以语言层次可分为面向机器的语言和面向问题的语言。
(1)面向机器的语言。依赖于具体的机器硬件结构,其语句和计算机的硬件操作相对应,包括机器语言和汇编语言。机器语言由二进制的0、1代码指令系统构成,它是计算机唯一可以直接识别和执行的语言。其指令系统因机器而异,不同机器具有不同的机器语言,这类语言难学难记。汇编语言是符号化的机器语言,语句符号与机器指令直接对应,虽然其易读性、易理解性相对机器语言已经有了很大的改善.但依然编写出的程序难读、难维护、易出错、通用性差,因此,一般不应用于上层应用软件开发。面向机器的语言具有可直接访问系统接口、程序运行效率高等优点,可在某些特殊领域或需要的环境中使用。
(2)面向问题的语言。面向问题的语言也称为高级语言,这类语言脱离了具体机器的硬件环境的限制,直接面向所要解决的应用问题。高级语言使用的概念和符号与自然语言比较相近,便于掌握和理解,并具有通用性强、编程效率高、代码可阅读性强、易于修改和维护等特点,因而在现代软件开发过程中被广泛使用。
2)以语言适用性可分为通用语言和专用语言
(1)通用语言。可以面向所有编程问题,不受专业和领域的限制,BASIC、FORTRAN、ALGOL、C、Pascal等,均属这类语言。
(2)专用语言。专用语言是为了某种特殊应用而设计的具有独特语法形式的语言。它局限于某些特殊的应用领域,应用范围比较窄。如APL—Array Processing Language是为数组和向量运算设计的简洁而功能很强的语言,却几乎不提供结构化的控制结构和数据类型。
3)以语言面向分为面向过程的语言和面向对象的语言。
(1)面向过程的语言。面向过程的语言即传统的结构化程序设计语言,该类语言强调程序设计算法和数据结构,基本思想可概括为程序等于数据结构加上算法,如C语言等。
(2)面向对象的语言。面向对象的语言是目前最为流行的一类高级语言。它引入了现实生活中对象的观念,提供了封装、继承、多态、消息等机制。这类语言有Small Talk、C++、Java和C#等。
4)高级语言的常见分类
(1)从应用特点分,高级语言又可分为通用语言、现代语言和专用语言三类。
①通用语言。它们的特点是出现早、应用广泛。有大量软件库,为最广泛的人所熟悉和接受。属于这类语言的有BASIC、FORTRAN、COBOL和ALGOL等。这些语言创始于20世纪50年代或20世纪60年代,部分性能已老化。
②现代语言。现代语言也称为结构化语言。其特点是直接提供结构化的控制结构,具有很强的过程能力和数据结构能力。ALGOL是最早的结构化语言,同时它又是基础语言,由它派生出来的Pascal、C以及Ada等语言已应用在非常广泛的领域中。
③专用语言。专用语言是指为某种特殊应用而设计的独特语言。
(2)从语言的内在特点分.高级语言还可分为系统实现语言、静态高级语言、块结构高级语言和动态高级语言四类。
①系统实现语言。系统实现语言从汇编语言发展改进而来,可提供控制语句和变量类型检验等功能,但是同时也容许程序员直接对硬件进行操作。C语言就是著名的系统实现语言。
②静态高级语言。可给程序员提供控制语句和变量说明的机制,但是程序员不能直接控制由编译程序生成的机器操作。其特点是静态地分配存储。这种存储分配方法虽方便了编译程序的设计和实现,但对使用这类语言的程序员施加了较多限制。因为这类语言是第一批出现的高级语言.所以使用非常广泛.其中FORTRAN和COBOL仍然在某些领域使用。
③块结构高级语言。其特点是提供有限形式的动态存储分配,存储管理系统支持程序运行,每当进入或退出程序块时。存储管理系统分配存储或释放存储。程序块是程序中界限分明的区域,每当进入一个程序块时就中断程序执行,以便分配存储,如Pascal和ALGOL等。
④动态高级语言。其特点是动态地完成所有存储管理,即执行个别语句可能引起分配存储或释放存储。一般地说,这类语言的结构和静态的或块结构的高级语言的结构不同,实际上这类语言中任何两种语言的结构彼此间很少类似。这类语言一般是为特殊应用而设计的,不属于通用语言。2
特性及其选择依据选择了一种程序设计语言后,就影响到对概要设计和详细设计的实现。语言的特性对于软件的测试与维护也有一定的影响,支持结构化构造的语言有利于减少程序环路的复杂性,使程序易测试、易维护。程序设计语言一般具有下面三个特性。
1)工程特性。从软件工程的观点、程序设计语言的特性着重考虑软件开发项目的需要,因为对程序编码有如下要求:可移植性、开发工具的可利用性、软件的可复用性、可维护性。
2)技术特性。语言的技术特性会对软件工程的其余阶段有一定的影响,因此要根据项目的特点选择相应的语言。
3)心理特性。语言的心理特性指影响程序员心理的语言性能,其在语言的表现上包括以下几个方面:歧义性、简洁性、局部性和顺序性、传统性。
为开发一个特定项目选择程序设计语言时,必须从技术特性、工程特性和心理特性几方面考虑。在选择语言时,要从问题需求人手,确定它的要求是什么,以及这些要求的相对重要性,针对这种需求,需要什么特性的程序设计语言来实现。由于一种语言不可能同时满足各种需求,所以要求进行权衡,比较各种可用语言的适用程度,最后选择最适用的语言。不过,在实际开发中,除考虑需求外,往往还要考虑客户的环境。
选择语言时,可以从以下几个方面考虑:
(1)项目的应用领域
项目的应用领域主要包括:
1)科学工程计算,需要大量的标准库函数,以便处理复杂的数值计算。
2)数据处理与数据库应用。
3)实时处理。实时处理软件一般对实时性能的要求很高,可供选择的语言有汇编语言、C语言等。
4)系统软件。系统软件很多时候都需要同计算机的硬件打交道,因此在编写操作系统、编译系统等系统软件时,可选用汇编语言、C语言等。
5)人工智能。
(2)软件开发的方法
有时编程语言的选择依赖于开发的方法,采用4GL语言适合用快速原型模型来开发。如果是面向对象方法,就必须采用面向对象的语言编程。近年来,推出了许多面向对象的语言,如C#、Java等。
(3)软件开发的环境
良好的开发环境不但能有效提高软件生产率,同时能减少错误,有效提高软件质量。近几年推出了许多可视化的软件集成开发环境,特别是Microsoft公司的c#以及Sun公司的Java等,提供了强有力的调试工具,这些工具可以帮助开发人员快速形成高质量的软件。
(4)算法和数据结构的复杂性
科学工程计算、实时处理和人工智能领域中的问题算法较复杂,而数据处理与数据库应用以及系统软件领域内的问题,数据结构化比较复杂,因此选择语言时可考虑是否有完成复杂算法的能力,或者有构造复杂数据结构的能力。
(5)软件开发人员的知识
软件开发人员已有的知识和经验对选择编程语言也有很大的影响。新的语言虽然有吸引力,也会提供较多的功能和质量控制方法,但软件开发人员若熟悉某种语言,而且有类似项目的开发经验,一般情况下他们愿意选择曾经成功开发过项目的语言。为了能更好地适应项目的程序设计,开发人员应该经常学习新的程序设计语言,掌握新技术。1
程序设计风格建立程序设计规范。有助于编写正确、高效、可维护、通用易读的程序,使程序结构优化、清晰易读,并且与设计相一致。
程序设计风格是在长期的编程实践中形成的一套独特的习惯做法和方式。优良的程序设计风格可以减少编程错误,提高可读性和维护效率。多人合作编写一个很大的程序时,相互协调配合更需要强调一致的编程风格。结构化实现的程序设计风格包括5个方面:源程序文档化、数据说明、语句构造、输入输出和效率。面向对象编程风格既包括传统的程序设计风格准则,也包括为适应面向对象方法所特有的概念(如继承性等)而遵循的新准则。
1.好程序的标准
对于好程序的标准,20世纪40年代及20世纪50年代的观点和现在差别很大。当时的计算机内存很小、速度慢,将程序的长度和执行速度看得很重要,甚至放在了首要的位置,需要千方百计地缩短程序长度并减少存储空间,否则内存不够,程序无法运行。
随着硬件技术及速度的提高、价格的下降.计算机的处理速度和内存容量已经不再是制约软件开发的瓶颈。好程序的标准也发生了根本性变化,对于好程序的标准,不同人的看法不尽相同。公认的好程序具有如下特性:功能齐全,能够达到用户的使用要求;性能及可靠性高,运行安全高效,各项指标优良;结构简单、容易理解和使用;易于维护、修改和扩展升级;界面易于操作,使用便捷;移植性及兼容性好;可重用性强,有利于软件更新。
2.程序设计规范及风格
规范是规定编程时应该遵守规则和书写的格式等方面的描述。程序易于阅读是程序设计规范的主要要求,可通过养成良好的程序设计风格解决可阅读性差的问题。公认的、良好的程序设计风格可减少编程的错误,缩短阅读程序时间,从而提高软件的开发效率和提高软件的开发质量。