【问题标题】:UML for C programming language [closed]C 编程语言的 UML [关闭]
【发布时间】:2010-01-11 15:06:11
【问题描述】:

UML 最常用于使用 C++ 建模系统。在我的项目中,C 是实现语言。我正在寻找适用于 C 的 UML 策略的资源。我想在设计期间使用 UML 并代表系统的不同方面。

【问题讨论】:

  • 我的问题不是关于如何在 C 中完成 OOP。为此,我们有很多方法,例如 www.state-machine.com/devzone/cplus_3.0_manual.pdf 和 www.planetpdf.com/编码/pdfs/ooc.pdf。正如 steven 所提到的,在 C 语言中我们可能只想使用序列图和组件图。我正在寻找一些描述这些策略的资源。我有一些想法,比如,文件代表一个模块,它可以用来代替序列图中的对象。我使用这个策略来展示不同模块之间的流程。

标签: c uml


【解决方案1】:

我不知道有任何现有资源专门讨论将 UML 用于 C。正如其他人所提到的,UML 与语言无关。

请记住,使用 UML,您可以为问题域创建一个模型,并为实现创建另一个模型。尽量不要用 C 来建模问题域,而是用高级别的 OO 来建模。充分了解问题域后,您就可以开始对实现进行建模了。

对于过程式 C 实现建模,下图可能很有用:

  • 类图:
    • 显示 C 模块 API
    • 显示 C 模块关系(主要是非 OO 的依赖项)
    • 显示结构和枚举(使用 >)
  • 包图:展示库的内容(模块),以及库之间的依赖关系
  • 活动图:流程图非平凡算法
  • 序列/协作图:显示模块/实体/输入/输出之间的事件/消息如何及时发生
  • 状态图:当然是状态机!

扩展类图,您可以通过以下方式“滥用”它们以用于过程式 C:

  • 全局外部函数 -> 公共方法
  • 本地静态函数 -> 私有方法
  • 全局外部变量 -> 公共成员
  • 局部静态变量 -> 私有成员
  • 结构 -> 具有“结构”原型的类
  • #define 常量 -> 具有“枚举”构造型的类

进行实验,您会发现自己滥用 UML 的惯例。

【讨论】:

  • 用于 C 编程语言的 UML。 Bruce Powel Douglass,博士,IBM,2009 年 6 月
【解决方案2】:

C 的问题在于它更像是一种过程编程语言。使用 C 应用程序更难获得细粒度的设计。如果您正在使用 C,您可能希望坚持使用序列图和组件图,因为它们描述和概述正在发生的事情,而不是依赖关系和交互图。

【讨论】:

  • C 不是“函数式”编程语言。我相信所寻求的术语是“程序性”。
  • 你说得对,我在想......函数而不是类 = 函数......但按照最严格的定义,它是函数......它有效:P
  • 我同意 UML 不太适合 C,因为 UML 源自面向对象的思想学派。但是您可以使用包含函数指针的结构在 C 中构建一个基于最小关系的、淡化的类似对象的构造......尽管继承和多态并不那么简单。无论哪种方式,UML 在 C 中都不是那么有用
  • c 是一种多范式语言,通过简单地将函数构造成无副作用的方式,在 c 中很容易实现 fp。
  • @sam:这就是为什么我建议使用更宏观的方法而不是类图之类的图表。
【解决方案3】:

面向对象的设计独立于语言,您当然可以使用 UML 设计您的系统。像 Rhapsody 这样的一些工具也将允许代码生成和往返,我们用于一些不能选择 C++ 的特殊项目。如果您想手动编写代码,请使用诸如 Subsystem_Module_Class_Method 之类的命名约定以面向对象的方式命名您的函数,并为每个类使用一个 .c 文件。使用 C 语言不会阻碍简洁的设计。

【讨论】:

  • 它不是干净设计的障碍...但是您不会像使用 OOP 语言那样具有抽象级别和组件设计。这就是创建 OOP 的原因。
  • OOP 也可以在 C 中完成:GTK 就是一个很好的例子。它大量使用了宏,好的,但在语法上它非常干净。我同意其他语言将其更好地集成到它们的语法中,并且代码看起来可能更简洁,但是使用 C 可以达到相同的目标。抽象在设计中,代码只是或多或少地反映了它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-23
  • 2013-06-19
  • 2011-08-20
  • 2013-10-21
相关资源
最近更新 更多