OO第四单元反思与总结暨期末总结
作者:互联网
零、前言
认识辩证运动的全过程是“实践、认识、再实践、再认识,这种形式循环往复以至无穷。”(《毛选》第1卷,第273页)
OO
的学习与实践是辩证统一的:我们对OO
的学习需要我们有对工程结构的实践之中,同时我们的认识行为又会反作用于我们下一次的工程实践之中。如此往复,我们的软件工程能力就在这个实践与认识的辩证运动之中螺旋上升。
一、第四单元作业架构设计
4.1. 第一次UML架构设计
这一次要解决的问题很简单,并且被完全包含在了下一次架构的解决方案里,所以我们重点讨论下一个架构。
4.2. 第二次UML架构设计
4.2.1. 实现难点分析
这次问题更加体现UML
单元的难点和问题所在:
首先是对UML
类图、顺序图和状态图的精准理解,了解题目意图所指,加上阅读所有继承了UMLElement
抽象类的方法接口,明白自己有哪些可利用的资源、要利用哪些资源以及这些资源的工程含义。
第一个难点在于广度,一方面在于UMLElement
的数量之多,另一方面在于需求指令的进一步增长(20个左右,这里将checkForAllRules()
也考虑进来)。
第二个难点是深度,指一部分需求需要二次索引,因此需要我们有分级的措施。再由各个服务类
4.2.2. 集中应用分布化处理
架构第一点在于将集中的需求分布化,因为一个很现实的问题是20个需求全放一个类里实现会爆CheckStyle
,我个人的做法是设计了一个顶层的交互类用来确定实现需求的“服务类”,然后再由各个服务类实现具体需求。
//top serve @Override public int getClassAssociationCount(String s) throws ClassNotFoundException, ClassDuplicatedException { return topServe.getClassAssociationCount(s); } //sequence serve @Override public int getIncomingMessageCount(String s, String s1) throws InteractionNotFoundException, InteractionDuplicatedException, LifelineNotFoundException, LifelineDuplicatedException { return sequenceServe.getIncomingMessageCount(s, s1); }
如代码所示是顶级类Model
将不同的需求交与不同的服务类来实现。
4.2.3. 分类分级处理
本次作业主要有四种指令三种图的查询(SequenceGraph
、ClassGraph
、StatechartGraph
),这就需要我们将所有UmlElement
分成三个大类处理,同时不同的UmlElement
之间有明显的分级关系,即UmlClass
必须在UmlOption
上级并且从属、处理先后关系显著。
我的实现是首先将传入的UmlElement
分组,然后再将各组分级分类处理:
public SequenceServe(List<UmlInteraction> itas, List<UmlLifeline> objs, List<UmlMessage> msgs) { itaList = new Interaction[itas.size()]; for (UmlInteraction ita : itas) { int id = itaNum++; itaIdStr2id.put(ita.getId(), id); if (itaName2id.containsKey(ita.getName())) { itaName2id.put(ita.getName(), -1); } else { itaName2id.put(ita.getName(), id); } itaList[id] = new Interaction(ita.getName()); } for (UmlLifeline obj : objs) { int itaId = itaIdStr2id.get(obj.getParentId()); itaList[itaId].addObject(obj); } for (UmlMessage msg : msgs) { int itaId = itaIdStr2id.get(msg.getParentId()); itaList[itaId].addMsg(msg); } }
这个是我其中一个服务类的构造函数,表现了这种从属关系和处理的先后关系。
二、架构设计及OO方法理解演进
“从无到有。”
这个学期我对OO的理解从一开始的没有架构设计甚至连IDEA
和Java
语言特性都没有搞清楚,到后期不仅有了各种继承封装,还有时候会不自主的用到一些设计模式。从开始还是单纯的基于断点的动态调试,到后期的Junit的单元测试。
OO对我来说不仅限于OO,在我这里他更像是软件工程的先导,为我们展现软件工程美丽的世界,培养了我软件工程的先导思维和方法论。
三、测试理解与实践的演进
测试是保证正确性的重要手段。
我进行的测试有两种,一种基于形式验证,通过Junit进行单元测试实现,这个主要是确定我程序的逻辑功能与实际功能的统一。另一种是基于随机概率,通过数据生成器来实现覆盖性的测试。
我的对拍器主要有datamaker
、judge
两个部分,前者是对拍的核心,后者是正确性的保障。个人喜欢用java或者python来写datamaker
,取决于对拍器只是生成就好还是有一定的结构。
四、课程收获总结
这个学期收获我认为主要是对软件工程有了初步的认识与实践,以及对一些面向对象编程概念的认识与实践。
五、给课程的改进建议
(1)在繁重的课业负担下,停留在口头上的“建议同学们去学”往往等同空话,而且忽视了课程的指导作用,希望老师能在这些领域设置实验或作业。
(2)课上实验目的不明,感觉课上实验只是限制了时间的课下作业。
(3)最后烤漆的任务量较重(虽然我知道课程组已经尽量去降低损失了但是烤漆体验还是很糟糕quq)
标签:OO,架构设计,int,总结暨,实践,软件工程,反思,ita 来源: https://www.cnblogs.com/Eaglebu/p/11076621.html