软构实验(三)博客

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AAGBF8Yb-1625403535792)(media/b7c1f747a870edf8b0db7af7453bb908.jpeg)]

2021年春季学期
计算学部《软件构造》课程

**Lab 3实验报告
**

姓名 田轩
学号 1190200924
班号 1903012
电子邮件 1585315932@qq.com
手机号码 13609170381

目录

1 实验目标概述 1

2 实验环境配置 1

3 实验过程 1

3.1 待开发的三个应用场景 1

3.2 面向可复用性和可维护性的设计:IntervalSet<L> 1

3.2.1 IntervalSet<L>的共性操作 1

3.2.2 局部共性特征的设计方案 2

3.2.3
面向各应用的IntervalSet子类型设计(个性化特征的设计方案) 2

3.3 面向可复用性和可维护性的设计:MultiIntervalSet<L> 2

3.3.1 MultiIntervalSet<L>的共性操作 2

3.3.2 局部共性特征的设计方案 2

3.3.3
面向各应用的MultiIntervalSet子类型设计(个性化特征的设计方案) 2

3.4 面向复用的设计:L 2

3.5 可复用API设计 2

3.5.1 计算相似度 2

3.5.2 计算时间冲突比例 2

3.5.3 计算空闲时间比例 2

3.6 应用设计与开发 2

3.6.1 排班管理系统 3

3.6.2 操作系统的进程调度管理系统 3

3.6.3 课表管理系统 3

3.7 基于语法的数据读入 3

3.8 应对面临的新变化 3

3.8.1 变化1 3

3.8.2 变化2 3

3.9 Git仓库结构 3

4 实验进度记录 3

5 实验过程中遇到的困难与解决途径 4

6 实验过程中收获的经验、教训、感想 4

6.1 实验过程中收获的经验和教训 4

6.2 针对以下方面的感受 4

实验目标概述

本次实验覆盖课程第 4-11 讲的内容,目标是编写具有可复用性和可维护性的
软件,主要使用以下软件构造技术:

⚫ 子类型、泛型、多态、重写、重载

⚫ 继承、代理、组合

⚫ 语法驱动的编程、正则表达式

⚫ API 设计、API 复用

本次实验给定了三个具体应用(值班表管理、操作系统进程调度管理、大学
课表管理),学生不是直接针对每个应用分别编程实现,而是通过ADT和泛型等
抽象技术,开发一套可复用的ADT及其实现,充分考虑这些应用之间的相似性
和差异性,使ADT有更大程度的复用(可复用性)和更容易面向各种变化(可维护性)。

实验环境配置

在这里给出你的GitHub Lab3仓库的URL地址(Lab3-学号)。

实验过程

请仔细对照实验手册,针对每一项任务,在下面各节中记录你的实验过程、阐述你的设计思路和问题求解思路,可辅之以示意图或关键源代码加以说明(但千万不要把你的源代码全部粘贴过来!)。

待开发的三个应用场景

简要介绍三个应用。

  1. 值班表管理(DutyRoster): 一个单位有 n 个员工,在某个时间段内(例 如寒假 1
    月 10 日到 3 月 6 日期间),每天只能安排唯一一个员工在单位
    值班,且不能出现某天无人值班的情况;每个员工若被安排值班 m 天
    (m>1),那么需要安排在连续的 m 天内。值班表内需要记录员工的名
    字、职位、手机号码,以便于外界联系值班员。

  2. 操作系统进程调度管理(ProcessSchedule):考虑计算机上有一个单核
    CPU,多个进程被操作系统创建出来,它们被调度在 CPU 上执行,由操
    作系统决定在各个时段内执行哪个线程。操作系统可挂起某个正在执行
    的进程,在后续时刻可以恢复执行被挂起的进程。可知:每个时间只能
    有一个进程在执行,其他进程处于休眠状态;一个进程的执行被分为多
    个时间段;在特定时刻,CPU 可以“闲置”,意即操作系统没有调度执行
    任何进程;操作系统对进程的调度无规律,可看作是随机调度。

  3. 大学课表管理(CourseSchedule):看一下你自己的课表,每周一上午 8:00-10:00
    和每周三上午 8:00-10:00 在正心楼 11
    教室上“软件构造”课程。课程需要特定的教室和特定的教师。在本应用中,我们对实际的课
    表进行简化:针对某个班级,假设其各周的课表都是完全一样的(意即
    同样的课程安排将以“周”为单位进行周期性的重复,直到学期结束);
    一门课程每周可以出现 1 次,也可以安排多次(例如每周一和周三的“软
    件构造”课)且由同一位教师承担并在同样的教室进行;允许课表中有
    空白时间段(未安排任何课程);考虑到不同学生的选课情况不同,同一
    个时间段内可以安排不同的课程(例如周一上午 1-2 节的计算方法和软
    件构造);一位教师也可以承担课表中的多门课程。

面向可复用性和可维护性的设计:IntervalSet<L>

该节是本实验的核心部分。

IntervalSet<L>的共性操作

  1. empty()方法,创建一个空对象并返回。具体实现为new
    一个Interval的实现类CommomIntervalSet、,赋值给一个Interval类型,并返回。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Jt5R7WsP-1625403535798)(media/30d2e297f9509215781cff78504981c5.png)]

  2. insert方法,向Interset对象中插入一个时间段并标记标签。需要传递的参数为该时间段的开始时间long
    start,结束时间long end,以及对应的标签L label。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f9LCmQHe-1625403535801)(media/29dbc15cdb4362dc3f6568e0e87cbde4.png)]

  3. labels方法,用于获得当前对象中的所有标签的集合。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AzkMjZV1-1625403535804)(media/7f93da135fd22b8f9c26b72b75d6b6e5.png)]

  4. remove方法,从当前对象中移除某个标签所关联的时间段。所需传递的参数为待移除的标签L
    label。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ErPlP1iV-1625403535807)(media/9932a5c7ca0a97bd6379b8fe4f83caa1.png)]

  5. start方法,返回指定标签对应的时间段的开始时间。所需传递的参数为目标标签L
    label。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sBrmgSOy-1625403535809)(media/9419679e10ed4f7ec859f10bf50036c7.png)]

  6. end方法,返回指定标签对应的时间段的结束时间。所需传递的参数为目标标签L
    label。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZHknBQ0I-1625403535811)(media/4c43a1526106c300cacb5197f208112d.png)]

  7. BlankCheck方法,检查当前对象是否存在空白时间段。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uE4poujJ-1625403535813)(media/7960671fc120de28cb7d9d74a062b7e6.png)]

  8. RepeatCheck方法,检查当前对象是否存在重叠时间段。由装饰类Decorator定义。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sWPYGGwF-1625403535815)(media/e4ab6dd28c64c2bb0adeb812105faa30.png)]

局部共性特征的设计方案

  1. 通过IsBlankCheck<L>类,实现装饰类中定义的BlankCheck方法。其具体实现如下。

    1. 遍历标签集合labels中的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值