如何在Java中实现用法依赖,枚举数据类型?实现聚合,组合的困惑

时间:2014-05-17 14:48:54

标签: java oop uml aggregation class-diagram

我必须为java代码实现以下类图。这个图非常复杂,有些部分会引起混淆。这个问题肯定会对我和任何读者都有所帮助,因为它包含了UML图的几个重要方面。enter image description here

class Book{
   String isbn;
   String publisher;
   String publishDate;
   int pages;
}
class BookItem extends Book{
   String barcode;
   boolean isReferenceOnly;
}
class Author{
   String name;
   String biography;
   Collection<Book> book;
}
class Account{
   String number;
   List<History> history;
   String openDate;
   AccountState state;
   public Account(AccountState state){
      this.state = state;
   }
}
enum AccountState{
   Active,
   Frozen,
   Closed
}
class Catalog implements Search, Manage{
   List<BookItem> bookItem;
   /* Implement the methods of Manage interface */
   void add(BookItem item){ }
   void remove(BookItem item){ }
   /* Implement the methods of Search interface */
   int search(BookItem item){ }
}
class Account{
   String number;
   List<History> history;
   Student student = new Student();

   void setStudent(Student student){
      this.student = student;
   }
}
interface Search{
   int search(BookItem item);
}
interface Manage{
   void add(BookItem item);
   void remove(BookItem item);
}
class Student{
   String name;
   String address;
   Search searchBook = new Catalog(); 
}
class Librarian{
   String name;
   String address;
   String position;
   Search searchBook = new Catalog(); 
   Manage manage = new Catalog();
   Account account = new Account();

   void setAccount(Account account){
      this.account = account;
}
class Library{
   String name;
   String Address;
   List<BookItem> bookItem = new ArrayList<BookItem>();
   Catalog catalog = new catalog();
   List<Account> accounts = new ArrayList<Account>();

   Library(Catalog catalog){
      this.catalog = catalog;
   }
   void setBookItem(List<BookItem> bookItem){
      this.bookItem = bookItem;
   }
   void setAccounts(List<Account> accounts){
      this.accounts = accounts;
   }
}

我以下列方式实施,但在各种情况下出现混淆:

  1. 如何实现Class Student使用界面搜索。
  2. 如何实施类库管理器使用接口搜索和管理。
  3. 为什么我们不使用关联而不是使用依赖。
  4. 如何在这种情况下实现枚举数据类型与使用依赖[我刚刚将AccountState视为一个类,我是一个错误的实现]。
  5. 如何在帐户中使用AccountState [我刚创建了AccountState的对象]。
  6. 阅读后,许多博客仍然无法自信地实现聚合和组合。 注意:在此图表中,存在3个聚合和1个组合。那些是:
    (a)图书馆由许多账户组成。 {}聚集
    (b)许多书籍项目是图书馆的一部分。 {}聚集
    (c)帐户是学生的一部分。 {}聚集
    (d)图书馆必须有目录。 {份}
    请提供宝贵的建议,以便我能够很好地学习。感谢你。

1 个答案:

答案 0 :(得分:0)

由于这个问题是用于学习目的的家庭作业,我将仅发布如何实施您需要审核的内容的示例,并且不会直接回答有关如何应用它们的内容到你当前的设计。

  • Java中的枚举是使用enum实现的。

    enum WeekDays {
        MONDAY,
        TUESDAY,
        WEDNESDAY,
        THURSDAY,
        FRIDAY,
        SATURDAY,
        SUNDAY;
    }
    
  • 聚合/组合意味着拥有另一个类的字段。如果它是一个弱关联(聚合),它应该由setter或其他方法初始化。如果它是一个强关联,它应该在类构造函数初始化,因为类需要生存/工作。

    class WeakAssociation { }
    class StrongAssociation { }
    class NeedWeekAndStrongAssociation {
        private WeakAssociation weakAssociation;
        private StrongAssociation strongAssociation;
        public NeedWeekAndStrongAssociation(StrongAssociation strongAssociation) {
            this.strongAssociation = strongAssociation;
        }
        public void setWeakAssociation(WeakAssociation weakAssociation) {
            this.weakAssociation = weakAssociation;
        }
    }
    
  • 用法依赖性意味着类/接口将在其一个或多个方法中使用其他类/接口:

    class WantToBeUsed {
        public void methodToBeUsed(String data) {
            //fancy implementation
        }
    }
    class CannotDoThisAlone {
        public void cannotDoItAlone(String data) {
            WantToBeUsed wantToBeUsed = new WantToBeUsed();
            wantToBeUsed.methodToBeUsed(data);
        }
    }