从UML到Java,简单关联

时间:2014-11-13 12:41:06

标签: java associations uml

This is the Image that I'm going to transfer from UML to Java

这是我将要从UML转移到Java的图像,我不知道如何将它们锁定在一起,我不知道如何将一个bankAccount锁定到只有一个人。

如何连接2个类?

到目前为止,这是我的代码

我的主要方法

    public class Upp5 {

    public static void main(String[] args) {

        Person2 david = new Person2();
        BankAccount acc1 = new BankAccount();
        BankAccount acc2 = new BankAccount();

        david.setName("David");
        david.setPnr("551012-8978");

        acc1.setBnr("37");
        acc2.setBnr("38");

        System.out.println("Namn: " + david.getName() + " \nPersonnummer:" + david.getPnr());
        System.out.println(acc1.getBnr() + "\n" + acc2.getBnr());
    }

}

BankAccount.java:

public class BankAccount {
    private String bnr;
    private double balance;

    public void credit() {

    }

    public void withdraw(){

    }
    public String getBnr(){
        return bnr;
    }

    public void setBnr(String newAccount){
        bnr = newAccount;
    }

    public void createAccount(String newNbr){
        bnr = newNbr;
    }

}

和Person2.java

public class Person2 {
    private String pnr;
    private String name;

    //Koppla konto till pnr
    public void addAccount(BankAccount a){

    }

    //Skapa Pnr och Namn
    public void setPnr(String newPnr) {
        pnr = newPnr;
    }
    public void setName(String newName){
        name = newName;
    }
    // Hämta Pnr och Namn
    public String getPnr(){
        return pnr;
    }
    public String getName(){
        return name;
    }


}

4 个答案:

答案 0 :(得分:1)

您需要为List<BankAccount>实体定义Person2

public class Person2 {
    private String pnr;
    private String name;

    // list of bank accounts (from 0 to n) the Person can have.
    private List<BankAccount> accounts;

    //Koppla konto till pnr
    public void addAccount(BankAccount a){
         if (accounts = null) accounts = new ArrayList<BankAccount>();
         accounts.add(a);
    }

    //Skapa Pnr och Namn
    public void setPnr(String newPnr) {
        pnr = newPnr;
    }
    public void setName(String newName){
        name = newName;
    }
    // Hämta Pnr och Namn
    public String getPnr(){
        return pnr;
    }
    public String getName(){
        return name;
    }

    // include getters setters
}

EDIT1: 如@NathanCastlehow所建议,如果您想要双重关系,BankAccount.java必须有Person2 attibute

public class BankAccount {
    private String bnr;
    private double balance;

    // one bank account can only be owned by a single Person
    private Person2 person;

    public void credit() {

    }

    public void withdraw(){

    }
    public String getBnr(){
        return bnr;
    }

    public void setBnr(String newAccount){
        bnr = newAccount;
    }

    // generate getters setters
    public Person2 getPerson(){
           ......
    }
}

答案 1 :(得分:1)

您没有在图表中添加任何箭头,因此我们不知道银行帐户是否知道与其关联的人员。最合乎逻辑的做法是;让Person拥有一个你总是在Person的构造函数中启动的List。

如果您希望银行账户知道拥有他的人(这对我来说似乎合乎逻辑),请让Bankaccount拥有该物业&#34; Person owner&#34;并让构造函数需要Person存在。我不明白为什么你做了Person2而不是Person类。

提示:从不(!!!)使用参数,如; &#39;一个&#39;或者像&#39; nBr&#39;因为其他人想在实例中看到他们是什么而不是猜测。 :-)并尝试制定一些安全规则(这就是为什么我把布尔放在课堂上的原因)。

<强>解决方案:

人:

public class Person {
    List<BankAccount> bankAccounts;
    private String name;
    private String pNbr;

    public Person(String name, String pNbr) {
        this.name = name;
        this.pNbr = pNbr;
    }

    public void addAccount(BankAccount newAccount){
        bankAccounts.Add(newAccount);
    }
}

的BankAccount:

public class BankAccount {
    private String nBr; //maybe make this final?
    private double balance;
    private Person owner;

    public BankAccount(String nbr, Person owner) {
        this(nbr, 0, owner); // If you also want to support new empty accounts
    }

    public BankAccount(String nbr, double balance, Person owner) {
        this.name = name;
        this.pNbr = pNbr;
        this.owner = owner;
    }

    public boolean Credit(double amount)
    { // TODO: write code 
        boolean result = false;
        return result;
    }

    public boolean Withdraw(double amount)
    { // TODO: write code 
        boolean result = false;
        return result;
    }
}

答案 2 :(得分:0)

因此,通常在关系模型等模型中完成此操作时,您将拥有一个关联类。所以一个类似于银行账户的ID和该人的ID。您可以使用前面的final关键字锁定变量,这会强制它们只被初始化一次。

答案 3 :(得分:0)

最简单的方式来链接&#34; java中的类是将所述类之一添加为属性。例如:

// Make it private to maintain encapsulation
private BankAccount myBankAccount;

但这只有在你有1..1(一对​​一)的关系时才有效。

您的UML图表示PersonBankAccount类之间的1..n(一对多)关系。换句话说,

Person可能有多个BankAccount s。

这意味着您必须使用结构来保持&#34;单个BankAccount中的多个Person。 Java已经为您提供了一些方便的类:

  • ArrayList:简单,快速,按顺序排列的列表。允许尽可能多的itens。

  • HashmapMap接口的哈希实现。提供一种使用&#34;键&#34;来查找itens的方法。 (例如:帐户号码)。非常有效率。

建议阅读其中一些类文档。你可以随时在互联网上寻找一些简洁的例子;)