// myclass.id -> myclass private hashmap<string, myclass> classidtomyclass; // umlclass.name -> umlclassid[x] private hashmap<string, arraylist<string>> classnametoclassids; // umlelementid -> umlelement private hashmap<string, umlelement> elementidtoelement; // the number of interfaces, add when a umlinterface comes. private int interfacecount = 0;
/* * 由于各类型之间有先后顺序的要求,所以我利用了用(1+1+1)个for循环完成数据输入 * 下面用伪代码说明逻辑。 */ for (umlelement element : elements) { elementidtoelement.put(element.id, element); if (element instanceof umlclass) { classidtomyclass.put(element.id, new myclass(element)); add_it_to_classnametoclassids; } else if (element instanceof umlinterface) { classidtomyclass.put(element.id, new myclass(element)); interfacecount++; } else if (element instanceof umloperation) { operaidtomyoperation.put(element.id,new myoperation(element)); } } for (umlelement element : elements) { if (element instanceof umlinterfacerealization) { add_target-umlinterface_to_source-myclass; // use method - myclass.addinter() } else if (element instanceof umlattribute) { add_target-umlattribute_to_source-myclass; // use method - myclass.addattr() } else if (element instanceof umlparameter) { add_target-umlparameter_to_source-myoperation; // myoperation 对参数进行分析 } else if (element instanceof umlassociation) { add_association_to_each_other; // use method - myclass.addasso() } else if (element instanceof umlgeneralization) { add_father-myclass_to_child-myclass; // use method - myclass.addupclasses() or myclass.addfather() } } for (each myoperation : operaidtomyoperation) { myclass.addoperation(myoperation); }
classmodel (类图)
dfs:图的遍历接口
myclass :可以由umlclass或umlinterface构造(统一管理类和接口);内含一个class所有需要的内容:
private int assoccount = 0; private myclass fatherclass = null; private umlclass umlclass = null; private umlinterface umlinterface = null; private arraylist<myclass> upmyclasses; private hashmap<operationquerytype, arraylist<umloperation>> modetoopera; private hashmap<attributequerytype, arraylist<umlattribute>> modetoattr; private hashmap<string, string> associdtoname; private hashmap<string, arraylist<string>> operanametoids; private hashmap<string, visibility> operaidtovis; private hashmap<string, arraylist<string>> attrnametoids; private hashmap<string, visibility> attridtovis; private arraylist<umlattribute> unhiddenattrs; private hashmap<string, string> interidtoname;
myoperation:类的操作,功能 - 处理和关联umlparameter与umloperation
oldumlclassmodelinteraction:同uml第一次作业umlinteraction
myumlclassmodelinteraction:继承old的基础上增加了规则检查 - r001 遍历所有myclass
,检查myclass
的所有属性名称和关联端(umlassociationend)的名称是否有重名;
r002 遍历所有myclass
,对于每一个myclass
运用dfs遍历它的父类形成的图,若有环,则违反规则(“类与接口之间实现关系”不可能构成圈,无需考虑,只需考虑类之间的继承以及接口之间的继承,即myclass的继承);
r003 (1)对于每一个umlclass构建的myclass
,观察它的类和父类中是否实现了重复的接口(考虑接口的继承),若出现,则将该myclass
加入异常数组;(2)对于每一个由umlinterface构建的myclass
,观察接口和接口的继承有无重复的umlinterface,若有,则将该myclass
加入异常数组;
collaboration (顺序图)
myinteraction:承载一个顺序图图的所有需要信息
private int lifelinecount; private int messagecount; private hashmap<string, integer> lifelinenametotimes; private hashmap<string, string> lifelineidtoname; private hashmap<string, integer> llnametoincomingcount;
myumlcollaboration
statechart (状态图)
myregion:承载一个状态图的所有需要信息
private int statecount; // 状态数 private int transitioncount; // 转换数 private hashmap<string, integer> statenametotimes; // 记录同名的状态数 private hashmap<string, mystate> statenametomystate; // umlstate.name -> mystate private hashmap<string, mystate> stateidtomystate; // umlstate.id -> mystate
mystate:状态
myumlstatechartinteraction
myumlgeneralinteraction(官方接口实现)
简单表达式求导
实事求是地说,通过这一单元的学习,我对oo的理解以及架构设计的长进甚微。如果说收获的话,我想是
多线程电梯模拟
通过这一单元的学习,我受益颇深:
规格化设计
这一单元引入了jml,引导我们进行契约化和规格化设计。在本单元的学习中,我学习了从抽象到具体、逐层构造的方法,学习了jml的简单基础语言,这一单元的课下作业给人的感觉非常顺滑,我想这就是契约化和规格化设计的魅力所在吧。
uml模型学习
记得研讨课上,来自西安某研究所的老师说,uml语言是他现在使用最多的语言,“推荐大家学习”。通过本单元对uml的结构化探索,以及规则检测的尝试,对uml有了初步的理解。
如对本文有疑问, 点击进行留言回复!!
Java面向对象中:方法重载和方法重写以及区别、 this关键字和super关键字以及区别
网友评论