Количество экземпляров, которое может иметь класс, называется множественностью. Количество экземпляров класса (от нуля до бесконечности) можно указать на диаграм м е класса. Класс с нулевым количеством экземпляров является чистым абстрактным классом. Он не может иметь ни одного объекта, явно объявленного с использованием этого типа. Количество экземпляров может иметь нижнюю и верхнюю границы, которые также могут быть указаны на диаграмме класса. На рис. 10.2 показаны возможные варианты обозначения нескольких экземпляров класса на диаграмме класса (с помощью графических средств или значения множественности).
На рис. 10.2 множественность класса student_scheduleуказана как диапазон 1..7 ,а это означает, что наименьшее количество расписаний в нашей системе равно 1, а наибольшее — 7. Приведем еще несколько примеров обозначения множественности класса.
1Один экземпляр
1..nОт одного до заданного числа n.
1..* От одно г о до бесконечности
0..1От нуля до единицы
0* От нуля до бесконечности
*Бесконечное количество экземпляров
Безусловно, бесконечное количество экземпляров будет ограничено объемом внутренней или внешней памяти.
Рис. 10.2. Обозначение нескольких экземпляров класса с помощью графических средств и значения множественности |
Отображение информации об атрибутах и операциях класса
Диаграмма класса может содержать более подробную информацию об атрибутах иоперациях класса. В разделе атрибутов можно указать тип данных и/или значение по умолчанию (если оно предусмотрено) для класса и значения атрибутов для объектов. Например, типы данных, содержащиеся в разделе атрибутов класса student_schedule, могут иметь следующий вид.
StudentNumber : string;
Term : string
StudentSchedule : map >
ScheduleIterator : map >::iterator
Для oбъeктa mySchedule эти атрибуты могут принимать такие значения.
StudentNumber : string = «102933»
Term:string = «Spring»
Методы могут быть отображены с параметрами и с указанием типов возвращаемых ими значений.
studentSchedule(&X : map >) : void
StudentNumber () : string
Фу н кция studentSchedule() принимает значение courseдля заданного студента (course— это класс, который моделирует один курс обучения). Курсы для каждого дня недели хранятся в векторе. Контейнер mapустанавливает соответствие строки (дня недели) и вектора курсов (для заданного дня недели). Функция studentSchedule()возвращает void-значение, а функция studentNumber() — значение типа string.
На диаграмме класса можно также отобразить свойства атрибутов и операций (методов). Свойства атрибутов помогают описать характер использования того или иного атрибута, что дает возможность судить о том, можно ли его изменять или нет. Так, для описания атрибутов используются три свойства: changeable, addOnlyи frozen.Краткое описание этих свойств приведено в табл. 10.1. Для определения методов используются четыре свойства: isQuery, sequential, guardedи concurrent.Они также описаны в табл.10.1. Свойства sequential, guardedи concurrentимеют отношение к параллельности выполнения методов. Свойство sequentialописывает операцию, ответственность за синхронизацию которой лежит на инициаторе ее вызова. Такие операции не гарантируют целостности объекта. Свойство guardedописывает параллельно выполняемую операцию с уже встроенной синхронизацией. При этом guarded-операции означают, что в каждый момент времени возможен только один ее вызов. Свойство concurrentописывает операцию, которая позволяет ее одновременное использование. Операции, описываемые с помощью свойств guardedи concurrent,гарантируют целостность объекта. Гарантия целостности объекта применима к операциям, которые изменяют состояние объекта.
Таблица 10.1. Свойс т ва а т рибу т ов и ме т одов
Свойства атрибутов
{changeable} На значения этого типа атрибута никакие ограничения не налагаются
{addOnly} Для атрибутов, y которых значение множественности >1,можно добавлять дополнительные значения. Созданное значение невозможно удалить или изменить
{frozen} После инициализации объекта значение атрибута изменить нельзя
Читать дальше