面向对象第四单元作业总结
面向对象第四单元作业总结
架构设计总结
UML第一次作业架构设计
第一次作业的架构设计我觉得做的不够好
UML图如下
在MyUmlInteraction中建立了一个UmlGraph, 通过对UmlGraph的查询进行interaction。
在UmlGraph中定义了以下数据
其中ClassInformation这个是对于接口和类这两种UmlElement的抽象, 包含了
- 所有的父类
- 所有的属性
- 所有的方法
- 关联的所有类
- 实现的所有接口
所有的查询都是先通过ID或者name找到相应的ClassInformation对象, 然后再其中进行查询。
在建立UML图的时候, 我用了三轮的parse, 针对不同的UmlElement我写了对应的parse方法。- 在第一轮parse里, 我读入了UML_CLASS和UML_INTERFACE
- 在第二轮parse里, 我读入了UML_ATTRIBUTE, OPERATION, ASSOCIATIONEND, GENERALIZATION, INTERFACE_REALIZATION这些element
- 在第三轮中, 我读入了UML_PARAMETER和UML_ASSOCIATION
UML第二次作业架构设计
在第二次作业中, 我对于整个工程进行了代码重构
UML结构图如上图所示, 在每一个UML图中一共有三个子图, 分别为
- classGraph 类图
2.sequenceGraph 顺序图
3.stateGraph 状态图
在对于UMLGRAPH的查询中, 把功能分摊到每一个类中去, 实现高内聚, 低耦合, 每种图之间不要有耦合关系。
classGraph
classGraph基本是把第一次的所有内容搬了过来, 除了添加了一些check的规则外没有太多改动。
sequenceGraph
sequenceGraph用来存储状态图, 核心数据结构为SequenceModel, 每一个model里面包含和许多SIngleLifeLine和UMLMEssage
在seuqcenGraph中提供了id to model和name to mode两种查询方式。
stateGraph
stateGraph和sequenceGraph的设计方式类似, 每一个stateGraph中有许多个StateMachineModel, 每一个model里有许多state。
state中存储了状态的转移。
OO理解方法的演进
四个单元, 对于OO的理解各不相同
- 第一个单元处于熟悉java语言的阶段, 对于OO没有太多了解, 更多的是通过封装的方式实现高内聚低耦合, 降低代码错误的方式。
- 到了第二单元, 有一些设计模式的东西在里面, 通过对生产者消费者模型的理解, 实现了多线程电梯, 自己看了一些设计模式的书, 了解了工厂模式, 里氏替换原则, OCP等。
- 第三单元, 我体会到的是一个软件如何从0开始, 一点一点加入功能, 最终变的很复杂的过程。 这需要把每一个功能抽象出来, 有些敏捷开发的意思。
4.最后一个单元UML,是对前面所有单元的综合, 虽然只有两次, 但是前面所用的技能都有体现。
测试理解和实践的演进
最开始的测试方式是通过idea自带的交互窗口进行测试。
之后学会了用命令行, 编译程序, 然后从txt里面读入数据, 进行测试。
到了多线程电梯单元, 和JML单元, 我通过python生成一些测试数据进行压力测试, 和输出对比。
后来逐渐开始使用JUNIT进行测试。
课程收货
通过课程, 我有以下几点收货
- 学会java语言, 了解封装继承多态的方法。
- 学会各种工具, 比如IDEA, checkStyle, metrics, jprofiler
- 学会了软件测试, 使用jUNIT 和自己写评测机生成数据来测试的方法。
- 对于架构设计和软件的重构方法有了一定的了解。(里氏替换原则, 接口抽离原则, 高内聚低耦合原则)
- 对于多线程并发有了深刻的认识。
- 使用JML建模语言对于软件进行规格设计, 和形式验证
- 使用UML对于架构进行设计
课程建议
有以下三点建议
- 建议指导书写的再清楚一点, 避免耽误无谓的时间。
- 添加一些设计模式的内容
- 取消JML