为了账号安全,请及时绑定邮箱和手机立即绑定

将 UML 图映射到 Java 代码转换

将 UML 图映射到 Java 代码转换

素胚勾勒不出你 2023-08-04 15:52:10
你好,我正在尝试将这个UML图直接转换为java代码,下面是我的代码,它似乎无论如何都无法编译。我不太确定如何放置可选的多重性,例如 0..* 和 0..1。感谢您的帮助。public class Person{    private String name;    private Person mom;    private Person dad;    private ArrayList<Person> child;    private ArrayList<Person> friend;    private ArrayList<School> alumni;    private School current = new School();    public Person(String name, Person mom, Person dad, ArrayList<Person> child, ArrayList<Person> friend, ArrayList<School> alumi, School current){        name = this.name;        mom = this.mom;        dad = this.dad;        child = this.child;        friend = this.friend;        alumni = this.alumni;        current = this.current;    }}public class School{    private String name;    private ArrayList<Person> student;    public School(String name, ArrayList<Person> student){        name = this.name;        student = this.student;    }}
查看完整描述

2 回答

?
郎朗坤

TA贡献1921条经验 获得超9个赞

没有将 UML 转换为 Java 的标准化方法,但我可以根据 UML 和 Java 语义告诉您什么是正确的,什么是不正确的。

类C1和C2之间的关联可以通过类C1中的属性、或者通过类C2中的属性或者通过两个类中的属性来实现。如果关联没有箭头,则所有三个选项都是可能的,并且未定义这三个选项中哪一个是最好的。如果关联是从 C1 指向 C2 的箭头,则第一个选项是最佳选项,第二个选项不正确,第三个选项是允许的。我检查了您的 Java 代码,它符合这些规则。

0..1如果类 C1 有一个属性 P 实现类 C1 和类 C2 之间的关联,并且该关联在 C2 一侧具有多重性,则 P 应该具有类型 C2,并且 C1 应该具有不初始化 P 的构造函数。您的 Java 代码是不正确的,因为您不应该初始化 Person.School。

如果重数是*0..*,那么 P 应该是 C2 的某种集合。类 C1 应该有一个构造函数,该构造函数要么不初始化 P,要么可以用空集合初始化 P。Java 代码中的情况就是后者。


查看完整回答
反对 回复 2023-08-04
?
繁星coding

TA贡献1797条经验 获得超4个赞

public class Person{

    private String name;

    private Person mom;

    private Person dad;

    private ArrayList<Person> child;

    private ArrayList<Person> friend;

    private ArrayList<School> alumni;

    private School current = new School();

这部分似乎是正确的,但学校除外,该学校应该为空,因为该人目前可能没有在学习。


private School current;

关键字this(请参阅使用 this 关键字)引用 Java 中的当前对象,因此构造函数应写为


public Person(String name, Person mom, Person dad, ArrayList<Person> child, ArrayList<Person> friend, ArrayList<School> alumi, School current){

    this.name = name;

    this.mom = mom;

    ...

}

学校班级也有同样的问题:


public class School{

    private String name;

    private ArrayList<Person> student;


    public School(String name, ArrayList<Person> student){

        this.name = name;

        this.student = student;

    }

}

如果您在同一个文件中定义两个类,则必须从 School 的类定义中删除 public,这将变为


class School{

查看完整回答
反对 回复 2023-08-04
  • 2 回答
  • 0 关注
  • 159 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信