Отображение информации об атрибутах и операциях класса
Диаграмма класса может содержать более подробную информацию об атрибутах иоперациях класса. В разделе атрибутов можно указать тип данных и/или значение по умолчанию (если оно предусмотрено) для класса и значения атрибутов для объектов. Например, типы данных, содержащиеся в разделе атрибутов класса student_schedule, могут иметь следующий вид.
StudentNumber : string;
Term : string
StudentSchedule : map <string,vector<course> >
ScheduleIterator : map <string,vector<course> >::iterator
Для oбъeктa mySchedule эти атрибуты могут принимать такие значения.
StudentNumber : string = «102933»
Term:string = «Spring»
Методы могут быть отображены с параметрами и с указанием типов возвращаемых ими значений.
studentSchedule(&X : map <string,vector<course> >) : 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} После инициализации объекта значение атрибута изменить нельзя
Свойства методов
{isQuery} При выполнении метода этого типа состояние объекта остается неизменным. Этот метод возвращает значения
{sequential} Пользователи этого метода для обеспечения гарантии последовательного доступа к нему должны использовать синхронизацию. При множественном параллельном доступе к этому метолу целостность объекта подвергается опасности
{guarded} Синхронизированный последовательный доступ к этому методу встроен в объект; целостность объекта гарантируется
{concurrent} К этому метолу разрешен множественный параллельный доступ: целостность объекта при этом гарантируется
Свойства guarded и concurrent можно использовать для отражения модели PRAM (Parallel Random-Access Machine — параллельнал машина с произвольным доступом). Если метод считывает и/или записывает данные в память, доступную для другого метода, который также считывает и/или записывает данные в гу же память, этот метод может быть описан как PRAM-алгоритм. При этом можно использовать соответствующие свойства, например, такие.
PRAM-алгоритмы Свойства CR (Concurrent Read — параллельное чтение) concurrent CW (Concurrent Write — параллельная запись) concurrent CRCW (Concurrent Read Concurrent Write — параллельное чтение, параллельная запись) concurrent EW (Exclusive Write — монопольнал запись) guarded ER (Exclusive Read — монопольное чтение) guarded EREW (Exclusive Read Exclusive Write — монопольное чтение, монопольная запись) guardedОписание класса student_schedule можно сделать еще более подробным, указав с помощью свойств, как использовать его (класса) атрибуты и операции.
Атрибуты:
StudentNumber : string {frozen}
Term : string {changeable}
StudentSchedule : map <string,vector<course> > {changeable}
Операции:
scheduleDayOfWeek(&X : vector<course>, Day : string) :void {guarded}
studentNumber() : string {isQuery, concurrent}
Атрибут StudentNumber представляет собой константу типа string. После присвоения значение константы изменить нельзя. Если объект student_schedule используется для того же студента, но для различных периодов времени, то атрибуты Term и StudentSchedule должны быть модифицируемыми. Метод scheduleDayOfWeek () принимает вектор курсов (vector<course>) для конкретного дня недели, хранимого в строке Day. Это — защищенная (guarded) операция. Она помещает расписание студента, соответствующее конкретному дню недели, в map- объект StudentSchedule, изменяя тем самым его состояние. Синхронизация, встраиваемая в этот объект, обеспечивается за счет использования мьютексов. Метод studentNumber() имеет два свойства: isQuery и concurrent. Этот метод возвращает константу StudentNumber и безопасен для одновременного доступа. Его вызов не изменяет состояния объекта, поэтому здесь и использовано свойство isQuery.
На диаграмме класса можно отобразить е щ е одно важное свойство атрибутов и операций — их видимость. Свойство видимости описывает, кто может получить доступ к атрибуту или вызвать операцию. Для представления этого свойства (уровня видимости) используется соответствующий символ. Уровни видимости соответствуют спецификаторам доступа, определенным в С++.
Симво л видимости предваряет имя атрибута и л и операции (метода).
Спецификаторы доступа Символы видимости public (+) Общий доступ protected (#) Доступ имеет сам класс и его потомки private (-) Доступ имеет только сам классБольше книг — больше знаний!
Заберите 30% скидку новым пользователям на все книги Литрес с нашим промокодом
ПОЛУЧИТЬ СКИДКУ