OO第13-14次作业总结
面向对象第13-14次作业总结博客
1、设计分析
这个单元是我做的最差的一个单元。总工程量超过2000行(有效代码量1200左右),但两次都炸掉。
1.1、第13次作业--UML类图的解析
根据给定的UML类图部分内容,解析出关于类、方法、属性的相关信息。需要考虑继承等细节。
这是面向对象和容器类选择的综合考量。
架构上,首先实现对外接口。其次,对不同的UML元素采取不同处理:对于类,自定义一个ClassInfo
类,存放和类相关的信息,比如父类、实现的接口、属性、方法等;对于接口,直接列一个邻接表,存放extends的接口。其它元素,表示的是类的成员和关系,做其他处理。架构设计没有任何思维难度。
另外,就是题目要求用类名、方法名、属性名等查找,所以要区分id和name,并采取不同的索引容器。大量用HashMap
和HashSet
。这样可以根据contains
系列检查存在性,根据size
系列检查唯一性。
最难的地方,在于以下几个命令:实现的所有接口;属性查找(考虑继承);关联(考虑继承)。考虑继承,就需要设计一个递归的结构,和递归的处理方法。另外就是,为了保证效率,在查找后缓存在类信息中,便于重复查找。
这次本来很稳当的,最容易错的地方都专门考虑和测试了。但是,没想到错在一个指导书语焉不详的地方:属性可见性检查,需要输出属性名+类名。这个类名,是原始类名的意思,而不是提供的classname。虽说语焉不详,但是这种错误的根源在我,没有张口去问,想当然。
UML类图
复杂度分析
方法
Method | ev(G) | iv(G) | v(G) |
---|---|---|---|
ClassInfo.addAssociation(String,boolean) | 1.0 | 2.0 | 2.0 |
ClassInfo.addAttr(UmlAttribute,String) | 1.0 | 3.0 | 4.0 |
ClassInfo.addInterface(String,String) | 2.0 | 2.0 | 2.0 |
ClassInfo.addOperation(UmlOperation) | 1.0 | 2.0 | 2.0 |
ClassInfo.addPara(UmlParameter) | 2.0 | 2.0 | 3.0 |
ClassInfo.ass() | 1.0 | 1.0 | 1.0 |
ClassInfo.ClassInfo(String) | 1.0 | 1.0 | 1.0 |
ClassInfo.getAssList() | 1.0 | 1.0 | 1.0 |
ClassInfo.getAssSet() | 1.0 | 1.0 | 1.0 |
ClassInfo.getAttributes() | 1.0 | 1.0 | 1.0 |
ClassInfo.getAttributeVisibility(String) | 3.0 | 1.0 | 3.0 |
ClassInfo.getClassName() | 1.0 | 1.0 | 1.0 |
ClassInfo.getInterfaceIds() | 1.0 | 1.0 | 1.0 |
ClassInfo.getInterfaceMap() | 1.0 | 1.0 | 1.0 |
ClassInfo.getInterfaces() | 1.0 | 1.0 | 1.0 |
ClassInfo.getNotHiddenList() | 1.0 | 1.0 | 1.0 |
ClassInfo.getNumOfAss() | 1.0 | 1.0 | 1.0 |
ClassInfo.getNumOfAttr() | 1.0 | 1.0 | 1.0 |
ClassInfo.getNumOfSelfAttr() | 1.0 | 1.0 | 1.0 |
ClassInfo.getOperations() | 1.0 | 1.0 | 1.0 |
ClassInfo.getOptCnt(OperationQueryType) | 2.0 | 2.0 | 2.0 |
ClassInfo.getSuperClassId() | 1.0 | 1.0 | 1.0 |
ClassInfo.getTopClassId() | 1.0 | 1.0 | 1.0 |
ClassInfo.getTopClassName() | 1.0 | 1.0 | 1.0 |
ClassInfo.hasInterfacesCompleted() | 1.0 | 1.0 | 1.0 |
ClassInfo.isInterfacesCompleted() | 1.0 | 1.0 | 1.0 |
ClassInfo.isSuperAssIncluded() | 1.0 | 1.0 | 1.0 |
ClassInfo.isSuperAttrIncluded() | 1.0 | 1.0 | 1.0 |
ClassInfo.isSuperInterfaceIncluded() | 1.0 | 1.0 | 1.0 |
ClassInfo.setAssList(LinkedList) | 1.0 | 1.0 | 1.0 |
ClassInfo.setNumOfAss(int) | 1.0 | 1.0 | 1.0 |
ClassInfo.setSuperClassId(String) | 1.0 | 1.0 | 1.0 |
ClassInfo.setTopClassId(String) | 1.0 | 1.0 | 1.0 |
ClassInfo.setTopClassName(String) | 1.0 | 1.0 | 1.0 |
ClassInfo.superHasAssIncluded() | 1.0 | 1.0 | 1.0 |
ClassInfo.superHasAttrIncluded() | 1.0 | 1.0 | 1.0 |
ClassInfo.superHasInterfaceIncluded() | 1.0 | 1.0 | 1.0 |
MyUmlInteraction.addAss(UmlAssociation) | 1.0 | 3.0 | 3.0 |
MyUmlInteraction.addAssociationEnd(UmlElement) | 1.0 | 1.0 | 1.0 |
MyUmlInteraction.addAttribute(UmlElement) | 1.0 | 2.0 | 2.0 |
MyUmlInteraction.addClass(UmlElement) | 1.0 | 2.0 | 2.0 |
MyUmlInteraction.addGen(UmlGeneralization) | 1.0 | 2.0 | 2.0 |
MyUmlInteraction.addInterface(UmlElement) | 1.0 | 1.0 | 1.0 |
MyUmlInteraction.addInterfaceGroup(ClassInfo) | 2.0 | 4.0 | 5.0 |
MyUmlInteraction.addOpt(HashMap,String) | 1.0 | 2.0 | 2.0 |
MyUmlInteraction.addParam(UmlParameter) | 1.0 | 2.0 | 2.0 |
MyUmlInteraction.addRealization(UmlInterfaceRealization) | 1.0 | 1.0 | 1.0 |
MyUmlInteraction.addSuperAss(String) | 2.0 | 3.0 | 4.0 |
MyUmlInteraction.addSuperAttr(String) | 2.0 | 4.0 | 5.0 |
MyUmlInteraction.addSuperInterface(String) | 1.0 | 3.0 | 3.0 |
MyUmlInteraction.checkException(String) | 3.0 | 1.0 | 3.0 |
MyUmlInteraction.findTopClass(String) | 2.0 | 3.0 | 3.0 |
MyUmlInteraction.getClassAssociatedClassList(String) | 1.0 | 3.0 | 3.0 |
MyUmlInteraction.getClassAssociationCount(String) | 1.0 | 1.0 | 1.0 |
MyUmlInteraction.getClassAttributeCount(String,AttributeQueryType) | 4.0 | 4.0 | 4.0 |
MyUmlInteraction.getClassAttributeVisibility(String,String) | 1.0 | 1.0 | 1.0 |
MyUmlInteraction.getClassCount() | 1.0 | 1.0 | 1.0 |
MyUmlInteraction.getClassOperationCount(String,OperationQueryType) | 1.0 | 1.0 | 1.0 |
MyUmlInteraction.getClassOperationVisibility(String,String) | 1.0 | 3.0 | 3.0 |
MyUmlInteraction.getImplementInterfaceList(String) | 1.0 | 2.0 | 2.0 |
MyUmlInteraction.getInformationNotHidden(String) | 1.0 | 1.0 | 1.0 |
MyUmlInteraction.getTopParentClass(String) | 2.0 | 1.0 | 2.0 |
MyUmlInteraction.MyUmlInteraction(UmlElement...) | 3.0 | 8.0 | 17.0 |
Total | 80.0 | 104.0 | 123.0 |
Average | 1.27 | 1.6507936507936507 | 1.95 |
类
Class | OCavg | WMC |
---|---|---|
ClassInfo | 1.30 | 48.0 |
MyUmlInteraction | 2.88 | 75.0 |
Total | 123.0 | |
Average | 1.95 | 61.5 |
细节越多,复杂度越大。这次考虑的细节非常之多,越写越堆积。所以,架构设计还是非常重要的,一不小心就超行数。把ClassInfo
类独立出来是一个明智的选择。
1.2、第14次作业--类图、顺序图、状态图的解析
类图延续了上次的。于是,bug修复之后,以为这次会简单,谁知指导书自相矛盾,越写越陷入了循环迭代。提问区反复提问才搞清楚情况。自己菜没办法。OO炸四次,总成绩能不能上80还说不准呢。大学第一个70分的课程就要这样诞生了吗。听说,往届一般有40%的人是90+,大部分的人只炸一次,甚至一次不炸。唉,这课算学的彻底失败了。这门课也决定了这学期绩点不仅不能弥补上学期,反而比上学期更烂。
这次又需要检查合法性。这三个检查函数是老大难,差不多有400行左右的代码是关于有效性检查的。
无论怎样,来说说架构设计。依然是,类、状态机、时序图定义自己的Info类。Class MyInteraction extends MyClassInteraction implements Interaction
,也就是继承上次的类图解析类,避免直接复制。
最难的就是有效性检查。首先是重名问题。这个简单。循环继承,也简单,dfs找强连通分量(或者直接找环)。难中之难是这个Uml009,也就是重复继承。不仅要检查接口重复继承,还要检查类实现接口的这种问题。就错在这个函数上,全军覆没。我觉得其它问题,都是
其实方法也没有思考难度,仅仅是求类实现的所有接口,以及接口继承的所有接口。但问题就在于如何保证不重复。由于循环继承的问题已经排除,所以最好的办法就是自顶向下。一旦发现重复就加入异常类/接口表中。
运是强者的谦辞,命是弱者的借口。承认自己的不足比什么都有用。工程能力并不是一朝一夕练就的,得到今天这个落魄下场,也全是我自己的过错,怪不得任何规则。
UML类图
复杂度分析
方法
Method | ev(G) | iv(G) | v(G) |
---|---|---|---|
ClassInfo.addAssociation(String,String,boolean) | 1.0 | 3.0 | 3.0 |
ClassInfo.addAttr(UmlAttribute,String) | 1.0 | 3.0 | 4.0 |
ClassInfo.addInterface(String,String) | 1.0 | 2.0 | 2.0 |
ClassInfo.addOperation(UmlOperation) | 1.0 | 2.0 | 2.0 |
ClassInfo.addPara(UmlParameter) | 2.0 | 2.0 | 3.0 |
ClassInfo.ass() | 1.0 | 1.0 | 1.0 |
ClassInfo.ClassInfo(String) | 1.0 | 1.0 | 1.0 |
ClassInfo.getAssList() | 1.0 | 1.0 | 1.0 |
ClassInfo.getAssSet() | 1.0 | 1.0 | 1.0 |
ClassInfo.getAttributes() | 1.0 | 1.0 | 1.0 |
ClassInfo.getAttributeVisibility(String) | 3.0 | 1.0 | 3.0 |
ClassInfo.getClassName() | 1.0 | 1.0 | 1.0 |
ClassInfo.getInterfaceIds() | 1.0 | 1.0 | 1.0 |
ClassInfo.getInterfaceMap() | 1.0 | 1.0 | 1.0 |
ClassInfo.getInterfaces() | 1.0 | 1.0 | 1.0 |
ClassInfo.getNotHiddenList() | 1.0 | 1.0 | 1.0 |
ClassInfo.getNumOfAss() | 1.0 | 1.0 | 1.0 |
ClassInfo.getNumOfAttr() | 1.0 | 1.0 | 1.0 |
ClassInfo.getNumOfSelfAttr() | 1.0 | 1.0 | 1.0 |
ClassInfo.getOperations() | 1.0 | 1.0 | 1.0 |
ClassInfo.getOptCnt(OperationQueryType) | 2.0 | 2.0 | 2.0 |
ClassInfo.getSuperClassId() | 1.0 | 1.0 | 1.0 |
ClassInfo.getTopClassId() | 1.0 | 1.0 | 1.0 |
ClassInfo.getTopClassName() | 1.0 | 1.0 | 1.0 |
ClassInfo.hasAssName(String) | 1.0 | 1.0 | 1.0 |
ClassInfo.hasInterfacesCompleted() | 1.0 | 1.0 | 1.0 |
ClassInfo.isDup() | 1.0 | 1.0 | 1.0 |
ClassInfo.isInterfacesCompleted() | 1.0 | 1.0 | 1.0 |
ClassInfo.isSuperAssIncluded() | 1.0 | 1.0 | 1.0 |
ClassInfo.isSuperAttrIncluded() | 1.0 | 1.0 | 1.0 |
ClassInfo.isSuperInterfaceIncluded() | 1.0 | 1.0 | 1.0 |
ClassInfo.setAssList(LinkedList) | 1.0 | 1.0 | 1.0 |
ClassInfo.setNumOfAss(int) | 1.0 | 1.0 | 1.0 |
ClassInfo.setSuperClassId(String) | 1.0 | 1.0 | 1.0 |
ClassInfo.setTopClassId(String) | 1.0 | 1.0 | 1.0 |
ClassInfo.setTopClassName(String) | 1.0 | 1.0 | 1.0 |
ClassInfo.superHasAssIncluded() | 1.0 | 1.0 | 1.0 |
ClassInfo.superHasAttrIncluded() | 1.0 | 1.0 | 1.0 |
ClassInfo.superHasInterfaceIncluded() | 1.0 | 1.0 | 1.0 |
MachInfo.addState(UmlElement) | 1.0 | 3.0 | 4.0 |
MachInfo.addTrans(String,String,boolean) | 1.0 | 3.0 | 4.0 |
MachInfo.getStateNum() | 1.0 | 1.0 | 1.0 |
MachInfo.getSubNum(String) | 3.0 | 2.0 | 3.0 |
MachInfo.getTransNum() | 1.0 | 1.0 | 1.0 |
MachInfo.MachInfo(String) | 1.0 | 1.0 | 1.0 |
MachInfo.subBfs(String) | 2.0 | 3.0 | 4.0 |
MyUmlClassInteraction.addAss(UmlAssociation) | 1.0 | 3.0 | 3.0 |
MyUmlClassInteraction.addAssociationEnd(UmlElement) | 1.0 | 1.0 | 1.0 |
MyUmlClassInteraction.addAttribute(UmlElement) | 1.0 | 2.0 | 2.0 |
MyUmlClassInteraction.addClass(UmlElement) | 1.0 | 2.0 | 2.0 |
MyUmlClassInteraction.addGen(UmlGeneralization) | 1.0 | 3.0 | 3.0 |
MyUmlClassInteraction.addInterface(UmlElement) | 1.0 | 1.0 | 1.0 |
MyUmlClassInteraction.addInterfaceGroup(ClassInfo) | 2.0 | 3.0 | 4.0 |
MyUmlClassInteraction.addOpt(HashMap,String) | 1.0 | 2.0 | 2.0 |
MyUmlClassInteraction.addParam(UmlParameter) | 1.0 | 2.0 | 2.0 |
MyUmlClassInteraction.addRealization(UmlInterfaceRealization) | 1.0 | 1.0 | 1.0 |
MyUmlClassInteraction.addSuperAss(String) | 2.0 | 3.0 | 4.0 |
MyUmlClassInteraction.addSuperAttr(String) | 2.0 | 4.0 | 5.0 |
MyUmlClassInteraction.checkException(String) | 3.0 | 1.0 | 3.0 |
MyUmlClassInteraction.classAddSuperInterface(String) | 1.0 | 3.0 | 3.0 |
MyUmlClassInteraction.findTopClass(String) | 2.0 | 3.0 | 3.0 |
MyUmlClassInteraction.getClassAssociatedClassList(String) | 1.0 | 3.0 | 3.0 |
MyUmlClassInteraction.getClassAssociationCount(String) | 1.0 | 1.0 | 1.0 |
MyUmlClassInteraction.getClassAttributeCount(String,AttributeQueryType) | 4.0 | 4.0 | 4.0 |
MyUmlClassInteraction.getClassAttributeVisibility(String,String) | 1.0 | 1.0 | 1.0 |
MyUmlClassInteraction.getClassCount() | 1.0 | 1.0 | 1.0 |
MyUmlClassInteraction.getClassMap() | 1.0 | 1.0 | 1.0 |
MyUmlClassInteraction.getClassOperationCount(String,OperationQueryType) | 1.0 | 1.0 | 1.0 |
MyUmlClassInteraction.getClassOperationVisibility(String,String) | 1.0 | 3.0 | 3.0 |
MyUmlClassInteraction.getElementMap() | 1.0 | 1.0 | 1.0 |
MyUmlClassInteraction.getImplementInterfaceList(String) | 1.0 | 2.0 | 2.0 |
MyUmlClassInteraction.getInformationNotHidden(String) | 1.0 | 1.0 | 1.0 |
MyUmlClassInteraction.getInterfaceDup() | 1.0 | 1.0 | 1.0 |
MyUmlClassInteraction.getInterfaces() | 1.0 | 1.0 | 1.0 |
MyUmlClassInteraction.getTopParentClass(String) | 2.0 | 1.0 | 2.0 |
MyUmlClassInteraction.interfaceAddSuper(String) | 2.0 | 7.0 | 7.0 |
MyUmlClassInteraction.MyUmlClassInteraction(UmlElement...) | 3.0 | 8.0 | 17.0 |
MyUmlGeneralInteraction.addInter(UmlElement) | 1.0 | 1.0 | 1.0 |
MyUmlGeneralInteraction.addMach(UmlElement) | 1.0 | 1.0 | 1.0 |
MyUmlGeneralInteraction.addTrans(UmlTransition) | 1.0 | 1.0 | 1.0 |
MyUmlGeneralInteraction.checkForUml002() | 2.0 | 5.0 | 6.0 |
MyUmlGeneralInteraction.checkForUml008() | 2.0 | 9.0 | 9.0 |
MyUmlGeneralInteraction.checkForUml009() | 6.0 | 12.0 | 12.0 |
MyUmlGeneralInteraction.classDfs(String,HashSet,HashSet) | 2.0 | 4.0 | 4.0 |
MyUmlGeneralInteraction.getIncomingMessageCount(String,String) | 1.0 | 1.0 | 1.0 |
MyUmlGeneralInteraction.getMessageCount(String) | 1.0 | 1.0 | 1.0 |
MyUmlGeneralInteraction.getParticipantCount(String) | 1.0 | 1.0 | 1.0 |
MyUmlGeneralInteraction.getStateCount(String) | 1.0 | 1.0 | 1.0 |
MyUmlGeneralInteraction.getSubsequentStateCount(String,String) | 1.0 | 1.0 | 1.0 |
MyUmlGeneralInteraction.getTransitionCount(String) | 1.0 | 1.0 | 1.0 |
MyUmlGeneralInteraction.interException(String) | 3.0 | 2.0 | 3.0 |
MyUmlGeneralInteraction.interfaceDfs(String,HashSet,HashSet) | 2.0 | 4.0 | 4.0 |
MyUmlGeneralInteraction.machException(String) | 3.0 | 2.0 | 3.0 |
MyUmlGeneralInteraction.MyUmlGeneralInteraction(UmlElement...) | 2.0 | 3.0 | 10.0 |
MyUmlGeneralInteraction.retFromRecur(String,HashSet) | 1.0 | 3.0 | 3.0 |
MyUmlGeneralInteraction.tempAdd(UmlElement,HashMap>) | 1.0 | 2.0 | 2.0 |
SeqInfo.addMsg(UmlMessage) | 1.0 | 2.0 | 2.0 |
SeqInfo.addObj(UmlLifeline) | 1.0 | 2.0 | 2.0 |
SeqInfo.getIncome(String) | 3.0 | 2.0 | 3.0 |
SeqInfo.getMsgNum() | 1.0 | 1.0 | 1.0 |
SeqInfo.getObjNum() | 1.0 | 1.0 | 1.0 |
SeqInfo.SeqInfo(String) | 1.0 | 1.0 | 1.0 |
Total | 138.0 | 196.0 | 230.0 |
Average | 1.35 | 1.92 | 2.25 |
类
Class | OCavg | WMC |
---|---|---|
ClassInfo | 1.31 | 51.0 |
MachInfo | 2.57 | 18.0 |
MachInfo.StateInfo | 0.0 | |
MyUmlClassInteraction | 2.68 | 83.0 |
MyUmlGeneralInteraction | 3.21 | 61.0 |
SeqInfo | 1.67 | 10.0 |
Total | 223.0 | |
Average | 2.19 | 37.17 |
耦合度分析
ClassInfo | 0.0 | 0.0 | 0.0 | 2.0 | 4.0 |
MachInfo | 0.0 | 1.0 | 1.0 | 1.0 | 3.0 |
MachInfo.StateInfo | 0.0 | 0.0 | 0.0 | 1.0 | 4.0 |
MyUmlClassInteraction | 0.0 | 1.0 | 1.0 | 1.0 | 3.0 |
MyUmlGeneralInteraction | 1.0 | 4.0 | 5.0 | 2.0 | 2.0 |
SeqInfo | 1.0 | 1.0 | 5.0 | 1.0 | 2.0 |
Total | |||||
Average | 0.33 | 1.17 | 2.0 | 1.33 | 3.0 |
2、架构总结、测试
架构:
第一单元多项式,使用了抽象类和类的递归结构。重点运用了方法重写。
第二单元多线程,了解了单例模式和工厂模式。会运用锁和同步。
第三单元图算法,了解了多重容器的使用,类的解耦。另外就是利用类的继承进行迭代开发。
第四单元UML,依然是迭代开发。接口独立,算法和容器开类封装。
其实越到后面,OO方法的选择,是一个自然而然的事情,并没有特意去思考哪一种设计模式,哪一种架构,而是根据需求。需求是一切设计的出发点和落脚点。甚至说,哪一种设计模式,我连名字听都没听说过,但是,一说大意,立马就知道自己用过。
测试:
第一单元使用对拍器,借助Python的数学工具。
第二单元改装定时输入接口。借用别人的special judge。
第三单元学会了Junit。
第四单元,手造类图+随机命令+对拍。
尤其是Junit的学习,受益匪浅。虽然依然隐藏着不明bug,但是,至少Junit的使用可以让我避免一些无脑错误。
测试手段也是一个循序渐进的过程。从最初像OJ题那样的对拍,到Junit等工具。测试的目的并不是证明自己没有错误,而是发现自己的错误。但并不是所有错误都可以通过测试检查出来。只有缜密的设计思维,才能从根本上避免错误。测试仅仅是针对自己的实现层面易错的地方进行,不能解决设计层面的纰漏。我这两个单元的惨败,就是因为设计思维的漏洞,用错误测试错误。
3、课程收获和建议
收获
最初步的收获,就是Java用得滚瓜烂熟。
第一单元,初步的“编译原理”。重点是类的迭代结构。继承和多态,这是所有OO设计的基础。
第二单元,把多线程摸了个门清。这是游戏体验最好的一个单元。
第三单元,复习了图算法。
第四单元,大工程量下的压力测试。并没有助教说的很简单,其实每年的最后一个单元都是大boss级别。
总的收获就是,OO设计模式的了解,以及算法、工程能力的提升。虽然这个课的作业写的很失败,但并不代表没用。
看到知乎上,有好多往届人故意攻击OO课程的,我觉得,他们就是像我这样炸过好几次作业的人,不懂得从自身分析问题,而去怪罪课程规则。我并没有标榜我的高尚,而是觉得他们这种键盘侠非常“睿智”。
这门课的体系还是非常好的,只不过,美中不足的地方在于指导书的自恰性不足,有好多有歧义的话,有可能有两种完全不同的实现。我能理解,指导书设计过程中,有好多难以全面考虑的地方,我们设计程序会犯错误,为什么不能设身处地想一下助教设计指导书也会有错误呢?毕竟,这种实验类的课程,助教也在为了精品作业而殚精竭虑。他们也有自己的课程,并不是全职服务员。
另外这门课的结果,也是我的反面教材,深刻的教训就是,一切设计都要有缜密的思维,方方面面都必须考虑清楚。只有这样才能得心应手。
建议
1、比如测试数据,至少提供一组强测数据,针对我们可能的错误来做自我检查。
2、编写指导书的时候,尽量考虑语言上的歧义情况,以及测试标准,数据限制等等。
3、在烤漆的作业,能否减少工程量,可以更多精力投入烤漆(不过这一点,我觉得其实可以忽略,因为总有人可以完成,物竞天择适者生存,我完不成我就应该接受被淘汰的结果。如果一门课让所有人都拿高分,这门课反倒没意义,我这么建议,对能完成的人实际上并不公平)。
我想对自己说的话:OO已结束,新征程将要开启。无论过去的结果如何,都已经成为过去。以史为鉴面向未来,相信失败乃成功之母。
OO第13-14次作业总结的更多相关文章
- 面向对象OO第1-3次作业总结
面向对象OO第1-3次作业总结 学习OO已经四周了,对OO以及JAVA的编程也算终于了解了一丢丢.现在做完了三次的编程作业,对前三次的作业做一次总结. 第一次作业 ------------------ ...
- OO第四单元UML作业总结暨OO课程总结
目录 目录一.第四单元UML两次作业架构设计第一次作业第二次作业二.架构设计总结与OO方法理解演进三.测试理解与实践演进四.课程收获总结五.课程改进建议六.尾声 一.第四单元UML两次作业架构设计 第 ...
- Week14《Java程序设计》第14次作业总结
Week14<Java程序设计>第14次作业总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结与数据库相关内容. 2. 使用数据库技术改造你的系统 2.1 简述如何 ...
- js如何判断一组数字是否连续,得到一个临时数组[[3,4],[13,14,15],[17],[20],[22]];
var arrange = function(arr){ var result = [], temp = []; arr.sort(function(source, dest){ return sou ...
- intellij idea 13&14 插件推荐及快速上手建议 (已更新!)
原文:intellij idea 13&14 插件推荐及快速上手建议 (已更新!) 早些年 在外企的时候,公司用的是intellij idea ,当时也是从eclipse.MyEclipse转 ...
- OO第二次博客作业——电梯调度
OO第二次博客作业——电梯调度 前言 最近三周,OO课程进入多线程学习阶段,主要通过三次电梯调度作业来学习.从单部电梯的傻瓜式调度到有性能要求的调度到多部电梯的调度,难度逐渐提升,对同学们的要求逐渐变 ...
- OO第二次博客作业—17373247
OO第二次博客作业 零.写在前面 OO第二单元宣告结束,在这个单元里自己算是真正对面向对象编程产生了比较深刻的理解,也认识到了一个合理的架构为编程带来的极大的便利. (挂三次评测分数 看出得分接近等差 ...
- TeamViewer 12\13\14 破解版(解决检测为商业用途的方式)
一.Windows系统下破解TeamViewer的方式 1.用Windows直接卸载本地的TeamViewer软件2.下载一个Everything软件,并安装好它(这是一个搜索本机文件的工具,超级好用 ...
- 剑指offer19:按照从外向里以顺时针的顺序依次打印出每一个数字,4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.
1 题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印 ...
- 【20171027中】alert(1) to win 第13,14,15,16题
第13题 题目: function escape(s) { var tag = document.createElement('iframe'); // For this one, you get t ...
随机推荐
- vs.net远程调试
有些时候,不能在本机器启动程序进行调试,例如调试全屏模式,或者调试那些需要在特定运行环境的程序,这时候就只能进行远程调试了. 一般的调试器都支持远程调试,vs也不例外.只需要在远程机器上启动一个应用程 ...
- 在 CentOS7 安装 ELK【转】
ELK是一个成熟的日志系统,主要功能有收集.分析.检索,详细见 elastic官网. 本文主要介绍如何在CentOS7下安装最新版本的ELK,当然现在docker已经有完全配置成功的elk容器,安装配 ...
- Pod中spec的字段常用字段及含义
一.Pod中spec的字段常用字段及含义 1.pod.spec.containers ² spec.containers.name <string> #pod的名称,必须字段,名称唯一 ...
- 使用idrac远程管理卡操作安装Centos
浏览器打开远程管理网卡地址(浏览器建议用IE,本次用的IE11,其他浏览器可能不能用) 1.首先设置虚拟控制台插件类型(推荐该为本地) 点击启动后,可能会弹窗,选择允许 2.添加镜像 创建虚拟介质 连 ...
- 原生JS实现雪花特效
今天在校园招聘上被问到的问题,用JS写出雪花的效果.我打算使用多种方法来试试如何实现雪花. 这是目前按照网上某种思路模仿的第一种雪花,不太好看,但是大致意思清楚. 思路1:该思路直接由JS实现. 雪花 ...
- NetworkUtils
import java.io.IOException; import javax.servlet.http.HttpServletRequest; import org.apache.log4j.Lo ...
- excel单元格内容合并
这几天在整理数据,有时候数据都在表格的不同单元格中,想把两格内容合并为一格,于是验证了两种方法 方法一: (1)在B1输入公式=A1&B1 (2)做完第一步后,选中B1后,鼠标移到单元格右下出 ...
- js——本地存储
1. cookie 容量小:4k,在同源的http请求时携带传输,占用带宽,有日期限制 <!DOCTYPE html> <html lang="en"> & ...
- C++之Vect
在C++中数组和向量都是多同类元素的集合,他们也有很明显的区别 1 数组属于静态分配,编译之前必须知道数组的大小,一旦确定就不能更改:2个数组之间不能直接赋值实现拷贝,而必须显式用for或者拷贝函数拷 ...
- Murano Weekly Meeting 2015.07.21
会议时间: 2015.07.21 主持人: Kirill Zaitsev, core from Mirantis 会议摘要: 1.murano client和murano dashboard升级到y ...