我设计一个新的系统,并发现我有什么,我想做的结构挣扎。 一个症状是,每次我一次重新的方法,我要尽量画在纸上的组件之间的关系问题。 (它尚未在我心里清楚,什么这些成分恰恰还是什么的关系 - 比如我设法删除一个什么也没做)。
UML是前进的有效途径? 我曾经非常怀疑,并试图早期版本在哪里生产成本版本太多钱。 现在我看到有Netbeans中的一个插件,它特别有模式的一个很好的选择(就凭这可能会使它值得的)。
我读过最上SO顶级职位和似乎没有成为一个非常明确的共识。 我的背景是,这是研究而不是编码客户端相关的,因此主要目的不是为了记录一个最终产品,而是帮助清除我的心(以及可能写一些简单的结构)。
如果任何答案支持UML那就表明它需要多长时间来获得生产力,它将如何经常被使用是有用的。 (作为参考我每天都在使用的测试,记录器和调试器)。
补充有代码和图之间的UML软件任何强制执行的一致性(任何级别)。 我假设说,一个策略模式,在创建时,则其可产生存根代码。 但这样的代码被列入,如果格局被打破的UML工具检测到这种这样的方式?
Answer 1:
Martin Fowler的是恕我直言,权当他说,有三种方式使用UML:
- 作为一个草图 ,你打算做什么
- 作为一个蓝图为你要做什么
- 作为件事你打算做本身
这听起来像你大多在第一倾斜,与第二副餐。 这肯定有助于选择之一,相应地设置您的期望 - 你不能指望执行草图,或在3分钟内生成一个可执行的蓝图。
无论你的作品取决于一堆东西,如:
- 你是作为一个思想家如何视觉:人在这个剧烈变化。
- 是否可以免费获得一个有效的工具,或者从你的预算。
- 无论您是需要沟通的设计给其他人
- 如果能有效利用设计的一些其他手段(如测试驱动设计)。
Answer 2:
UML是不会让你的代码更好,但能提高你在做什么,你的视野。
这不是关于UML是否有用不写代码,但关于UML的真正目的 ,使您能够想象你想要做什么,该系统看起来像什么。
你需要一个比喻,沟通你的工作的一个故事。 谁参与项目后期开发商将需要用它来更好地理解你的代码,看一下详细信息时,有正确的背景下,为了最终不会打破的东西。
不要让自己被工具所蒙蔽。 UML不是解决办法本身,它是解决一个共同的问题只是一个形式化的方式:写音响系统。
Answer 3:
如果您发现的额外信息UML有有用的符号 - 聚合/组成,对协会等定型,然后用它,而不是不管你目前正在使用。
我还没有找到一个工具,这是因为铅笔和纸的早期设计为好; 绘制草图UML在纸上仍然使用UML。
补充有代码和图之间的UML软件任何强制执行的一致性(任何级别)。 我假设说,一个策略模式,在创建时,则其可产生存根代码。 但这样的代码被列入,如果格局被打破的UML工具检测到这种这样的方式?
有很多不同的UML工具,以及一些有不同程度的约束检查。 通常,这是仅限于UML的语法,但也有对象约束语言可以用来做出关于UML模型断言,以及一些工具可以生成代码在运行时测试这些断言。 (这里的事情变得有点朦胧,因为我从来没有在这一直愿意支付的商店工作所说的工具,因为它们并不便宜,在嵌入式系统中,在那里我的大部分工作一直都是比较常用的技术计算。)所以,如果你已经购买了高端UML工具,它支持映射OCL代码生成,建立一个刻板印象你的工具来表达策略模式是什么,然后生成代码,其中包括那些断言(如果他们是运行时)或断言适用于模型中的结构(如果它们是元模型的断言)。 (我不太清楚是否工具让你写反元模型的约束 - 即断言,战略必须提供一个功能,而不是仅仅断言前置和后置条件,但当时这种说法也被类型系统检查大多数语言如果您在超级型战略的方法抽象反正)。 如果你再分别以反向工程的代码,它打破了限制,它会通过工具进行标记。 问题是,什么是一定的模式的一个例子对开发商的意图有所依赖,而不是什么可以断言关于创建的结构。
Answer 4:
在我看来,你是说UML但只是说从UML一些代码生成。 这是两个非常不同的事情。
UML是非常有用的,因为它是一个事实上的标准,因此,如果您正在绘制两个矩形与他们之间的三角点的箭头。 几乎每个开发人员都知道你正在谈论继承。
UML工具是一个不同的故事:有些是便宜又实用:纸,铅笔和橡皮为例。
用于从UML图生成代码(或UML模型更精确)的工具是昂贵的某个时候,和(IMHO)总是无用。 问题是,该代码的有趣部分需要所有的小细节,这是进入一个图形模型所有这些细节极其缓慢。 一个文本编辑器是用于这种东西更有用。 即使对于简单的东西,比如属性和引用它迫使你UML的极其严格的使用这仅仅是痛苦的。 想象一下,一个英语老师每次不要用完美的牛津英语时间interupting你。
的一种工具,我发现有用的是可以绘制在自由的方式UML图(企业架构师,Visio中,电子白板)中的那些和创建你的代码UML图的人。 这样的插件IDEA http://plugins.intellij.net/plugin/?id=3202 (这是由我的同事这样做我有偏见)
Answer 5:
我可以看到两种方法使用UML:正式拍摄设计,并且非正式地勾画出了设计的某些方面作为援助的设计过程。
前者是在与设计师的团队大项目especaially有用。 它需要一些纪律和时间,但我觉得更优选地将捕获的信息文本的替代 - 模型确保一致性。 如果完全做你甚至可以从模型中生成代码。 这appraoch的工作,但显然需要相当的努力启动。
后者,可以更加非正式的。 甚至可能捕捉只是一个设计的棘手的部分,也许只是一个单一的开发者的利益,也似乎工作。 我也经常这样做。 我觉得“打”与类图确实有助于明确责任。 在哪里我只是想记录类和atributes这样可以节省时间。 一些工具提供UML作为实际代码类的另一种观点是非常好的。
获取图纸类图的一个阶段,在一个合理的工具应该是小时或非常几天学习任务 - 假设有对象的概念熟悉。 学习对象的设计是一个完全不同的问题。
Answer 6:
Answer 7:
在我看来,UML可能是在一个大的团队在大型项目的工作是非常有用的。 通过使用UML,您可以创建由“编码之前思考”一个非常好的架构。
稍后,您可以把图来考虑,如果你拥有了一切照你想做的事。
尽管如此,它会很高兴知道你的项目实际上有多大是为了给你一个很好的答案?
Answer 8:
UML作为为了让所有来描述同一个域中的不同脂肪酶之间的共同语言。
对于代码和算法设计,铅笔和纸永远是最好的方式,因为OMU说。
Answer 9:
就个人而言,我认为你是从错误的起点处理这个问题。 您
[是]用什么,我想做的结构挣扎。 症状是......这还不是我心里清楚,什么这些成分恰恰还是什么的关系 - 比如我设法删除一个什么也没做。
如果你正在努力理解您的设计做什么系统,应该做的,或者它是如何工作则这表明你已经开始或即将开始,没有一个明确的规范。 这听起来陈词滥调,但如果您在开始编码之前没有化解误解,你可能会为自己创建一个混乱的地狱时,该系统的建成,需要具备的功能,或过程,或关系,或互动在添加或删除,因为它不会做客户想要什么。
首先产生的是什么,你认为客户想要一个明确的写了。 把那给客户端,在这一点,他/她会(可能)做的,或者说,不讨人喜欢的东西,并指出你错过的东西。 还是没想到是非常重要的。 而问为什么软件做“X”,“我”和“R”时,他想“一”,“B,” C”和‘X’。
这也是在该点为客户记住超级功能“M”是他生活中不可缺少的典型。
规格为您节省时间和精力。 即使在铅笔和纸UML或流程图。
只是备份一些什么,我说: 无痛功能规格 ,由Joel Spolsky的。 通过阅读,它是有说服力的。
Answer 10:
就个人而言,我避开代码生成或往返于已经提到的原因(例如,编辑器是细节更自然)。 我只是觉得它更容易看模型和编写代码。 我已经使用这个唯一的一次是用的objectDomain和我想到的,我用它的原因,一半是因为他们的代码生成是基于编写扩展类行走模型,并生成类使用Jython玩。
从生成代码的模型,如果你正在试图找出一个代码库是如何组织是非常有用的。 这是一个基于Java的项目一般有用的,因为UML是一种很自然的适合于面向对象的语言与反思 - C ++是一个完全不同的故事。 UML的环境质量,使这里的差异但这样做的代码库本身。 我知道的C ++模板的表现是什么,很少建模环境得到正确的。 我会认为Java泛型将提出类似的问题。
我使用UML为几个不同的用途:
- 通过设计或架构的思考
- 描述的体系结构或棘手设计细节给同事
- 生成图表,以支持一个文件
有趣的是,我用不同的工具为每个这些。 我已经通过了一些建模的消失(在粗糙时间顺序排列): Objecteering , 的objectDomain , Visio中 , 的ArgoUML , 海神的UML和MagicDraw 。 我使用Visio和MagicDraw对于大多数的目的。
当我在设计阶段,并通过系统架构或更详细的设计思维,我使用UML作为一个正式的工具,所以我用一个真实的建模- MagicDraw 。 我发现,构建UML模型是捕捉我的想法的好方法。 这里使用真实建模的一个副作用是,它迫使我思考方法和结构,而不仅仅是流量。 当我与得到一个设计权挣扎,我强迫自己在最正式的意义上使用UML。 确保一切精确建模 - 例如:异步操作的信号和接收的最佳模型。 我这个挣扎了很长一段时间。 这里的关键是了解UML正式,如何我选择的建模工具来表示每一个概念。 这可能是从这个长期的咆哮中最重要的人带走。
当我使用UML作为ad hoc通信工具,试图描述的东西,例如一个同事,最有效的工具是一个真正的白板和标记。 我发现,正式的UML是没有多大用处在这里 - 仅仅是基本的结构图和序列图的东西。 令人惊讶的是其中的一些已保存用手机拍下,并邮寄各地来描述各种概念......去的身影。
嵌入在文件UML图通常涉及的Visio虽然我从来没有使用官方的UML建模支持。 使用帕维尔·Hruby的模板来代替。 Visio中的UML模型模式在很多方面,这确实是不值得的钱或努力打破。 然而,帕维尔的模板,做即席UML图非常简单快捷。 另一块在这里的建议是使用矢量图形格式 ,而不是光栅格式的图像本身 。 我公司和许多人一样,是通过了Microsoft Office病毒,所以我非常坚持与Word的文档感染。 在这种情况下,我使用增强型图元文件(* .EMF)作为首选的我的图像格式。 如果你在一个DocBook环境中工作,那么使用SVG来代替。
文章来源: Should I use UML when designing new code and algorithms? [closed]