本次实验覆盖课程第 3、5、6 章的内容,目标是编写具有可复用性和可维护 性的软件,主要使用以下软件构造技术:
⚫ 子类型、泛型、多态、重写、重载
⚫ 继承、代理、组合
⚫ 常见的 OO 设计模式
⚫ 语法驱动的编程、正则表达式
⚫ 基于状态的编程
⚫ API 设计、API 复用 本次实验给定了五个具体应用(径赛方案编排、太阳系行星模拟、原子结构 可视化、个人移动 App 生态系统、个人社交系统),学生不是直接针对五个应用 分别编程实现,而是通过 ADT 和泛型等抽象技术,开发一套可复用的 ADT 及其 实现,充分考虑这些应用之间的相似性和差异性,使 ADT 有更大程度的复用(可 复用性)和更容易面向各种变化(可维护性)
实验环境:
- 系统:windows10,JDK8
- ide:Eclipse IDE for Eclipse Committers 2018-12 (4.10.0)
- 版本管理:git
- 代码托管:Github
在这里给出你的GitHub Lab2仓库的URL地址(Lab2-学号)。
https://github.com/ComputerScienceHIT/Lab3-1170300527.git
请仔细对照实验手册,针对每一项任务,在下面各节中记录你的实验过程、阐述你的设计思路和问题求解思路,可辅之以示意图或关键源代码加以说明(但千万不要把你的源代码全部粘贴过来!)。
首先请列出你要完成的具体应用场景(至少3个,1和2中选一,3必选,4和5中选一,鼓励完成更多的应用场景)。
- Stellar System
- Atom Structure
- Social Network Circle
共性:
- 需要轨道系统中基本存在的对象,包括轨道、中心物体、轨道物体。其中物体都不考虑绝对位置。轨道都为圆形
- 都需要完成的功能有:添加/删除轨道,在某一轨道上添加/删除物体,获得轨道系统的熵值,获得逻辑距离,比较两个同类型轨道系统的差异,检查轨道系统是否合法,可视化
差异:
- 包含的结构不同,行星需要考虑其绝对位置,并且位置会根据时间变化,原子与社交网络则无需考虑
- 具体实现的功能要求也存在差异
根据给出的输入结构写出正则表达式进行匹配,每读入一行将其分别进行匹配,并进行处理
行星系统:
原子系统:
社交网络:
-
- 面向复用的设计:CircularOrbit<L,E>
设计为接口,提取系统中的共有方法
方法 |
作用 |
public CircularOrbit<L,E> concreteCircularOrbit (); |
创建一个空的 CircularOrbit 对象 |
public void setOrbit(Track t); |
增加一条轨道 |
public void removeOrbit(Track t); |
去除一条轨道 |
public void setCenter(L center); |
增加中心点物体 |
public void setObject(E object, Track t); |
向特定轨道上增加一个物体(不考虑物理位置) |
public void readFile(String file); |
从外部文件读取数据构造轨道系统对象 |
public void transit (E object, Track t); |
将 object 从当前所在轨道迁移到轨道 t |