大佬教程收集整理的这篇文章主要介绍了面向对象设计与构造第四单元总结,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
在本单元的架构中,我主要还是根据实际需求来编写。出现了类图、状态图、顺序图三种不同的图,可以考虑针对三种不同的查询建立三个不同的类。但在根据指令的需求,感觉代码重复性太高,没有那么做。指令的询问只针对于Class
,Interaction
,StateMachine
,也因此,只需要向这三者发起询问即可。
根据实际的UML需求,层次非常明显,可以采取按层次遍历的方式来对所有的元素进行解析。
//放弃写mermaid图
class/interface-->operation/attribute/association/associationEnd
operation-->parameter
association-->associationEnd
collaboration-->interaction-->lifeline
stateMachine-->state/transition
创建@H_172_5@myDataBase类,用于对传入的元素进行解析,同时存储在不同的容器中,向@H_172_5@myGeneralInteraction提供getClass
、getStateMachine
、geTinteraction
这三个判重再返回的方法。
创建@H_172_5@mychecker类,从@H_172_5@myDataBase处获得需要的数据容器,依次进行检查。
图中出现了两个自定义的异常:
myTypeException:
类型异常,用来统一attributeType和parameterType,避免代码的重复
MyDuplicatedException:
用于在递归的时候抛出重复,(可能创建多个不同的duplicatedException比较好)
根据查询的需求,容器的选择还是值得一说。有不少地方需要查询是否重名,也有不少的地方需要根据id去获得相应的元素。于是乎,三次作业中,我几乎所有的数据都是用hashmap
存储的,查询比较方便。如:
public final HashMap<String, List<MyClass>> name2classes; //方便判断重名
public final HashMap<String, MyClass> id2class;
尽管刻意关注了复杂度,但还是在第十三次作业被偷袭了。获取一个类实现的所有接口处,考虑不够周全,导致出现了类似n^n
的复杂度。复杂度较高的主要问题是反复查询一个已经被查询过了的对象,进行相应的记忆化处理即可,在第一次查询过后在该对象中保存查询结果,这样下次查询的复杂度为O(1),这在本次作业中可以用于:查找所有实现的接口,查找接口是否重复实现等查询方法上。在判断图的循环上,我用了类似拓扑排序的方式进行,依次删除没有入度 xor 没有出度
的点,复杂度能够降低很多,尽管dfs可能也不会超时,但更多的是一种性能上的安心。
个人感觉我这次作业的架构并不算特别好,尽管具有一定的层次性,但耦合性有所上升,部分类并没有做到各司其职,可能需要进一步改进才好。
第一单元
求导整个过程的层次化需求构建了数据类的层次化,遵循表达式、项、因子
的层次结构,逐层构建与求导
采取递归下降的方式完成树的构建,在局部使用正则表达式来简化代码
尝试使用接口和抽象类把类的共同点给抽象出来,用多态来统一
UML:
第二单元
第二单元架构设计中的关注点如下:
调度策略的设计
UML:(舍去各种strategy和scheduler)
第三单元
本单元基本为实现官方的接口,没有什么可以架构的
如果有的话,主要是对容器进行选择,采取合适的算法进行存储和查询,防止TLE
本单元主要目的是保持程序的行为和JML规格的一致性
UML:
第四单元
OO方法
checkstyle
带来了一种良好的代码风格以上是大佬教程为你收集整理的面向对象设计与构造第四单元总结全部内容,希望文章能够帮你解决面向对象设计与构造第四单元总结所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。