什么是OO?

面向对象,是一种编程的思想方法,但是在这门课程中,我们实际学习到的是将理论运用到具体实践上,将自己的想法付诸实践,不断去探索和优化的这一体验。

后两次作业架构总结

本单元两次作业,我们面对的是一个比较大的数据模型,类似于图,因此首先是如何存储以便方便访问和查找,我首先是实现的是最简单的暴力存储,对于所有的指令都存到一个可变数组中,需要用时再进行查找,但是在后面不断实现方法的过程中却发现,这个方法十分累赘,不仅没有用到面向对象的思想,而且每次查找使用多层遍历的方法将使得时间复杂度相当高,后来将UML图的类,接口等数据结构都建立对象来进行管理,面向对象的思想在最后两次作业中突出的比较明显,而这样的想法也是本学期前面多次训练的结果,因此我使用的架构就是对类,接口,方法,继承,实现等等要素进行对象化管理,建立他们自身的属性和方法,最终在一个类中进行调用,避免了多次重复的遍历,明显降低了时间复杂度。

前四次作业OO演进

第一单元的多项式作业对于我来说是一个十分巨大的挑战,初次接触这种工程量较大,信息量较复杂的题目,在数据结构和C语言中我总是习惯一个主函数来实现所有的方法和功能,而其他的函数只是一些细枝末节的补充,只是使代码看起来更加简洁,但是实际上对整体设计没有过多影响,可以说是一个函数莽到底,在第一单元的作业中我也是使用类似的想法,对于算法的设计十分关注,将所有的信息用人脑来处理,导致出现了很多细节上的差错,甚至可能半个小时前想到要写的代码,之后完全忘记了,导致缺失了整个功能模块,还存在大量的细节bug难以被修复,导致在第三次作业中道崩殂,十分惨淡,回想起来第一单元作业的C语言写法完全没有用到面向对象的思想,写起来也是十分的痛苦。

第二单元作业中关于电梯的多线程调度还是很有意思的,在多线程的设计模式里面,我感觉是比较容易实现面向对象的功能,也很好的引导了我们从面向过程到面向对象的跨越,因为很多多线程代码的规格和规范都已经有很多书籍和ppt可查,我们可模仿的程度很高,那么前两次作业都是没有太大难度的,而且写出的代码也比较面向对象,但是第三次作业的难度在于调度算法的实现,对于数据结构,算法的知识提出的比较高的要求,写起来也是比较困难,我也发现自己一遇到算法比较复杂的题目就会严重倾向于面向过程的写法,问题就出在没有理清路线,分析好问题,在分析阶段就将问题使用面向对象的思想来处理,我开始意识到分析问题阶段的面向对象思想。

第三次作业是JML规格设计,这一单元我主要收获了对JML的理解,我起初认为JML就是完全把你的代码设计好了,只需要按照他的要求写出代码即可,后来实际操作才发现他仅仅是提出了要求和给出了条件,而具体如何解决问题,具体如何设计还是自己的问题,因此在设计的时候仍需要注意运用面向对象的思想,如果把这一单元的作业当成图的编程题来写,那么这将是一道比较困难的编程作业,如果将这一单元的作业融入面向对象的思想,实现结构分层处理,那么关键在于理清问题的层次结构和问题的等价性等等,图的算法就显得不那么重要了。

第四单元我认为还是比较难的,工程量有点大,主要是一开始对指导书的描述没有考虑的很清楚(其实感觉指导书有些地方没有交代清楚),然后就是改结构和写代码的事情了,又一次的重构,我将第一次面向过程的代码改成了面向对象的代码,也是这学期下来面向对象思想学习的体现吧,具体的算法方面并没有提出了很多的要求,但是对于层次和逻辑的理解仍然后很高的要求,如果没有逻辑性好,清晰易懂的代码那么debug的过程将无比痛苦。

课程收获

1、提前完成任务是个好习惯,第一单元就让我认识到OO的任务量巨大,如果赶在ddl前再开动,万一有差错将是毁灭性的,因此给我最大的教训就是摆脱拖延症,提前完成任务;

2、面向对象思想的学习,从一开始的不理解,到现在的具体实践,较大的代码量让我认识到了面向对象思想在工程开放上的重要性,面向过程的代码始终不能成为工程应用代码,面向对象的思想很好的规定了代码的逻辑架构,减少了代码bug,易于多人团队之间的工程开发,是必须要掌握的编程思想;

3、JML/UML等等工程开发工具的了解和使用,理解这些感觉让我更接近真实的工程应用开发,从一开始的代码规范,到JML规范再到UML三种图的学习,这些规范的学习和掌握是未来工程开发的必备技能,仿佛让我走出了单调单纯的百行代码行天下的解题模式,而来到了更大的更真实的代码开发环境;

4、设计的重要性,设计是整个工程代码是否成功的关键,这么多次作业让我明显地感受到,在复杂的要求面前,错误的设计会带来巨大的工程量、丑陋不堪的代码以及各种莫名其妙的bug,而正确的设计则会使程序更加简洁和清晰,不仅健壮性更好,写起来也更加得心应手

三个具体建议

1、上机。这学期的上机紧接着课程进行安排,后面的上机内容明显和善很多,但是前几次上机太过硬核,因为是刚刚上完课的内容,完全没有消化就进行作业练习,基本上是现学现卖,难免出现很多错误,虽然这个学习效率很高,但是对成绩的影响着实让人心痛,认为这样的安排不合理,建议是希望分开上课和上机时间,并且对每次上机的内容有助教写标答吗,或者参考程序;

