BUAA_OO_UML_OO总结

(1)总结本单元两次作业的架构设计  

对于uml每个类型都进行构建,发现class和inference可以公用

继承和接口实例化数据结构一样

然后进行构造首先将所有模型输入都存入

参数传入函数

函数带入类或者接口

构建关联关系,构建接口实现关系,构建继承关系

UMLClass

举例:{"_parent":"AAAAAAFF+qBWK6M3Z8Y=","visibility":"public","name":"Door","_type":"UMLClass","_id":"AAAAAAFqpiMge7NXBnk="}

  • _parent 对应的是父类的id,如果是顶层父类,对应的是一个特定的值
  • visibility对应的是类的可见性
  • name对应的是类的名字
  • _type对应的是该标签的类型,在这里UmlClass对应的是类
  • _id对应的是类的id

UMLOperation

举例:{"_parent":"AAAAAAFqpiMge7NXBnk=","visibility":"public","name":"Door","_type":"UMLOperation","_id":"AAAAAAFqpiQWH7O0bzI="}

  • _parent对应的是该操作所在方法的id
  • visibility是该操作的可见性
  • name是该操作的名字
  • _type对应的是该标签的类型,在这里UMLOperation对应的是操作
  • _id对应的是该操作的类型

UMLParameter

举例:{"_parent":"AAAAAAFqpiRcY7O7pzM=","name":null,"_type":"UMLParameter","_id":"AAAAAAFqpim3MbPYrBA=","type":"boolean","direction":"return"}

  • _parent对应的是该变量对应的操作的id
  • name对应的是变量名称
  • _type对应的是该标签的类型,在这里UMLParameter对应的是操作变量
  • _id对应的是变量的id
  • type对应的是变量的数据类型
  • direction对应的是变量的方向,如果是参数,则是in;如果是返回值,则是return

UMLAssociation

举例:{"_parent":"AAAAAAFqpiMge7NXBnk=","name":null,"_type":"UMLAssociation","end2":"AAAAAAFqpyLHQ1BBCwQ=","end1":"AAAAAAFqpyLHQ1BA8jU=","_id":"AAAAAAFqpyLHQ1A\/uHQ="}

  • _parent对应的是相互关联的两个类中的其中一个的id
  • name对应的是关联名称
  • _type对应的是该标签的类型,在这里UMLAssociation对应的是关联
  • end1对应的是其中一个UMLAssociationEnd的id
  • end2对应的是另一个UMLAssociationEnd的id
  • _id对应的是关联的id

UMLAssociationEnd

举例:{"reference":"AAAAAAFqyyuTsa1CnU8=","multiplicity":"1","_parent":"AAAAAAFqpyLHQ1A\/uHQ=","visibility":"private","name":"locker","_type":"UMLAssociationEnd","aggregation":"none","_id":"AAAAAAFqpyLHQ1BBCwQ="}

  • reference对应的是该UMLAssociationEnd所对应的类的id
  • multiplicity对应的是该关联端对应的个数
  • _parent对应的是所在的关联的id
  • visibility对应的是该关联端的可见性
  • name是该关联端的可见性
  • _type对应的是该标签的类型,在这里UMLAssociationEnd对应的是关联端
  • aggregation由于本次作业没用到,单纯根据英文的话是聚合
  • _id对应的是关联端的id

UMLInterface

举例:{"_parent":"AAAAAAFF+qBWK6M3Z8Y=","visibility":"public","name":"Interface1","_type":"UMLInterface","_id":"AAAAAAFq5hWfnsrejMQ="}

  • _parent对应的是父接口的id
  • visibility对应的是该接口的可见性
  • name对应的是该接口的名字
  • _type对应的是该标签的类型,在这里UMLInterface对应的是接口类
  • _id对应的是该接口的id

UMLInterfaceRealization

举例:{"_parent":"AAAAAAFqpyKBqVAUSAo=","name":null,"_type":"UMLInterfaceRealization","_id":"AAAAAAFqyz3DUrUBj9E=","source":"AAAAAAFqpyKBqVAUSAo=","target":"AAAAAAFqyyuTsa1CnU8="}

  • _parent对应的是该接口实现所在的类的id
  • name对应的是该接口实现的名字
  • _type对应的对应的是该标签的类型,在这里UMLInterfaceRealization对应的是接口实现
  • source对应的是实现该接口的类的id
  • target对应的是实现的接口的id

