oo修仙之路
写在前面:
之前听说过oo这门课的威力,计院全体修仙现场的图也被转了不知多少遍,然而自己不亲身经历就不知这门课的难度所在。每次debug时耳边总会想起三国杀里面周瑜的话“挣扎吧,在血和暗的深渊里;痛苦吧,在仇与恨的深渊中!”oo对我来说大抵就是这样,痛苦却无法避免,下面就来回顾一下这一个月以来的oo生涯。
第一次作业:
第一次作业我美滋滋地以为老师会讲Java,像c语言和数据结构那门课一样,第一次作业并不会太难。然而我太天真了,第一次作业就给了我致命一击,看着如同天书一般的指导书,生平第一次懵了。正则表达式是什么?老师连Java基本语法都不教的吗?(老师:没错儿~)马克思说过:当你不会写代码的时候,你就去多看看别人的代码,学习学习就会了。(马克思:我没说过)于是秉承着这一理念,我去问学长要他的代码看看,试图从中分析出一些东西。然而,不会基础语法的代码就像一盘散沙,不用run它自己就散了,我并没有分析出任何东西并且写出了一滩狗屎。这个时候我才想起来,应该去好好听听基础语法课,看看基础语法的书。这是我第一个致命错误。
第二个错误就是我没有一个良好的规划,这也是我在三次作业中犯的共同错误。因为这个原因,我常常搞不清我现在在干什么,下一步要怎么做,也导致了写代码时本来应该先完成基本功能再去往里面加东西,我却是写着写着就加进去了,导致后面工作无法展开,一塌糊涂。
第一次作业是处理多项式加减运算的模拟计算器,说到底我写的还是一个面向过程的代码。在读取时,采用了逐字符读取的方法,由于正则表达式没能学好,最终还是选择了状态机。而由于状态机的问题,对于正常输入也总是报错,导致了代码正常功能测试没有通过,成为了无效作业。之后在课下想通原因进行了调整,重新用正则表达式写了(在这里我要感谢实验课,不知道为什么有些东西在课下怎么都想不通,一旦上了实验课,在ddl的夺命连环call之下,一下子就想通很多问题!真的太神奇了!小岳岳脸.jpg)。但第一次挑战依旧是gg了。在这里就不放第一次作业的类图了。(就一个类而已!请你闭嘴好好反思行吗!)
胜负乃兵家常事,大侠请重新来过!
第二次作业:
第二次作业gg的理由非常简单,我作死地让命令行输入要进行的电梯操作,让控制台输入“run”,这样公测当然通不过啊!!!公测怎么有那么智能?!这个gg的理由被我们宿舍笑了好久,我也想乘坐时光机回去问问我自己到底是怎么想的啊……
放上修改以后的类图(我以后再也不想碰命令行了……):

这次作业写起来还是很困难(这不是废话吗……第一次作业就那么艰难),主要原因是我不明白为什么需要五个类,这五个类到底要干什么,他们之间的关系是什么。在询问过某位大神之后,终于对于面向对象有一点点理解了,也明白在面对一个项目时,要怎么去分析和设计。
本次作业要构建一部傻瓜电梯,使用五个类完成,Elavator类共有5个属性,3个方法,分别实现返回时间,楼层,计算上下楼层所需时间并更新当前楼层的功能。
Floor 类十分鸡肋,没有程序应用上的作用。
Request类有4个属性,6个方法,分别实现返回目标楼层,时间,请求类型 ,电梯运动方向,对这些变量的赋值和计算赋值。
Requestqueue类中有1个属性,6个方法,方法规模都很小,只负责返回请求,计数及将新的请求加入到队列。
Dispatcher类类中有2个方法,其中一个用于建立队列处理输入,另一个用于返回队列。
第三次作业
第三次作业说起来轻巧,是在第二次作业的基础上增加“捎带”功能,然而真正写起来复杂程度超出了我的想象。过分细化的定义让人一头雾水,而这也是第一次有效作业emmm……应该说还是挺开心的,看到作业有效后狠狠哭了一场,有一种修仙小说中凡人刚刚达到炼气期踏上仙途第一步的感觉。
话不多说放上类图:

