8.6 Выводы

Предыдущая  Содержание  Следующая V*D*V

void * очень много позволяющий тип, к которому мы вынуждены прибегать, чтобы создать полиморфные методы и, в частности, наш механизм выбора динамически компонуемых методов. Из-за полиморфизма типы объектов должны проверяться во времени выполнения, то есть когда объект появляется как параметр метода.

Объекты указывают на уникальные описания классов; поэтому их типы могут быть проверены сравнением их указателей описаний классов с описаниями классов, известных в проекте. Для этого мы предоставили три новых метода: isA() проверяет, что объект принадлежит определённому классу, isOf() истина, если объект принадлежит классу или одному из его подклассов, а cast() останавливает работу вызывающей программы, если объект не может быть обработан как элемент определённого класса.

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

ooc обеспечивает значительную помощь в осуществлении этого стандарта кодирования, потому что генерирует селекторы и предоставляет оператор %casts для импорта параметров. %casts генерирует необходимые вызовы к cast() и должен использоваться последним в декларациях локальных переменных метода.

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

 

 

Предыдущая  Содержание  Следующая