`
unsid
  • 浏览: 8339 次
  • 性别: 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精神以离架构逐渐远去。
分享到:
评论
78 楼 moqinan 2011-03-08  
早就不用了,不好用
77 楼 Durian 2011-03-04  
池中物 写道
UML用来描述业务的。


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

---
你说的这个靠谱。我也这么认为。
敏捷开发上面十分肯定的说,uml是作为沟通交流业务的描述工具,大家坐在会议室,在白板上画出来各种uml的关系图,然后讨论,修改,明确需求,传达设计师的意图。开发再反馈理解情况。

但是,最后的uml图不作为实现的依据,也就是说,不用图形指导编码和设计,只是帮助理解,达成共识。

设计需要另外一套文档,或者工具,也许仅仅是代码。

我觉得面向接口本身就是一种详细设计。
76 楼 proud686 2011-03-03  
很多东西,很多业务,用图来表达的话会更加清晰。而且画图的话也可以提前规避一些设计上的风险。如果光用文字去表达,中间失真会比较大,而且也不清晰。
75 楼 lewisw 2011-03-02  
ilove2009 写道
UML不是万能的


纠结,这句话,是肯定还是否定啊,怎么马上让我想起“但是没有XXX是万万不能的”.
74 楼 chengkun 2011-03-02  
uml很少用的飘过。 我们做项目重来不用uml
73 楼 Willam2004 2011-02-05  
cdn_mn_mm 写道
Anddy 写道
一直在学习UML ,却一直使用不上。
UML应该是每个软件工程师必须的。

together UML 这个软件不错的。

这个很好用,一致都有用到UML


jude uml这个软件画uml也不错,目前我们公司的用例图和类图都是用它来画。
72 楼 464410531 2011-02-03  
看帖加粉吗?????????????????
71 楼 unsid 2011-02-03  
coolbamboo2008 写道
大家为什么开始用注解而不使用UML了?
我觉得国内的项目工期紧压力大,如果客户没有特别的要求一般能省就省了
很大程度上,注解能直接对代码起作用,UML不行
唉,国内做项目真纠结


我觉得不是这么说,现在即便在国外,UML也被排挤,因为提出UML是外国人,说UML不好用的也是外国人,现在国外推崇敏捷开发的越来越多,敏捷开发本身就崇尚简单设计,比较反对前期做过大的设计,只为现有需求做刚刚好满足的设计就足够,未来遇到变化再重构,他们推崇“代码即设计”,所以可见UML被排挤,这不仅仅是国内的事。
70 楼 coolbamboo2008 2011-02-02  
大家为什么开始用注解而不使用UML了?
我觉得国内的项目工期紧压力大,如果客户没有特别的要求一般能省就省了
很大程度上,注解能直接对代码起作用,UML不行
唉,国内做项目真纠结
69 楼 cdn_mn_mm 2011-01-18  
Anddy 写道
一直在学习UML ,却一直使用不上。
UML应该是每个软件工程师必须的。

together UML 这个软件不错的。

这个很好用,一致都有用到UML
68 楼 z276356445t 2011-01-18  
我认为在做业务逻辑的时候一定要先用UML画个草图,这样会更直观些,而且也能在你敲写业务逻辑代码的时候能够更清晰的来完善你的代码,至少不会感觉到自己在迷宫里.
67 楼 TheNegRo 2011-01-18  
我认为啊,想要学习一个开源项目的设计思想的话,就该从它的代码去理解,理解之后,自己根据代码而反画出UML图来。
66 楼 wolfbrood 2011-01-18  
<div class="quote_title">habzyhs 写道</div>
<div class="quote_div">真正好的代码,代码本身就是最好的设计说明,没必要再写成文当,而且维护文档的工作比维护代码的工作更难。<br><br>还是这句话。。。 就应该是这样说的。<br>我都不怎么会看uml。。。但是。。 只能说这个是一个业内需要的技能。。<br>就像电影一样。不会演。。。但要会看。。</div>
<p> </p>
<p>有UML图还是非常非常不错的,一目了然。如果没有UML,看它的概念介绍也是非常不错。</p>
<p>一个劲的看代码太累。</p>
<p>文档维护在前期是一个很大的工作,如果稳定下来了,改动也很少。</p>
<p> </p>
<p>文档不要求很多,但一定要能说明一个大体。</p>
65 楼 wwty 2011-01-18  
unsid 写道
rainytooo 写道
其它的开发不敢说,java肯定还是得用uml,所以人对项目会有个直观的认知


我觉得如果把代码分为两种情况:技术性代码(比如HashMap和Entity),业务性代码(比如OrderList和OrderItem)
那么业务性代码用uml表述还可以,技术性代码用uml已经很难准确描述

很赞同,我也感觉用uml来反映业务是很好的
64 楼 hyj1254 2010-12-11  
最起码看一段代码之前如果有UML图的话速度会快很多。
63 楼 pushboy 2010-10-25  
自顶而下,层层分解
从uml图入手了解一个系统就是这样,先有大的概念和模型,然后一层层的去了解
给个大系统,一大堆的代码,很容易开始就陷入细节
62 楼 softrain 2010-10-25  
目前的工作就是用Borland Together画图,然后交给开放组写代码,基本上是图画成什么样,代码就要写成什么样。

有几个问题比较严重:
1. 缺少重构的工具,就算是重命名一个类,也能把人累死
2. 缺少质量测量的工具,设计的质量如何没法保证
3. 画图太慢,没有语法提示,还不如写代码速度快

也有好处,主要是可以自动把所有图打包到一个PDF文档里面,方便传阅。
61 楼 habzyhs 2010-09-15  
真正好的代码,代码本身就是最好的设计说明,没必要再写成文当,而且维护文档的工作比维护代码的工作更难。

还是这句话。。。 就应该是这样说的。
我都不怎么会看uml。。。但是。。 只能说这个是一个业内需要的技能。。
就像电影一样。不会演。。。但要会看。。
60 楼 KimShen 2010-08-06  
"所谓的"架构们很喜欢用UML,能忽悠客户阿.
有时候客户需要知道自己的系统大体的结构是什么,这时候这东西就派上用处了.刷的一下,硕大的图纸.客户一看很复杂自然钱也就多了.
其他用处好像就不多了,而且UML还要配套RUP什么的.对于不是异构的大项目来说...负担阿。
59 楼 mingjian01 2010-08-05  
个人认为: UML用来说明想法是好的,比如你设计了一个框架,想要表达你的设计思想,用图总比说的好,但是用UML来生成代码,逆工程之类的就有点不太必要。而且有时用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