面向对象第四单元总结

面向对象第四单元总结

架构设计

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类图的解析
posted @ 2022-06-29 14:49  OUZHUOJIAN  阅读(5)  评论(0编辑  收藏  举报