首页 > 其他分享 >Eagle + PlantUML,轻松绘制源代码图表(下)

Eagle + PlantUML,轻松绘制源代码图表(下)

时间:2024-10-25 11:52:34浏览次数:3  
标签:Eagle PlantUML 时序 源代码 绘制 Round

快速掌握大型代码文件的对象框架结构及各对象之间的调用关系,我们通常会用到类图和时序图。如何快速理解代码,并生成 UML 图表呢?

网友“车到山前必有路” 前阵子使用 Eagle 辅助画图。仅用了半个小时,就完成了一张类图和一张时序图的绘制。要知道这在过去有可能会消耗掉一个专家级软件工程师一整天甚至更多的时间

上周我们分享了“车到山前必有路” 用户投稿 I Eagle + PlantUML,轻松绘制源代码图表(上)

本周继续推送下篇,一起聊聊如何用 Eagle 辅助绘制时序图?

图片

以下来自热心用户“车到山前必有路”的分享,原文略作修改

什么情况下会用到类图和时序图?

‌在了解面向对象编程的源代码时,我们经常会用到 UML 中的 Class Diagram(类图)和 Sequence Diagram(时序图)。

通过类图,我们可以清晰地了解不同对象之间的关系,比如继承、聚合和组合关系,这样就能快速掌握大型代码文件的对象框架结构,加快对代码原理的理解。

类图绘制文章详用户投稿 I Eagle + PlantUML,轻松绘制源代码图表(上)

而当我们搞不清楚对象之间方法的调用关系时,就很难正确掌握对象的使用方法,遇到问题也难以定位,这时候时序图就派上用场啦!

Eagle + PlantUML 实战,绘图效率翻倍

‌Eagle https://eagle.capitalren.com 支持基于自然语言的代码搜索,可解读项目整体框架、剖析深度原理、拆解技术实现路径,还能助力代码审查和编程辅助。

图片

PlantUML https://www.plantuml.com/plantuml/uml 是一个开源的绘图工具,帮助用户创建各种类型的 UML 图表。

图片

用 Eagle 生成代码,再将代码粘贴到 PlantUML 进行绘图。Buff 叠满,绘图原来如此简单!

时序图绘制

我们用一个较为复杂的 ORM/SOA/MVC 开源框架 m0RMot 的源代码来举例,这个源代码还是用 Pascal 语言写的,我们来考考 Eagle 对上古编程语言的理解能力。

开源项目地址:https://github.com/synopse/mORMot2

我们聚焦到一个具体源代码上:

https://github.com/synopse/mORMot2/blob/master/src/core/mormot.core.threads.pas

这是 mORMot 框架源代码中用来支持多线程能力的库,代码行数适中 3500 多行,但对象种类比较多。我们希望通过 Eagle 来掌握一下对象之间的调用关系,这时我们就需要绘制时序图。

接下来我们聚焦到 mormot.net.client.pas 和 mormot.net.sock.pas 两个源文件,我们借助 Eagle 来了解一下框架下基本的 HTTP Request 使用方法和内部实现细节。

首先我们从这里入手:

Round 1 ——  从 IHttpClient 入手

提问:举例介绍下 mormot.net.client 中的 IHttpClient 的主要用法

图片

Round 2——了解 TSimpleHttpCient

通过举例,我们了解到了 IHttpClient 的实现对象为 TSimpleHttpClient。接下来我们深入了解一下这个类。

提问:介绍一下 TSimpleHttpClient 的主要属性和方法

图片

Round 3—— fHttp 和 fHttps的依赖注入

提问:TSimpleHttpClient 中有两个私有属性 fHttp 和 fHttps,他们来承载真正的 HTTP Request 的动作,那么这两个对象是在哪个方法中被具体确定并赋值的?结合源代码进行说明。

图片

Round 4—— 发现 RawConnect

通过以上分析我们得知 ,fHttp: THttpClientSocket 和 fHttps: THttpRequest 不是在构建函数中 Create 被创建的,而是在 TSimpleHttpClient.RawConnect 方法中被最终确定和创建的。这也是一种 Dependency Inject (DI) 依赖注入的方式 。根据你给出的代码和分析 ,fHttps := MainHttpClass.Create(...) 而 fHttp := THttpClientSocket.OpenOptions(...) 创建的 。

请回答 :MainHttpClass.Create 这种方法显然也是一种依赖注入的方式 ,那么 MainHttpClass  可以是哪几种类 /  对象呢 ?

图片

Round 5 —— MainHttpClass 的依赖注入

提问:结合 THttpRequest源代码给出 MainHttpClass 在什么时候或在什么条件下被具体确定下来是哪种具体形态的?

图片

Round 6 ——了解 THttpClientSocket

以上了解了 TSimpleHttpClient 实现 fHttp的方法,以及最终实现 TWinHttp,TWinINet,TCurlHttp的依赖注入的方法。接下来,我们了解一下 fHttps:THttpClientSocket 的实现细节。

提问:THttpClientSocket 的多层继承关系是什么?

图片

Round 7 —— TLS/SSL

提问:结合源代码 ,列出 THttpClientSocket 及其父类当中跟 TLS/SSL 相关的属性有哪些?

图片

Round 8 —— fSecure 的依赖注入

提问:fSecure既然是一个 INetTls 接口,结合源代码给出 fSecure 是 由谁创建的 ?

图片

Round 9 —— 全局工厂函数 NewNetTls

提问:fSecure 既然是通过全局工厂函数 NewNetTls 创建的,那么结合源代码说明NewNetTls 是如何决定使用 OpenSSL 或 SChannel 作为 TLS 层的?这又是依赖注入的一种表现

图片

Round 10 —— 绘制时序图

