每种编程模式都会有自己的术语表和隐喻。面向对象编程也不例外。隐喻能够让您从更专业的角度来理解程序。
例如,有种趋势是将对象看做一个个的角色,并赋予它们类似于人的能力。试想一下,一个对象将”决定“在某种情况做什么事情,”询问“其他的对象来获得信息,”自我检查“来获得需要的信息,”代理“其他的对象,”管理“一个进程,这听起来似乎很有趣。
这些隐喻让您认为对象是在主动"使用“它们的方法,而不是在面向过程的编程中一样,是您调用了函数或方法来完成工作。对象不只是一个状态和行为的容器,而被认为是程序活动的代理。
这些隐喻很有用处。对象在许多方面表现得都很象人类:对象是自包含的,在整个程序设计中具有一个特定的角色,并且它可以独立的和程序的其他角色进行交互,在某种程度上可以自己决定一些行为。当然,就象在舞台上的演员一样,它不能脱离剧本,但是对象角色本身具有多面性和复杂性。
把对象看做角色很好地呼应了面向对象编程的最主要的隐喻—对象通过“消息”来通讯。您需要给一个对象发送消息来执行它的方法而不是直接调用它的函数。
尽管这需要一些时间来习惯,但是这些隐喻有助于我们理解对象和对象的方法。它把方法从操作的数据中分离出来而仅关注方法的行为。例如,在面向对象编程接口中,start方法会初始化一个操作,而archive方式则会将信息归档,draw方法则会画出一副图片。方法的名字并没有指出具体哪个操作被初始化,哪些信息被归档,哪副图片被画出。不同的对象可能以不同方式来执行这些方法。
因此,方法是对行为的抽象。您必须把方法关联到一个对象来调用这些方法。这些对象被称作消息的“接收者”。被选作接收者的对象将决定具体被初始化的操作,被归档的数据以及画出的图像。
因为方法可以认为是隶属于某个对象的,所以特定的方法只能选择特定的接收者(实现了该方法的对象并且该对象具有该方法操作的数据结构)。不同的接收者对同一方法可能有不同的实现,因此会做不同操作。仅从消息本身以及方法名字不能得出消息的结果,它还依赖于接收消息的对象。
通过把消息(请求的行为)和接收者(能够响应请求的方法的拥有者)分离,消息隐喻完美地把行为和针对行为的实现分离开来。
例如,有种趋势是将对象看做一个个的角色,并赋予它们类似于人的能力。试想一下,一个对象将”决定“在某种情况做什么事情,”询问“其他的对象来获得信息,”自我检查“来获得需要的信息,”代理“其他的对象,”管理“一个进程,这听起来似乎很有趣。
这些隐喻让您认为对象是在主动"使用“它们的方法,而不是在面向过程的编程中一样,是您调用了函数或方法来完成工作。对象不只是一个状态和行为的容器,而被认为是程序活动的代理。
这些隐喻很有用处。对象在许多方面表现得都很象人类:对象是自包含的,在整个程序设计中具有一个特定的角色,并且它可以独立的和程序的其他角色进行交互,在某种程度上可以自己决定一些行为。当然,就象在舞台上的演员一样,它不能脱离剧本,但是对象角色本身具有多面性和复杂性。
把对象看做角色很好地呼应了面向对象编程的最主要的隐喻—对象通过“消息”来通讯。您需要给一个对象发送消息来执行它的方法而不是直接调用它的函数。
尽管这需要一些时间来习惯,但是这些隐喻有助于我们理解对象和对象的方法。它把方法从操作的数据中分离出来而仅关注方法的行为。例如,在面向对象编程接口中,start方法会初始化一个操作,而archive方式则会将信息归档,draw方法则会画出一副图片。方法的名字并没有指出具体哪个操作被初始化,哪些信息被归档,哪副图片被画出。不同的对象可能以不同方式来执行这些方法。
因此,方法是对行为的抽象。您必须把方法关联到一个对象来调用这些方法。这些对象被称作消息的“接收者”。被选作接收者的对象将决定具体被初始化的操作,被归档的数据以及画出的图像。
因为方法可以认为是隶属于某个对象的,所以特定的方法只能选择特定的接收者(实现了该方法的对象并且该对象具有该方法操作的数据结构)。不同的接收者对同一方法可能有不同的实现,因此会做不同操作。仅从消息本身以及方法名字不能得出消息的结果,它还依赖于接收消息的对象。
通过把消息(请求的行为)和接收者(能够响应请求的方法的拥有者)分离,消息隐喻完美地把行为和针对行为的实现分离开来。