Алгоритмы, структуры данных

5c8b6e8c

Eiffel


В языке Eiffel [4] используется вариант разбиения интерфейса на константный и неконстантный. Также поддерживается методология Design By Contract [7], которая позволяет задать семантику интерфейса. Такой подход дает возможность контролировать правильность реализации неизменного интерфейса:

В секции inherit перечисляются базовые классы. С помощью ключевого слова ensure записывается постусловие метода, которое проверяется во время выполнения. В случае, если условие не выполняется, то генерируется исключение. Current - это Eiffel-вариант ключевого слова this. Ключевое слово old обозначает ссылку на копию объекта, сделанную перед началом выполнения метода. Метод is_equal наследуется всеми объектами из базового класса ANY и проверяет объекты на равенство; при необходимости может быть переопределен.

У методов интерфейса CONST_PERSONAL имеется постусловие, которое гарантирует, что после выполнения метода объект не изменил свое состояние. Любая реализация интерфейса CONST_PERSONAL должна будет удовлетворять заданному свойству неизменности. Метод is_equal в данном случае выступает критерием неизменности состояния объекта.

Плюсы подхода Eiffel: есть контроль физической и логической неизменности; не нужен дополнительный механизм, все реализуется стандартными средствами. Минусы: необходимость в дополнительной работе по разделению интерфейса на две изменяемую и неизменную части; при интенсивном использовании неизменяемых интерфейсов возрастает число проверок, необходимых в отладочной версии; возможность использования RTTI для преобразования неизменного интерфейса в изменяемый.



Содержание раздела