Согласованность типов

Согласованность типов

Наследование согласовано с системой типов. Основные правила легко объяснить на приведенном выше примере. Предположим, что имеются следующие объявления:

p: POLYGON

r: RECTANGLE

Выделим в приведенной выше иерархии нужный фрагмент (рис. 14.6).

Тогда законны следующие выражения:

[x]. p.perimeter: никаких проблем, поскольку perimeter определен для многоугольников;

[x]. p.vertices, p.translate (...), p.rotate (...) с корректными аргументами;

[x]. r.diagonal, r.side1, r.side2: эти три компонента объявлены на уровне RECTANGLE или QUADRANGLE;

[x]. r.vertices, r.translate (...), r.rotate (...): эти компоненты объявлены на уровне POLYGON или еще выше и поэтому применимы к прямоугольникам, наследующим все компоненты многоугольников;

[x]. r.perimeter: то же, что и в предыдущем случае. Но у вызываемой здесь функции имеется новое определение в классе RECTANGLE, так что она отличается от функции с тем же именем из класса POLYGON.

Рис. 14.6.  Фрагмент иерархии геометрических фигур

А следующие вызовы компонентов незаконны, так как эти компоненты недоступны на уровне многоугольника:

p.side1

p.side2

p.diagonal

Это рассмотрение основано на первом фундаментальном правиле типизации:

Правило Вызова Компонентов

Если тип сущности x основан на классе С, то в вызове компонента x.f сам компонент f должен быть определен в одном из предков С.

Напомним, что класс С является собственным предком. Фраза "тип сущности x основан на классе С" напоминает, что для классов, порожденных из родовых, тип может включать не только имя класса: LINKED_LIST [INTEGER]. Но базовый класс для типа - это LINKED_LIST, так что родовой параметр никак не участвует в нашем правиле.

Как и все другие правила корректности, рассматриваемые в этой книге, правило Вызова Компонентов является статическим, - его можно проверять на основе текста системы, а не по ходу ее выполнения. Компилятор (который, как правило, выполняет такую проверку) будет отвергать классы, содержащие некорректные вызовы компонентов. Если успешно реализовать проверку правил типизации, то не возникнет риск того, что скомпилированная система когда-либо во время выполнения применит некоторый компонент к объекту неподходящего типа.

Статическая типизация - это один из главных ресурсов ОО-технологии для достижения объявленной в 1-ой лекции цели - надежности ПО.

Уже отмечалось, что не все подходы к построению ОО-ПО имеют статическую типизацию. Наиболее известным представителем языков с динамической типизацией является Smalltalk, в котором не действует статическое правило вызова, но допускается, чтобы вычисление аварийно завершалось в случае возникновения ошибки: "сообщение не понятно". В лекции, посвященной типизации, будет приведено сравнение разных подходов.
Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

2.3.9 Эквивалентность типов

Из книги C++ автора Хилл Мюррей

2.3.9 Эквивалентность типов Два структурных типа являются различными даже когда они имеют одни и те же члены. Например:struct s1 (* int a; *); struct s2 (* int a; *);есть два разных типа, поэтомуs1 x; s2 y = x; // ошибка: несоответствие типовСтруктурные типы отличны также от основных типов, поэтомуs1 x;


8.7 Имена Типов

Из книги ИНФОРМАЦИОННАЯ ТЕХНОЛОГИЯ ОЦЕНКА ПРОГРАММНОЙ ПРОДУКЦИИ ХАРАКТЕРИСТИКИ КАЧЕСТВА И РУКОВОДСТВА ПО ИХ ПРИМЕНЕНИЮ автора Автор неизвестен

8.7 Имена Типов Иногда (для неявного задания преобразования типов и в качестве параметра sizeof или new) нужно использовать имя тпа данных. Это выполняется при помощи «имени типа» которое по сути является описанием для объекта этого типа, в котором опущено имя объекта.имя_типа:


