故事还要从去年说起,去年无聊的时候,开始下载Apache的开源项目看,说实话Apache的项目代码对于刚开始接触开源的人来说难度还是太大,但是我一直认为想看懂开源项目的所有细节是不可能的,应该把握整体的骨架,不久我惊奇的发现所有开源项目的指南,安装手册,用户手册一应俱全但是几乎找不到包含任何类图,时序图,协作图等设计细节的设计文档,我在想代码开源了设计图纸没必要保密吧。所以就个费解问题请教了很多人,包括作过开源项目的人,从他们口中得出一个结论:
真正好的代码,代码本身就是最好的设计说明,没必要再写成文当,而且维护文档的工作比维护代码的工作更难。 说实话,当时给我的困惑真是不小,难道好的软件已经推翻或者不再需要大学时候老师像圣经一样传授的UML?
不久别人推荐文章:http://www.sigplan.org/oopsla/oopsla99/2_ap/tech/2d1a_uml.html 质疑UML是否真的适合作为架构设计的语言,显然作者是否定态度的。
在一次讨论上,我们又针对一个非常关键的问题进行了讨论:到底UML的粒度到什么位置最合适。首先基本上所有人都可以肯定地是不需要把所有东西都画在UML上,一个巨大的图纸带来的灾难远大于帮助。到底如何用UML来指导设计真是一个很困难的问题。我曾经举了这样一个例子:
比如java中的HashMap,在HashMap中定义了静态内部类Entry,这样做的好处是
1、根据数据亲密性原则,将HashMap中关联的数据key和value封装起来
2、这个结构只对HashMap本身有用,所以定义成私有的内部类,以免其他类与Entry产生不必要的耦合
但是如果站在你是设计HashMap设计者角度上考虑,将怎么记录设计决定呢?
一、如果企图将HashMap与Entity的关系记录在UML里,那么:
1、UML中很难找到方法表演一个类是另一个类的静态内部类,更难找到方法体现这两种类之间的关系。
2、如果把这些画上了,那么意味着很多其他同等细节的东西也需要在UML上面体现,将会产生一个硕大的难以短时间读懂的图纸。
二、如果不做这样的记录那么:
1、HashMap与Entry关系确确实实是你精心设计的结果,是很设计的重要组成部分,不是实现架构时候的随便决定的。
2、你可能确确实实需要在设计而不是开发阶段能够记录下这个决定,并且很有可能实现架构的人不是设计者你,你也需要保证实现者准确的接收到你的意图。
基于这两点,这种设计决定处于一种相当尴尬和纠结的局面,许多事实证明这么细节的东西是不会被记录到UML中的,UML作为架构设计语言的表述不完整性也可见非常。
无论大家怎么看待UML,有一点可以肯定地是,越来越多的人(包括软件大师)在设计和实现架构的时候不会预先绘制UML图,UML终究不可能像建筑图纸那样精确的描述建筑物的设计决定,UML精神以离架构逐渐远去。
分享到:
相关推荐
首先,我们需要理解UML类图的基本元素:类、接口、关联、泛化和属性。类图由类的表示(通常为矩形),它们之间的关系(如线或箭头)以及类内部的属性和操作组成。在C#程序中,我们将创建一个WinForm界面,包含画布、...
抽象语法定义了UML模型的结构,而不依赖于任何特定的表现形式。语义架构定义了UML语义的基础概念和原则。基本因果模型则是对UML运行时语义的一种理解。 具体到UML的各个组成部分,UML标准对类(class)进行了深入的...
通过以上介绍,我们可以看到,利用Visio结合UML 2.2模板,能够高效地进行系统建模,有助于软件开发过程中的沟通、设计和验证。确保正确理解和使用这些资源,能够极大地提升软件开发的效率和质量。
UML 不仅仅是一套图形符号,它还包含了模型元素、关系和规则。例如,通用机制如注解(stereotype)允许扩展UML,使其适应特定领域或工具的需求。此外,UML支持面向对象的分析和设计原则,如封装、继承和多态性。 在...
学习UML不仅需要理解其基本概念,更需通过实际项目练习,如绘制不同类型的图表,将理论知识转化为实践能力。"You-UML"这样的学习资源,可能是提供练习题或案例的平台,有助于加深理解和掌握。 总结来说,UML是软件...
UML PAD是一款高效且小巧的UML绘图工具,专为那些需要快速绘制UML图但又不想被大型专业软件的复杂度所困扰的用户设计。它以其简洁的界面、易用的操作和便携性赢得了广大用户的青睐。 **UML简介** UML,全称统一...
- 自动生成的UML图可能并不完美,可能需要人工校对和调整,确保其准确反映代码逻辑。 - 不同的工具可能有不同的生成策略和样式,选择适合团队工作流程和喜好的工具很重要。 - 保持UML图的更新,随着代码的变动...
这些文件共同构成了ArgoUML的运行环境,使得用户能够利用其丰富的功能进行UML建模工作,包括但不限于创建类、接口、用例,绘制关系,以及导出模型为XML格式,以便于共享和版本控制。通过使用ArgoUML,开发者可以更加...
**UML(统一建模语言)**是一种标准的图形化建模语言,广泛应用于软件工程领域,用于系统分析、设计和开发的过程。UML通过一套规范化的符号和图形,帮助软件开发人员清晰地表达和交流复杂的系统结构和行为。UML的...
UML的掌握对于软件工程师、系统分析师和项目经理来说都是必不可少的技能,它有助于提高软件项目的质量和可维护性,减少开发过程中的误解和返工。通过实践,读者可以将理论知识转化为实际操作,进一步提升软件开发的...
### 系统分析师UML实务手册1:为什么系统分析员需要学习UML #### 引言:系统分析员的角色挑战与UML的重要性 系统分析员是连接用户与开发团队的关键角色,他们面临的挑战在于准确捕捉用户需求并在技术层面将其转化...
**UML期末大作业** 本项目是一份针对UML(统一建模语言)的期末大作业,涵盖了多种UML图表的使用,旨在帮助学生全面理解和应用UML在软件设计中的重要性。...在后续的学习和工作中,UML将会是你不可或缺的工具。
这本书不覆盖完整的 UML 参考手册内容,也没有详细讲述如何进行建模,而是像编程语言的用户指南一样,重点在于如何使用 UML 进行建模。它适用于软件生产、部署和维护的从业人员,特别适合于分析员、体系结构设计人员...
总而言之,《UML图书管理教程+UML实例+UML教程》不仅仅是一套教学材料,它还是一个实用的工具,能够帮助学习者构建起坚实的基础知识,进而提升软件开发的专业能力。通过理解和实践UML,学习者能够更好地进行系统设计...
在现代软件工程中,UML(统一建模语言)已经成为设计师和开发者不可或缺的工具之一。UML的核心价值在于为复杂的系统提供了一种标准化的建模方式,使得项目团队能够以图形化的方式进行沟通,从而更容易地分析、设计...
**argoUML**是一款开源的UML建模工具,专为那些需要快速、简单和免费UML建模解决方案的用户设计。argoUML支持多种UML版本,如UML 1.4和UML 2.0,提供了一个直观的图形界面,便于创建和编辑各种UML图表。它包含以下...
### UML基础知识与应用 #### 一、UML交互图详解 **1.1 顺序图与协作图的差异** ...同时,了解UML的各种视图和图类型,可以帮助我们更加全面地掌握系统的各个方面,从而提高软件开发的效率和质量。
敏捷团队应该意识到,UML建模并不需要过于复杂和繁琐,重点是其带来的沟通和理解上的价值。 关于需求和设计的固定化误区,一些管理者和团队成员常常在项目初期就要求需求和设计“冻结”。然而,这种做法忽略了软件...
UML 的作用就是用很多图从静态和动态方面来全面描述我们将要开发的系统。UML 由多种图形组成,包括类图、状态图、活动图、顺序图、协作图、组件图等,每种图形都有其特定的应用场景和作用。 UML 的基本概念包括类、...
UML不仅仅是一种画图工具,更是一种思维方式,它能够帮助开发者更好地理解、设计、构建和维护软件系统。 **1.2 UML的历史** - **1.2.1 面向对象的开发方法** 面向对象编程(Object-Oriented Programming, OOP)是...