c++ - C++的一些设计问题

标签 c++ uml diagram

我在这里遇到以下难题:我有几个类,比方说 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 有点困惑。

另一端:

  1. A 和 B 的实现(在 .cpp 文件中)都严重依赖于从类 C 创建的对象(不,C 不是标准的东西,例如列表、字符串、队列,而是我的应用程序中另一个有意义的类).
  2. A 和 B 的实现都使用具有本地 C 对象的 D 单例。

这是我的问题:

  1. 我应该在 A、B、C 和 D 之间的类图中放置什么关系,不包括我已经确定的那个(A 有一个 B)?我对单例 D 与类 C 的关系特别感兴趣。
  2. 这种情况下普遍接受的方法是什么(当接口(interface)在对象之间没有关系时,因为没有关系,但在实现中它们被大量使用)?
  3. 如果我根据 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/

相关文章:

c++ - 是否可以在编译时检查类型是否派生自模板的某些实例化?

c++ - Win32 C API : Alternative to broken execl*() family of functions?

UML 类图中的 Java 服务器页面 (.JSP) 文件

r - 图表上的非字母字符箭头标签

class - 创建类图的工具

c++ - 共享指针的双重检查锁定

c++ - 在编译时获取源文件的基本名称

uml - 如何将复杂的大型 uml 类图变成简单易懂的方式

winforms - 表示逻辑、屏幕导航、验证的 UML 绘图

用于图表、图表、图形的 WPF 工具