You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确创建序列图?Directory类listAllFiles方法建模疑问

序列图建模验证与方法指导

需求背景

需为Directory类的listAllFiles方法调用过程建模序列图,对应Java代码如下:

public class Directory { 
    public List<File> listAllFiles(String path) { 
        List<File> all = new ArrayList<File>(); 
        File[] list = new File(path).listFiles(); 
        if(list != null) { 
            for (File f:list) { 
                if(f.isDirectory()) { 
                    all.addAll(listAllFiles(f.getAbsolutePath())); 
                } else { 
                    all.add(f.getAbsoluteFile()); 
                }
            } 
        } 
        return all; 
    } 
}

已绘制的序列图

初始版本

初始绘制的序列图

修改后版本

修改后的序列图

建模正确性验证

结合代码逻辑,正确的序列图需覆盖以下核心交互:

  1. 对象交互链:Directory实例与ArrayList实例、多个File实例的消息传递
  2. 递归调用:当遇到子目录时,Directory实例自调用listAllFiles方法(序列图中通过嵌套激活条+自消息表示)
  3. 条件分支:通过alt片段区分「当前File是目录」和「当前File是文件」两种逻辑
  4. 循环遍历:通过loop片段表示对listFiles返回数组的遍历过程
  5. 空值判断:通过opt片段表示仅当list不为空时才执行遍历逻辑

对比两张图:

  • 初始版本大概率未完整体现递归的嵌套激活、循环/条件的结构化标注,是常见的疏漏点
  • 修改后的版本若包含上述核心元素(循环框、条件分支框、自调用消息),则建模逻辑正确

序列图正确创建方法

  1. 梳理参与对象:明确建模涉及的实体:调用方(外部对象)、Directory实例、ArrayList实例、多个File实例
  2. 按时间流拆解消息:
    • 外部调用Directory的listAllFiles(path)
    • Directory创建ArrayList实例
    • Directory创建File实例并调用listFiles()获取文件数组
    • 用opt片段包裹「list不为空」的后续逻辑
    • 用loop片段包裹对File数组的遍历过程
    • 遍历中用alt片段区分两种分支:
      • 分支1:调用File的isDirectory()返回true → Directory自调用listAllFiles,再调用ArrayList的addAll()
      • 分支2:调用File的isDirectory()返回false → 调用File的getAbsoluteFile(),再调用ArrayList的add()
    • Directory返回ArrayList实例给调用方
  3. 规范符号使用:
    • 递归调用:用对象向自身发送消息的箭头表示,配合嵌套的激活条体现方法栈层级
    • 结构化片段:loop(循环)、alt(分支)、opt(可选逻辑)需明确标注条件
    • 消息顺序:严格按照代码执行的时间顺序排列,箭头从调用方指向被调用方

内容的提问来源于stack exchange,提问作者Luca Cardone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 03:20:21