`
unsid
  • 浏览: 8342 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论
阅读更多
   故事还要从去年说起,去年无聊的时候,开始下载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精神以离架构逐渐远去。
分享到:
评论
18 楼 ilove2009 2010-04-09  
UML的类图还可以,基本上23个设计模式都能刻画出来。其他的好像一般,其他图,如时序图发现很多人理解都不一样,有的人粒度大,有的粒度小。
17 楼 yin_bp 2010-04-09  
hatedance 写道
我觉得UML的问题在于其不可执行性。(虽然有正向工程和反向工程的概念,但还不管用)
类图是能用来生成代码了,但其他的图却不好办。

如果你能像建筑工程图纸一样,先画粗稿,然后慢慢完善细节,最后得到的图纸就能被执行了,或者完美的生成了代码。

现在的实际情况是你代码归代码,图归图,谁愿意费力同步这2玩意啊?


uml是一种建模语言,也是一种规范,你遵循它或者用他来画图无可非议,你不遵循它或者弃用他也无可非议,萝卜白菜各有所爱,有些人喜欢用uml来表达自己的设计思想(尤其是比较自己觉得做的比较得意的地方)、表达自己的架构思想,有些人喜欢直接拿支笔(管他规范不规范)在墙上、在地上、在纸上(总之可以画可以写的地方)涂鸦式的表述自己的设计和架构思想,呵呵
16 楼 Anddy 2010-04-09  
一直在学习UML ,却一直使用不上。
UML应该是每个软件工程师必须的。

together UML 这个软件不错的。
15 楼 wei495715356 2010-04-09  
我觉uml 在设计中 设计框架图 给人比较直接。
14 楼 cleanerje 2010-04-09  
个人私下认为:UML适合业务逻辑特别复杂的情况,尤其是存在非单一系统:(例如业务系统、短信平台、银行刷卡等等),这时候使用UML时,提高生产力的作用是非常巨大的。
但如果是单一的系统,如果分层正确,注释也到位,使用UML本身就是一种负担。这时候详细设计说明书本身就已经满足开发需要了。
使用UML还有一个问题,它需要设计团队本身有足够强大的能力才能驽驾UML这个怪物。
最后一个问题,因为人员流动性的存在,你确定接手的人员能够搞得定UML?
综上所述,从成本考虑,如非必要,最好不要沾UML,呵呵。
13 楼 nighthawk 2010-04-09  
那交流的时候总得画个什么吧,不能你画个馒头大饼表示,我画个阿猫阿狗的
12 楼 gdpglc 2010-04-09  
1.UML做为一种设计辅助手段,的确有它的用处。当然可以不选择UML表达架构设计,但是一样要选一种其它的表达方式。我喜欢用它,因为现在uml工具很多,容易上手,图表含意相同。但我并不局限于它,只要能清楚表达设计意图的方式,都是可以尝试的。拿uml当教条当然会有问题。
2.开源项目也有用uml的。
3.你举的例子,是一个设计细节,一方面的确可以用uml表达,uml有 构造型 有注释 可以进行扩展。不知大家所在的公司会不会作这么细的设计。我想这个应该是成熟的程序员的习惯用法,并不象是架构的内容,有必要画到图里吗?
11 楼 ilove2009 2010-04-09  
UML不是万能的
10 楼 andyu2008 2010-04-09  
真正好的代码,代码本身就是最好的设计说明,没必要再写成文当,而且维护文档的工作比维护代码的工作更难。

---------
没错,好的代码本身就是最好的设计,为什么要用UML? 就是因为无法保证整个项目都是好的代码,假如一个项目是200个人协作完成的,谁成保证这200个人都能写出高质量的代码?
9 楼 vampire423 2010-04-09  
池中物 写道
UML用来描述业务的。


用uml来直接描述实现或者直接生成代码之类的我觉的没啥需要了



同意,感觉UML一般都是用来很high level的描述下业务,或让人对系统整体有个初步的认识。
8 楼 tryto21 2010-04-09  
做个一个项目,开始的时候用uml,直接生成数据库和java代码,但是随着项目进展,维护uml的成本越来越高,就逐渐放弃了。
7 楼 池中物 2010-04-09  
UML用来描述业务的。


用uml来直接描述实现或者直接生成代码之类的我觉的没啥需要了
6 楼 unsid 2010-04-09  
hatedance 写道
我觉得UML的问题在于其不可执行性。(虽然有正向工程和反向工程的概念,但还不管用)
类图是能用来生成代码了,但其他的图却不好办。

如果你能像建筑工程图纸一样,先画粗稿,然后慢慢完善细节,最后得到的图纸就能被执行了,或者完美的生成了代码。

现在的实际情况是你代码归代码,图归图,谁愿意费力同步这2玩意啊?


不光是我们做的不好的项目阿,就算国外优秀实践项目也在逐渐摒弃uml,尤其是技术框架型代码里的uml不常见了
当然uml用作一种传播设计思想的伪语言还是不错的,但是指导开发还是很难
5 楼 hatedance 2010-04-09  
我觉得UML的问题在于其不可执行性。(虽然有正向工程和反向工程的概念,但还不管用)
类图是能用来生成代码了,但其他的图却不好办。

如果你能像建筑工程图纸一样,先画粗稿,然后慢慢完善细节,最后得到的图纸就能被执行了,或者完美的生成了代码。

现在的实际情况是你代码归代码,图归图,谁愿意费力同步这2玩意啊?
4 楼 jiafu0773 2010-04-09  
我们现在做的项目,没有用到uml,项目做得太烂了,都没法说。
3 楼 抛出异常的爱 2010-04-08  
好吧我见过乱用UML图的占大多数。

用的好的只有草图。。。。但他们又不是标准UML
2 楼 unsid 2010-04-08  
rainytooo 写道
其它的开发不敢说,java肯定还是得用uml,所以人对项目会有个直观的认知


我觉得如果把代码分为两种情况:技术性代码(比如HashMap和Entity),业务性代码(比如OrderList和OrderItem)
那么业务性代码用uml表述还可以,技术性代码用uml已经很难准确描述
1 楼 rainytooo 2010-04-08  
其它的开发不敢说,java肯定还是得用uml,所以人对项目会有个直观的认知

相关推荐

    C# WinForm-UML类图程序,绘制UML程序-2023(绘制uml类图,保存,打开文件等等)

    首先,我们需要理解UML类图的基本元素:类、接口、关联、泛化和属性。类图由类的表示(通常为矩形),它们之间的关系(如线或箭头)以及类内部的属性和操作组成。在C#程序中,我们将创建一个WinForm界面,包含画布、...

    uml2.4.1上层标准

    抽象语法定义了UML模型的结构,而不依赖于任何特定的表现形式。语义架构定义了UML语义的基础概念和原则。基本因果模型则是对UML运行时语义的一种理解。 具体到UML的各个组成部分,UML标准对类(class)进行了深入的...

    UML 2.2 Visio 模板

    通过以上介绍,我们可以看到,利用Visio结合UML 2.2模板,能够高效地进行系统建模,有助于软件开发过程中的沟通、设计和验证。确保正确理解和使用这些资源,能够极大地提升软件开发的效率和质量。

    UML Book UML Book

    UML 不仅仅是一套图形符号,它还包含了模型元素、关系和规则。例如,通用机制如注解(stereotype)允许扩展UML,使其适应特定领域或工具的需求。此外,UML支持面向对象的分析和设计原则,如封装、继承和多态性。 在...

    uml 作业 uml 作业 uml 作业

    学习UML不仅需要理解其基本概念,更需通过实际项目练习,如绘制不同类型的图表,将理论知识转化为实践能力。"You-UML"这样的学习资源,可能是提供练习题或案例的平台,有助于加深理解和掌握。 总结来说,UML是软件...

    UML PAD(UML绘图工具)

    UML PAD是一款高效且小巧的UML绘图工具,专为那些需要快速绘制UML图但又不想被大型专业软件的复杂度所困扰的用户设计。它以其简洁的界面、易用的操作和便携性赢得了广大用户的青睐。 **UML简介** UML,全称统一...

    JAVA类生成UML图

    - 自动生成的UML图可能并不完美,可能需要人工校对和调整,确保其准确反映代码逻辑。 - 不同的工具可能有不同的生成策略和样式,选择适合团队工作流程和喜好的工具很重要。 - 保持UML图的更新,随着代码的变动...

    ArgoUML UML绘图工具

    这些文件共同构成了ArgoUML的运行环境,使得用户能够利用其丰富的功能进行UML建模工作,包括但不限于创建类、接口、用例,绘制关系,以及导出模型为XML格式,以便于共享和版本控制。通过使用ArgoUML,开发者可以更加...

    UML/UML介绍

    **UML(统一建模语言)**是一种标准的图形化建模语言,广泛应用于软件工程领域,用于系统分析、设计和开发的过程。UML通过一套规范化的符号和图形,帮助软件开发人员清晰地表达和交流复杂的系统结构和行为。UML的...

    UML期末大作业

    **UML期末大作业** 本项目是一份针对UML(统一建模语言)的期末大作业,涵盖了多种UML图表的使用,旨在帮助学生全面理解和应用UML在软件设计中的重要性。...在后续的学习和工作中,UML将会是你不可或缺的工具。

    uml书籍( UML用户指南(第2版).pdf+面向对象设计uml实践(第二版).pdf)

    UML的掌握对于软件工程师、系统分析师和项目经理来说都是必不可少的技能,它有助于提高软件项目的质量和可维护性,减少开发过程中的误解和返工。通过实践,读者可以将理论知识转化为实际操作,进一步提升软件开发的...

    UML argo建模工具下载

    **argoUML**是一款开源的UML建模工具,专为那些需要快速、简单和免费UML建模解决方案的用户设计。argoUML支持多种UML版本,如UML 1.4和UML 2.0,提供了一个直观的图形界面,便于创建和编辑各种UML图表。它包含以下...

    uml 试题及答案

    ### UML基础知识与应用 #### 一、UML交互图详解 **1.1 顺序图与协作图的差异** ...同时,了解UML的各种视图和图类型,可以帮助我们更加全面地掌握系统的各个方面,从而提高软件开发的效率和质量。

    武汉理工大学UML2012年度考试试卷及其答案

    UML 的作用就是用很多图从静态和动态方面来全面描述我们将要开发的系统。UML 由多种图形组成,包括类图、状态图、活动图、顺序图、协作图、组件图等,每种图形都有其特定的应用场景和作用。 UML 的基本概念包括类、...

    UML 元模型 specification

    UML元模型提供了一系列机制来支持对UML的扩展,这些机制包括但不限于: 1. **标签值(Tagged Values)**:允许用户为模型元素添加自定义属性。 2. **立体视图(Stereotypes)**:可以用来创建新的元素类型或修改...

    UML Step by Step(UML理论详解).

    尽管UML在中国乃至全球范围内备受推崇,但我们也应认识到它存在不足和需要改进的地方。标准化的过程是一个长期且迭代的过程,UML的每个新版本都在不断解决新出现的问题。例如,UML的演进可以分为几个阶段:专家合作...

    小型UML工具JudeUML

    它以其小巧的体积、易用性和高效能,深受用户喜爱,尤其适合那些需要快速进行UML建模而不需要复杂功能的用户。在本文中,我们将深入探讨JudeUML的特点、用途以及如何利用它来进行UML建模。 1. **UML简介** UML,...

    UML简介(节省时间学习UML)

    【UML简介(节省时间学习UML)】 UML,全称为统一建模语言(Unified Modeling Language),是一种在软件工程领域广泛使用的标准化建模语言,特别是在面向对象技术领域。自1995年UML的诞生以来,它逐渐成为了全球范围...

    uml使用手册(uml使用手册)

    综上所述,UML是软件开发中不可或缺的工具,通过学习和熟练运用UML,我们可以更有效地理解和管理复杂的软件系统。"Eclipse_UML安装.pdf"文件应包含了关于如何在Eclipse中安装和使用UML建模工具的详细步骤,对于想要...

Global site tag (gtag.js) - Google Analytics