本节书摘来自异步社区《OOD启思录》一书中的第2章2.4节动态语义,作者【美】Arthur J.Riel,更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.4 动态语义
OOD启思录
除了固定的数据和行为的描述之外,对象在运行时还随着其数据描述的动态取值具有局部状态(即当时的“快照”)。类的对象的所有可能状态的集合以及状态间合法的变换称为类的动态语义(dynamic semantics)。动态语义允许对象对其生命期的两个不同时候发来的相同消息作出不同的回应。例如,看这个抽象例子:

Method junk for the class X 
           if (local state #1) then
                do something
           else if (local state #2) then
                do something different
     End Method

对象的动态语义是任何面向对象设计的有机组成部分。一般而言,任何具有有意义动态语义的类都应当用一个状态转换图(参见图2.8)来把这些动态语义归档。具有有意义动态语义的类是指具有有限状态和精确定义的状态变换的类。图2.9所示的状态转换图详细描述了某个操作系统中进程的动态语义。它表明,进程的状态可以是就绪、当前进程、阻塞、睡眠和退出。此外,进程创建时只能是就绪状态,它们只能在退出状态被销毁,它们只能在当前进程状态时


de75abc7daa1ace31cd6a670ef7f1b938fefe78a

才能退出。这些信息对于为类及其对象创建测试集(test suite)非常有用。有些设计者偶尔会把动态语义建模成静态语义,这会导致类的数目大量膨胀——这是面向对象范型中的一个严重问题。我们将在第5章讨论继承关系的时候探讨这个问题以及避免这个问题的方法。

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