1.软件产品都有相同的开发步骤:需求规范、 系统分析、设计、实现、测试、部署和维护。
- 需求规范(requirement
specification)是一个寻求理解问题、以文档详细说明软件系统需要做什么的形式化过程。这一阶段需要用户和开发者密切交流。本书的大多数例子都很简单,它们的需求已经明确描述。然而,在现实世界中,问题没有明确定义。需要仔细与客户密切研究问题以确认需求。 - 系统分析(system
analysis)是根据数据流分析业务流程,并确认系统的输入输出。分析的部分工作是建立系统行为的模型,这个模型要捕捉系统的基本元素并定义系统的服务。 - 系统设计(system
design)是设计系统构件的过程。这一阶段使用多层次抽象,将问题分解为可管理的构件,确定类和接口,建立类和接口间的关系。
实现(implementation)是将系统设计翻译成程序的过程。为每个构件编制相对独立的程序,将它们组合起来协调工作。这个阶段需要使用程序设计语言,如Java语言。实现包括编码、测试和调试。 - 测试(testing)确保代码符合需求规范并且排除错误。通常由一组不参与设计和实现、与项目无关的软件工程师进行测试。
- 部署(deployment)使项目可用。对一个Javaapplet来说,这意味着把它装到一个Web服务器上。对一个Java应用程序来说,就是把它安装到用户的计算机上。项目总是由许多类组成的。一种有效的部署方法就是将所有的类打包成一个Java存档文件。
- 维护(maintenance)是指修改和改进产品。一个软件产品必须不断地运行,并在变化的环境中改进。这就需要定期升级产品,排除新发现的问题并根据环境的变化进行改进。
2.类的关系可以分成:关联(association)、聚集(aggregation)、组合(composition)、依赖(dependency)和继承(inheritance)。
- 关联是一种描述两个类之间行为的一般二元关系。
- 聚集是一种特殊的关联形式,表示两个对象之间的所属关系。聚集模拟具有(has-a)关系。所有者对象称为聚集对象,它的类称为聚集类;从属对象称为被聚集对象,它的类称为被聚集类。
- 如果一个对象被一个聚集对象所专有,它和聚集对象之间的关系就称为组合。
- 两个类之间一个(称为client)使用另一个(称为supplier)的这种关系称为依赖(dependency)。
- 继承模拟两个类之间是(is-a)的关系。强是(strong is-a)关系描述两个类之间的直接继承关系。弱是(weak is-a)关系描述一个类具有某些属性。
3.在构建一个面向对象系统的过程中,通常有下列步骤:
- 确定系统的类。
- 建立类之间的关系。
- 描述每个类的属性和方法。
- 创建类。
4.有理类Rational
由于有理数与整数、浮点数有许多共同特征,并且Number类是数值包装类的根类,因此,把有理数类Rational定义为Number类的子类比较合适。由于有理数是可比较的,那么,Rational类也应该实现Comparable接口。
5.类的设计原则
- 内聚性:类应该描述一个实体,类的所有操作应该在逻辑上相互配合,支持一个共同的目标。
- 一致性:遵循标准的Java编程风格和命名规则。给类、数据域以及方法选择有意义的名字。建议将数据的声明置于构造方法之前,将构造方法置于方法之前
- 封装性:类应该使用private修饰符隐藏其数据,以免用户直接访问它,这使得类易于维护。
- 清晰性:类应该有一个很清晰的合约,易于解释和理解。
- 完整性:类经常是为了多种不同用户的使用而设计的。为了能在广阔的应用范围内使用,类应该通过属性和方法提供多种方案以适应用户的不同需求。
6.继承与聚集之间的区别就是“是一个”(is-a)关系与“有一个”(has-a)关系之间的区别