UMLGeneralization

举例:{"_parent":"AAAAAAFrAn2LyzRtr9Y=","name":null,"_type":"UMLGeneralization","_id":"AAAAAAFrAn4MhTUNujA=","source":"AAAAAAFrAn2LyzRtr9Y=","target":"AAAAAAFrAn2lWzSXWGM="}

  • _parent在这里等于子类id,但是子类id最好从source中获得
  • name对应的是该泛化的名字
  • _type对应的对应的是该标签的类型,在这里UMLGeneralization对应的是泛化
  • _id对应的是该泛化的id
  • source对应的是子类id
  • target对应的是父类id

(2)总结自己在四个单元中架构设计及OO方法理解的演进  

第一单元

第三次作业我依旧想继承第二次作业的思想,我用加号分割项用乘号分割因子,但是因子遇到了嵌套的情况,所以用括号再递归分割因子

Pol类用来把顶层类我们的表达式用加号分割成每一项

对于每个项求导我们要用到链式法则和复合函数求导规则,我用用乘号分割因子,每个因子构造顶层Po用一个循环实现链式法则求导

如果遇到符合第二次作业的PolyTerm没有出现嵌套规则的可以直接求导

如果遇到嵌套我们利用复合函数求导规则f(g(x)) ' = derva(f(x))derva(g(x))

我用一个简化算法节省复杂度把g(x)替换成x既可f(x)可以直接构造PolyTerm求导,然后再替换回来可以节省复杂度

首先为了防止因为括号内的加号和乘号或者sin(x)*cos(x),影响我的分割我采用一个堆栈维护括号匹配

第二单元

电梯运行一个线程Elevator,输入控制一个线程Call

一个物理电梯控制表可以完成移动和进出人功能,一个电梯请求表用来调度和存储请求

电梯运行利用状态机OPEN,CLOSE,WAIT,UP,DOWN,STOP,GO,每个楼层电梯都会STOP判断需要开门如果开门

刚开始写没有考虑电梯系统终止的条件,因为我们存在上上下下的情况

由于设计不存在总调度器所以会产生多个电梯去强一个请求的情况导致cpu超时,

第三单元

第一次采用hashmap以pair<>为key存储边,value存储边的个数,同样点也这样存储。

对于removebyid和removebypath,采用双向hashmap,path为key存储边,value存储边的值,另一个反之

第二次加入了图

用佛洛依德算法,利用边集重构

每次加入和删除操作重新构建最短路径

第三次综合了地铁路线

我们构建不同的图,最短路径,最低价格,最低满意度,构建不同的权重图,但是用一样的迪杰斯特拉算法

对于换乘采用了拆点算法

OO方法理解的演进 

oo从直接实现到设计架构数据结构,我感觉数据结构决定代码效率和代码数量,优良的架构会有很好的拓展性和算法效率

对于多个数据结构,那些我们能整合,或者继承,组合,使结构清晰简单。

(3)总结自己在四个单元中测试理解与实践的演进

测试是考验程序鲁棒性的重要手段,刚开始测试在于找一些临界值,非法输入,以及不易出现的特殊情况,

由于互测人数较多,后来学着用脚本,大量自动随机测试,比对输出结果

对于多线程的测试,评测机是很难模拟每次测试环境,经常线程的不安全竞争造成测试的多样性

后来学习利用junit进行类的测试

(4)总结自己的课程收获

oo课程提升了我对java语言,面向对象语言的认识,对于程序设计结构的能力,以及debug和调试能力,

工程的维护,继承,接口,函数工厂,以及多线程,线程安全。

(5)立足于自己的体会给课程提三个具体改进建议

1.互测的设计,我感觉很鸡肋,多线程的评测会很玄学,一个room大量的人数不利于我们阅读理解别人代码

2.课上实验,能对课上学习知识温习一下,我大概就是边上机边学习,感觉任务量很大,完成效果会不尽人意

3.理论课,我感觉有一些java的设计模式还是有必要介绍的,jvm之类的

posted @ 2019-06-21 21:22  夜语叶明  阅读(194)  评论(0编辑  收藏  举报