a.computeAmount( 30 )
这意思是﹕把讯息──computeAmount(30)送给对象 a。此时对象a 内部之computeAmount()函数就会进行运算(把 30 和 20 乘起来)﹐并且送出总金额 600元。您可输入另一讯息﹐指令为﹕
此时﹐对象 a内之inquireHeight()函数就会进行运算(读取高度── 2.1)并且送出该树之高度﹐亦即 2.1公尺。看看较完整的VB程序吧﹗
Protedted Sub Form1_Click( .... )
Dim amount As Double
Dim height As Double
Dim a As New FruitTree( "peach", 8, 2.1, 3, 20 )
amount = a.computeAmount( 25 )
height = a.inquireHeight()
Messagebox.Show("Amount= " str(amount) "Height= " str(height))
End Sub
此程序中﹐对象 a首先接到一讯息──computeAmount(25)﹐对象a 就会激活其内部的computeAmount()函数﹐此函数就拿25和对象中的价格20相乘﹔函数计算完毕得到 500﹔对象 a就将其送出来。
计算机再将 500存入amount变量之中﹐则amount之值是 500。接下来﹐对象 a又接到另一讯息──inquire_height()﹐对象 a激活其内部的inquire_height()函数﹐此函数就读取对象内的「高度」──2.1 ﹔且把 2.1送出来。
计算机将 2.1存入height变量之中﹐则height之值为 2.1。最后﹐计算机把amount及height变量之值显示于屏幕上──
Amount = 500 Height = 2.1
7. 类别之定义
一只猫是对象(Object)﹐不同的猫其大小、颜色各不相同﹐但是它们有很多相同之行为﹐您才认为它们是猫﹐也才将它们归于同一类﹔譬如喜欢捉老鼠、善于爬树、怕水等等。因之归于同类别之对象具有共同的行为(Behavior)﹐亦即各对象对讯息(Message) 之反应过程是相同的﹐这反应过程可由同一函数担任。例如﹐下述指令产生 a及 k两对象──
Dim a As New FruitTree("peach", 8, 2.1, 3, 20)
Dim k As New FruitTree("pineapple", 2, 0.5, 6, 10)
假设其内部资料为﹕
因 a及 k是同类别之对象﹐所以对同一种讯息的反应过程是一样的﹔但由于对象内部的资料并不相同﹐其反应的结果有所不同。
对于讯息──computeAmount(25)而言﹐对象 a会激活computeAmount()函数处理它﹔而对象 k也激活computeAmount()处理它﹐其处理过程是相同的。也就是说﹐对象 a和 k共享computeAmount()函数来处理这讯息。此computeAmount函数可写成﹕
Function computeAmount(重量)
computeAmount = 重量 * 价格
End Function
于是﹐把这函数加入FruitTree类别中──
Class Tree
品种
年龄
高度
End Class
Class FruitTree
Inheits Tree
成熟月份
价格
Function computeAmount(重量)
computeAmount = 重量 * 价格
End Function
End Class
Class Bamboo
Inherits Tree
用途
End Class
如此﹐FruitTree类别之各对象都对computeAmount(25)讯息有所反应﹔各对象皆使用这computeAmount()函数来处理此讯息。您可认为各对象共享computeAmount()函数﹐也能认为每对象内皆有一份computeAmount()函数﹐以便处理这种讯息。接下来﹐继续将inquireHeight()函数加入FruitTree类别中──
Class Tree
品种
年龄
高度
End Class
Class FruitTree
Inherits Tree
成熟月份
价格
Function computeAmount(重量)
computeAmount = 重量 * 价格
End Function
Function inquireHeight()
inquireHeight = 高度
End Function
Class Bamboo
Inherits Tree
用途
End Class
于是FruitTree类别之对象具有同样的行为──对computeAmount()和inquireHeight()讯息有所反应﹐且反应过程也相同﹐只是反应结果有所不同。写程序时﹐可认为FruitTree类别之对象共同享用computeAmount()及inquireHeight()函数。也可认为各对象内﹐各有一份computeAmount()函数及一份inquireHeight()函数﹐以便处理这两种讯息。
请看个主程序﹕
Protedted Sub Form1_Click( .... )
Dim amount As Double
Dim height As Double
Dim a As New FruitTree( "peach", 8, 2.1, 3, 20)
Dim k As New FruitTree( "pineapple", 2, 0.5, 6, 10)
amount = a.computeAmount( 25 )
height = a.inquireHeight()
Messagebox.Show("Amount= " str(amount) "Height= " str(height))
amount = k.computeAmount( 25 )
height = k.inquireHeight()
Messagebox.Show("Amount= " str(amount) "Height= " str(height))
End Sub
因FruitTree类别含有computeAmount()及inquireHeight()两函数﹐所以对象 a及 k皆能接受这两种讯息﹐并处理之。至于其它的讯息﹐因无函数来支持(处理)﹐FruitTree之对象无法接受之。您可继续把新函数加入FruitTree类别中﹐使其对象拥有更丰富之行为﹐亦即能接受更多样化之讯息。换句话说﹐对象之功能就更多了。上述程序输出如下﹕
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




