+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2019-08(17421)

2019-09(36497)

2019-10(8496)

UML图中类的位置

发布于2019-10-07 19:25     阅读(548)     评论(0)     点赞(3)     收藏(3)


我正在创建一个用于将Python项目显示为UML图的工具(+使用GUI显示一些代码错误检测)

我使用Pyreverse扫描了一些项目,并且拥有绘制UML图所需的所有数据。问题是类框在画布上的位置

首先,我决定使用已经实现的基于力的算法来确定类的位置,效果很好,这是结果 https://github.com/jvorcak/gpylint/blob/master/screenshots/gpylint.png ,这是该代码(Python,但它即使非Python程序员很容易理解)

有一个问题,非常适合显示图形,但是如果我想显示UML,我想进行一些增强,例如,如果2个类扩展了一个超类,我希望它们在图形中处于同一级别就像在点程序生成的图形中一样

您能告诉我一个算法如何做到这一点吗?或至少给我一些想法?


解决方案


似乎您缺少的主要增强功能是将图形转换为分层图形。不是一件容易的事,但这是可行的(结果的质量可能会随过程中投入的时间和思想而有所不同)。

主要思想是对图形进行某种拓扑排序,以将其拆分为层,在其中进行一些排列,然后绘制图形。(您可以找到python代码在线进行真实的拓扑排序(示例),但是真实的TS只会生成长线状图,我们希望有所不同)

