软件构造Lab3

实验目标概述

目标是编写具有可复用性和可维护性的软件,主要使用以下软件构造技术:
子类型、泛型、多态、重写、重载;继承、代理、组合;常见的 OO 设计模式;语法驱动的编程、正则表达式;基于状态的编程;API 设计、API 复用。
本次实验给定了五个具体应用(径赛方案编排、太阳系行星模拟、原子结构可视化、个人移动 App 生态系统、个人社交系统),学生不是直接针对五个应用分别编程实现,而是通过 ADT 和泛型等抽象技术,开发一套可复用的 ADT 及其实现,充分考虑这些应用之间的相似性和差异性,使 ADT 有更大程度的复用(可复用性)和更容易面向各种变化(可维护性)。

实验过程

待开发的三个应用场景

首先请列出你要完成的具体应用场景(至少3个,1和2中选一,3必选,4和5中选一,鼓励完成更多的应用场景)。
TrackGame
无中心点物体,但是有三种不同类型(可以存在中心点上),一条轨道一个物体,轨道物体为运动员。
AtomStructure
一条轨道多个物体,轨道物体为电子。
SocialNetworkCircle
一条轨道多个物体,每个物体之间可能存在联系,中心点物体和轨道物体为人,可以存在一起,构成图(实验二)。

基于语法的图数据输入

统一定义
TrackGame
AtomStructure
SocialNetworkCircle
分别写了三个读取文件的java文件,使用Java自带的Patter的matches函数进行匹配检测,如果检测成功的话继续进行分析字符串的操作,根据相应的匹配结果做出对应的操作。

面向复用的设计:CircularOrbit<L,E>

一开始参照实验2的写法试着写,然后加深理解分类总结后,写出各个接口

面向复用的设计:Track

实验要求为immutable类型,所以每个轨道只保存了半径,统一为double类型。并且重写了equals和hashcode函数。

面向复用的设计:L

中心物体L,分别写了三个类,单独存储信息,app1较为特殊,中心存储了游戏类型,(100或者200或者400或者800),其他的类按要求存储了各自的信息。

面向复用的设计:PhysicalObject

定义轨道物体的抽象类PhysicalObject.java,然后其他三个类继承这个抽象类。抽象类里有轨道物体的半径和角度,方便画图。并且分别重写了equals和hashcode函数。

可复用API设计

CircularOrbitAPIs.java这个类里面分别写了计算熵值,逻辑距离和物理距离,每个轨道系统的轨道之间的差异这四个函数。

图的可视化:第三方API的复用

在网上找到画同心圆的实例,然后自己通过传入轨道系统,完成轨道系统的可视化。

设计模式应用

轨道和轨道物体运用了抽象工厂的方法,trackgame里的式实现多种不同的比赛方案编排策略运用了strategy设计模式,atomstructure里的管理电子跃迁的状态运用到了state和memento设计模式,可保存电子每次跃迁前后的轨道信息。在设计可复用 API 时,请遵循 façade 设计模式,将所有 API 放置在 helper 类CircularOrbitAPIs 当中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值