一.软件设计
软件设计是一个将人类思维物化为计算机思维的过程,通过这个过程计算机获得一定程度的独立加工甚至思维的能力,从而将人类思维推向更高层次。
二.软件危机
产生的原因主要有三个:
(1)软件开发者不熟悉用户问题的领域,或没有理解用户需求,软件产品与要求不一致。
(2)软件是一种逻辑产品而非物理产品,软件的开发过程本质上是人的思考过程。
(3)人的智力在面对越来越复杂的问题时,处理问题的效率会越来越低。
三.软件工程
大型软件开发也应该借鉴建筑、机械等行业的发展过程,由“手工方式”向“工程化”方向发展。
3.1 软件工程的定义
软件是程序、方法、规则、相关文档以及在计算机上运行所必需的数据的集合。而软件工程是开发、运行、维护软件的系统方法。
3.2 软件生命期
软件生命期指从开始研制到废弃不用的整个期间,可划分为五个阶段:需求分析、设计、编程、测试和运行维护。
3.3 软件的质量标准
主要有五个标准:
(1)正确性
软件的正确性指的是软件系统在正常条件下能够正确工作,完成规定功能。这是软件的首要指标。
(2)健壮性
软件的健壮性指的是在意外情况下(如输入数据不合理或某些硬件故障),软件系统仍能适当地工作,并对意外情况进行适当处理,而不致于导致错误结果甚至系统的瘫痪或死机。
(3)可维护性
软件的维护包括发现并改正软件的错误,以及由于软件运行环境发生变化或软件功能扩充而对软件进行的改动。
(4)可用性
软件可用性是程序在给定时间点根据要求运行的概率。
(5)可重用性
指软件可以在多种场合使用的程度。
四.程序设计的方法
4.1 传统的结构化程序设计
传统的程序设计方法可以归结为“程序=算法+数据结构”,将程序定义为处理数据的一系列过程。
(1)这种设计方法的着眼点是:面向过程的,特点是数据与程序分离,即数据与数据处理分离。
(2)结构化程序设计的基本思想是:采用自顶向下、逐步细化的设计方法和单入单出的控制结构。
4.2 面向对象的程序设计
面向过程程序设计缺点的根源在于数据与数据处理分离。
面向对象程序设计模拟自然界认识和处理事物的方法,将数据和对数据的操作方法放在一起,形成一个相对独立的整体——对象(object),同类实体还可抽象出共性,形成类(class )。一个类中的数据通常只能通过本类提供的方法进行处理,这些方法成为该类与外部的接口。对象之间通过消息(message)进行通讯。
4.2.1 基本概念
4.2.1.1 类
类是一个抽象的概念,用来描述某一类实体所共有的、本质的属性和类行为。
4.2.1.2 对象
对象是类的一个具体实现,也称为实例。
4.2.1.3 消息
把对象之间产生相互作用所传递的信息称做消息。
4.2.2 面向对象的软件开发方法
面向对象软件开发的根本合理性在于它符合客观世界的组成方式和大脑的思维方式。
在大型程序开发过程中,编码只是其中很小一部分,应当采用工程化的方法,并将面向对象的思想贯穿于软件开发全过程,这就是面向对象的软件工程。
面相对象的软件工程同样遵循分层抽象、逐步细化的原则。软件开发过程包括以下五个阶段:
1.面向对象的分析(OOA)
分析阶段的主要任务是按照面向对象的概念和方法,从问题中识别出有意义的对象,以及对象的属性、行为和对象间的通信,进而抽象出类结构,最终将它们描述出来,形成一个需求模型。
2.面向对象的设计(OOD)
设计阶段从需求模型出发,分别进行类的设计和应用程序的设计。
3.面向对象的编程(OOP)
编程阶段实现由设计表示到面向对象程序设计语言描述的转换。
4.面向对象的测试(OOT)
测试的任务在于发现并改正程序中的错误。
5.面向对象的维护(OOSM)
4.2.3 “面向对象”程序设计的特点
4.2.3.1 封装性
对象是一个封装体,在其中封装了该对象的属性和操作。通过限制对属性和操作的访问权限,可以将属性“隐藏”在对象内部,对外提供一定的接口,在对象之外只能通过接口对对象进行操作。
C++通过建立数据类型——类来支持封装和数据隐藏。封装性增加了对象的独立性,从而保证了数据的可靠性。一个定义完好的类可以作为独立模块使用。
4.2.3.2 继承与派生
当定义了一个类后,又需定义一个新类,这个新类与原来的类相比,只是增加或修改了部分属性和操作,这时可以用原来的类派生出新类,新类中只需描述自己所特有的属性和操作。
新类称为子类或派生类,原来的类称为基类。派生可以一直进行下去,形成一个派生树。
4.2.3.3 多态性
多态性指,同一个消息被不同对象接收时,产生不同结果,即实现同一接口,不同方法。
五.算法的设计与分析
通俗地说,算法就是解决问题的步骤。
解决的问题的种类与复杂程度各不相同决定了算法的多样性,但从其思想方法上可以将其归为以下几种:直接法、枚举法、递推法、递归法、回溯法等等。
六 C语言与面向对象的C++
C++与C完全兼容,很多用C编写的库函数和应用程序都可以为C++所用。
但正是由于与C兼容,使得C++不是纯正的面向对象的语言,它既支持面向对象程序设计,也支持面向过程设计。但我们应当注意用面向对象的思想进行设计,以发挥出C++的优势。