我在这里遇到以下难题:我有几个类,比方说 A、B、C 和 D。A 有一个公共(public)接口(interface),并且与 B 有一个关系(比如 A 有一个类型的成员变量B) A 的方法之一是返回这个 B 对象,B 只是一个公开一些方法的类,C 是另一个公开其他方法的类,D 是一个单例对象。 D 的公共(public)接口(interface)具有对 C 类对象的引用(如果您更喜欢指针)。
所以,很明显,当我想在这一步绘制关系图时,我会将 A 和 B 之间的关系和 C 放在图上,而与其他两者没有可见的关系。所以,这是基于头文件 (.h),其中包含类 A、B、C 的声明。我现在对 D 有点困惑。
另一端:
- A 和 B 的实现(在 .cpp 文件中)都严重依赖于从类 C 创建的对象(不,C 不是标准的东西,例如列表、字符串、队列,而是我的应用程序中另一个有意义的类).
- A 和 B 的实现都使用具有本地 C 对象的 D 单例。
这是我的问题:
- 我应该在 A、B、C 和 D 之间的类图中放置什么关系,不包括我已经确定的那个(A 有一个 B)?我对单例 D 与类 C 的关系特别感兴趣。
- 这种情况下普遍接受的方法是什么(当接口(interface)在对象之间没有关系时,因为没有关系,但在实现中它们被大量使用)?
- 如果我根据 Java 而不是 C++ 提出相同的问题,会有不同吗(因为在 Java 中,与类相关的所有内容都在一个文件中,因此更容易看出类方法实际使用的是什么,而在 C++ 中,您通常只看到 header )。
非常感谢您的指导。
最佳答案
您提供的大部分信息在以下类别中应该是可识别的 图(plantuml 输入)。我希望这能回答第一个问题。
@startuml
class A
A o--> B
A : + method()
A : + B& getB()
A : - B m_B
A --> "getC" D
class B
B : + method()
B --> "getC" D
class C
C : + method()
class D <<Singleton>>
D --> "0..n" C
D : + C* getC( int index )
D : - list<C> m_containerOfC
@enduml
关于第二个问题:我认为绘制 UML 图(我想是为了设计)的重点主要是抽象,因此忽略了细节。编写完程序后,再尝试用 UML 表达一个完整的 C++ 程序是没有意义的。您可以购买(尝试)为您执行此操作的程序,但我认为这些图表没有用。
第三个问题的答案是,在设计阶段,用于 java 和 c++ 实现的 UML 应该是相等的,或者至少在很大程度上是相等的。设计是关于选择和连接设计模式等,这些与语言无关。当您开始详细说明图表以表示更多实现细节(例如使用的容器类型等)时,选择的实现语言就会发挥作用。但是,在那个阶段,您应该问问自己,您的图表是否让您对自己的设计有足够的信心,然后开始对其进行编码。
关于c++ - C++的一些设计问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5663399/