Объявление типов

Из книги Тонкости реестра Windows Vista. Трюки и эффекты автора Клименко Роман Александрович


А.2.1.4 Согласованность (Compliance)

Из книги Справочное руководство по C++ автора Страустрап Бьярн

А.2.1.4 Согласованность (Compliance) Атрибуты программного обеспечения, которые заставляют программу придерживаться соответствующих стандартов или соглашений, или положений законов, пли подобных


Переключатели типов

Из книги Человеческий фактор в программировании автора Константин Ларри Л

Переключатели типов Как и раньше, отобразить мастер для выполнения поиска можно с помощью сочетания клавиш Windows+F (рис. 3.2). Обратите внимание на панель Показать только данного мастера. С ее помощью можно выполнить поиск среди файлов определенного расширения. Данная панель


R.3.6.3 Имена типов

Из книги Основы объектно-ориентированного программирования автора Мейер Бертран

R.3.6.3 Имена типов Основные и производные типы можно поименовать с помощью механизма typedef (§R.7.1.3), а семейство типов и функций можно задать и поименовать с помощью механизма шаблона типов


R.8.1 Имена типов

Из книги MySQL: руководство профессионала автора Паутов Алексей В

R.8.1 Имена типов Имя типа необходимо указывать при задании операции явного преобразования типа или в качестве параметра в операциях sizeof или new. Для этого служит конструкция имя-типа, которая синтаксически эквивалентна описанию объекта или функции этого типа, в котором


R.14.3 Эквивалентность типов

Из книги Стандарты программирования на С++. 101 правило и рекомендация автора Александреску Андрей

R.14.3 Эквивалентность типов Две конструкции шаблонное-имя-класса обозначают один и тот же класс, если в них совпадают имена шаблонов типа и значения указанных параметров. Например, в следующих описаниях x и y одного типа, который отличен от типа z:template‹class E, int size› class


34 Согласованность и условности

Из книги Язык программирования Си для персонального компьютера автора Бочков C. О.

34 Согласованность и условности Мы окружены пользовательскими интерфейсами. Возможно, этот термин получил широкое распространение благодаря компьютерному программному обеспечению, однако каждая система и каждый компонент оборудования, имеющие пользователя, по


Согласованность имен

Из книги Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ автора Борри Хелен

Согласованность имен Давайте убедимся в том что, приведенная выше спецификация и ее детали являются достаточно удобными. Для того, кто раньше сталкивался со стеками, избранные при обсуждении стека имена операций могут показаться странными или даже шокирующими. Каждому


4.7. MySQL: согласованность и совместимость

Из книги C++ для начинающих автора Липпман Стенли

4.7. MySQL: согласованность и совместимость MySQL еще не выполняет следующие свойства GIS:Дополнительные просмотры метаданных.Спецификация OpenGIS предлагает несколько дополнительных просмотров метаданных. Например, просмотр системы GEOMETRY_COLUMNS содержит описание столбцов


Безопасность типов

Из книги автора

Безопасность типов Если вы лжете компилятору, он будет мстить. — Генри Спенсер (Henry Spencer) Всегда будут вещи, которые мы будем хотеть сказать в наших программах и которые трудно сформулировать на любом языке программирования. — Алан Перлис (Alan Perlis) Последней (не по


Преобразования типов

Из книги автора

Преобразования типов Преобразование типов производится либо неявно, например при преобразовании по умолчанию или в процессе присваивания, либо явно, путем выполнения операции приведения типа. Преобразование типов выполняется также, когда преобразуется значение,


Согласованность

Из книги автора

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


4.14. Преобразования типов

Из книги автора

4.14. Преобразования типов Представим себе следующий оператор присваивания:int ival = 0;// обычно компилируется с предупреждениемival = 3.541 + 3;В результате ival получит значение 6. Вот что происходит: мы складываем литералы разных типов – 3.541 типа double и 3 типа int. C++ не может