Лекционные материалы (1158642), страница 14
Текст из файла (страница 14)
Ономожет, в частности, включать скорость процессора и объем памяти.Поле планирования (scheduling) процессора содержит описание того,как осуществляется планирование его процессов:• Preemptive (с приоритетом). Высокоприоритетные процессыимеют преимущество перед низкоприоритетными.• Non preemptive (без приоритета). У процессов не имеетсяприоритета. Текущий процесс выполняется до его завершения,после чего начинается следующий.• Cyclic (циклический). Управление передается между процессамипо кругу. Каждому процессу дается определенное время на еговыполнение, затем управление переходит к следующему процессу.• Executive(исполнительный).Существуетнекоторыйвычислительный алгоритм, который и управляет планированиемпроцессов.• Manual (вручную).
Процессы планируются пользователем.Чтобы назначить процессору стереотип:1. Откройте окно спецификации процессора.2. Перейдите на вкладку General.933. Введите стереотип в поле Stereotype.Чтобы ввести характеристики и планирование процессора:1. Откройте окно спецификации процессора.2. Перейдите на вкладку Detail.3. Введите характеристики в поле характеристик.4.
Укажите один из типов планирования.Чтобы показать планирование на диаграмме:1. Щелкните правой кнопкой мыши на процессоре.2. В открывшемся меню выберите пункт Show Scheduling.Чтобы добавить связь на диаграмму:1. На панели инструментов нажмите кнопку Connection.2. Щелкните на узле диаграммы.3. Проведите линию связи к другому узлу.Чтобы назначить связи стереотип:1. Откройте окно спецификации связи.2. Перейдите на вкладку General.3.
Введите стереотип в поле Stereotype (Стереотип).Чтобы добавить процесс:1. Щелкните правой кнопкой мыши на процессоре в браузере.2. В открывшемся меню выберите пункт New > Process.3. Введите имя нового процесса.Чтобы показать процессы на диаграмме:1. Щелкните правой кнопкой мыши на процессоре.2. В открывшемся меню выберите пункт Show Processes.3.6.3. Проектирование классовКлассы анализа преобразуются в проектные классы:• Проектирование граничных классов – зависит от возможностейсреды разработки пользовательского интерфейса (GUI Builder);• Проектирование классов-сущностей – с учетом соображенийпроизводительности (выделение в отдельные классы атрибутовс различной частотой использования);94• Проектирование управляющих классов – удаление классов,реализующих простую передачу информации от граничныхклассов к сущностям;• Идентификация устойчивых (persistent) классов, содержащиххранимую информацию.Обязанности классов, определенные в процессе анализа,преобразуются в операции.
Каждой операции присваивается имя,характеризующее ее результат. Определяется полная сигнатураоперации: operationName(parameter:class,…):returnType. Создается краткоеописание операции, включая смысл всех ее параметров. Определяетсявидимость операции: public, private, protected. Определяется областьдействия (scope) операции: экземпляр или классификатор.Определяются (уточняются) атрибуты классов:• Кроме имени, задается тип и значение(необязательное): attributeName:Type = Default;поумолчанию• Учитываются соглашения по именованию атрибутов, принятыев проекте и языке реализации;• Задается видимость атрибутов: public, private, protected;• При необходимости определяются производные (вычисляемые)атрибуты.Упражнение 12.
Определение атрибутов и операций для классаStudentЧтобы задать тип данных, значение по умолчанию и видимостьатрибута:1. Щелкните правой кнопкой мыши на атрибуте в браузере.2. В открывшемся меню выберите пункт Open Specification.3. Укажите тип данных в раскрывающемся списке типов или введитесобственный тип данных.4. В поле Initial Field (Первоначальное значение) введите значениеатрибута по умолчанию.955.
В поле Export Control выберите видимость атрибута: Public,Protected, Private или Implementation. По умолчанию видимостьвсех атрибутов соответствует Private.<<entity>>Student.- name : string- address : string<<class>> - nextAvailID : int- studentID : int- dateofBirth : Date+ getTuition() : double+ addSchedule(theSchedule : Schedule)+ getSchedule(forSemester : Semester) : Schedule+ deleteSchedule(forSemester : Semester)+ hasPrerequisites(forCourseOffering : CourseOffering) : boolean# passed(theCourseOffering : CourseOffering) : boolean<<class>> + getNextAvailID() : int+ getStudentID() : int+ getName() : string+ getAddress() : stringРис.
3.25. Класс Student с полностью определенными операциями иатрибутамиЧтобы изменить нотацию для обозначения видимости:1. В меню модели выберите пункт Tools > Options.2. Перейдите на вкладку Notation.3. Пометьте контрольный переключатель Visibility as Icons, чтобыиспользовать нотацию Rose, или снимите пометку, чтобыиспользовать нотацию UML.Примечание. Изменение значения этого параметра приведет к смененотации только для новых диаграмм и не затронет уже существующиедиаграммы.96Чтобы задать тип возвращаемого значения, стереотип и видимостьоперации:1. Щелкните правой кнопкой мыши на операции в браузере.2.
Откройте окно спецификации класса этой операции.3. Укажите тип возвращаемого значения в раскрывающемся спискеили введите свой тип.4. Укажите стереотип в соответствующем раскрывающемся спискеили введите новый.5. В поле Export Control укажите значение видимости операции:Public, Protected, Private или Implementation. По умолчаниювидимость всех операций установлена в public.Чтобы добавить к операции аргумент:1.
Откройте окно спецификации операции.2. Перейдите на вкладку Detail.3. Щелкните правой кнопкой мыши в области аргументов,в открывшемся меню выберите Insert.4. Введите имя аргумента.5. Щелкните на колонке Data type и введите туда тип данныхаргумента.6. Если надо, щелкните на колонке default и введите значениеаргумента по умолчанию.Определение состояний для классов моделируется с помощьюдиаграмм состояний.Диаграммы состояний создаются для описания объектов с высокимуровнем динамического поведения.В качестве примера рассмотрим поведение объекта классаCourseOffering. Он может находиться в открытом состоянии (возможнодобавление нового студента) или в закрытом состоянии (максимальноеколичество студентов уже записалось на курс).
Таким образом, конкретноесостояние зависит от количества студентов, связанных с объектомCourseOffering. Рассматривая каждый вариант использования, можно97выделить еще два состояния: инициализация (до начала регистрациистудентов на курс) и отмена (курс исключается из расписания).Initializationdo/ initialize course offeringdataadd student / set count=0 ^CourseRoster.create[ count = 10 ]OpenCloseddo/ Finalize courseentry/ Register studentexit/ ^CourseRoster.AddStudent(Student)cancelcanceladd student[ count < 10 ]^CourseRoster.deleteCanceledРис. 3.26. Диаграмма состояний для класса CourseOfferingУпражнение 13. Создание диаграммы состояний для классаCourseOfferingДля создания диаграммы состояний:1. Щелкните правой кнопкой мыши в браузере на нужном классе.2.
В открывшемся меню выберите пункт New > Statechart Diagram.Чтобы добавить состояние:1. На панели инструментов нажмите кнопку State2. Щелкните мышью на диаграмме состояний в том месте, куда хотитеего поместить.Все элементы состояния можно добавить с помощью вкладки Detailокна спецификации состояния.Чтобы добавить деятельность:1. Откройте окно спецификации требуемого состояния.2. Перейдите на вкладку Detail.3. Щелкните правой кнопкой мыши на окне Actions.4. В открывшемся меню выберите пункт Insert.5. Дважды щелкните на новом действии.6. Введите действие в поле Actions.7.
В окне When укажите Do, чтобы сделать новое действиедеятельностью.98Чтобы добавить входное действие, в окне When укажите On Entry.Чтобы добавить выходное действие, в окне When укажите On Exit.Чтобы послать событие:1. Откройте окно спецификации требуемого состояния.2. Перейдите на вкладку Detail.3. Щелкните правой кнопкой мыши на окне Actions.4. В открывшемся меню выберите пункт Insert.5. Дважды щелкните на новом действии.6.
В качестве типа действия укажите Send Event.7. В соответствующие поля введите событие (event), аргументы(arguments) и целевой объект (Target).Чтобы добавить переход:1. Нажмите кнопку Transition панели инструментов.2. Щелкните мышью на состоянии, откуда осуществляется переход.3. Проведите линию перехода до того состояния, где он завершается.Чтобы добавить рефлексивный переход:1. Нажмите кнопку Transition to Self панели инструментов.2. Щелкните на том состоянии, где осуществляется рефлексивныйпереход.Чтобы добавить событие, его аргументы, ограждающее условие идействие:1.
Дважды щелкните на переходе, чтобы открыть окно егоспецификации.2. Перейдите на вкладку General.3. Введите событие в поле Event.4. Введите аргументы в поле Arguments.5. Введите ограждающее условие в поле Condition.6. Введите действие в поле Action.Чтобы отправить событие:1. Дважды щелкните на переходе, чтобы открыть окно егоспецификации.992.3.4.5.Перейдите на вкладку Detail.Введите событие в поле Send Event.Введите аргументы в поле Send Arguments.Задайте цель в поле Send Target.Для указания начального или конечного состояния:1. На панели инструментов нажмите кнопку Start State или End State.2. Щелкните мышью на диаграмме состояний в том месте, кудахотите поместить состояние.Уточнение ассоциаций: некоторые ассоциации (семантические,структурные, устойчивые связи по данным) могут быть преобразованыв зависимости (неструктурные, временные связи, отражают видимость),а агрегации – в композиции.<<control>>RegistrationController(from Registration)+ submitSchedule()+ saveSchedule()+ getCourseOfferings() : CourseOfferingList+ getCurrentSchedule(forStudent : Student, forSemester :Semester) : Schedule+ deleteCurrentSchedule()<<class>> + new(forStudent : string)+ getStudent(withID : string) : Student+currentSchedule0..10..1<<entity>>Schedule(from UniversityArtifacts)0..n0..n0..1+registrant<<Interface>>ICourseCatalogSystem(from External SystemInterfaces)0..n0..11<<entity>>Student(from University Artifacts)+ getTuition() : double+ addSchedule(theSchedule : Schedule)+ getSchedule(forSemester: Semester) : Schedule+ deleteSchedule(forSemester: Semester)boolean+ hasPrerequisites(forCourseOffering : CourseOffering) :boolean# passed(theCourseOffering : CourseOffering) : boolean<<class>> + getNextAvailID() : int+ getStudentID():int+ getName() : string+ getAddress(): string+alternateCourses0..2+primaryCourses0..4<<entity>>CourseOffering(from UniversityArtifacts)Рис.