Является ли scanf связным или связанным?

Я узнал, что scanf связан, и он связан, потому что он принимает различные типы входных данных, такие как целое число, число с плавающей запятой, символ и другие.

Но сплоченность указывает на выполнение одной задачи, а scanf выполняет ее (сканирование ввода со стандартного ввода).

Я согласен с тем, что, хотя он выполняет желаемую задачу чтения, ему не хватает связности в форме чтения разных типов данных.

Но как чтение разных типов данных указывает на то, что они связаны? Я видел, что связь — это степень, в которой компонент/модуль связан с другими модулями или независимость модулей. Как чтение разных типов данных делает их зависимыми?

Может ли кто-нибудь объяснить, как мы можем сказать, что функция связана или связна и является связанной или связной?


person Community    schedule 03.06.2015    source источник
comment
Связывание и связность обычно относятся к программным компонентам в гораздо большем масштабе, а не к контрактам отдельных функций. Анализ scanf таким образом мало что дает; вместо этого подумайте, как ваши собственные классы и модули зависят друг от друга или могут выполнять свои задачи изолированно.   -  person derekerdmann    schedule 03.06.2015
comment
Подробности: scanf() обычно не принимает входные данные типа float и char. Он принимает типы ввода, такие как float * и char *.   -  person chux - Reinstate Monica    schedule 03.06.2015


Ответы (1)


Как следует из самого слова, я бы сказал, что вы можете обсуждать связь только в том случае, если у вас есть хотя бы два задействованных элемента.

Утверждение, что scanf() само по себе связано, для меня не имеет особого смысла.

Учитывая два модуля (две функции, два класса и т. д.), они могут быть более или менее «связаны» в зависимости от того, насколько один зависит от другого.

Например, они могут совместно использовать глобальную переменную или (файл), так что, если один изменит ее, это повлияет и на другую. Либо их надо вызывать в определенном порядке (иначе они не будут работать).

Слишком тесная связь - это плохо с точки зрения обслуживания, вы можете изменить что-то в модуле, а позже обнаружить, что вы внесли ошибку в другой модуль!

С этой точки зрения я не могу придумать ни одной функции в стандартной библиотеке C, от которой может зависеть scanf(). Но даже если бы он был, это было бы проблемой для тех, кто поддерживает стандартную библиотеку, а не для программистов.

Вместо этого связность относится к тому факту, что модуль (опять же: функция, класс, ...) выполняет одну идентифицированную задачу. Худшее, что может быть, — это когда у вас есть функция, которая выполняет две (или более) несвязанные задачи только потому, что они могут выполняться одновременно. Например, у вас есть функция, которая вычисляет среднее значение набора чисел и очищает каталог, в котором вы будете хранить результаты. Это плохо с точки зрения ясности (и, следовательно, вы увеличиваете вероятность ошибок) и с точки зрения повторного использования (мало шансов, что вы когда-нибудь снова вызовете эту функцию в программе).

Насколько я могу судить, scanf() выполняет одну работу (чтение набора значений из стандартного ввода по шаблону) и делает это хорошо.

person Remo.D    schedule 03.06.2015