创建一个java主类,将简单的UML转换为java代码

时间:2015-02-06 14:41:15

标签: java netbeans uml

我制作了一个基本的UML图和输出文件,它只是一个关于汽车偏好的简单文件;他们如下

CarUML.txt

汽车

  • cost:int
  • color:String
  • make:String

    + count:int

+ Car(int cost)

Car.java

package car;

public class Car {
  private int cost;
  private String color;
  private String make;
  public int count;

  public Car (int cost) {
    this.cost = cost;
  }

}

任何人都可以创建一个简单的类来转换原始的UML以生成输出java文件吗?例如,如果+然后公开,如果 - 然后私人等等?因为这两个本身显然非常简单,但我想创建一个UML是输入的类,而Car.java是输出?

由于

1 个答案:

答案 0 :(得分:1)

你可以有一个程序,它使用正则表达式并一次解析一行文件。所以如果你有一个这种结构的文件:

Car
    cost: int
    color: String
    make: String
    +count: int

您可以使用正则表达式,例如:

  • (^[a-zA-Z0-9_]+$)获取类名称:这将产生public class <group content>
  • ^([a-zA-z0-9_]+)\s+:\s+(([a-zA-z0-9_]+))$:这会产生private <group 2> <group 1>;
  • ^\+([a-zA-z0-9_]+)\s+:\s+(([a-zA-z0-9_]+))$:这会产生public<group 2> <group 1>;

对于方法,您可以使用相同的方法,唯一的例外是检查括号:

  • ^([a-zA-z0-9_]+\(\))\s+:\s+(([a-zA-z0-9_]+))$:这会产生private <group 2> <group 1>{}
  • ^\+([a-zA-z0-9_]+\(\))\s+:\s+(([a-zA-z0-9_]+))$:这会产生public <group 2> <group 1>{}

您可以拥有一个字典,其中包含每个公共字段的变量名称和类型。这些将反过来包含在自动生成的构造函数中。

请注意,Java已经有一个默认的类访问器。因此,通过其他字符表示私有字段可能不那么令人困惑,例如私有字段为-,受保护字段为*

我提供的正则表达式应该让你开始。理想情况下,您可以查看Java Language Specification,了解每种相应数据类型的有效名称。