【问题标题】:How to implement usage dependency, Enumeration data type in Java? Confusion to implement Aggregation, Composition如何在Java中实现使用依赖,枚举数据类型?实现聚合、组合的困惑
【发布时间】:2014-07-05 22:21:37
【问题描述】:

我必须在 java 代码中实现以下类图。该图非常复杂,某些部分会造成混乱。这个问题肯定对我和任何读者都有很大帮助,因为它包含 UML 图的几个重要方面。

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. 如何使用接口 Search 实现 Class Student。
  2. 如何使用接口 Search 和 Manage 实现 Class Librarian。
  3. 为什么我们不使用关联而不是使用依赖。
  4. 如何在这种情况下实现具有使用依赖性的 Enumeration 数据类型 [我刚刚将 AccountState 视为一个类,我认为它是一个错误的实现]。
  5. 如何在 Account 中使用 AccountState [我刚刚创建了一个 AccountState 对象]。
  6. 阅读了许多博客后,仍然无法自信地实现聚合和组合。 注意:在此图中存在 3 个聚合和 1 个组合。这些是:
    (a) 图书馆由许多帐户组成。 {聚合}
    (b) 许多图书项目是图书馆的一部分。 {聚合}
    (c) 账户是学生的一部分。 {聚合}
    (d) 图书馆必须有目录。 {作曲}
    请多多指教,让我好好学习。谢谢。

【问题讨论】:

  • “枚举”不会让你想到enum 数据类型吗?
  • 那我们为什么要在这里使用它...
  • ....因为他们告诉你这样做。它就在图中。

标签: java oop uml aggregation class-diagram


【解决方案1】:

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

  • 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);
        }
    }
    

【讨论】:

  • 我有关于聚合和组合的基本概念,并经历了几个例子。但我的问题是在这种情况下如何实现它。
  • 好吧,这里是聚合和组合的例子。 你真正需要什么在你当前的设计中实现它?
  • 感谢您的帮助。现在我明白你想说什么了,我终于完成了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-14
  • 1970-01-01
  • 2012-08-06
  • 2014-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多