【排课小工具】面向对象分析探索领域模型

news/2024/10/15 12:35:18

用户向系统中输入课表模板、课程信息以及教师责任信息,系统以某种格式输出每个班级的课表。该用例中的主要参与者包括用户以及系统,除了上述两个主要参与者外,我们从该用例中抽取出可能有价值的名词:课表模板、课程、教师职责、班级以及课表。现在我们只知道下面图示的关系:

用例图_1

在上一篇的界面需求描述部分,我们已经确定了用户输入数据的媒介以及格式,课表模板描述了一个班级的课表中那些位置是固定不变的,那些是可以被分配的,不妨留意一下这里的位置这一名词,位置是由两个信息决定的,本别是星期以及节次,可以观察到,这样一个个位置是课表的基本组成元素,为了方便接下来的表述,我将这样一个个位置称作节点,每个节点都包含两个属性:星期和节次。联系现实生活,如果每个节点仅仅包含星期和节次这两个属性,该节点在某个具体的班级课表中将拥有唯一的位置,而当将该节点放在整个年级的课表中看,该节点就不再具有唯一性,其余的每个班级都会出现于此节点属性相同的节点,所以,如果我们要确定一个唯一的节点,就需要给每个节点添加一个班级属性。节点本身包含了时空两个维度的信息,在时间上包括星期和节次,在空间上是指班级。到此为止,我们发掘出一个可能具有极大价值的对象——节点。

用户输入的课程信息表包括课程名、周次(该课程每周的上课次数)以及优先级(该课程的排课优先级)这三个重要的信息,这样我们就可以初步确定了课程这一对象以及其属性。另外还有一些隐含信息。在课程集合里,所有课程对象的周次属性的值的累加和与前面提到的课表模板中可分配的节点的总数存在关系,即每个班级中可分配的节点的总数等于所有课程周次属性值的累加和。每个课程对象都包含优先级属性,这意味着这个课表集合可以根据某种方式变成有序集合,这与前文的分级填充功能需求息息相关。

接下来我们再看用户输入的第三张表——教师职责信息表。该表描述了每个教师应该在哪个班级中承担哪一个学科的教师身份,上过公立小学的都知道,几乎每个小学教师都承担着多重角色,比如教师A的主要教学科目是数学,但他同时也是这个班级的科学老师,甚至是体育老师。通过这张表我们可以抽离出教师这一对象,该对象拥有的属性包括两个集合,分别是班级集合以及科目集合,这代表每个教师教授多门科目同时在多个班级授课,这种结构不太讨人喜欢。

通过上面的分析,我们发掘出三个可能具有极大价值的对象:

除此以外还有一些不太被关注的名词,包括班级、课表、职责……另外在上文中并没有谈及对象之间的交互动作,自然也就无法形成用例图。当用户将以上数据输入系统后,用户就完全失去了系统的控制权,接下来的一切动作都是系统内的动作,具体是什么动作取决于排课的算法以及领域分析过程中确定的具有行为的对象。

为了发掘更多具有潜在价值的对象,我们将视角转向功能需求上。需求一(无时间冲突)描述了在某一时刻(同一天的同一节次)一个教师不能被分配到两个或两个以上不同的班级。该需求涉及到的对象包括节点和教师。这句话的含义是一个节点只能容纳一个教师,而不是容纳一个教师集合。我们可以把教师作为节点的其中一个属性。需求二(分级填充)主要强调课程的优先级这一属性在排课过程中的实际意义。需求三(完整性检测)强调课程的周次这一属性的实际意义。需求四(非连续性分配)强调同一天内、同一个班级中同一个课程的分配情况。需求五(均匀分配)强调同一周内、同一个班级中同一个课程的分配情况,这一需求似乎应该和上一个需求合并在一起。从以上需求中似乎没有发现什么有价值的对象。

分析到现在,我甚至有些怀疑采用面向对象的方式处理这个问题是否合适?到目前为止我都没有将上述对象有效的关联在一起,他们之间的关系依旧是模糊的。或许在接下来的设计阶段会发掘出更有价值的结构吧,到这里,我要结束这篇随笔了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/26503.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

【Qt 专栏】Qt Creator 的 git 配置 上传到gitee

1.进入到Qt项目文件夹内,打开 “Git Bash Here” 2.初始化,在“Git Bash Here”中输入 git init 3.加入所有文件,在“Git Bash Here”中输入 git add . (需要注意,git add 后面还有一个点) 4.添加备注,git commit -m "备份" 5.推送本地仓库到gitee(需要事…

报错“Please indicate a valid Swagger or OpenAPI version field”

报错“Please indicate a valid Swagger or OpenAPI version field” 报错信息Please indicate a valid Swagger or OpenAPI version field. Supported version fields are swagger: "2.0" and those that match openapi: 3.0.n (for example, openapi: 3.0.0). 原因…

C++重写

数组 DiscoveredTileIndexed 和 DiscoveredTileSortingCosts 这两个数组是用来存储遍历的方格的,DiscoveredTileSortingCosts存储的是每个方格的消耗,DiscoveredTileIndexed存储的是每个方格的位置即(x,y)。 DiscoveredTileSortingCosts中的消耗和DiscoveredTileIndexed位置是…

【网络知识系列】-- 换个角度理解计算机网络

换个角度理解计算机网络,搭建计网知识框架 所谓换个角度,就是从三层物理设备(物理层、数据链路层、网络层)开始,串联起整个网络的工作原理 可能有些小伙伴看见物理设备天生就犯困,反手就准备关闭文章,且慢!本文只是简单的介绍这几个设备的功能,并不会涉及复杂的底层硬…

C#学习笔记-字段、属性、索引器

字段字段表示与对象或者类型(类或结构体)关联的变量(成员变量),为对象或类型存储数据。与对象关联的字段称为“实例字段”,隶属于某个对象。与类型关联的字段称为“静态字段”,表示某一个类型当前的状态。静态字段使用 static 关键字修饰。字段在没有显示初始化的情况下…

力扣-203. 移除链表元素

1.题目 题目地址(203. 移除链表元素 - 力扣(LeetCode)) https://leetcode.cn/problems/remove-linked-list-elements/ 题目描述 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。示例 1:输入:head = [1,2…

网络接收全流程

网卡简介 网卡是一块通信硬件。属于数据链路层。用户可以通过电缆或无线相互连接。每一个网卡都有一个独一无二的MAC地址(48位),它被写在卡上的一块ROM中。IEEE负责为网卡销售商分配唯一的MAC地址。 可以在终端运行sudo lshw -C network来查看网卡型号 可以在/lib/modules/$(u…

《痞子衡嵌入式半月刊》 第 99 期

痞子衡嵌入式半月刊: 第 99 期这里分享嵌入式领域有用有趣的项目/工具以及一些热点新闻,农历年分二十四节气,希望在每个交节之日准时发布一期。 本期刊是开源项目(GitHub: JayHeng/pzh-mcu-bi-weekly),欢迎提交 issue,投稿或推荐你知道的嵌入式那些事儿。 上期回顾 :《…