一. 本单元两次作业架构设计

这两次作业实际上难度不大,不存在算法上的难题,大部分时间都是用在处理UML图中各个元素的关系上。

第一次UML主要处理UML类图。有UMLclass,UMLinterface两个顶级元素,其中UMLclass又下属UMLoperation等组成元素。此外的UMLgeneralization,UMLassociation等则是顶级元素间的关系。

完成本次作业,我觉得主要在于理清上述元素间的关系。

第一次作业实现后的关系图如下:

而第二次作业则是在第一次作业的基础上加入了顺序图等,只需理清各种图中所含元素与关系,自然就能完成需求。

第二次图如下:

二. 四个单元中架构设计及OO方法理解的演进

oo是将事件分解为各个对象间的交互,事件的推进是经由外界条件触发(在我们的作业中表现为各个需求的输入),每个对象的具体行为以及对象间的耦合行为。

我认为,对于面型对象编程,具体到对象的底层行为以及对象间的交互行为,是封装好的面向过程的函数,面向对象与面向对象的区别应该在于将行为与行为的主体、客体相分离而非混在一起。

在第一单元的作业中,我们学习的是将表达式求导这一事件的表达式,分解为项、因子等更加小的对象进行耦合处理。在前两次作业中,我们主要是将每个对象分别处理再相加即可,而在第三次作业,由于需要使用递归下降,我们开始注意对象间的耦合关系。

在第二单元的作业中,我们学习的是多线程环境下的面向对象。在多线程环境下,每个线程都是由对象耦合得到的,而不同线程间往往还有共有的对象,在这里我们需要保证操作的原子性。在该次作业中,我使用了生产消费者模型,将顾客队列作为生产者,多部电梯每一部作为一个消费者来完成,但是对于电梯对顾客队列的询问没能处理好。

在第三单元的作业中,我们主要学习了JML,它可以帮助我们约束代码。在这一单元的作业中,我们除了JML外也开始在oo中加入一些算法。我将算法模块作为了一个单独的对象进行处理。

在第四单元的作业中,我们完成了UML的解释器,因为UML本身就是面向对象的产物,这一单元相对简单,只需要理清各元素间关系即可。这一次是我觉得我的对象分割处理得最好的一次。

三. 四个单元中测试理解与实践的演进

这方面我做的不太好,我在建模时考虑的比较细,一般第一次提交后只会有一些小bug,处理一些细节问题后边不太会有问题,所以对于数据测试这方面没有下太多功夫,只是做了基本的数据测试。对于如何测试,学会了一些基于控制台的测试方法。

四. 课程收获

学会了Java,学会了基本的面向对象,学会了一些测试时的小技巧。

五. 改进建议

1. 课程时间的协调。oo的理论课在后期多次拖堂,我认为应该根据课堂时间对内容进行一些详略调整;对于oo的作业,其时间和os有相当的重合,作为大二下六系的两门大课,不应该将时间进行一下协调吗?同时在大多数时候,oo的上机都是上午讲,下午测试,中间就隔了两小时,这种安排极不合理,上机时一脸懵逼,根本起不到什么效果(这是我和我周围宿舍的同学的反应,代表不了大多数人)。

2. oo作业相关问题。首先需要安排好作业的时间,本学期考期写大作业简直要人命,我记得大约是16号左右才发布能够真正知道同学们的指导书,里面仍有相当多的问题,比如样例中例子与给出的答案不匹配误导了一部分同学,等等。此外希望能够减少改指导书的次数,在学期初期多次修改指导书。

3. 互测房间人数过多,虽然是想增加我们的代码阅读量,但是也要考虑主观能动性,每周看6份代码,还要求我们找出bug,难道我们其他课都不上了吗?这导致最后互测积极度明显下降。

最新文章

  1. Unity3D 摄像机的Transform通过摇杆输出的方向
  2. Java 中String常用方法
  3. 移动端rem布局的适配mixin【转藏】
  4. PHP 計算字符串長度函數
  5. PHP - FTP上传文件类
  6. MFC利用ADO建立access数据源 ---包括访问带access密码与不带access密码两种方式)
  7. 打不开磁盘“I:\xxx.vmdk”或它所依赖的某个快照磁盘
  8. 如何在 Centos7 中安装 nginx
  9. socket之解决粘包方法
  10. [jzoj]1229.Hanoi
  11. linux环境下载和安装scala
  12. 端口转发工具lcx使用两类
  13. 图像数据增强 (Data Augmentation in Computer Vision)
  14. 在linux中安装字体
  15. 洛谷P1141 01迷宫【bfs】
  16. 运行gedit报No protocol specified
  17. python subprocess中ssh命令的特殊性
  18. js之 data-*自定义属性
  19. MySql安装成功后无法远程登录
  20. python新建以时间命名的目录

热门文章

  1. MongoDB(2)- 安装 MongoDB
  2. elementUITable的多选框:分页选择数据回显,分页保存选中的数据。
  3. PHP的引用计数是什么意思?
  4. Linux系列(22) - 用户登录查看命令
  5. css selector regexp css选择器 正则表达式 css 参考手册
  6. navicat导出DDL语句
  7. hadoop生态之CDH搭建系列
  8. 使用Gitmoji进行git commit的快速查阅指南
  9. ssh 登录远程服务器--config配置
  10. P3971-[TJOI2014]Alice and Bob【贪心】