正确认识使用UML类图
前言
在OOA与OOD大行其道的今天,UML在系统分析与设计中获得了普遍的采用。而在UML的9种图中,UML类图是最重要也是使用最广泛的图之一。可是,在与一些朋友,特别是初学者的聊天当中,我发现不少朋友对UML类图的做用及使用方法存在必定的误解和困惑。因而我写下这篇文章,但愿本文能在必定程度上帮助这些朋友更好的认识和使用UML类图。固然,因为我对UML的认识并不很深入,因此在文章中有错误和疏漏之处,恳请你们批评指正。
AvsD
要想正确认识与使用UML类图,咱们首先要正确认识两个概念——“A”和“D”。
A是Analyse的缩写,即咱们所说的“分析”;而D是Design的缩写,即“设计”。通常来讲,一个系统在编码前,都要通过分析与设计两个步骤。而对这两个概念认识的模糊不清,正是致使不少朋友没法正确使用UML类图的缘由。
分析,我对其的解释是:根据用户的需求,作出一系列与业务领域相关而和计算机技术无关的整理与识别。
不少朋友有个错误的认识,认为软件开发工做必定要由懂计算机的人完成,不懂计算机的人怎么能进行软件开发呢?固然,对于设计和编码等工做,固然是这样,可是惟有“分析”这一工做,能够由彻底不懂计算机的人来进行,甚至从某种程度上说,不懂计算机的人更适合作软件分析师的工做。由于想要把分析作好,必定要仅与业务相关,而抛开具体技术。一个满脑子计算机技术的程序员去作分析时,很容易想到编码、实现、平台、数据库设计等具体细节,这种思惟形式偏偏成为作好分析的最大障碍。此为误解一:只有懂计算机技术的人才能作系统分析师。我如今所在的研究所(北京航空航天大学计算机学院软件工程研究所)曾经接过一个日本项目,当时日方那边派来一个系统分析师对计算机就彻底是外行,而是一个领域专家,可是他很好的完成了系统分析的工做。
另一个误解就是UML图,特别是UML类图,就是给开发人员用的。不少人以为UML是计算机业内专业语言,不懂计算机的怎么能用它呢?用了作什么呢?可是不少不懂计算机的系统分析师在进行分析工做时,也在使用UML图,而UML类图就是其中一种。通常状况下,分析师在进行分析时,确实会绘制一套UML类图。可是,它所画的UML类图不论是从视角仍是做用,与设计师所作的UML类图是不一样的,具体将在下面介绍。此为误解二:只有计算机人士才使用UML图。
分析说完了,下面说设计。与分析不一样,我对设计的解释是:根据分析材料与技术平台,肯定软件系统的架构结构、编码方式及一切与具体技术有关的宏观问题。
这里能够看到,设计与分析不一样,它必须由计算机方面的人来完成,由于它和具体技术是息息相关的。并且,设计师在进行设计时,也会绘制一套UML类图。
到这里,咱们明确了,原来软件在分析与设计两个阶段各自会绘制一套UML类图,并且是由分析师和设计师两个不一样的角色绘制的。那么这两套UML类图有什么异同呢?下面将解释这个问题。
领域UML类图vs实现UML类图
上文提到,在软件分析与设计过程当中,会由两种角色产生两套UML类图。通常状况下,分析师绘制的UML类图叫作“领域UML类图”,而设计师绘制的UML类图叫作“实现UML类图”。这里要声明,这两个名词是个人习惯性叫法,并非你们都认同的通用叫法。下面,我对这两种UML类图给出个人定义:
领域UML类图:产生于分析阶段,由系统分析师绘制,主要做用是描述业务实体的静态结构,包括业务实体、各个业务实体所具备的业务属性及业务操做、业务实体之间具备的关系。
虽然这个UML类图也叫“UML类图”,可是说实话,它和编程中的“类”实在是没啥关系,由于最后的系统中可能根本没有类和它们对应,并且不少最后系统中的类如控制类和界面类这套UML类图中也没有。也就是说这套图和具体技术无关,也不是画给程序员看的,它只是表达业务领域中的一个静态结构。下面给个例子:
这是一个选课系统的简单领域分析UML类图。能够看到,主要实体有教师、学生、课程和开课安排。每一个实体标注了其在业务上具备的属性和方法。并且图中还标明了实体间的关系。
可是,最终系统中可能没有一个学生类和其对应。由于最终系统中有哪些类、各个类有什么属性、方法依赖于所选择的平台和架构。例如,若是使用了Struts2,则会存在不少Action类,而使用了ASP.NETMVC,则会有不少Controller类等,因此,领域UML类图只于业务有关,和具体实现及编码等计算机技术无关。
实现UML类图:
实现UML类图:产生于设计阶段,由系统设计师绘制,其做用是描述系统的架构结构、指导程序员编码。它包括系统中全部有必要指明的实体类、控制类、界面类及与具体平台有关的全部技术性信息。
就像上面的领域UML类图,若是你把它交给程序员编码,我想程序员会疯掉,由于它没有提供任何编码的依据。假如咱们使用的是.NET平台分层架构,并使用ASP.NETMVC,则设计师应该在实现UML类图中绘制出全部的实体类、数据访问类、业务逻辑类和界面类,界面类又分为视图类、控制器类等等,还要表示出IoC和Aop等信息,并明确指出各个类的属性、方法,不能有遗漏,由于最终程序员实现程序的依据就是实现UML类图。
总结
最后,咱们总结一下本文的要点:
1.软件分析与设计是编码前的两个阶段,其中分析仅与业务有关,而与技术无关。设计以分析为基础,主要与具体技术有关。
2.分析阶段由分析师绘制领域UML类图,设计阶段由设计师绘制实现UML类图。
3.领域UML类图表示系统的静态领域结构,其中的类不与最终程序中的类对应;设计UML类图表示系统的技术架构,是程序员的编码依据,其中的类与系统中的类对应。
4.领域UML类图中类的属性与操做仅关注与业务相关的部分,实现UML类图中的属性与操做要包括最终须要实现的所有方法与操做。