当前位置: 首页 > 文档资料 > C++大学教程 >

5.13 有关对象的思考:对象间的交互

优质
小牛编辑
142浏览
2023-12-01

这是第6章开始介绍 C++ 面向对象编程之前的最后一次面向对象设计任务:完成这个任务并学习第6章之后,就可以开始编写电梯模拟程序。要完成第2章定义的电梯模拟程序,就需要第6章、第7章和第8章介绍的 C++ 方法。然后用第9章和第10章介绍的继承和多态方法馅改电梯模拟程序。

本节介绍对象间的交互帮助读者把对象联系起来。也许读者在第2章、第3章和第4章开发实验室任务时增加了对象、属性和行为。

我们介绍过,大多数 C++ 对象不是自动工作的,而是响应消息刺激,实际上是对象对成员函数的函数调用。

下面要考虑电梯模拟程序中几个类的交互。问题 人按楼层中的按钮,这里主语是人、宾语是按钮,这就是类之间交互的例子。person类的对象向button类的对象发一个消息,我们把这个消息称为 pushButton。上一章把该消息变成了 button 类的成员函数。

这时.在电梯模拟程序每个类的其他事实中,余下的大概都是类之间的交互,其中有些明显表示类对象之间的交互。但请考虑下列表述:

”persOn waits for elevator door to open"(人等待电梯开门)

上一章列出了电梯门的两个行为,称为 opeaDoor 和 closeDoor,现在要确定哪个类对象发出这些消息。可以确定是电梯本身发出这些消息给电梯门。这些类对象之间的交互隐含在问题陈述中。

现在要继续细化电梯模拟程序中每个类的 其他事实 部分.这时应当主要包含类之间的交互。注意下列几点:

  • 谁发送类对象。
  • 发送什么消息。
  • 谁接收类对象。

在每个类中,增加 发往其他类对象的消息(这种消息也称为 协作)并列出类之间的其他交互,例如在 person 类中,包含项目:

person sends pushButtOn message to the button On that floor

在 button 类的 协作 部分,放上消息:

button sends comeGetMe message to elevator

建立这些项目时,可以增加对象的属性和行为。

完成这个实验室练习后,就有了实现电梯模拟程序的完整类清单。对每个类,有了完整的属性和行为清单以及对象之间要发送的消息清单。

下一章要开始介绍C++面向对象编程,介绍如何生成新类。学习第6章之后,就可以用C++编写电梯模拟程序的重要部分;学习第7章和第8章之后,就可以实现可运行的电梯模拟程序;学习第9章和第10章之后,就可以使用继承,利用类之间的共性减少解决问题所需的编程工作量。

下面小结第2章到第5章介绍的面向对象设计过程。

  • 在文本文件中输人问题陈述。
  • 放弃不重要的文本。
  • 取出所有事实,在事实文件中每一行列出一个事实。
  • 找出事实中的名词,其通常是需要的类,对每个类进行高度概括。
  • 对每个事实,放在相应类中进行二级概述。如果一个事实涉及几个类,则放在涉及的每个类中。
  • 组分类中的事实,列出属性、行为和协作。
  • 在属性中,列出与每个类相关的数据。
  • 在行为中.列出每个类对象收到消息时进行的操作。每个行为是类的成员函数,
  • 在协作中,列出这个类对象向其他类对象发出的消息和接收该消息的类对象,
  • 这时设计中可能还缺点什么,第6章介绍如何用C++实现电梯模拟程序时,这些问题会显露出来。

属性与行为通常称为类的“责任”。这里介绍的设计方法有时称为类、责任与协作(简单CRC)。