实验四:
Debugging, Exception Handling, and Defensive Programming
1.实验指导:
2.Error and Exception Handling:
我定义的需要处理的异常,包括:
异常类 | 异常情况 |
---|---|
IllegalLabelException | 某个元素定义的标签非法,输入文件中存在不能识别的标签名时抛出 |
IllegalRelationException | 文件中各元素之间的依赖关系不正确,如未添加物体就添加相应关系 |
IllegalNumberofComponentsException | 元素定义中分量的数目与规范不符合时抛出 |
SameLabelException | 存在标签一样的元素时抛出 |
IllegalAngleException | 初始角度不在在[0,360)之间时抛出 |
IllegalTurnaroundException | 公转方向不符合规范时抛出 |
IllegalNameException | 元素名称不符合规范时抛出,如定义原子名称为rb |
NumberformatException | 数字组成不符合规范时抛出,如亲密度大于1,或出现四位小数 |
SameTrackradiusException | 存在两个行星的轨道半径相同时抛出 |
StringformatException | 元素定义中分量的字符串与规范不符合时抛出 |
3.Assertion保障pre-/post-condition:
3.1.ConcreteCircularOrbit:
// defense strategy:
// TrackSystem!=null
// relations!=null
// addtrack(double radius): radius>0
// subtrack(double radius): radius>0
// addCentralObject(L centralObject): centralObject!=null
// addPhysicalObject(E physicalObject,double radius): physicalObject!=null radius>0
// subPhysicalObject(String name,double radius): radius>0
// addrelation(String r1,String r2,double weight): 0<weight<=1
// transit(E object,double radius): radius>0
3.2.StellarSystem:
// defense strategy:
// readFromFile(File corpus): corpus!=null
3.3.AtomStructrue:
// defense strategy:
// transit(double source,double target): source>0,target>0
// readFromFile(File corpus): corpus!=null
3.4.SocialNetworkCircle:
// defense strategy:
// getdistance(Friend f):f!=null
// readFromFile(File corpus): corpus!=null
// addrelation(String f1,String f2,double weight):0<weight<=1