为流媒体电影租赁系统创建面向对象的设计 (像NetFlix)。类的名称,私有实例变量, 方法等完全取决于你。
Specifcation
每个用户都有以下与之相关的信息:
- 一个名字。
- 帐号。
- 有序的电影播放列表。
- 特别是,如果电影A位于播放列表中的电影B之前,则用户在B之前观看A.
- 用户观看过的五部最新电影。
醇>有三种不同的用户:
- 试
- 试用用户一次只能在其播放列表中放置一部电影。
- 会员
- 会员一次最多可在其播放列表中放置5部电影。
- VIP会员
醇>
- VIP会员可以在其播放列表中拥有无限数量的电影。
每位用户都必须能够执行以下操作:
- 结帐电影
- 如果用户签出电影,则将其放在用户播放列表的末尾。
- 看电影
- 如果用户观看电影,则从用户的播放列表中删除该电影。您可以假设用户只能观看任何内容 电影位于播放列表的前面。
- 回想一下他们观看过的五部最新电影
醇>
- 此操作应将用户观看过的最新电影打印到屏幕上。
每部电影都包含以下信息:
- 标题
- 日期
- 一种类型
- 租赁价格
醇>请注意,不同的用户拥有不同的电影租赁权,所以它 用户可能会尝试做一些他自己的事情 不允许这样做。 发生这种情况时,您必须执行以下操作:
- 确保未执行操作。
- 打印一条信息性错误消息,说明无法执行操作的原因。
醇>面向对象的设计必须包含以下面向对象的功能:
- 抽象类
- 其他类构建的基类应该是什么?
- 继承
- 特别是,您必须从基础抽象类继承。
- 多态性(动态绑定)
醇>
- 特别是,您检查电影的方法必须是多态的。
我提出了以下类图,但尚未完成:
首先,我对这三个功能应该去哪里感到困惑...查看电影,观看电影并获得最近5部最近观看过的电影。此外,想知道如何关联这些类。
我编辑了我的班级图...我正在寻找关于班级关系的一些反馈
答案 0 :(得分:1)
我会给你一些关于抽象类部分的方向。您已正确理解 User 是一个抽象类,并且您的具体类是从它继承的。但是,您不需要具有解释给定实例的用户类型的属性。调用您的具体类NormalUser,TrialUser,VIPUser。将checkOut作为 User 类中的抽象操作;由于每个具体类以不同方式处理此操作,因此您需要在每个类中而不是在 User 类中实现它。 ( User 类将直接实现每个类以相同方式执行的操作,例如getHistory。)
多态性位是您声明User类型的类并将其实例化为具体子类之一。然后,当您调用checkOut方法时,您将获得在子类中实现的不同行为。
我还会给你一些语法修正:
不要在具体的类标签中写“Concrete Class”,也不要在抽象类标签中放置“Abstract Class”构造型。 UML显示类是抽象的方式是使标题斜体化。这就是你需要的所有区别。
不要在课堂上加上“Class”刻板印象。刻板印象是用于定义特定类型的类,例如«Utility»。
出于同样的原因,不要在班级标签上写“刻板印象”。已经没有定义这样的刻板印象了,正如Thomas Kilian所说,“刻板印象”的刻板印象完全没有意义,所以没有理由自己创造。