本节书摘来自华章计算机《软件建模与设计: UML、用例、模式和软件体系结构》一书中的第1章,第1.9节,作者:(美)Hassan Gomaa,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1.9 面向对象分析和设计方法的发展
20世纪80年代中晚期,面向对象编程的流行和成功使得几种面向对象设计方法相继出现,包括Booch,Wirfs-Brock,Wilkerson,and Wiener(1990)、Rumbaugh et al.(1991)、Shlaer and
Mellor(1988,1992)以及Coad and Yourdon(1991,1992)。这些方法所强调的重点在于问题域建模、信息隐藏和继承。
Parnas倡导将信息隐藏作为一种设计更加独立的模块的方法,这种独立的模块可以在对其他模块影响很小甚至不造成任何影响的情况下进行修改。Booch将面向对象思想引入到设计中,最初与信息隐藏一起应用到基于Ada的系统的面向对象设计中,然后扩展为在面向对象设计中使用信息隐藏、类和继承。Shlaer and Mellor(1988)、Coad and Yourdon(1991)及其他人将面向对象思想引入到分析中。与结构化方法相比,面向对象方法被普遍认为提供了一种更加平滑的从分析到设计的过渡。
面向对象分析方法将面向对象思想应用到软件生存周期的分析阶段,强调识别问题域中的现实世界对象并将其映射为软件对象。在对象建模上最初的设想是源自于逻辑数据库设计中使用的信息建模(特别是实体关系(E-R)建模,更一般地说是语义数据建模)的静态建模方法。实体关系建模中的实体是问题域中的信息密集型对象。实体、实体的属性以及实体间的关系在实体关系图中进行确定和描述;重点完全在数据建模上。在设计过程中,实体关系模型被映射到数据库(通常是关系数据库)中。在面向对象分析中,问题域中的对象被识别和建模为软件类,然后确定每个类的属性以及类之间的关系(Coad 1991;Rumbaugh et al. 1991;Shlaer and Mellor 1988)。
面向对象的静态建模中的类与实体关系建模中的实体类型的主要区别在于类有操作而实体类型没有操作。此外,信息建模只对存储在数据库中的持久化实体进行建模,而静态的对象建模中也会对其他问题域中的类进行建模。信息建模中也包含了聚合和泛化/特化这样更加高级的概念。在UML之前使用最广泛的静态对象建模表示法是对象建模技术(Object Modeling Technique,OMT)(Rumbaugh et al. 1991)。
静态对象建模也称为类建模和对象建模,因为其中包含确定对象所属的类并且在类图中描述类与类之间的关系。领域建模这一术语也用来指对问题域的静态建模(Rosenberg and Scott 1999;Shlaer and Mellor 1992)。
早期的面向对象分析和设计方法通过信息隐藏和继承强调软件开发的结构性方面而忽视了动态方面。OMT(Rumbaugh et al. 1991)的一个重要贡献在于清晰地表明了动态建模也是同等重要的。除了为对象图引入静态建模表示法外,OMT还展示了如何使用状态图进行动态建模以显示主动对象与状态相关的行为及如何使用顺序图来显示对象间的交互序列。Rumbaugh et al.(1991)使用状态图,这是一种最初由Harel(1988,1998)所设想的层次化的状态转换图,用来建模主动对象。Shlaer and Mellor(1992)也是用状态转换图来建模主动对象。Booch最初使用对象图来显示实例级的对象间交互,后来对交互进行顺序编号从而更加清楚地描述对象间的通信。
Jacobson(1992)为系统的功能性需求的建模引入了用例的概念,还使用顺序图来描述参与一个用例的对象之间的交互序列。用例的概念是Jacobson的面向对象软件工程生存周期中所有阶段的基础。用例的概念已经对现代面向对象软件开发产生了深远的影响。
在UML之前,还有其他一些试图统一不同的面向对象方法和表示法的尝试,包括Fusion(Coleman et al. 1993)和Texel and Williams(1997)的著作。UML表示法最初由Booch、Jacobson和Rumbaugh提出,其目的是集成用例建模、静态建模和动态建模(使用状态图和对象交互建模)表示法,这些将在第2章中描述。其他方法学家也对UML的发展做出了贡献。Cobryn[1999]和Selic(1999)有一个关于UML是如何演化的以及在未来会怎样演化的有趣的讨论。