第11章 面向对象设计

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)关系之间的区别

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
(Rational Numbers) Create a class called Rational for performing arithmetic with fractions. Write a program to test your class. Use integer variables to represent the private instance variables of the class the numerator and the denominator. Provide a constructor that enables an object of this class to be initialized when it is declared. The constructor should store the fraction in reduced form. The fraction 2/4 is equivalent to 1/2 and would be stored in the object as 1 in the numerator and 2 in the denominator. Provide a no-argument constructor with default values in case no initializers are provided. Provide public methods that perform each of the following operations: a. Add two Rational numbers: The result of the addition should be stored in reduced form. b. Subtract two Rational numbers: The result of the subtraction should be stored in reduced form. c. Multiply two Rational numbers: The result of the multiplication should be stored in reduced form. d. Divide two Rational numbers: The result of the division should be stored in reduced form. e. Print Rational numbers in the form a/b, where a is the numerator and b is the denominator. f. Print Rational numbers in floating-point format. (Consider providing formatting capabilities that enable the user of the class to specify the number of digits of precision to the right of the decimal point.) – 提示: – 有理数是有分子、分母以形式a/b表示的数,其中a是分子,b是分母。例如,1/3,3/4,10/4。 – 有理数的分母不能为0,分子却可以为0。每个整数a等价于有理数a/1。有理数用于分数的精确计算中。例如1/3=0.0000…,它不能使用数据类型double或float的浮点格式精确表示出来,为了得到准确结果,必须使用有理数。 – Java提供了整数和浮点数的数据类型,但是没有提供有理数的类型。 – 由于有理数与整数、浮点数有许多共同特征,并且Number类是数字包装的根类,因此,把有理数类Rational定义为Number类的一个子类是比较合适的。由于有理数是可比较的,那么Rational类也应该实现Comparable接口。+下页图中描述了Rational类已将其与Number类和Comparable接口的关系。 –

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值