• Ограничение { implicit } ({неявное}) Обусловливает, что отношение является концептуальным
• Ограничение { ordered } ({упорядоченность}) Обусловливает, что объекты на одном конце ассоциации упорядочены
• Свойство { changeable } ({модифицируемость}) Описывает, что может быть добавлено, удалено и изменено между двумя объектами
• Свойство { addOnly } ({расширяемость}) Описывает новые связи, которые могут быть добав
• Свойство { frozen } ({жесткость}) Описывает связь, которая после добавления к объекту на противоположном конце ассоциации не может быть изменена или удалена
Интерфейсные классы
Интерфейсный класс используется для модификации интерфейса другого класса или множества классов. Такая модификация упрощает использование класса, делает его более функциональным, безопасным или семантически корректным. Примерами интерфейсных классов могут служить
// Листинг 10.1. Использование класса stack в качестве
// интерфейсного класса
template < class Container > class stack {
//...
public:
typedef Container::value_type value_type;
typedef Container::size_type size_type; protected:
Container с;
public:
bool empty(void) const {return c.empty();}
size_type size(void) const {return c.size();}
value_type& top(void) {return c.back(); }
const value_type& top const {return c.back(); }
void push(const value_type& x) {c.push.back(x); }
void pop(void) {c.pop.back(); }
};
Класс stack объявляется путе
stack < vector< T > > Stack;
В данном случае типом Container является класс vector, но в качестве класса реализации для интерфейсного класса stack (вместо класса vector) можно использо-ватьлюбой контейнер, который определяет следующие методы:
empty () size() back() push.back() pop.back()
Класс stack поддерживает се
Существует несколько способов отображения интерфейса. Один из них — круг, рядом с которым (чаще — под ним) записывается имя интерфейсного класса. Этот способ показан на рис. 10.5,
Для отображения отношений
Организация интерактивных объектов