我的bug:
这次作业公测挂了三个点,第二次作业对于同质请求没有写好,导致了第三次作业挂在同质点上了。自己在给别人测的时候发现了一些我程序上边界点的bug,
但是给我测的那位同学没有发现orz没有被报bug虽然挺开心的,但是并不能说明程序就真的没有bug了,还是要努力改正。
别人的bug及测试方法:
在宿舍同学的指点下,我发现可以根据测试树先全面地写一份测试用例,互测时全部跑一遍。
通过这个方法找出对方非常多bug,比如说时间限制、乱序处理、捎带不捎带、同质不同质……
阅读对方readme中的各种规定,有时从他的叙述中可以发现逻辑上的错误,进而构建测试样例(那岂不是美滋滋,而且第三次作业但凡涉及捎带问题,up和down对偶性构建测试样例,一查一个准)。
这个就有点困难了,而且有种语文作业咬文嚼字的感觉,在身边同学几次撕逼的过程中也发现,基本通过这种方法找到的bug就和甲方乙方互相不理解一样,各说各有理,我个人不是很喜欢这样测试。
不过为了避免被别人通过这种方式构建,还是要好好写自己的readme!
最后就是仔细阅读别人的代码,发现其代码中的不足从而测试
对于目前的我来说,这几乎是不可能的。我ball ball各位大佬们下次能不能给自己代码写上注释,写注释看起来都很困难,不写注释是真的要很久才能看懂(所以我放弃了)
一些心得体会:
- 不抛弃,不放弃。第二次作业无效的时候已经考虑退学了,最后被现实一个巴掌扇了回来(拿不到大学毕业证书真的太难生存了)。哭着跟父母说我不上了,反正也学不会,最后想着能学一点是一点,硬着头皮去看书敲代码,边哭边敲,居然也熬过去了。当然在这期间少不了很多人的帮助,想想之间钻牛角尖走不出来的日子只觉得可笑,逃避解决不了任何问题,只能让自己变得越来越差。不要把oo当成洪水猛兽,当成修仙好了(23333),刚刚踏入仙途,还没筑基,会面对很多困难。修仙路上是有天才,资质较好,年少便已名扬四海,像我这种呢,就是个外门小弟子,能力不强,心魔还挺重,但是为着未来或许有的一点希望,还是要努力地去拼搏啊。
- 认真对待每一次作业,要有清晰的思路分析,而不是像我一开始一样东一榔头西一棒子。鲁迅说过,只有经过设计的程序才是好程序。(鲁迅:我没说过)为什么一直浪费时间却做不出来,很大一部分源于没有认真设计该如何构造,才导致后期越来越模糊越来越不知道怎么写。
- Bug一定要改,虽然我嘴上说着“除了crash问题其他bug我绝对不改了”,但是身体还是很诚实地去改bug了为什么啊!因为后面的程序是在这个程度上叠加的,如果现在的bug不改,之后可能会出现大问题。
- 互帮互助、团结协作。这是oo让我意识到的非常重要的一点。没有人是一座孤岛,一个人的bug可能是一群人的bug,同样,一个人的数据也可以是一群人的数据。这门课不是养蛊,一个个斗个头破血流你死我活才算胜利。诚然,互测中有恶意扣分的现象,也绝对无法达到乌托邦的理想世界,但是我还是想说,这门课重要的不是你给别人扣多少,而是你能不被别人扣多少。
- 锻炼身体,好好修仙。熬夜到喝速效救心丸的经历我不想有第二次。
言尽于此,兴致阑珊,还是那句话,愿天堂没有oo。
oo修仙之路的更多相关文章
- 程序猿修仙之路--数据结构之你是否真的懂数组? c#socket TCP同步网络通信 用lambda表达式树替代反射 ASP.NET MVC如何做一个简单的非法登录拦截
程序猿修仙之路--数据结构之你是否真的懂数组? 数据结构 但凡IT江湖侠士,算法与数据结构为必修之课.早有前辈已经明确指出:程序=算法+数据结构 .要想在之后的江湖历练中通关,数据结构必不可少. ...
- 运维(SA)修仙 之路
运维(SA)修仙 之路: 大纲: 系统 ,网络 ,数据库,开发 系统 :linux(cent OS && ubuntu) 网络 :路由,防火墙,安全 数据库:mysql, mong ...
- 《带你装B,带你飞》pytest修仙之路3 - setup/teardown
1. 简介 学过unittest的都知道里面用前置和后置setup和teardown非常好用,在每次用例开始前和结束后都去执行一次.当然还有更高级一点的setupClass和teardownClass ...
- 《带你装B,带你飞》pytest修仙之路5 - yield操作
1. 简介 上一篇中,我们刚刚实现了在每个用例之前执行初始化操作,那么用例执行完之后如需要清除数据(或还原)操作,可以使用 yield 来实现.fixture通过scope参数控制setup级别,既然 ...
- LazyCoder修仙之路
本人不才,没有高文凭,茹果本人的修仙[开发]之路能 ,走的很远,后来的人能看的上我 作品,有不足,和不对,帮帮我完善和理解.这也是我 学习笔记把!
- 程序员修仙之路--优雅快速的统计千万级别uv(留言送书)
菜菜,咱们网站现在有多少PV和UV了? Y总,咱们没有统计pv和uv的系统,预估大约有一千万uv吧 写一个统计uv和pv的系统吧 网上有现成的,直接接入一个不行吗? 别人的不太放心,毕竟自己写的,自己 ...
- 程序员修仙之路- CXO让我做一个计算器!!
菜菜呀,个税最近改革了,我得重新计算你的工资呀,我需要个计算器,你开发一个吧 CEO,CTO,CFO于一身的CXO X总,咱不会买一个吗? 菜菜 那不得花钱吗,一块钱也是钱呀··这个计算器支持加减乘除 ...
- Angular 4+ 修仙之路
Angular 4.x 快速入门 Angular 4 快速入门 涉及 Angular 简介.环境搭建.插件表达式.自定义组件.表单模块.Http 模块等 Angular 4 基础教程 涉及 Angul ...
- Angular 4.x 修仙之路
参考:https://segmentfault.com/a/1190000008754631 一个Angular4的博客教程目录
随机推荐
- 安卓自定义View实现图片上传进度显示(仿QQ)
首先看下我们想要实现的效果如下图(qq聊天中发送图片时的效果): 再看下图我们实现的效果: 实现原理很简单,首先我们上传图片时需要一个进度值progress,这个不管是自己写的上传的方法还是使用第三方 ...
- T-SQL中的APPLY用法(半翻译)
本文接上文:T-SQL 中的CROSS JOIN用法(半翻译) 同样可用于微软认证70-461: Querying Microsoft SQL Server 2012考试的学习中. --------- ...
- 详解EBS接口开发之采购申请导入
更多内容可以参考我的博客 详解EBS接口开发之采购订单导入 http://blog.csdn.net/cai_xingyun/article/details/17114697 /*+++++++ ...
- 01_MyBatis EHCache集成及所需jar包,ehcache.xml配置文件参数配置及mapper中的参数配置
1 与mybatis集成时需要的jar ehcache-core-2.6.5.jar mybatis-ehcache-1.0.2.jar Mybatis.日志.EHCache所需要的jar包如下 ...
- shell入门之流程控制语句
1.case 脚本: #!/bin/bash #a test about case case $1 in "lenve") echo "input lenve" ...
- (一一三)使用系统自带框架操作SQLite3数据库
系统自带的框架是基于C语言的,使用比较繁琐. 下面是使用步骤: 首先导入libsqlite3.0.dylib. ①在Document目录下打开数据库,如果没有则创建. NSString *sqlite ...
- UNIX网络编程——非阻塞accept
当有一个已完成的连接准备好被accept时,select将作为可读描述符返回该连接的监听套接字.因此,如果我们使用select在某个监听套接字上等待一个外来连接,那就没有必要把监听套接字设置为非阻塞, ...
- Android列表视图ListView和ListActivity-android学习之旅(二十四)
ListView简介 ListView是android中常用的一种控件,创建ListView有两种方式: 1.在xml中使用ListView控件创建. 2.使用activity继承ListActivi ...
- 最近在线笔试的一些感想和总结,阿里巴巴,腾讯,百度,360。c++研发,机器学习等岗位
持续更新中... 1.编程界牛人太多了,还是要好好a题,好好弄清楚基础算法,并且用代码实现 2.c/c++方向其实来回来去那么几道题,做好了记到脑子里. 下面就是我打算把不会的,不清楚的都贴上来然后好 ...
- React Native之样式
样式 React Native 不实现 CSS,而是依赖于 JavaScript 来为你的应用程序设置样式.这是一个有争议的决定,你可以阅读那些幻灯片,了解背后的基本原理. 声明样式 在 React ...