因此,我将尝试描述一种将给定图转换为分层图的算法:

  1. 拓扑排序不适用于具有循环的图,因此,如果输入图已经不是没有循环的有向图,则必须找到一组可以删除(或可能反转)的边以创建循环图(您稍后将它们添加到分层图中,但这将阻止分层并使图变得不太漂亮:)。由于找到可以消除的最小边缘集是NP完全的(非常困难)-我认为您必须在这里做一些捷径,不一定要找到最小边缘集,但要在合理的时间内完成。

  2. 将图分成几层,可以在此处进行许多优化,但是我建议您保持简单。遍历图的所有顶点,并且每次都收集所有顶点,而没有到层的输入边。在某些简单情况下,这可能会生成线状图,但在UML图中非常适合。

  3. 好的图形是相互交叉的边最少的图形,虽然听起来并不重要,但是这一事实对图形的整体外观有很大的帮助。决定相交数量的是每一层边的排列顺序。但是,再次找到最小相交数量或找到最大无相交边集是NP-complete :(求助于启发式方法,例如将每个顶点放置在一个位置上,该位置通过找到邻居在先前级别上的位置的平均值或中间值来确定,然后交换相邻的对,只要这能改善交叉的次数即可。”

  4. 在算法的第一步中删除(或反转)的边缘将返回其原始位置。

在那里,您拥有了!一个很好的UML分层图。

  • 如果我的解释不够清楚,请尝试再次阅读Wikipedia上有关分层图形绘制的文章,或者问我任何问题,我将尝试做出答复。
  • 请记住,这是用于一般情况的算法,可以进行大量优化以更好地处理您的特定情况。
  • 如果您想了解有关UML工具功能的更多想法,请查看Jetbrains为其IntelliJ UML工具所做的出色工作

希望我的评论对您有所帮助。

重要更新: 自从您声明您正在“ 寻找来自可信和/或官方来源的答案图纸。 ”我附上 是graphviz(基于点算法的)正式文档,“描述了绘制有向图的四遍算法。第一遍通过网络单纯形法找到最优的等级分配;第二遍通过结合新的权重函数和局部换位以减少交叉的迭代启发法来设置等级内的顶点顺序;第三遍通过构造和查找节点的最佳坐标。对辅助图形进行排序。第四遍使样条曲线绘制边缘。该算法可以绘制出良好的图形并且运行速度很快。” http://www.graphviz.org/Documentation/TSE93.pdf



所属网站分类: 技术文章 > python文章

作者:黑洞官方问答小能手

链接: http://www.pythonheidong.com/blog/article/133135/

来源:python黑洞网 www.pythonheidong.com

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

3 0

赞一赞 or 踩一踩

收藏该文
已收藏

评论内容:(最多支持255个字符)

相似文章

  HTML中的if判断用法

  【Python基础】12_Python中的容器类型公共方法

  解决python中的Non-UTF-8 code starting with ‘\xbs4’ in file错误

  tensorflow2.0GPU版本的环境配置与安装教程

  xadmin进行全局配置(修改模块名为中文以及其他自定义的操作步骤)

  Python-18-类的内置属性

  Python 3 中有六个标准的数据类型

  Python中模块(Module)和包(Package)的区别

  python爬虫中的ip代理设置

  Python中xml、字典、json、类四种数据的转换

优质资源排行榜

 python经典电子书大合集下载 下载次数 8108

 零基础java开发工程师视频教程全套,基础+进阶+项目实战(152G) 下载次数 7545

 零基础前端开发工程师视频教程全套,基础+进阶+项目实战(共120G) 下载次数 7439

 零基础大数据全套视频400G 下载次数 7002

 零基础php开发工程师视频教程全套,基础+进阶+项目实战(80G) 下载次数 6891

 零基础软件测试全套系统教程 下载次数 6502

 全套人工智能视频+pdf 下载次数 6436

 IOS全套视频教程 基础班+就业班 下载次数 4679

 编程小白的第一本python入门书(高清版)PDF下载 下载次数 3100

10  effective python编写高质量Python代码的59个有效方法 pdf下载 下载次数 3065

11  Python深度学习 pdf下载 下载次数 3044

12  使用python+pygame开发的小游戏《嗷大喵快跑》源码下载 下载次数 2998

13  python项目开发视频 下载次数 2997

14  python从入门到精通视频(全60集)python视频教程下载 下载次数 2994

15  黑马2017年java就业班全套视频教程 下载次数 2992

16  python实战项目 平铺图像板系统源码下载,适用于想要保存,标记和共享图像,视频和网页的用户 下载次数 2987

17  利用python实现程序内存监控脚本 下载次数 2986

18  树莓派Python编程指南 pdf下载 下载次数 2979

19  老男孩python自动化视频 下载次数 2979

20  老王python基础+进阶+项目视频教程 下载次数 2972

21  尚硅谷Go学科全套视频 下载次数 2972

22  某硅谷Python项目+AI课程+核心基础视频教程 下载次数 2967

23  Web前端实战精品课程 下载次数 2966

24  Python基础教程 pdf下载 下载次数 2966

25  tron python小游戏 下载次数 2962

26  [小甲鱼]零基础入门学习Python 下载次数 2959

27  老男孩python全栈开发15期 下载次数 2958

28  2017最新web前端开发完整视频教程附源码 下载次数 2948

29  最新全套完整JAVAWEB2018开发视频 下载次数 2926

30  Python算法教程_中文版 pdf下载 下载次数 2913

31  Spring boot实战视频6套下载 下载次数 2909

32  python全套视频十五期(116G) 下载次数 2901

33  Python项目实战 下载次数 2882

34  python全自动抢火车票教程-python视频教程下载 下载次数 2882

35  30个小时搞定Python网络爬虫 含源码 下载次数 2881

36  尚硅谷大数据之Hadoop视频 下载次数 2876

37  简明python教程 (A Byte of Python)pdf下载 下载次数 2873

38  Python A~B~C~ python视频教程下载 下载次数 2864

39  数据结构与算法视频(小甲鱼讲解-全) 下载次数 2863

40  web小程序表白天数倒计时源码下载 下载次数 2862

41  Python Cookbook第三版中文PDF下载高清完整扫描原版 下载次数 2862

42  python基础视频教程 下载次数 2862

43  Python高性能编程 pdf下载 下载次数 2862

44  go语言全套视频 下载次数 2853

45  利用Python进行数据分析 pdf下载 下载次数 2850

46  清华学霸尹成Python爬虫视频-ok 下载次数 2845

47  黑马前端36期最全视频和代码 下载次数 2841

48  2018最新全套web前端视频教程+源码下载 下载次数 2840

49  老男孩Python自动化开发12期 老男孩最强一期python高级运维开发课程 第二部分 70GB 下载次数 2832

50  流畅的Python PDF下载高清完整扫描原版 下载次数 2828