C - UML 组件图中有哪些接口

C - What Interfaces are in UML Component Diagrams

C 中组件图中的接口到底是什么?

我是一名了解软件开发架构的嵌入式系统测试员。我看过我执行黑盒测试的项目的组件图。我已经看到组件由连接 "sockets" 和 "lollipos" 的块表示。我知道那些是接口,组件提供和请求接口。我读过不同的文章,但我没有找到一个实际的例子。它们是函数和变量,请求此类接口的组件调用它并且提供者具有函数的定义?

基本上,接口是对某些人可能提供或需要的属性和操作的声明。 class 可以实现一个接口,这意味着它必须实现操作并具有可访问的属性。现在一个组件是由 1..n classes 组成的东西,界面可以在组件外可见。所以最后一个组件可以显示许多不同的接口,它的许多内部 classes 提供给外部世界。

关于套接字和棒棒糖:棒棒糖代表提供的接口(classes 已经实现了它)。套接字表示所需的接口。那就是必须有一个对应的地方可以连接,它提供了接口的实现。

根据UML标准定义一个组件:

A Component represents a modular part of a system that encapsulates its contents and whose manifestation is replaceable within its environment.

A Component is a self-contained unit that encapsulates the state and behavior (...). A Component specifies a formal contract of the services that it provides to its clients and those that it requires from other Components or services in the system in terms of its provided and required Interfaces.

A Component is a substitutable unit that can be replaced at design time or run-time by a Component that offers equivalent functionality based on compatibility of its Interfaces. (...)

由其 API

定义的组件

在C语言中,组件可以是一组编译单元,这些编译单元定义了对其他编译单元可见的函数和全局变量,并且可能需要其他组件中存在函数或全局变量:

  • 组件实现的全局变量和函数集(并且可供其他组件使用)是提供的接口。
  • 组件期望在别处定义的外部全局变量和函数集是必需的接口。

由结构定义的组件

在 C 中,您还可以使用面向对象的风格进行开发。当然,它没有C++那么好用和方便。但它允许开发可互换的组件。

诀窍是使用定义数据成员或指向数据成员的指针(状态)和服从某些签名(行为)的函数指针的结构。在这种情况下,结构的定义定义了组件提供的接口。

例如,Microsoft 正在为其 COM technology

使用这种方法

由其系统接口定义的组件

C 组件不需要成为更大程序的一部分,也不需要提供源代码或目标代码接口。它本身可以是一个独立的程序,在运行时使用 OS 功能提供接口,例如网络协议(监听套接字,或实现 HTTP 或其他网络协议)、远程函数调用或其他 IPC 技术(例如共享内存、互斥量等)。

接口为合约

如上面的示例所示,界面不限于特定的语言功能。接口是关于所提供的内容以及期望与组件通信的内容的契约。

What is exactly an interface in a Component diagram in C? [...] I have read different articles but i do not find a practical example of it. [...]

我相信在某些情况下它可能是低级接口(对于 C 模块)或更高级别的东西,例如 REST API 或通信协议。我认为一般的想法是接口是已发布的东西,它允许实现换入和换出。

这是 Craig Larman 的 Applying UML and Patterns 一书中使用的一个具体示例:

MyApp 系统需要两个组件,一个用于消息传递,一个用于数据库 (DB)。每个接口都是标准的(本例中),分别是JMS和SQL。

在你使用 C 的情况下,接口可能在每个组件的一个或多个 .h 文件中定义(可以是一个或多个 .c 文件,同样在什么方面有一些灵活性是一个组件)。它们可能不像 JMS、SQL 等 "standard",但是如果您正在进行测试,您应该能够在接口的两侧进行测试。