1

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

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

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

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

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

4

1 回答 1

2

正如这个词所暗示的那样,我想说只有在涉及至少两个元素的情况下才能讨论耦合。

说它scanf()本身是耦合的,对我来说没有多大意义。

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

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

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

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

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

据我所知,scanf()做一项工作(根据模式从标准输入读取一组值)并且做得很好。

于 2015-06-03T18:13:28.290 回答