静态模型和动态模型设计
在顺序图中,所有的系统都被当作黑盒子看待,顺序图的重点是参与者发起的跨越系统边界的事件,系统行为描述系统做什么,而不解释系统怎么做,系统顺序图是对系统行为所做的描述的一部分。链接用来在通信图中关联对象,链接的目的是让消息在不同系统对象之间的传递,链接以连接两个对象的单一线表示,消息是通信图中对象与对象之间的通信的方式。与顺序图类似,通信图也是描述类(对象)之间的关联及其彼此之间的消息通信,但顺序图
1. 实验目的
掌握面向对象分析中静态模型设计和动态模型设计的过程及注意事项
学会根据功能模型的用例分析构成的各种类以及类之间的关系。
根据功能模型的用例分析以及静态分析模型进一步分析动态结构和对象之间的交互,从而形成动态模型构建。
2. 实验环境
软件平台:Microsoft Windows 操作系统,
软件工具:Microsoft VISIO;Star UML;EnterPrise Architect等
3. 实验原理
1)静态模型
静态分析的主要任务是建立反映对象静态结构的分析类图,即确定分析类、类的属性以及类之间的关系。一般来说类有三种:实体类、控制类和边界类。
实体类:它是系统表示客观事物的抽象元素。实体类一般来源于业务分析中所确定的实体,一般都对应着在业务领域中的某个客观事物,或是具有较稳定信息内容的系统元素。
控制类:是描述系统对其他对象协调控制、处理逻辑运算的抽象要素。一般来说,一个较复杂的用例一般都需要一个或多个控制类来协调系统中的各个对象的行为。
边界类:它是描述系统与参与者之间交互的抽象元素。边界类只对系统与参与者之间的交互进行建模,并不描述交互的具体内容及交互界面的具体形式。
类间关系:
继承 实线+空心三角 继承父类
实现 虚线+空心三角 实现接口
组合 实线+实心菱形 成员变量
聚合 实线+空心菱形 成员变量
关联 实线+箭头 成员变量
依赖 虚线+箭头 局部变量、方法的参数或者对静态方法的调用
在系统设计阶段,类图直接引导面向对象的编程语言实现类。类图是生成代码的核心要图。如果类图设计得好,整个系统的代码框架可以有类图自动生成,大大简化了系统编码所耗费的时间。因此,我们进一步:利用类图,使得代码的编写编程一种自动化工作,而整个信息系统的建设中心都可以集中到分析设计上来。
2)动态模型
动态模型表示瞬时的、行为化的系统的控制性质,它规定了对象模型中的对象的合法变化序列。顺序图用来表示在用例的一个特定场景中,外部参与者产生的事件,事件的顺序及系统之间的交互事项。通信图描述对象之间的关联及它们彼此之间的消息通信。顺序图强调消息发送的时间顺序,而通信图则强调接收和发送消息的对象的组织结构。活动图用来描述过程(业务过程、工作流、事件流等)中活动及其迁移,活动图是面向对象的流程图。
顺序图表示类(对象)按时间顺序的消息交换过程,体现出系统用例的行为。顺序图是用来显示参与者如何采用若干顺序步骤与系统对象交互的模型。
系统顺序图应看作是用例模型的一部分,是用例中交互的可视化。在顺序图中,所有的系统都被当作黑盒子看待,顺序图的重点是参与者发起的跨越系统边界的事件,系统行为描述系统做什么,而不解释系统怎么做,系统顺序图是对系统行为所做的描述的一部分。系统事件是由某个参与者发起的指向某个系统的输入事件,一个事件的发生能够触发一个响应操作的执行,系统操作是一个系统为响应一个事件而执行的一个操作。
与顺序图类似,通信图也是描述类(对象)之间的关联及其彼此之间的消息通信,但顺序图强调交互的时间次序,而通信图强调交互的空间结构,这两者在语义上是等价的,二者可以相互转换,不会丢失信息。
通信图的构成主要包括对象、链接和消息3部分,在通信图中还可以使用对象角色和类角色代替对象;链接用来在通信图中关联对象,链接的目的是让消息在不同系统对象之间的传递,链接以连接两个对象的单一线表示,消息是通信图中对象与对象之间的通信的方式。
4. 实验步骤
(1) 以实验一所构建的用例模型以及几个重要用例的基本事件流和备选事件流为基础,建立系统的总类图初稿;
(2) 根据这几个重要用例的基本事件流和备选事件流,设计界面类、控制类和实体类;
(3)为其他用例设计界面类、控制类和实体类;
(4)设计类之间的关联,建立完整的类图
(5)列出每个类的主要属性和方法
(6)根据已经构建的用例模型以及静态模型,选择两个用例进行顺序图的构建。
(7)通信图与顺序图是一一对应的,请利用工具根据步骤6所绘制的顺序图绘制对应的通信图。
(8)撰写实验报告
5. 实验选题
某学院教务处教学事务现由手工管理,效率低、易出错、耗费人力。教务处希望设计一个实用的教学事务管理系统,完成学生的学籍管理、报到注册、课程的选择、成绩登入、各种通知单的打印和报表的输出等。
(1) 以实验一所构建的用例模型以及几个重要用例的基本事件流和备选事件流为基础,建立系统的总类图初稿;
- 根据这几个重要用例的基本事件流和备选事件流,设计界面类、控制类和实体类;
实体类
Student:继承自 User
属性: studentId, studentName, major
Teacher:继承自 User
属性: teacherId, teacherName, courseList
Admin:继承自 User
属性: adminID, adminName
Course
属性: courseId, courseName, teacher, studentEnrollments,courseList
方法: enrollStudent(), unenrollStudent(), getEnrolledStudents()
Report
属性: reportId, title, content
控制类
StudentController
方法: queryCourses(), queryGrades()
TeacherController
方法: enterGrades(), queryCourses(), queryGrades()
AdminController
方法: addStudentInformation(), modifyStudentInformation(), deleteStudentInformation(), generateReport(), printReport()
CourseController
方法: enrollStudent(), unenrollStudent(), getEnrolledStudents(),setGrade()
ReportController
方法: generateReport(), printReport()
界面类
StudentView
显示学生界面,提供选课、退课、查询成绩等功能
TeacherView
显示教师界面,提供录入成绩、查询课程等功能
AdminView
显示管理员界面,提供添加、修改、删除学生信息,生成和打印报表等功能
CourseView
显示课程详情,包括学生选课列表和成绩录入界面
ReportView
显示报表界面,提供打印功能
- 为其他用例设计界面类、控制类和实体类;
实体类
User
属性: userId, userName, password
Enrollment
属性: student, course, grade
Notification
属性: notificationId, title, content, recipient, sentDate
Grade
属性:student,course,grade
方法:getGrade()
控制类
UserController
方法: login(), logout()
EnrollmentController
方法: enrollCourse(), unenrollCourse(),setGrade()
NotificationController
方法: sendNotification(), markNotificationAsRead()
界面类
LoginView
显示登录表单,处理用户输入
EnrollmentView
显示选课界面,可选不同年级
NotificationView
显示通知列表,提供标记为已读的功能。
(4)设计类之间的关联,建立完整的类图
(5)列出每个类的主要属性和方法
User (用户)
属性:
userId: String(用户的唯一标识符)
userName: String(用户名)
password: String(密码,通常加密存储)
方法:
login(): void (用户登录验证)
logout(): void (用户登出)
Student (学生)
属性:
studentId: String(学号)
studentName: String(学生姓名)
major: String(专业)
方法:
queryCourses(): void (查询学生的课程)
queryGrades(): void (查询学生成绩)
Teacher (教师)
属性:
teacherId: String(教师号)
teacherName: String(教师姓名)
courseList: Course[](教师教授的课程列表)
方法:
enterGrades(): void (录入学生成绩)
queryCourses(): void (查询教师教授的课程)
queryGrades(): void (查询教师录入的所有成绩(可能需要指定课程或学生))
Admin (管理员)
属性:
adminID: String(管理员的唯一标识符)
adminName:String (管理员姓名)
方法:
addStudentInformation(): void (添加学生信息)
modifyStudentInformation(): void (修改学生信息)
deleteStudentInformation():void (删除学生信息)
generateRepor()t:void (生成指定类型的报表)
printReport():void (打印报表)
Course (课程)
属性:
courseId: String(课程号)
courseName: String(课程名)
teacher: Teacher(教授该课程的教师)
studentEnrollments: Enrollment[](学生选课列表)
courseList:String (课表)
方法:
enrollStudent():void(学生选课)
unenrollStudent():void (学生退课)
getEnrolledStudents():void (获取已选课的学生列表)
Enrollment (选课)
属性:
student: Student(选课的学生)
course: Course(选课的课程)
grade: String(年级)
方法:
enrollCourse(): void (学生选课)
unenrollCourse(): void (学生退课)
setGrade():void (设置年级)
Grade(分数)
属性:
student: Student(学生)
course: Course(课程)
grade: Double(成绩)
方法:
getGrade():void (获取成绩)
Notification (通知)
属性:
notificationId: String(通知的唯一标识符)
title: String(通知标题)
content: String(通知内容)
recipient: User(接收通知的用户)
sentDate: Date(发送日期)
方法:
send():void (发送通知)
markAsRead():void (标记通知为已读)
Report (报表)
属性:
reportId: String(报表的唯一标识符)
title: String(报表标题)
content: String(报表内容,可能是数据集合、文件路径或其他格式的数据)
方法
generate():void (生成报表数据)
print():void (打印报表)
- 根据已经构建的用例模型以及静态模型,选择两个用例进行顺序图的构建。
顺序图1:学生登录
顺序图2:查看课程
(7)通信图与顺序图是一一对应的,请利用工具根据步骤6所绘制的顺序图绘制对应的通信图。
通信图1:
通信图2:
更多推荐
所有评论(0)