【问题标题】:How to implement design in OOP如何在 OOP 中实现设计
【发布时间】:2020-08-13 07:41:38
【问题描述】:

我有以下结构

  • 一个组织可以有多个环境。
  • 一个环境可以有多个应用程序。
  • 一个应用程序可以有多个 Polics。

我创建了每个实体的类,即
  • 班级组织,
  • 类环境,
  • 类应用程序,
  • 课程政策

现在我想将策略应用到应用程序。 一个策略应该有一个Policy 类对象。 Policy 的所有实例都是不同的。每个策略都有唯一的名称和 ID。

继承不起作用,考虑遵循层次结构-

  • 组织结构
  • 环境(组织)
  • API(环境)
  • 政策(API)

因为每项政策都需要提供 API、环境、组织的所有详细信息。

我们可以在这里进行聚合吗?需要这方面的帮助

【问题讨论】:

  • Now I want to apply policies to Application. One policy should have one Policy class object 你的意思是 Policy 的所有实例都是“不同的”吗?请更清楚。 Inheritance will not work在哪些类之间继承?
  • @bruno 所有 Policy 实例都“不同”>> 是的,也更新了问题
  • 每个政策都只针对应用程序吗?换句话说,如果我将一个应用程序转移到另一个环境或组织中,政策是否可以保持不变?

标签: oop design-patterns uml


【解决方案1】:

Policy 的所有实例都不同。 每个策略都有唯一的名称和 ID

你可以用约束来表示:

Policy.allInstances() -> forAll(p1, p2 |
  p1 <> p2 implies (p1.name <> p2.name and p1.ID <> p2.ID))

您提供的信息中的类图可以是:

我不使用双向关系,假设 Policy 不知道关联的 Application(s) 不知道关联的 Environment(s)谁不知道相关的组织

我使用的多重性 * 等同于 0..*,因为您的问题中没有任何内容表明最小多重性每次都是 1。我没有指出关系的相反方向的多重性,因为你的问题没有说明它们的某些内容。

继承无效

A inherits B 隐含A is a B,在你给的类中没有一个满足,所以它们之间不可能继承。

我们可以在这里做聚合吗

可能在 EnvironmentApplication 之间,因为我们可以说环境是由应用程序组成的,但在其他情况下不是。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-12
    • 1970-01-01
    • 2020-03-12
    • 1970-01-01
    • 2011-02-13
    • 1970-01-01
    • 1970-01-01
    • 2017-06-11
    相关资源
    最近更新 更多