8.6 Выводы |
Предыдущая Содержание Следующая |
![]() |
void * очень много позволяющий тип, к которому мы вынуждены прибегать, чтобы создать полиморфные методы и, в частности, наш механизм выбора динамически компонуемых методов. Из-за полиморфизма типы объектов должны проверяться во времени выполнения, то есть когда объект появляется как параметр метода. Объекты указывают на уникальные описания классов; поэтому их типы могут быть проверены сравнением их указателей описаний классов с описаниями классов, известных в проекте. Для этого мы предоставили три новых метода: isA() проверяет, что объект принадлежит определённому классу, isOf() истина, если объект принадлежит классу или одному из его подклассов, а cast() останавливает работу вызывающей программы, если объект не может быть обработан как элемент определённого класса. В качестве стандарта кодирования мы требуем, чтобы cast() использовался каждый раз, когда объектный указатель должен быть разыменован. В частности, методы со статической компоновкой должны использовать cast() для всех их объектных параметров, селекторы используют его для всех объектных параметрах не из их собственного класса, а методы с динамической компоновкой используют его для всех объектных параметров, которые утверждают, что находятся в их собственном классе. Значения результатов не должны проверяться их поставщиками, потому что потребитель может разыменовать их снова только при помощи cast(). ooc обеспечивает значительную помощь в осуществлении этого стандарта кодирования, потому что генерирует селекторы и предоставляет оператор %casts для импорта параметров. %casts генерирует необходимые вызовы к cast() и должен использоваться последним в декларациях локальных переменных метода. cast() не может подтвердить корректность данных. Однако, мы пытаемся сделать так, чтобы cast() было довольно трудно или невозможно обмануть. Весь смысл безопасного программирования состоит в том, чтобы признать, что программисты могут допускать ошибки и ограничить период в течение которого ошибка может оставаться нераспознанной. cast() разработан, чтобы установить равновесие между эффективностью для корректных программ и (ранним) обнаружением ошибок.
|
Предыдущая Содержание Следующая |