scanf是内聚还是耦合?

时间:2015-06-03 16:53:15

标签: c coupling cohesion

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

但是凝聚力表明只做一个任务而scanf就是这样做(从stdin扫描输入)。

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

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

任何人都可以解释我们怎么能说一个函数是耦合的还是有凝聚力的并且是扫描耦合或内聚的?

1 个答案:

答案 0 :(得分:2)

正如单词所暗示的那样,如果您至少涉及两个元素,我会说你只能讨论耦合

scanf()本身就是偶然的,对我来说没有多大意义。

给定两个模块(两个函数,两个类,......),它们可能或多或少地耦合"取决于一方取决于另一方。

例如,他们可能共享一个全局变量或(一个文件),这样如果一个人改变它,另一个也会受到影响。或者他们必须以某种顺序被召唤(或者他们不会工作)。

从维护角度来看,太紧的耦合是一件坏事,你可能会在模块中改变某些东西,然后发现你在另一个模块中引入了一个bug!

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

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

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