面向对象建模得到的模型包含系统的3个要素:静态结构(对象模型)、交互次序(动态模型)和数据变换(功能模型)。
这三个模型解决的问题不同,其重要程度也不同:几乎解决任何一个问题,都需要从客观世界实体及实体间相互关系抽象出极有价值的对象模型;当问题涉及交互作用和时序时(比如,用户界面及过程控制等),动态模型很重要;解决运算量很大的问题(比如,高级语言编译科学与工程计算等),则功能模型更重要。
复杂问题(大型系统)的对象模型可以由下面五个层次组成:主体层、类与对象层、结构层、属性层、服务层。这5个层次就像叠在一起的5张透明塑料片,它们一层比一层显现出对象模型的更多细节。
建立对象模型
面向对象分析首要的工作,是建立问题域的对象模型。这个模型描述了现实世界中的“类与对象”以及它们之间的关系,表示了目标系统的静态数据结构。静态数据结构对应用细节依赖较少,比较容易确定;当用户的需求变化时,静态数据结构相对来说比较稳定。因此,用面向对象方法开发绝大多数软件时,都首先建立对象模型,然后再建立另外两个子模型。
对象模型通常有5个层次,基本的工作步骤是:首先确定对象类和关联(因为它们影响系统整体结构和解决问题的方法),对于大型复杂问题还要进一步划分不同主题;然后给类和关联添加属性,目的为进一步描述它们;接下来利用适当的继承关系进一步合并和组织类。而对类中操作的最后确定,则需要等建立了动态模型和功能模型之后,因为这两个子模型更准确地描述了对类中提供的服务的需求。
建立动态模型
第一步,编写典型交互行为的脚本。虽然脚本中不可能包括每个偶然事件,但是,至少必须保证不遗漏常见的交互行为。
第二步,从脚本中提取出事件,确定触发每个事件的动作对象以及接受事件的目标对象。
第三步,排列事件发生的次序,确定每个对象可能有的状态及状态间的转换关系,并用状态图描绘它们。
最后,比较各个对象的状态图,检查它们之间的一致性,确保事件之间的匹配。
顺便解释一下什么是脚本,“脚本”原意是指“表演戏曲、话剧、拍摄电影、电视剧等所依据的本子,里面记载台词、故事情节等”。
在建立动态模型的过程中,脚本是指系统在某一执行期间内出现一系列事件。
建立功能模型
功能模型表明了系统中数据之间的依赖关系,以及有关的数据处理功能,它由一组数据流图组成。其中的处理功能可以用IPO图(或表)、伪码等多种方式进一步描述。通常在建立对象模型和动态模型之后再建立功能模型。