目标是编写具有可复用性和可维护性的软件,主要使用以下软件构造技术:
子类型、泛型、多态、重写、重载
继承、代理、组合
常见的 OO 设计模式
语法驱动的编程、正则表达式
基于状态的编程
API 设计、API 复用
设计并实现一个抽象数据类型 CircularOrbit,对现实中的各类具备“具有一个圆心/中心点、围绕圆心的多条环路/轨道、多个物体分布在圆心和不同环路上”特征的事物进行抽象,并在具体应用中使用它。在设计该 ADT 时,对其进行泛型化,考虑中心点物体的不同类型、各环路上物体的不同类型,从而使其抽象能力更强、适应现实中不同情况需求的能力更强。
TrackGame
AtomStructure
SocialNetworkCircle
不同:
trackgame需要分组,甚至调换分组,其他的不需要,
AtomStructure轨道上物体没什么差异
SocialNetworkCircle包含关系
相同:
他们都可构成轨道系统,
添加/删除轨道,在某一轨道上添加/删除物体,获得轨道系统的熵值,
并可用MAP来进行可视化
3.1基于语法的图数据输入
利用正则表达式读取文件中的信息,并调用构造函数
3.2面向复用的设计:CircularOrbit
设计新的接口 CircularOrbit<L,E>,其中 L 和 E 分别代表多轨道系统的中心点物体类型和轨道物体的类型。
部分内容如下
void addtrack();
void deletetrack(int i);
void addcenter(L item);
void addobject(int i,E x);
void deleteobject(int i,E x);
void addrelation1();
void addrelation2();
void readfile(File corpus) throws IOException;
进而,设计一个类 ConcreteCircularOrbit 来实现它。
ConcreteCircularOrbit 类中,实现 CircularOrbit 中的所有方法。
从 ConcreteCircularOrbit 派生出面向应用的类,分别是:
TrackGame
AtomStructure
SocialNetworkCircle
3.3面向复用的设计:Track
记录轨道编号和半径
3.4面向复用的设计:CentralObject
实现 CircularOrbit中的 L,即表征中心点物体的类 CentralObject。
根据实验要求完成 L 的具体类的设计和实现
原子核和人
3.5面向复用的设计:PhysicalObject
实现 ConcreteCircularOrbit<L,E>中的 E,即代表分布在不同轨道上的物体类 PhysicalObject。
根据实验要求完成 E 的具体类的设计和实现
运动员 电子 人
3.6可复用 API 设计
JFrame
3.7具体应用开发
- 读取数据文件,生成多轨道结构
- 可视化展示文件读入的或程序产生的多轨道结构
- 用户提供必要信息,以增加新轨道、向特定轨道上增加物体
- 用户提供必要信息,以从特定轨道上删除物体、删除整条轨道
- 计算熵值;
- 每个应用所需的特殊功能
- 判断多轨道系统的合法性
心得:
使用语法和正则表达式去解析输入文件并据此构造对象,是一项重要能力
次实验你尝试着开发给别人使用的API,遇到了不少困难