Свойства методов
{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 > {changeable}
Операции:
scheduleDayOfWeek(&X : vector, Day : string) :void {guarded}
studentNumber() : string {isQuery, concurrent}
Атрибут StudentNumberпредставляет собой константу типа string.После присвоения значение константы изменить нельзя. Если объект student_scheduleиспользуется для того же студента, но для различных периодов времени, то атрибуты Termи StudentScheduleдолжны быть модифицируемыми. Метод scheduleDayOfWeek() принимает вектор курсов (vector)для конкретного дня недели, хранимого в строке Day.Это — защищенная (guarded)операция. Она помещает расписание студента, соответствующее конкретному дню недели, в map-объект StudentSchedule,изменяя тем самым его состояние. Синхронизация, встраиваемая в этот объект, обеспечивается за счет использования мьютексов. Метод studentNumber()имеет два свойства: isQueryи concurrent.Этот метод возвращает константу StudentNumberи безопасен для одновременного доступа. Его вызов не изменяет состояния объекта, поэтому здесь и использовано свойство isQuery.
На диаграмме класса можно отобразить е щ е одно важное свойство атрибутов и операций — их видимость. Свойство видимости описывает, кто может получить доступ к атрибуту или вызвать операцию. Для представления этого свойства (уровня видимости) используется соответствующий символ. Уровни видимости соответствуют спецификаторам доступа, определенным в С++.
Симво л видимости предваряет имя атрибута и л и операции (метода).
Спецификаторы доступа |
Символы видимости |
public |
(+) Об щ ий доступ |
protected |
(#) Доступ имеет сам к л асс и его потомки |
private |
(-) Доступ имеет то л ько сам к л асс |
Организация атрибутов и операций
От того, как будут организованы атрибуты и операции в соответствующих отделениях диаграммы класса, зависит степень успешности использования этого класса. Атрибуты и операции можно упорядочить по алфавиту, уровню доступа или категориям. Как оказалось, алфавитный порядок вряд ли поможет узнать, как могут называться те или иные атрибуты или операции (если документация находится в руках пользователя системы), или какие из них еще не определены (если документация используется в процессе разработки). Упорядочение по уровню доступа зарекомендовало себя гораздо лучше. В этом случае пользователь четко видит, какие атрибуты и операции являются, например, общедоступными (public) или закрытыми (private). Знание перечня защищенных (protected) членов поможет расширить возможности класса или специализировать ero, используя механизм наследования. Такое упорядочение просто реализовать с помощью символов видимости (+, - и #) или C++-спецификаторов доступа (public, private и protected,).
Читать дальше