Интерфейсы должны быть точно и со строгим контролем типов
Интерфейсы должны быть точно и со строгим контролем типов.
Интерфейсы описывают поведение или возможности объекта. Точно и интерфейсы со строгим контролем типов задают цель и свойства их параметров при помощи параметров, которые являются пользовательскими объектами и шаблонами вместо фундаментальных типов. Сравните интерфейсы в этом фрагменте кода:
void draw_circle(float R, float x, float y); void draw_circle(Length R, Position O);
Length
и другой объект класса Position
как входные параметры.
Второй интерфейс делает его явным, что первый параметр является длиной, и второй параметр является положением. Этот интерфейс легко изучить и использовать, потому что он подсвечивает необходимые входные параметры и их порядок для определенного круга. В отличие от этого, вы не можете различить входные параметры или их порядок в первом интерфейсе, потому что не ясно, как три плавающих числа относятся к кругу.
Компилятор проверяет аргументы по входным типам параметра во время компиляции. Если вы помещаете входные параметры второго интерфейса в неправильном порядке случайно, компилятор отмечает несовпадающие параметры во время компиляции. Если все три входных параметра первого интерфейса являются числами с плавающей запятой, компилятор не может проверять, правилен ли входной порядок.
Определение классов Length
и Position
может задать модули этих параметров, такие как cm или мм. Определения классов могут также задать, являются ли эти параметры неизменяемыми. Когда вы используете фундаментальные типы в качестве входных параметров, такая спецификация затрудняет.
Первый интерфейс неоднозначен, потому что он использует входные параметры фундаментального типа, которые могут привести к ошибкам. Избегайте использования интерфейсов, которые имеют много параметров фундаментального типа. Используйте точно и интерфейсы со строгим контролем типов вместо этого. Компиляторы могут часто оптимизировать такие интерфейсы лучше, чем интерфейсы со слабым контролем типов.
Когда несколько параметров связаны, комбинируют их в пользовательский тип. При реализации полиморфных интерфейсов используйте указатели на общий базовый класс вместо указателей на пустоту (void*
). Для типовых интерфейсов используйте шаблоны в качестве параметров.
В Polyspace® эти типы являются фундаментальными типами:
Целочисленные типы, такие как int
, short
, и long
Типы с плавающей точкой, такие как float
или double
Булевская переменная (bool
) типы
Указатели на пустоту (void*
)
Указатели или ссылки на предыдущие типы
typedef
из предыдущих типов
Массивы предыдущих типов
В Polyspace, перечислениях или enums
не фундаментальные типы. Polyspace отмечает интерфейс, если его входные параметры включают какое-либо следующее:
Один или несколько void
связанные типы
Два или больше bool
связанные типы
Три или больше идентичных фундаментальных типа
Можно использовать альтернативы, такие как комментарии или названия параметра, чтобы разъяснить интерфейсное определение. В таких случаях можно выровнять по ширине результат Polyspace при помощи комментариев в результате или кода. Смотрите Результаты Polyspace Адреса Через Исправления ошибок или Выравнивания
Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.
Группа: операторы объявления |
Категория: необходимый, неавтоматизированный |