提问:下面结合以上问你的问题的答案,使用 PlantUML 语法,描述一下使用 TSimpleHttpClient 访问 https://z.cn的全过程,假设我们使用 HttpClientSocket 对象作为实现层,请在图中表现出 fSecure 的赋值过程,即如何判断使用 OpenSSL 或 SChannel 实现层的

图片

最终效果,将上述PlantUML 代码复制到下面这个网址进行渲染:https://www.plantuml.com/plantuml/duml/,  最终得到如下时序图:

图片

掌握了 Eagle 绘图的关键步骤,轻松完成时序图的绘制。

如果你也是在开发第一线冲浪的程序员,强烈推荐你关注视频号:码力一哥

这里有最前沿的 AI 资讯和 AI 工具使用小技巧,不定期干货直播与大咖老师线上直接交流。助力程序员工作提效,升职加薪不再难!

关于Eagle DevAgent

图片

图片

程序员的 AI 提效神器

我们的网址:eagle.capitalren.com

标签:Eagle,PlantUML,时序,源代码,绘制,Round
From: https://blog.csdn.net/limingyu_cn/article/details/143227188

相关文章

  • 8 个带有完整源代码的应用创意
    你好,前端开发爱好者。本文为创意应用整理的第一期,将会在实际开发中绝对实用的一些工具库以及创意应用。1.CopilotKit-快速集成AI助手https://github.com/CopilotKit/CopilotKit基本介绍CopilotKit提供了一种简单快速的解决方案,帮助你在React应用中集成生产就绪的......
  • 画图神器之争:PlantUML和Mermaid那个更适合你?
    PlantUML和Mermaid都是流行的工具,用于通过文本描述快速创建图表,特别是UML图。尽管它们的目标相似,但在一些方面存在差异:语法和易用性:PlantUML:使用一种类似于编程语言的语法,对于程序员来说可能更容易上手。它提供了丰富的语法来创建多种类型的UML图。Mermaid:它的语法更加简洁和近......
  • 网站主页模板修改?网站后台可以修改源代码?
    网站主页模板修改确定需求:首先明确你需要修改的具体内容,比如布局调整、颜色更换、添加或删除某些功能模块等。备份现有模板:在进行任何修改之前,确保备份当前使用的模板文件,以防修改过程中出现问题可以快速恢复。编辑HTML/CSS/JavaScript:根据需求对HTML结构、CSS样式以及JavaScr......
  • Matlab 生成“少帅下飞机”粒子边缘特效(附源代码)
    这里是使用Matlab生成的“少帅下飞机”粒子边缘特效,大家也可以去尝试一下,文末附视频素材和源码,需要Matlab下载教程的可以私信后台哦!本期视频素材及matlab源码下载链接:https://pan.quark.cn/s/37f034f9a180此处改为自己的文件路径即可%读取视频videoFile="D:\少帅下飞......
  • 安全帽AI检测算法在工业安全领域的全面解析及开源代码及相关项目
    在各类施工现场,安全帽的佩戴是保障工人生命安全的重要措施。为了确保工人正确佩戴安全帽,安全帽检测算法发挥着关键作用。而在实际应用中,结合AI智能分析网关V4与EasyCVR视频汇聚智能分析平台,更是能将安全帽检测的效果发挥到极致。例如,在某大型建筑工地,通过在施工现场安装多个摄......
  • 安全帽AI检测算法在工业安全领域的全面解析及开源代码及相关项目
    在各类施工现场,安全帽的佩戴是保障工人生命安全的重要措施。为了确保工人正确佩戴安全帽,安全帽检测算法发挥着关键作用。而在实际应用中,结合AI智能分析网关V4与EasyCVR视频汇聚智能分析平台,更是能将安全帽检测的效果发挥到极致。例如,在某大型建筑工地,通过在施工现场安装多个......
  • 10093-基于STM32的无线串口小型直流电机调速器设计(仿真+原理图+源代码工程+详细介绍说
    10093-基于STM32的无线串口小型直流电机调速器设计(仿真+原理图+源代码工程+详细介绍说明书+proteus)功能描述:直流电机的调速器设计设计,需要设计一个调速与控制系统,是设备可以直接控制和读取信息,并且显示。①设计直流电机转速控制系统;②通过按键调节直流电机转速;③可以在......
  • 10093-基于STM32的无线串口小型直流电机调速器设计(仿真+原理图+源代码工程+详细介绍说
    10093-基于STM32的无线串口小型直流电机调速器设计(仿真+原理图+源代码工程+详细介绍说明书+proteus)功能描述:直流电机的调速器设计设计,需要设计一个调速与控制系统,是设备可以直接控制和读取信息,并且显示。①设计直流电机转速控制系统;②通过按键调节直流电机转速;③可以在......
  • OpenAI 开源项目 “swarm” 涉嫌抄袭?智能体 Eagle DevAgent 深度解秘
    近日,OpenAI的新多智能体框架Swarm引发了一场激烈的争议——20岁创始人KyeGomez控诉OpenAI窃取了其初创公司Swarms的知识产权。青年才俊的G创始人声称,OpenAI不仅盗用了其项目的名称,还抄袭了相似的代码结构和方法。这一消息迅速引发了科技社区的广泛关注,这两个......
  • 基于SpringBoot + mybatis + logback + shiro的仓库管理系统(完美运行、数据库源代码、
    文章目录前言一、系统功能模块二、开发环境三、部分功能模块展示3.1登录模块3.2后台首页3.3客户管理3.4供应商管理3.5商品管理3.6商品进货3.7商品退货查询3.8商品销售3.9销售退货查询3.10部门管理3.11菜单管理3.12权限管理3.13角色管理3.14用户管理3.15图......