2、讨论区。讨论区发表的讨论无法删除修改比较难受,希望改进,感觉氛围有点拘谨,有些人可能不敢发言,每次作业讨论不够激烈,希望能放宽一些讨论区规范,活跃一下氛围;

3、时间安排上。能否缩减一些互测时间而增加自己写代码的时间?感觉到后期互测的活跃度明显降低,希望能给出更多的时间调整自己的架构

北航OO课程完结总结的更多相关文章

  1. 2019北航oo课程第二单元作业总结..#_#..

    学习了之前在写代码是从来没有见过的多线程之后,便迎来了此次电梯作业.说实话,这次作业做得十分的辛苦,虽然在前三次作业中领悟到了java面向对象的精髓,但是再加上了多线程之后,又开始理不清思路,对自己的 ...

  2. 2019OO第四单元作业总结&OO课程整体总结

    第四单元作业总结 第四单元的作业主题是UML图的解析,通过对UML图代码的解析,我对UML图的结构以及各种元素之间的关系的理解更加深入了. ------------------------------ ...

  3. 2019年北航OO第四次博客总结<完结撒花>

    一.UML单元架构设计 1. 类图解析器架构设计 1.1 UML类图 这次作业的目标是要解析一个UML类图,首先为了解耦,我新建了一个类UmTree进行解析工作,而Interaction类仅仅作为实现 ...

  4. OO课程的完结,软件工程学习的开始

    目录 UML小结 阅读学习 大象:Thinking in UML UML精粹 UML和模式应用 本单元作业的架构设计 四个单元中架构设计及OO方法的演进 四个单元中测试与实践的演进 课程收获 三个具体 ...

  5. 北航OO第四单元作业总结(4.1~4.3)及课程总结

    前言 在学习过JML规格描述语言之后,本单元进行了UML(Unified Modeling Language)的学习.和JML单纯用语言描述的形式不同,UML通过可视化的图形形式,对一系列有关类的元素 ...

  6. 2019年北航OO第1单元(表达式求导)总结

    2019年北航OO第1单元(表达式求导)总结 1 基于度量的程序结构分析 量化指标及分析 以下是三次作业的量化指标统计: 关于图中指标在这里简要介绍一下: ev(G):基本复杂度,用来衡量程序非结构化 ...

  7. OO第四单元总结——查询UML类图 暨 OO课程总结

    一.本单元两次作业的架构设计总结 作业一.UML类图查询 1. 统计信息图 2. 复杂度分析 基本复杂度(Essential Complexity (ev(G)).模块设计复杂度(Module Des ...

  8. OO第四单元总结暨OO课程总结

    一.第四单元作业总结 本单元的主要任务是对 Uml 图元素进行管理和查询,测试一开始会输入一个静态图,之后会对图中相关内容进行查询. 第13,14次作业 第14次作业新增内容很少,故与第13次作业放在 ...

  9. 2020北航OO第四单元总结

    2020北航OO第四单元总结 一.本单元架构设计 本单元作业是实现一个UML图解析器,其中实现接口及主要框架课程组已经提供,只需要我们完成特定功能. 在第一次作业时,感到十分迷茫,不知道如何下手,最后 ...

随机推荐

  1. OpenFOAM——同心环中的自然对流

    本算例来自<ANSYS Fluid Dynamics Verification Manual>中的VMFL009: Natural Convection in a Concentric A ...

  2. 【转】谈谈servlet、spring、struts

    今年我一直在思考web开发里的前后端分离的问题,到了现在也颇有点心得了,随着这个问题的深入,再加以现在公司很多web项目的控制层的技术框架由struts2迁移到springMVC,我突然有了一个新的疑 ...

  3. Spark安装(standalone)

    文档:http://spark.apache.org/docs/latest/spark-standalone.html 安装scalahttps://www.scala-lang.org/downl ...

  4. ES6继承小实例

    ES6继承小实例 一.总结 一句话总结: js中的类和继承可以多用es6里面的,和其它后端语言的使用方法一样 class Animal { constructor(name) { this.name ...

  5. python练习:寒冰猴子狐狸,猫狗咬架

    python练习:寒冰猴子狐狸,猫狗咬架 一,寒冰猴子狐狸 class Person: def __init__(self, na, gen, age, fig): self.name = na se ...

  6. activiti 术语 国际化文件

    activiti-explorer editor-app 国际化文件 - 大强的博客 - CSDN博客https://blog.csdn.net/daqiang012/article/details/ ...

  7. python开发--列表当全局变量来使用

    python中,申明全局变量的时候,一般该变量类型基本上是:字符串或数字: 比较少用“列表”当做变量, 当有作用域限制的情况下,想要外部调用内部作用域的“列表”变量时,可以用这种方式,外部申明一个空列 ...

  8. Python - Django - form 组件校验功能

    app01/models.py: from django.db import models class UserInfo(models.Model): username = models.CharFi ...

  9. LeetCode:字符串相加【415】

    LeetCode:字符串相加[415] 题目描述 给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和. 注意: num1 和num2 的长度都小于 5100.num1 和num2 都只 ...

  10. svn客户端清空账号信息的两种方法

    1.直接删除配置 C:\Users\Administrator\AppData\Roaming\Subversion\auth 一般在这个文件夹下 2.svn的设置里清空