面向对象第四单元总结
面向对象第四单元总结
架构设计
UmlElement的处理
我觉得本次作业主要的难点是将无序的UmlElement解析成有序的Uml图,因此我将每一种UmlElement进行封装成MyUmlElement,并在MyUmlElement中设置成员变量引用其他的MyUmlElement来表示元素与元素之间的关系
如MyUmlClass类的成员变量以及构造方法如下所示
public class MyUmlClass {
private UmlClass umlClass;
private ArrayList<MyUmlAttribute> attributes;
private ArrayList<MyUmlOperation> operations;
private ArrayList<MyUmlInterface> interfaces;
private ArrayList<MyUmlAssociation> associations;
private MyUmlClass extendClass;
private ArrayList<MyUmlClass> subClasses;
public MyUmlClass(UmlClass umlClass) {
this.umlClass = umlClass;
attributes = new ArrayList<>();
operations = new ArrayList<>();
interfaces = new ArrayList<>();
associations = new ArrayList<>();
extendClass = null;
subClasses = new ArrayList<>();
}
...
}
parser的运用
对于以上的过程,我使用parser类将传入的UmlElement数组进行解析并建构各种MyUmlElement,并建立元素与元素之间的联系。在MyImplementation的方法中,在需要某种Uml元素集合时引用parser解析好的元素即可。parser的解析过程在parser的构造方法中进行实现
查询优化
在进行指令查询的时候,对查到名字判断是否抛出异常时专门建立一个类进行处理,如class的查询:
public class ClassQueryCount {
private HashMap<String, Integer> queryMap;
private HashMap<String, MyUmlClass> classes;
private HashMap<String, String> nameToId;
public ClassQueryCount(HashMap<String, MyUmlClass> classes) {
this.classes = classes;
this.queryMap = new HashMap<>();
this.nameToId = new HashMap<>();
}
public int queryClass(String str) {
if (queryMap.containsKey(str)) {
return queryMap.get(str);
} else {
int cnt = 0;
String classId = null;
for (String id : classes.keySet()) {
if (classes.get(id).getName().equals(str)) {
cnt++;
classId = id;
}
}
if (cnt == 1) {
nameToId.put(str, classId);
}
queryMap.put(str, cnt);
return cnt;
}
}
public String getClassId(String str) {
return nameToId.get(str);
}
}
课程收获总结
- 在第一单元我学会了层次化架构设计的方法
- 在第二单元学习了多线程程序的设计
- 在第三单元学会了对Jml规格的解读与设计和一些图论算法在java中的实现
- 在第四单元学会了对uml类图的解析