作为一个文本模型,是无法直接输出图像的,除非借助其他的第三方插件或库。
但是,得益于前期接受了海量不同格式文本的预训练,可以轻松生成各种类型的结构化输出,例如表格,代码,数学公式等等。
这其中还包括一类「基于文本的图形描述语言」,它允许我们通过编写文本指令或代码来构建包含特定元素、关系以及布局的图形,而无需依赖图形编辑工具。
那么,我们是否可以改由让生成对应的文本指令或代码,然后再通过特定的解析器与渲染引擎,转换为可视化的图形或图表呢?
这不禁让我想起了一个很有意思的工具:。
是什么?
提供了一种用文本描述来绘制UML图的方式,可以绘制类图、时序图、用例图等等。
用来创建图表有很多好处,包括:
接下来,我们将在《使用提高研发生产力的10个正确姿势》一文中的「代码解释器」基础上,进一步展示如何使用为指定代码生成合适的UML图。
(所用到的和工具地址在文末,可自取)
时序图
时序图是一种用于描述对象之间交互行为的UML图,它展示了对象之间的消息传递顺序。
我们先给一份Java伪代码,这份代码描述了一个简单电商系统中的订单流程:
用户(User)下单;订单(Order)交给订单处理器处理;订单处理器()执行订单处理逻辑,并在完成后发送处理结果通知。通知服务()发送通知给用户。
public class User {
private String name;
private String email;
// ...
public void placeOrder(Order order) {
// 下单逻辑
// ...
}
}
public class Order {
private User user;
private String orderId;
// ...
public void process() {
OrderProcessor orderProcessor = new OrderProcessor();
orderProcessor.processOrder(this);
}
}
public class OrderProcessor {
public void processOrder(Order order) {
// 执行订单处理逻辑
// ...
// 发送处理结果通知
NotificationService.sendNotification(order.getUser(), "订单处理完成");
}
}
public class NotificationService {
public static void sendNotification(User user, String message) {
// 发送通知给用户
// ...
}
}
然后,我们让根据这份伪代码用语言构建一张时序图:
@startuml
actor User
participant Order
participant OrderProcessor
participant NotificationService
User -> Order: placeOrder(order)
activate Order
Order -> OrderProcessor: process()
activate OrderProcessor
OrderProcessor -> NotificationService: processOrder()
activate NotificationService
NotificationService --> User: sendNotification()
deactivate NotificationService
deactivate OrderProcessor
deactivate Order
@enduml
最后,我们把生成的代码复制粘贴到官网的运行块中预览:
类图
类图是一种用于描述系统中的类以及类之间的关系的UML图,比如继承、关联、依赖等。
我们先给一份Java伪代码,这份代码描述了一个简单的人员系统:
类是基类,具有name和age属性,以及eat方法;类继承自类,并添加了id属性和teach方法;类也继承自类,并添加了id属性和study方法;
class Person {
String name;
int age;
void eat() {
// 吃饭的逻辑
}
}
class Student extends Person {
String studentId;
void study() {
// 学习的逻辑
}
}
class Teacher extends Person {
String teacherId;
void teach() {
// 教学的逻辑
}
}
然后,我们让根据这份伪代码用语言构建一张类图:
@startuml
class Person {
- name: String
- age: int
+ eat(): void
}
class Student {
- studentId: String
+ study(): void
}
class Teacher {
- teacherId: String
+ teach(): void
}
Person <|-- Student
Person <|-- Teacher
@enduml
最后,我们把生成的代码复制粘贴到官网的运行块中预览:
流程图是一种用不同形状的图形来表示中间每个操作步骤或决策点的UML图,常用于描述系统某项任务的执行顺序。
我们先给一份Java伪代码,这份代码描述了一个购物流程的逻辑:
用户开始购物,浏览产品,选择产品;如果产品有库存,则将其添加到购物车中;检查是否有折扣码可用,如有则应用折扣码。用户进行结账,如果支付成功,则下订单并显示订单确认页面;否则,显示支付错误信息。如果产品无库存,则显示产品缺货信息。最后,购物流程结束。
// 开始购物
startShopping();
// 浏览产品
browseProducts();
// 选择产品
selectProduct();
// 检查产品是否有库存
if (isProductInStock()) {
// 添加到购物车中
addToCart();
// 检查是否有折扣码可用
if (hasDiscountCode()) {
// 应用折扣码
applyDiscountCode();
}
// 用户进行结账
proceedToCheckout();
if (isPaymentSuccessful()) { // 支付成功
// 下订单并显示订单确认页面
placeOrder();
showOrderConfirmation();
} else { // 支付失败
// 显示支付错误信息
showPaymentError();
}
} else { // 产品无库存
// 显示产品缺货信息
showProductOutOfStockMessage();
}
// 购物流程结束
endShopping();
然后,我们让根据这份伪代码用语言构建一张流程图:
@startuml
start
:开始购物;
:浏览产品;
:选择产品;
if (isProductInStock()) then (有库存)
:添加到购物车;
if (hasDiscountCode()) then (有折扣码)
:应用折扣码;
endif
:进入结账流程;
if (isPaymentSuccessful()) then (支付成功)
:下订单;
:显示订单确认页面;
else (支付失败)
:显示支付错误信息;
endif
else (无库存)
:显示产品缺货信息;
endif
:结束购物;
stop
@enduml
最后,我们把生成的代码复制粘贴到官网的运行块中预览:
状态图
状态图是一种用于描述对象在其生命周期中不同状态及其转换关系的UML图。
我们先给一份Java伪代码,这份代码描述了一个订单的状态变化过程:
订单类(Order)具有一个表示当前状态的成员变量(state),并通过方法设置状态;Order类还有一个方法,用于触发状态处理;订单状态接口()定义了不同状态的处理方法;具体的订单状态类(如、等)实现了订单状态接口,并在其方法中执行具体的处理逻辑,随后流转到下一个状态。
// 订单
class Order {
private OrderState state;
public Order() {
state = new NewOrderState();
}
public void setState(OrderState state) {
this.state = state;
}
public void process() {
state.processOrder(this);
}
// Other methods and attributes
}
// 订单状态
interface OrderState {
void processOrder(Order order);
}
// 新订单状态
class NewOrderState implements OrderState {
@Override
public void processOrder(Order order) {
// 具体的处理逻辑
order.setState(new ShippedState()); // 状态流传
}
}
// 已发货状态
class ShippedState implements OrderState {
@Override
public void processOrder(Order order) {
// 具体的处理逻辑
order.setState(new DeliveredState()); // 状态流传
}
}
// 已送达状态
class DeliveredState implements OrderState {
@Override
public void processOrder(Order order) {
// 具体的处理逻辑
order.setState(new ClosedState()); // 状态流传
}
}
// 已关闭状态
class ClosedState implements OrderState {
@Override
public void processOrder(Order order) {
// 具体的处理逻辑
}
}
然后,我们让根据这份伪代码用语言构建一张状态图:
@startuml
class Order {
- state: OrderState
+ setState(state: OrderState)
+ process()
}
interface OrderState {
+ processOrder(order: Order)
}
class NewOrderState {
+ processOrder(order: Order)
}
class ShippedState {
+ processOrder(order: Order)
}
class DeliveredState {
+ processOrder(order: Order)
}
class ClosedState {
+ processOrder(order: Order)
}
Order --> OrderState
OrderState <|.. NewOrderState
OrderState <|.. ShippedState
OrderState <|.. DeliveredState
OrderState <|.. ClosedState
Order --> NewOrderState : <>
NewOrderState --> ShippedState : processOrder()
ShippedState --> DeliveredState : processOrder()
DeliveredState --> ClosedState : processOrder()
@enduml
最后,我们把生成的代码复制粘贴到官网的运行块中预览:
用例图
用例图是一种用于描述用户与系统交互场景的UML图,展现了系统中不同角色与相关用例之间的关系。
我们先给一份Java伪代码,这份代码描述了一个简单的图书馆管理系统所包含的角色及其可支持的操作,其中:
图书管理员()可以执行借出图书和归还图书的操作;读者()可以执行搜索图书、借阅图书、归还图书以及注册借书证的操作。
// 图书管理员类
class Librarian {
void checkOutBook(Book book, Reader reader) {
// 实现借书逻辑
}
void returnBook(Book book, Reader reader) {
// 实现还书逻辑
}
}
// 读者类
class Reader {
void searchBook(String keyword) {
// 实现搜索图书逻辑
}
void borrowBook(Book book) {
// 实现借书逻辑
}
void returnBook(Book book) {
// 实现还书逻辑
}
}
// Book类(图书)
class Book {
// 图书属性和方法
}
然后,我们让根据这份伪代码用语言构建一张状态图:
@startuml
left to right direction
actor 图书管理员 as Admin
actor 读者 as Reader
rectangle 图书管理系统 {
Admin --> (借出图书)
Admin --> (归还图书)
Reader --> (搜索图书)
Reader --> (借阅图书)
Reader --> (归还图书)
Reader --> (注册借书证)
}
@enduml
最后,我们把生成的代码复制粘贴到官网的运行块中预览:
总结是一个使用文本描述构建UML图的工具;无法直接生成图像,但可以生成对应的文本描述或代码,然后借助等工具转换为可视化的UML图。实现过程:1)给提供要生成UML图的Java代码;2)向描述需要生成的UML图类型;3)让根据代码生成代码;4)将代码复制到官网预览并输出图片。
所用到:
我将为你提供一个代码片段(由“`分隔),请先充分理解该代码片段的含义。接下来,请用语言为我绘制一个{流程图},要求该{流程图}能有助于解释该代码片段的结构和关系:
“`
代码
“`
官网:
在线预览:…