c - scanf 是内聚的还是耦合的?

标签 c coupling cohesion

我开始知道 scanf 是耦合的,它是耦合的,因为它接受不同类型的输入,如整数、 float 、字符等。

但是内聚表示执行单个任务,而 scanf 执行它(扫描来自标准输入的输入)。

我同意,虽然它完成了预期的阅读任务,但它在阅读不同类型数据的形式上缺乏凝聚力。

但是读取不同类型的数据如何表明它是耦合的呢?我看到耦合是组件/模块连接到其他模块或模块独立性的程度。读取不同类型的数据如何使其产生依赖性?

谁能解释一下我们怎么能说一个函数是耦合的或内聚的,并且是 scanf 耦合的或内聚的?

最佳答案

顾名思义,我想说的是,只有当您至少涉及两个 元素时,您才能讨论耦合

scanf() 本身是耦合的,对我来说意义不大。

给定两个模块(两个函数,两个类,...)它们可能或多或少“耦合”,这取决于一个模块对另一个模块的依赖程度。

例如,他们可能共享一个全局变量或(一个文件),这样如果一个人改变了它,另一个人也会受到影响。或者必须按特定顺序调用它们(否则它们将不起作用)。

从维护的角度来看,耦合太紧是一件坏事,您可能会更改模块中的某些内容,然后发现您在另一个模块中引入了错误!

从这个角度来看,我想不出 scanf() 可能依赖的标准 C 库中的任何函数。但即使有,对于标准库维护者来说也是个问题,而不是程序员。

相反,内聚指的是一个模块(又是一个函数、一个类......)执行一个单一的、确定的任务。最糟糕的情况是当您有一个函数执行两个(或更多)不相关的任务只是因为它们可以同时执行。例如,您有一个函数可以计算一组数字的平均值 清理您将存储结果的目录。 从清晰度的角度(因此,您增加了错误的可能性)和重用的角度(您在程序中再次调用该函数的可能性很小)来看,这是不好的。

据我所知,scanf() 只完成一项工作(根据模式从 stdin 读取一组值)并且做得很好。

关于c - scanf 是内聚的还是耦合的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30626180/

相关文章:

c# - 设计问题 - 面向对象的食品应用

sorting - Elasticsearch 中的耦合

coupling - 凝聚力VS。耦合

在c中使用inet_ntop时指针和整数的比较

c - 重定向针对 GPU 的消息

arrays - 使用 strncpy() 时缓冲区溢出内存困惑?

c - 考虑到有限的 RAM 空间,如何在 C 中声明和使用大小为 [16][256] 的二维 int 数组。?

symfony - 在 Symfony 2 和耦合中集成 Bundles(相关 Doctrine 2 实体)

java - 处理大类

php - 是否值得尝试为世界上最紧密耦合的站点编写测试?