870920 Menu

SwingCoder之面向对象分析、设计及软件研发·1

开发概述

软件开发可归纳为以下几个方面:

 尽量将问题抽象出来(总结与提炼),基于问题域思考。
 管理、分解和降低(简化)复杂度。最小复杂度总是最大创造性的来源。
 清晰而独立的模块化构建,划分子系统,层层细化。
 代码首先是写给人看的,包括注释、代码布局、格式与惯用法。
 不要怕麻烦。编程没有捷径,没有速成,没有一蹴而就。
 多试验,多测试。提出问题,背景查阅,大胆假设,小心求证,实际应用,技巧扩展,总结提炼。

软件开发的一般过程为:
 前期规划:定义问题—需求分析—整体架构(顶层设计)。
 模块划分(确定子系统):详细设计(自顶向下,逐步细化,分解复杂度)—设计模式。
 编码与集成:伪代码编程(确定类与成员函数)—编码—调试—测试 —模块集成—系统集成。
 发布与更新:自测—公测—发布—维护更新—版本升级(每次版本升级均重复整个开发过程)。

管理与分解复杂度的常规流程:
 尽可能工作于最高的抽象层次,基于问题域编程。
 明确所要解决的问题,将其划分为多个子系统和模块。
 每个模块划分为一个编译单元,每个编译单元包含一到多个类。
 确定每个类的成员函数与数据成员。
 使用设计模式,确定类与类之间的关系与耦合。
 使用伪代码描述类和成员函数。
 根据伪代码编写源代码,完成后将伪代码就地转为注释(以上为自顶向下,以下为自下而上)。
 调试与测试所写的类与成员函数。
 类的集成与集成测试,系统集成与测试。
 反复迭代。

类与对象在软件开发中的定位与关系:
 模块或子系统由类构成,类的表现形式或者说变化形式是对象。
 设计与编码时以类为最小单位来考虑(降低复杂度、隔离复杂度、增强独立性、隐藏细节、限制所影响的范围、便于重用、便于维护和扩展)。
 类是静态的,是某一问题或具体概念的抽象物。
 对象是类的实体,是程序运行期间实际存在的“活动目标”,具有运行期可变的特点。
 类越独立越好,低耦合,高内聚是其最主要的设计目标。
 程序的交互与功能的实现,依赖于不断变化的对象的行为、属性与互相通信。
 对象的属性由其所持有的数据成员来表示,其行为由成员函数来确定。类本身的属性和功能由静态数据和静态函数来确定(可选)。
 对象的可变行为,取决于成员函数的运行结果,即:取决于运行时所传入的函数参数与执行时的先决条件(包括编译时多态性和运行时多态性)。

模块化、封装与隐藏的实质:增强独立性,减少耦合度。独立性体现在两个方面,一是隐藏信息,二是减少外部依赖。就隐藏性而言,能够隐藏的信息越多,同一时间所需考虑和照顾的信息就越少;所需考虑和照顾的信息越少,则忘记某项信息而犯错误的几率就越小,越能营造轻松编程,各司其责,互不影响的良好环境,越容易调试与集成,也容易维护和扩展(升级)。这些是编程方式由机器码进化到高级语言,由语句进化到过程,由过程进化到结构(函数),由结构进化到面向对象(类与对象)的本质主线。也是尽量避免使用全局数据的最根本由来(破坏模块与类的独立性)。