UML +类图 - 在线电影租赁

时间:2016-01-05 09:17:35

标签: oop object inheritance polymorphism uml

  

为流媒体电影租赁系统创建面向对象的设计   (像NetFlix)。类的名称,私有实例变量,   方法等完全取决于你。

     

Specifcation

     

每个用户都有以下与之相关的信息:

     
      
  1. 一个名字。
  2.   
  3. 帐号。
  4.   
  5. 有序的电影播放列表。      
        
    • 特别是,如果电影A位于播放列表中的电影B之前,则用户在B之前观看A.
    •   
  6.   
  7. 用户观看过的五部最新电影。
  8.         

    有三种不同的用户:

         
        
    1. 试      
          
      • 试用用户一次只能在其播放列表中放置一部电影。
      •   
    2.   
    3. 会员      
          
      • 会员一次最多可在其播放列表中放置5部电影。
      •   
    4.   
    5. VIP会员      
          
      • VIP会员可以在其播放列表中拥有无限数量的电影。
      •   
    6.         

      每位用户都必须能够执行以下操作:

           
          
      1. 结帐电影      
            
        • 如果用户签出电影,则将其放在用户播放列表的末尾。
        •   
      2.   
      3. 看电影      
            
        • 如果用户观看电影,则从用户的播放列表中删除该电影。您可以假设用户只能观看任何内容   电影位于播放列表的前面。
        •   
      4.   
      5. 回想一下他们观看过的五部最新电影      
            
        • 此操作应将用户观看过的最新电影打印到屏幕上。
        •   
      6.         

        每部电影都包含以下信息:

             
            
        1. 标题
        2.   
        3. 日期
        4.   
        5. 一种类型
        6.   
        7. 租赁价格
        8.         

          请注意,不同的用户拥有不同的电影租赁权,所以它   用户可能会尝试做一些他自己的事情   不允许这样做。 发生这种情况时,您必须执行以下操作:

               
              
          1. 确保未执行操作。
          2.   
          3. 打印一条信息性错误消息,说明无法执行操作的原因。
          4.         

            面向对象的设计必须包含以下面向对象的功能:

                 
                
            1. 抽象类      
                  
              • 其他类构建的基类应该是什么?
              •   
            2.   
            3. 继承      
                  
              • 特别是,您必须从基础抽象类继承。
              •   
            4.   
            5. 多态性(动态绑定)      
                  
              • 特别是,您检查电影的方法必须是多态的。
              •   
            6.   

我提出了以下类图,但尚未完成:

enter image description here

首先,我对这三个功能应该去哪里感到困惑...查看电影,观看电影并获得最近5部最近观看过的电影。此外,想知道如何关联这些类。

我编辑了我的班级图...我正在寻找关于班级关系的一些反馈

enter image description here

1 个答案:

答案 0 :(得分:1)

我会给你一些关于抽象类部分的方向。您已正确理解 User 是一个抽象类,并且您的具体类是从它继承的。但是,您不需要具有解释给定实例的用户类型的属性。调用您的具体类NormalUser,TrialUser,VIPUser。将checkOut作为 User 类中的抽象操作;由于每个具体类以不同方式处理此操作,因此您需要在每个类中而不是在 User 类中实现它。 ( User 类将直接实现每个类以相同方式执行的操作,例如getHistory。)

多态性位是您声明User类型的类并将其实例化为具体子类之一。然后,当您调用checkOut方法时,您将获得在子类中实现的不同行为。

我还会给你一些语法修正:

不要在具体的类标签中写“Concrete Class”,也不要在抽象类标签中放置“Abstract Class”构造型。 UML显示类是抽象的方式是使标题斜体化。这就是你需要的所有区别。

不要在课堂上加上“Class”刻板印象。刻板印象是用于定义特定类型的类,例如«Utility»。

出于同样的原因,不要在班级标签上写“刻板印象”。已经没有定义这样的刻板印象了,正如Thomas Kilian所说,“刻板印象”的刻板印象完全没有意义,所以没有理由自己创造。