ITEEDU

4.10 有关对象的思考:确定类的行为

第2章和第3章“有关对象的思考”一节完成了电梯模拟程序面向对象设计的前两步,即确定实现电梯模拟程序的类和这些类的属性。

本节要确定实现电梯模拟程序所需的类行为。第5章将介绍这些类对象之间的交互。

下面要考虑一些实际类对象的行为。收音机的行为包括可以选台和设置音量。汽车的行为包括加速(按油门板)和减速(按制动闸)。

可以看出,对象通常不是自动做出行为,而是在向对象发出消息(message)时调用特定行为,这个消息表示对象要做出特定行为。这很像函数调用,C++中就是这样向对象发出消息的。

电梯实验宣任务3

1.继续处理第3章生成的事实文件。其中将文件分成两组事实,第一组是属性,第二组是其他事实。

2.对每个数,加进第三个组,称为“行为”。用该组存放类的每个行为,对象调用这些行为来做某件事(即通过向对象发出消息)。例如,人可以单击按钮,因此将pushButton列为按钮类的行为。函数pnshButton和按钮类的其他行为称为成员函数(member function)或方法(method)。类的属性(如按钮“开”或“关”)通常称为按钮类的数据成员(data member)。

类的成员函数通常操作类的数据成员(如pushBuuon改变按钮的属性为“开”)。成员函数通常还向其他类的对象发送消息(例如按钮对象向电梯发送comeGetMe消息)。假设某人按按钮时电梯的按钮亮灯,电梯到达某一层时,电梯要发送resetButton消息以关掉按钮的灯。电梯可能要确定某个按钮有没有按下,因此要用getButton行为检查按钮,返回1和0分别表示按钮“开”或”关”。可能要让电梯门响应消息openDoor和closeDoor等等。

3,对类指定的每个行为,简要介绍这个行为的作用。列出行为导致的属性改变,列出行为向其他类的对象发送的消息。

说明

1.首先列出问题陈述中提到的类属性,然后列出问题陈述中隐含的类属性。

2.在需要时增加相应的行为。

3.系统设计不是完善和完整的过程,只要尽力而为,后面几章的练习会介绍如何修改。

4.这个阶段很难看出所有行为,第5章练习中可能还要增加新的行为。


小结

●C++将数值清单存放在数组中。数组是相同名称和相同类型的一组连续内存地址。要引用数组中的特定位置或元素,就要指定数组中的特定位置或元素的位置号。

●下标应为整数或整型表达式。如果程序用整型表达式下标,则要求值这个整型表达式以确定下标。

●一定要注意“数组第7个元素”与“数组元素7”之间的差别。由于数组下标从。开始,因此“数组第7个元素”的下标为6,而“数组元素7”的下标为7,是第8个元素。这常常是“差1错误”的原因。

●数组要占用内存空间。下列声明对整型数组b保留100个元素,对整型数组x保留27个元素:

int b[100],x[27];

●char类型的数组可以存放字符串。

●数组元素可以用声明、赋值或输入初始化。

●如果初始化值比数组中的元素少,则其余元素自动初始化为0。

●C++无法阻止计算机引用超出数组边界的元素。

●可以用字符串直接初始化字符数组。

●所有字符串均用空字符结尾('\0')。

●字符数组还可以用初始化值列表中的各个字符常量初始化。,可以用数组下标符号直接访问字符串中的各个字符。

●将数组传递给函数实际上传递的是数组名,要将数组中的单个元素传递绐函数,只需传递数组名和指定元素的下标(放在方括号中)即可。

●C++模拟按引用调用,自动将数组传递给函数,被调用函数可以修改调用者原数组中的元素值。数组名的值为数组中第一个元素的地址。由于传递数组的开始地址,因此被调用函数知道数组的准确存放位置。

●要让函数通过函数调用接收数组,函数的参数表应指定接收数组。数组方括号中的数组长度不是必需的。

●有时程序中函数不能修改数组元素。由于数组总是模拟按引用调用,因此数组中数值的修改很难控制。C++提供类型限定符const,可以防止修改函数中的数组值。数组参数前面加上const限定符时,数组元素成为函数体中的常量,要在函数体中修改数组元素会造成语法错误。

●数组可以用冒泡方法排序。这个方法在数组中多次操作,每一次都比较一对相邻元素。如果某一对为升序(或数值相等),数值保持不变。如果某一对为降序,则将数值交换。对于小数组,可以用冒泡方法排序,但对于大数组,则不如用更复杂的排序方法那么有效。

●线性查找比较数组中每个元素与查找键。由于数组没有特定的顺序,很可能第一个就找到,也可能要到最后一个才找到。因此,平均起来,程序要比较数组中一半的元素才能找到查找键值。线性查找方法适用于小数组或未排序数组。

●折半查找算法在每次比较之后排除所查找数组的一半。这个算法找到数组的中间位置,将其与查找键比较。如果相等,则已找到查找键,返回该元素的数组下标。否则将问题简化为查找一半数组。

●在最糟糕的情况下,查找1024个元素的数组只要用折半查找进行十次比较。

●C++中有多下标数组。多下标数组常用于表示由行和列组成的表格。要表示特定表格元家,就要指定两个下标:习惯上第一个表示元素的行,第二个表示元素的列。用两个下标表示特定的表格或数组称为双下标数组。

●函数参数中收到单下标数组时,函数参数表中的数组方括号是空的。多下标数组第一个下标的长度也不需要,但后续所有下标长度都是需要的。编译器用这些长度确定多下标数组中元素在内存中的地址。

●要将双下标数组的一行传递给函数而函数只接收单下标数组,只要传递数组名加上第一个下标即可。


术语


a[i]                                                  columnsubscript列—F标
a[i][j]                                               const type qualifier const   类型限定符
array   数组                                          constant variable   常量变量
array initializer list   数组初始化值列表             declareanarray   声明数组
binary search of an array   数组折半查找              double-subscriptedarray   双下标数组
bounds cheking    边界检查                            element of an array    数组元素
bubble sort   冒泡排序                                initialize an array    初始化数组
initializer   数组的初始化值                          searchanarray    查找数
initializer   数组的初始化值                          searchanarray    查找数组
linear search of an array    数组的线性查找           search key    查找键
magic number    魔数                            simulated call-by-reference   模拟的按引用调用
m—by-n array   m x n数组                             single-subscripted array    单下标数组
multiple-subscripted array   多下标数组               sinking sort   下沉排序
name of array    数组名                               sort an array   数组排序
named constant    命名常量                            square brackets   方括号([])
null character    空字符('\0')                        string    字符串
off-by--error    差1错误                              subscript   下标
pass-by-reference    按引用传递                       table of values   数值表
pass of a bubble sort   冒泡排序操作                  tabular format   表格形式
passing arrays to functions  将数组传递给函数  temporary area of exchange of values 临时数据交换区
position number    位置号                             triple--subscripted array   三下标数组
row subscript   行下标                                value of an element   元素值
scalability   伸缩性                                 "walk off" an array   数组超界
csalar    标量                                        zeroth element    第O个元素