架构设计:java
uml 类图提供了一个描述类及其关系的视图。 顶层为 UMLClass
,UMLInterface
,UMLAssociation
,UMLGeneralization
,
UMLInterfaceRealization
。下一层为UMLAttribute
, UMLOperation
, UMLParameter
,UMLAssociationEnd
。算法
根据uml类图的层次结构,将模型抽象为MyAssociation
, MyClass
, MyInterface
几个类 。MyUmlInteraction
做为外部方法接口类,将不一样的指令都分放到具体的类中去查询处理。编程
架构设计:安全
除了顺序图以外,第二次做业加入了对uml顺序图和状态图的模型处理。顺序图描述了基于消息机制的对象协做关系,具备明确的协做主题。
顶层为协做对象UMLAttribute
和交互模型UMLInteraction
。下一层为UMLLifeline
,UMLMessage
,UMLCombinedFragment
。数据结构
由顺序图的层次结构,设计了MyUmlInteraction
类来管理单个模型的图层创建及指令查询处理。在MyUmlInteraction
中,多线程
private UmlInteraction interaction; private ArrayList<UmlLifeline> lifelines = new ArrayList<UmlLifeline>(); private HashMap<String, UmlLifeline> name2Lifeline = new HashMap<String, UmlLifeline>(); private HashMap<String, Integer> same2Lifeline = new HashMap<String, Integer>(); private ArrayList<UmlMessage> messages = new ArrayList<UmlMessage>(); private HashMap<String, Integer> target2SourceNum = new HashMap<String, Integer>();
创建了name2Lifeline
, same2Lifeline
, target2SourceNum
映射名字和对象,消息传递的发送方和接收方关系的映射。架构
设计MyUmlInteractionContainer
类来管理状态图,做为状态图的指令查询接口。框架
uml状态图描述了状态及其关系,通常用来描述一个特定类/组件的行
为。顶层结构为UMLStateMachine
,UMLRegion
。 下一层为UMLState
, UMLTransition
, UMLEvent
, UMLOpaqueBehavior
单元测试
根据状态图的层次结构,我设计了 MyStateMachine
做为状态图的 “ 画布 ”。学习
private UmlStateMachine stateMachine; private HashMap<String, UmlState> name2state = new HashMap<String, UmlState>(); private HashMap<String, Integer> sameName2state = new HashMap<String, Integer>(); private UmlRegion region; private HashSet<String> idHashSet = new HashSet<String>(); private HashMap<String, ArrayList<String>> source2target = new HashMap<String, ArrayList<String>>();
MyStateMachine
中设计了 name2state
, sameName2state
, source2target
几个映射关系,便于根据名字查询状态和前继状态及后继状态的关系。
设计MyStateMacheContainer
类来管理顺序图,做为顺序图查询指令的接口。
创建了MyUmlStandardPreCheck
类进行三条规则的预检查。设定三个不符合规则的集合来抛异常。
private Set<AttributeClassInformation> ruleTwo = new HashSet(); private Set<UmlClassOrInterface> ruleEight = new HashSet(); private Set<UmlClassOrInterface> ruleNine = new HashSet();
类图:
第一单元
从纯c选手走向java小白,前两次做业都是按照c的方式,面向过程来写。到了第三次做业,渐渐的有了一些java的基本思想,学了用基本的面向对象的方式抽象类,使得层次架构更清晰。
第一次做业
第二次做业
第三次做业
第二单元
参考了生产者和消费者的交互模型,使用Tray
类来进行电梯和请求队列的数据交互,也使得我后续一直在纠结所谓的调度器究竟是用来干什么的。第二次做业增长了一些需求,考虑到人员id的惟一性,我使用了一个队列来肯定人员的进出状况,做为确认人员是否进出的标准,和第一次做业差异不大。
相比前两次做业,第三次做业更让人头疼,也是我思考程序设计最长的一次做业,基本ddl前一夜才开始写。将需求一再简化,我使用了初始时就已经确认换乘路线的方式,直接复制了三个电梯类来模拟三部电梯的运行状况。更好的设计应当是抽象出一个统一的电梯类来继承,扩展性更好。
第一次做业
第二次做业
第三次做业
第三单元
这一单元主要是对规格的理解,按照jml注释写代码。难点在于图的数据结构算法的考察,如何才能不TLE是我最头疼的问题(第一次做业用了死亡for循环直接爆炸)。前两次做业都抽象出了具体的类来模拟图,还有容器类来进行对图的管理。最后一次做业就比较乱,因为我全部的查询处理方法都放在了图中,致使代码行数严重超标,不得不提一个类来存放这些方法,扩展性较差。
第一次做业
第二次做业
第三次做业
第四单元
前文已介绍。
经历了数次做业的(折磨)历练,我终于对于面向对象的思想有了必定的理解。面向对象的三大特性是封装,继承,多态。
多态 :类实例的一个方法在不一样情形下有不一样的表现形式,即不一样的外在行为。使具备不一样的内部结构的对象能够共享相同的外部接口。
以前的博客也分析过面向对象的SOLID五大基本原则,即
接口分离原则:模块间要经过具体接口分离开,而不是经过类强耦合。
咱们在设计程序的架构的时候应该尽量的遵循面向对象设计的基本原则,使得程序尽量的低耦合,高内聚。同一个模块内的各个元素之间的联系高度紧密,下降各个模块之间的相互依存度。
“OO竟然出了假期预习做业!”当时听到这个消息的我只以为好不容易盼来的假期莫得了。固然我仍是彻底没有好好预习窝窝,买了本java的教材看了几页就抛之脑后,开学前几天恶补了点基础知识,草草的交了假期做业。就这样,开始了从零开始的OO与OS生活。
回顾过去的做业,我开始写代码的时间愈来愈晚,思考程序的架构设计和实现算法比起写代码的时间要多的多。不知不觉,我已经能够短期内手撸近千行代码,比起以前的我至少码力提高了不少,也掌握了java 的基本思想,学会了面向对象的思惟,掌握了测试代码的方法,为学习更深层次的知识打下基础。
这一学期,窝窝占据了我很大一部分时间,也带给了我很多的精神压力。比起往届,这届窝窝体验更好一些,尽管有些不足,但确实让我受益良多,祝窝窝越办越好!