`
unsid
  • 浏览: 8341 次
  • 性别: 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精神以离架构逐渐远去。
分享到:
评论
58 楼 windforce9811 2010-08-04  
UML更多的应该是沟通的工具,相当于一些约定的术语的集成,省去一些沟通的成本而已。
更多的应该体现在草图和草稿阶段,作为最终的文档,UML表现力还是弱了些,且很不好控制,画多细,画到什么程度都是个问题。
57 楼 xiaoyp 2010-08-04  
其实有次听讲座,有个教授已经说过:建小的东西可以不用图纸,但大多东西呢?
所以UML中这东西一般是给大企业用的,小企业或小东西的话我觉得是一个鸡肋~~
56 楼 GRDJE 2010-07-20  
从来不用那玩意, 脑子拍拍就干了
55 楼 cutesource 2010-07-19  
<p>个人感觉 UML还是非常必要的,特别是可以帮助你自己梳理思路和表现架构,我在分析源码和架构的时候就特别喜欢用UML,具体可以以下例子:</p>
<p><span style="">
<p style="padding: 0px; margin: 0px;">源码分析:<a style="color: #006699; text-decoration: underline;" href="http://blog.csdn.net/cutesource/category/631854.aspx">http://blog.csdn.net/cutesource/category/631854.aspx</a></p>
<p style="padding: 0px; margin: 0px;">架构分析:<a style="color: #006699; text-decoration: underline;" href="http://blog.csdn.net/cutesource/category/695489.aspx">http://blog.csdn.net/cutesource/category/695489.aspx</a></p>
</span></p>
<p> </p>
54 楼 soci 2010-06-26  
不是很大的项目(几个人的)都是直接定义 接口 类 方法签名 URL参数  URL跳转
53 楼 murainwood 2010-06-26  
其实极少能看见谁画好“精确,标准,严格”的UML. 虽然一直在用这个。呵呵,所以么…UML,简单用用,简单用用就好啦,吹毛求疵就没啥意思了
52 楼 huangyuanmu 2010-06-25  
用uml成本太高,一般中小企业用不起也用不好,这是我的看法。

但是uml一定要懂一些,起码那些基本的图要认识,在进行一些培训、讲解、沟通、交流方面,有的时候使用uml图还是蛮方便的。
51 楼 zzitt 2010-06-25  
UML还是有一定作用的~但是好像没那么必不可少的意思~
50 楼 udvs 2010-06-23  
有利有弊把,我们公司作项目现在没用UML,新来的同事,融入团队需要一定时间
49 楼 hatedance 2010-04-12  
ppgunjack 写道
很多开源软件开发参考文档仍然都是收费的,不公开uml,序列图更大可能是这个价值更高
写到大几千行代码,靠脑子已经很难维护代码,多好的代码都一样。越好的代码越颗粒化,以平均40行一个函数,1w行原始代码就会达到近250个函数,撇掉属性,到了十几w行谁还能光拿代码说话,造火箭的难道能牛逼到拿电路说话

赞同。
光看代码我们很难一下子看出类之间的关系,采用的模式。
数据库er图能看出实体关系,1对多,多对多之类,uml里的类图比er图稍微全面一些。
状态图,序列图,对理解设计意图帮助很大的。
48 楼 ppgunjack 2010-04-12  
很多开源软件开发参考文档仍然都是收费的,不公开uml,序列图更大可能是这个价值更高
写到大几千行代码,靠脑子已经很难维护代码,多好的代码都一样。越好的代码越颗粒化,以平均40行一个函数,1w行原始代码就会达到近250个函数,撇掉属性,到了十几w行谁还能光拿代码说话,造火箭的难道能牛逼到拿电路说话
47 楼 gdpglc 2010-04-12  
unsid 写道
gdpglc 写道
其实这个问题换个问法就清楚了。

我们不需要建模了吗?

显然建模是需要的,即然如此,UML就是一个不错的选择。


我明显不是想说的这个,谁都知道需要建模,我是在质疑uml对建模有多大贡献,其实写的好地代码自己就给自己建模。

你可能是想说,用代码进行建模行不行?
你要知道,需求调研、分析、设计、这时都是不会写代码的。代码并不是建模语言。
46 楼 unsid 2010-04-12  
gdpglc 写道
其实这个问题换个问法就清楚了。

我们不需要建模了吗?

显然建模是需要的,即然如此,UML就是一个不错的选择。


我明显不是想说的这个,谁都知道需要建模,我是在质疑uml对建模有多大贡献,其实写的好地代码自己就给自己建模。
45 楼 gdpglc 2010-04-12  
其实这个问题换个问法就清楚了。

我们不需要建模了吗?

显然建模是需要的,即然如此,UML就是一个不错的选择。
44 楼 刃之舞 2010-04-12  
其实从OO来说,数据库表字段跟类中属性基本能对应。
所以维护数据库表结构关系,有个数据库表结构关系图看看就很明晰了。

pd12用的比较多,基本就是看表机构关系

不过还有个borland的architecture together这个用来生成数据库表结构文档,效果更好
43 楼 unsid 2010-04-11  
讨论到这个程度,我觉得不那么纠结了。

关于开源项目为什么找不到UML图的问题我不认为是上面某位朋友说的“apache有选择地发布文档,便于管理”,我觉得他们就是压根不画,他们是哪种喜欢用高质量代码直接说明问题的人。
42 楼 抛出异常的爱 2010-04-11  
if eles if else for while
画结构化的流程图大家应该都见过了。
相信大家也都应该画的不错


面向对象。。。。。
这利器一出。。。。。
再让你画个结构化流程图
根本没有用。。。。。。。

之后就有了UML
但用的人太少了
我学会之后全还大学老师了。。。。
41 楼 zhao3546 2010-04-11  
敏捷的核心理念之一就是: Adapting (适应)。

根据实际需要来决定UML是否对自己的项目有帮助。不过我个人感觉有时UML还是非常有用的。
40 楼 unsid 2010-04-11  
gdpglc 写道
unsid 写道
"最后说一下Hashmap与Entity的问题该怎么处理,之前我也不知道怎么处理,后来上面的那位uml培训老师告诉我可以用uml 2.x中的组合结构图(Compostion Construction diagram)来表示复杂的类结构,例如java中的内部类和匿名类。
"

这点可能我孤陋寡闻,不过在设计时候,还有很多比Hashmap与Entity更细节的问题,可以通过扩充规范解决Hashmap与Entity的问题,但是UML规范始终是跟不上人们新的设计思路变化的。在实现代码的时候有很多精巧的设计,比如你把一个类设计成不可变类(类似String),你说这些算不算设计范畴?还真不能不算,你是通过充分分析这个类在并发环境下的风险。但是作为设计语言的UML更难触及这些问题,换言之你把UML给了一个实现人员,这个人员很难从中获得你要把这个类设计成不可变的信息。

所以我的观点是Hashmap与Entity,这种类型的问题他们是不可能用在UML中的,一个系统的设计UML仅仅代表了最最基础的一部分,是蓝图,有了UML你仍然什么都做不了。


   个人觉得软件开发是一个复杂的过程,从最初的对用户需求的调研到最终的功能落实为代码,UML要做的是建模,而不是什么都管。在整个软件开发过程中都可以使用UML,它不只限于用来做设计的。
  
   我不认为UML是一个万能的符号语言,用来记录软件设计中的细节,如果这样,做多少它都不够。细节完全可以用自然语言或者代码来表达,而隐藏在代码和细节背后的模型,才需要UML。

你举的例子其实和我下边的问题的实质是一样的:

为什么UML画完之后是不可执行的呢?

对于设计来说:UML是用来表达软件背后的思想的,是用来表达软件的骨架的,画UML图最忌讳的就是大而全的图 。如果UML能用来刻画软件执行的每一个细节,又何需代码人员将它转化为代码?

你说这些,好象你认为开发是:设计人员用uml事先把什么都定好,然后给开发人员开发的。在这一样个开发过程里,首先不是UML对不对的事,我想首先是这样行不行得通的问题?难到设计人员什么都要替开发人员事先把怎么做想好?就算这样行, 这种分工,面对的主要挑战将是交流,而你把交流的责任全部推给UML,把交流的问题怪在UML上,有点偏激吧!


我觉得你的说法很有道理,我也这么想过,我只是很想从别人嘴里也听到这些东西。

我觉得基本可以认定这点“只要设计做的好,过程做的好,最终装配(实现者)的能力不重要”这点在制造业适用在软件行业不适用,按照你的说法,“不可变类”应该属于实现者该思考的问题,如果不做这样设计可能会对系统造成很大损伤,所以实现者能力依然决定项目是否成功,尽管设计的到位依然存在失败的风险,在软件开发团队中每一个人都很重要,这也是为什么软件业的优秀团队比其他行业更难组建的原因。
39 楼 gdpglc 2010-04-11  
unsid 写道
"最后说一下Hashmap与Entity的问题该怎么处理,之前我也不知道怎么处理,后来上面的那位uml培训老师告诉我可以用uml 2.x中的组合结构图(Compostion Construction diagram)来表示复杂的类结构,例如java中的内部类和匿名类。
"

这点可能我孤陋寡闻,不过在设计时候,还有很多比Hashmap与Entity更细节的问题,可以通过扩充规范解决Hashmap与Entity的问题,但是UML规范始终是跟不上人们新的设计思路变化的。在实现代码的时候有很多精巧的设计,比如你把一个类设计成不可变类(类似String),你说这些算不算设计范畴?还真不能不算,你是通过充分分析这个类在并发环境下的风险。但是作为设计语言的UML更难触及这些问题,换言之你把UML给了一个实现人员,这个人员很难从中获得你要把这个类设计成不可变的信息。

所以我的观点是Hashmap与Entity,这种类型的问题他们是不可能用在UML中的,一个系统的设计UML仅仅代表了最最基础的一部分,是蓝图,有了UML你仍然什么都做不了。


   个人觉得软件开发是一个复杂的过程,从最初的对用户需求的调研到最终的功能落实为代码,UML要做的是建模,而不是什么都管。在整个软件开发过程中都可以使用UML,它不只限于用来做设计的。
  
   我不认为UML是一个万能的符号语言,用来记录软件设计中的细节,如果这样,做多少它都不够。细节完全可以用自然语言或者代码来表达,而隐藏在代码和细节背后的模型,才需要UML。

你举的例子其实和我下边的问题的实质是一样的:

为什么UML画完之后是不可执行的呢?

对于设计来说:UML是用来表达软件背后的思想的,是用来表达软件的骨架的,画UML图最忌讳的就是大而全的图 。如果UML能用来刻画软件执行的每一个细节,又何需代码人员将它转化为代码?

你说这些,好象你认为开发是:设计人员用uml事先把什么都定好,然后给开发人员开发的。在这一样个开发过程里,首先不是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