MajorAgent Создает список имеющихся основных курсов
MinorAgent Создает список имеющихся непрофилирующих курсов
FilterAgent Фильтрует список курсов и генерирует список возможных курсов
ScheduleAgent Генерирует несколько вариантов расписаний на основе списка возможных курсов
Объект schedule_of_courses содержит все и м ею щ иеся курсы.
Объекты blackboard и schedule_of_courses доступны при параллельном к ним обращении со стороны нескольких агентов. В данном варианте сотрудничества оба эти объекта видимы для всех агентов. А г енты MajorAgent, MinorAgent, FilterAgent и ScheduleAgent вызывают методы объекта blackboard. Агенты MajorAgent и MinorAgent вызывают методы объекта schedule_of_courses. При этом а г енты Maj orAgent и MinorAgent имеют анало г ичную последовательность обращений к объектам blackboard и schedule_of_courses.
MajorAgentl: currentDegreePlan()
MajorAgent2 : coursesTaken()
MajorAgent3 : scheduleOfCourses ()
MajorAgent4 : suggestionsForMajor ()
MinorAgentl:currentDegreePlan()
MinorAgent2:coursesTaken()
MinorAgent3:scheduleOfCourses()
MinorAgent4:suggestionsForMinor()
Как видите, к имени активного объекта, который вызывает эти методы, присоединяется порядковый номер. Оба объекта параллельно вызывают методы объектов blackboard и schedule_of_courses. Все эти методы параллельно синхронизированы и защищены от одновременного вызова. Методы masterList() и possibleCourses() имеют свойство guarded. Одни объекты могут модифицировать содержимое курсов, а другие— считывать его. Поэтому методы masterList () и possibleCourses () защищены разрешением только последовательного к ним доступа (EREW).
Последовательность передачи сообщений между объектами
В то время как в диаграмме сотрудничества основное внимание уделяется структурной организации и взаимодействию объектов, совместно выполняющих некоторую за-далу или реализующих прецедент (вариант использования системы), в диаграмме последовательностей акцент ставится на временном упорядочении вызовов методов или процелур, составляющих данную задалу или прецедент. В диаграмме последовательностей имя каждого объекта или консгрукции отображается в собственном прямоугольнике. Все прямоугольники размещаются в верхней части диаграммы, вдоль ее оси X. В диаграмму следует включать только основных исполнителей прецедента и наиболее важные функции, в противном случае диаграмма будет перенасыщена деталями и утратит свою полезность. Объекты упорядочиваются слева направо, начинал с объекта или про-целуры, которая является инициатором действия для большинства второстепенных объектов или процедур. Вызовы функций отображаются вдоль оси Y сверху вниз в порядке возрастания значения времени. Под каждым прямоугольником наносятся вертикальные линии, представляющие «жизненные пути» (линии жизни) объектов. Стрелки со сплошной заливкой наконечника, направленные от линии жизни одного объекта клинии жизни другого, обозначают вызовы функций или методов (причем такая стрелка всегда направлена от инициатора вызова). Стрелки с «реберными» наконечниками имеют обратное направление (т.е. к инициатору вызова), обозначая возврат из функции или метода. Каждый вызов функции помечается ее именем. Помимо имени, при необходимости отображается информация об аргументах и условиях вызова, например:
[list != empty]
getResults()
Функция или метод не выполнится, если заданное условие не будет истинны м. Методы, которые должны быть вызваны несколько раз (напри м ер, при считывании значений из структуры), предваряются признако м итерации (*).
На рис. 10.10 показана диагра мм а последовательностей для объектов систе м ы составления расписания. Чтобы не перегружать эту де м онстрационную диагра мм у, количество объектов в ней ограничено лишь тремя. В диаграммах последовательностей для параллельных объектов или процедур используются символы активизации. Си м вол активизации представляет собой прямоугольник, отображаемый на линии жизни объекта. Наличие символа активизации означает активность объекта или процедуры. Символы активизации используются в случае, когда объект обращается к другому объекту без блокирования. Тем самым становится понятно, что объект или процедура продолжает выполняться или быть активной. На рис. 10.10 показано, что объект blackboard всегда активен. Он порождает объект schedule _agent и нс блокируется. Объект schedule_agent вызывает метод blackboard.masterList() и ожидает получения от него списка курсов. Как упоминалось выше, возвра щ ение метода обозначается стрелкой с «реберным» наконечником. Метод schedule_agent затем вызывает один из собственньвс методов createSchedules (). Для обозначения вызова объектом одного из собственных методов используется специальный символ, состоя щ ий из символа активизации и стрелки вызова. Символ активизации при этом накладывается на уже имеющийся символ активизации. Линия выходит из исходного символа активизации, а ее стрелкауказывает надополнительный символ. После передачи объектом schedule_agent результатов своей работы путем вызова метода blaekboard.possibleSchedule () объект blackboard аннулирует его. Аннулирование обозначается большим символом «X» в конце линии жизни объекта. Стрелка вызова метода, исходящал из объекта blackboard и указываю щ ая на символ «X», означает, что инициатором аннулирования является объект blackboard. Объект blackboard затем порождает объект filter_agent и опять-таки не блокируется. Объект filter_agent вызывает метод blackboard.possibleSchedules () и ожидает получения от него вариантов расписаний. Объект filter_agent после этого вызывает один из собственных методов filterCourses (). После передачи результатов объект filter_agent ликвидирует себя. Объект blackboard последовательно вызывает собственные методы organizeSolution () и updateRecords (), а затем также ликвидируется.
Деятельность объектов
Язык UML можно использовать для моделирования видов деятельности объектов — участников конкретной операции или прецедента. В этом случае строится диаграмма (видов) деятельности, которая представляет собой блок-схему, отражающую последовательные и параллельные действия (или виды деятельности) объектов, принимаю щ их участие в выполнении конкретной задачи. На этой диаграм м е с по м о щ ью стрелок указывается направление передачи управления для соответствую щ их видов деятельности. В то вре м я как в диагра мм ах сотрудничества основное внимание уделяется передаче управления от объекта к объекту, в диагра м мах последовательностей — временному упорядочению потоков выполнения, в диаграммах деятельности акцент ставится на передаче управления от одного действия (или вида деятельности) к другому. В результате действия (или вида деятельности) изменяется состояние объекта или возвра щ ается некоторое значение. Содержи м ое действия (или вида деятельности) называется состоянием действия (или вида деятельности). Состояние объекта представляется в это м случае как конкретный м о м ент в потоке выполнения.
Рис. 10.10. Диаграмма последовательностей некоторых объектов системы составления расписаний