oo面向对象第一单元总结

  oo第一次作业主要考察了多项式的求导,从简单的幂函数求导到三角函数求导再到嵌套函数的求导,难度循序渐进,对我们对于面向对象的理解的要求也在一次一次提升。一行行代码打下来,一夜夜熬过去,我也来到了这个短暂的停靠站,对自己前三次的作业进行一个简单的回顾。

 

第一次作业:

  测试结果:在强测时被一个同质bug hack到了六个点,直接导致我自己很可惜的没有进入互测,问题在于x和^之间的空格在我写正则表达式进行判断时被遗漏,导致强测大多数点输出的结果都是”WRONG FORMAT!”,我个人对这个评测结果和给分制度并没有任何的异议,因为我觉得这个问题的出现确实是我没有做好本地测试的原因,最基础的错误,往往是也是最严重的,这一点不管是在现在的学习还是以后的工作都会得到体现。

  主要问题:感觉第一次作业结果并不好的原因就在于中测通过之后没有进行更严格的测试,不是按照先测试、后写代码的顺序来进行的,没有按照规律构建较为完备的测试集,才导致了这么基础的错误的发生。在第二三次作业中由于我做好了这一点,导致结果明显比第一次要好很多。

  过程反思:在第一次作业的时候我个人感觉自己并没有很好的理解“面向对象”这个概念,整个程序就是按照一个main从头到尾地写了下来,还依旧停留在c语言面向过程的思维里,这样写出来的程序不论是鲁棒性、扩展性还是后面对于修复bug而言都是十分不利的,很多时候修复一个bug往往需要对好几个方法进行改动,这一点我在第一次作业的修复过程中深有体会。

 

第二次作业:

  测试结果:强测点全部通过,但是显然我对于对于三角函数的化简并没有做到最好,只是简单地进行了sin(x)^2+cos(x)^2=1这个公式的有关化简,对于大多数三角公式都没有进行处理,最终强测只拿到了98.3分,互测也被找到了三个bug。

  主要问题:第二次我觉得我确实相对于第一次有了一定的进步,但是代码架构仍然十分令自己不满意,各种方法的关系错综复杂,没有做好逻辑的梳理,导致自己在检查bug时依然十分头疼,总是在一个类中反复寻找逻辑关系。

  过程反思:但是第二次作业我也有了一定的收获,那就是在互测环节中,我自己尝试去利用shell脚本进行了程序的对拍,这样对于bug的查找即高效又省力,我需要做的仅仅就是确保自己写的shell文件没有任何的问题即可。

  虽然第二次作业和第一次作业有着许多相似之处,但是我深知我必须对自己的代码进行彻底的重构,不然对于第三次作业的进行将会极为不利。但是第二次作业我对对象的理解仍然不够深刻,我只是简单的将程序分为了main、多项式处理(poly)和单项式处理(mono)这三个类来进行书写,这样我的poly类中仍然有着庞大的代码数目和十分复杂的方法关系,很多完全可以单独拿出来作为一个类的方法,都被我杂糅进了poly这个类中,这是我所犯下的错误。

 

第三次作业:

  测试结果:第三次作业和前两次作业相比难度确实大了很多,就我个人而言,对有关结构的问题和同学进行了近两天的讨论,最后通过两个夜晚的奋斗终于在周二下午成功解决了中测的所有测试点,(虽然后来延时心里确实有些小小的不平衡,但是还是利用这个时间找出了自己的几个bug并进行了略微的优化)。最终强测还是错了一个测试点,并且在互测中被找出了一个bug,不得不说一下在互测的过程中我深刻的感受到了同级大佬的强大,不论是优化的程度,还是代码的架构都十分让人佩服。

  过程反思:在这次互测中同班的朋友教会了我使用python脚本进行表达式的求导和计算,这样我就可以利用shell文件对每个人的表达式赋值计算并查看结果,这无疑是一件让人十分有成就感的事,这样我也避免了去检查同组复杂的的输出表达式,而可以直接通过结果来快速判断正确性。

  在第三次作业中我觉得我的整体架构比前两次要好得多,清晰得多,我一共分了八个类,并在因子的求导部分利用了继承来进行书写,常数、三角函数、单项式和表达式因子都是因子这个父类的子类,这样写起来逻辑十分的清晰,在debug的过程中也更加容易锁定自己bug所在的位置并快速进行修改,正确度也高了许多。

 

三次作业代码分析:

  在三次作业之后,我利用idea自带的metrics插件对三次作业的代码复杂度进行分析,结果如下:

                         

  我个人很惊讶的发现到第三次作业代码长度竟然略小于第二次的作业代码长度,这里我对这个现象进行了一下简单的分析,首先是我第三次作业的优化明显不如第二次做的好,而对于第二次作业来说,结果优化部分大概占据了八十到一百二十行的代码量,这是原因之一,其次是我第三次作业的框架要优于第二次作业,不论是类的划分,还是继承等方面都比第二次好得多,这也就导致少了很多冗余重复的代码。

 

  这三次作业每一次都让我对面向对象这个概念有了进一步的认识,对程序的构架设计的越好,程序的各方面性能也随之变得更好。我利用idea查看了每一次作业的类图,结果如下:

    第一次作业:

                           

 

  第二次作业:

                           

 

  第三次作业:

                           

   很明显我每一次作业的设计都相对于上次的有了很大的提升,而随着我结构的一次次完善,相应测试的分数也有所提高,修改bug的难度也变得越来越简单,我觉得我在逐渐从过去的面向过程往面向对象不断地前进,这也是我必须从这门课里学习到的最重要的东西之一。

 

对于bug查找的分析:

  其实就我个人的感觉而言,这一次作业bug并不太可能出现在求导的部分,基本上当大家通过了中测的所有样例之后,对因子或者项的求导功能大概率是不存在缺陷的,所以在互测环节时,bug基本都是出现在正则表达式的判断部分,或者是输出的格式问题上,构造一个完备的略微基础的测试集,有时候比很复杂很长但是测试类型同质的测试样例更为有效。

  以我自己为例,在第二次作业的互测环节中,我被hack到的样例分别是1*和++++,这些数据都是最简单最基础的测试样例,但是往往我们就会在正则匹配的部分忽略这些情况,其实复杂的测试样例也就只是多个简单样例的综合测试,我们提前做好一个完备的简单样例的测试集,复杂样例的通过只不过是顺其自然的事情。

 

小小的总结:

   虽然通过每一次作业我都能看到自己在某些方面取得了明显的进步,也有了继续努力的动力,但是相比于同级大佬们的代码而言,我的程序各个方面都还存在着极大的优化空间,这将是我未来进一步努力的方向,希望自己的能力可以通过这门课得到极大的提升。

 

 

转载于:https://www.cnblogs.com/wth-blog/p/oo_first_summarize.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/278099.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Microsoft Teams免费版本初体验

Microsoft Teams推出有一段时间了,如果想要体验Teams,必须需要有Office365的订阅。最近微软为了进一步推广Teams,突然宣布Teams免费了。使用过Teams的读者知道Teams是基于Office365账号和组的,那它免费后,不使用Office…

强制禁用gitlab的双因子认证:Two-Factor Authentication

(一)问题描述: 此博客解决如下问题:禁用gitlab的双因子认证 禁用前,如图(此时,你在gitlab中什么也干不了) (二)思路分析: 百度了很多方法&#xf…

如何将Outgoing Webhook部署到中国版Azure

在这篇文章中,我们主要来如何将Azure DevOps中的项目作为应用发布到中国版Azure的App Service中。 什么是Azure DevOps Azure DevOps, 原名为VSTS, 全称是Visual Studio Team System,是由微软开发的一套具有高生产力、高集成性、可扩展的生命周期开发工…

Google SRE 读书笔记 扒一扒SRE用的那些工具

写在前面 最近花了一点时间阅读了《SRE Goolge运维解密》这本书,对于书的内容大家可以看看豆瓣上的介绍。总体而言,这本书是首次比较系统的披露Google内部SRE运作的一些指导思想、实践以及相关的问题,对于我们运维乃至开发人员都有一定的借鉴…

Microsoft Teams的Meet Now功能

今天,我们宣布完成了Skype for Business to Teams路线图中首次披露的几项关键会议功能。当个人联系,沟通和协作时,工作就自然而然的完成了,我们相信这些功能(除了我们2月的公告之外)使Microsoft Teams为所有…

Java泛型主题讨论

说明:在学习泛型这一知识点中,主要参考自《疯狂Java讲义》第7章P307-P330的泛型内容,因为是跳着阅读,所以前面的一些名词不是特别清楚,这里也做出适当备注,供自己识记与理解。 1.泛型 理解:说到…

从Microsoft Teams技术栈看前端技术发展趋势

在前不久的微软美国一年一度的Ignite大会上,微软宣布Microsoft Teams是微软历史上发展最快的应用。它将取代Skype for business,成为语音视频协作的主打产品。 我也有幸在上个月微软中国年度技术大会Tech Summit 2018上被邀请作为讲师讲解基于Teams平台…

Confluence Cloud的Teams Message Extension

Confluence Cloud的Message Extension现在正式登入Microsoft Teams。 它可用于团队频道和私人聊天,使您的对话更具描述性和信息性。 从Microsoft Teams应用商店获取Confluence Cloud应用程序并连接到Confluence Cloud实例。 连接后,您将能够搜索Conflue…

45 | 打蛇打七寸:精准测试

转载于:https://www.cnblogs.com/lmx0621/p/10614966.html

Teams App统计

周末闲来无事,统计了一下Teams的app商店里的app ( Teams App Store )。截至到现在(2018年11月)一共有145个app。要注意一点:如果app不是公开的(即单独安装到Office365租户里,并没有提交到office store&…

你必须要懂的APK瘦身知识

随着业务复杂度的逐渐增加,代码、资源也在不断的增加,此时你的APP大小也在增加。从用户层面来说,面对动辄几十兆的APP来说在非WIFI情况下还是会犹豫要不要下载,不下载你就可能因此失去了一个用户。从公司层面来讲,流量…

DHT网络

(基础技术) 现在有一种方法,可以通过磁力链接,例如magnet:?xturn:btih:0482e0811014fd4cb5d207d08a7be616a4672daa,就可以获取BT文件。 这个是通过DHT网络来实现的。 DHT网络是一个去中心化的,分布式信息存储系统。 存储的信息就…

Node文件模块

在上一篇文章中有提到,Node模块分为核心模块和文件模块,接下来就简单总结一下文件模块。 文件模块则是在运行时动态加载,需要完整的路径分析、文件定位、编译执行过程、速度相比核心模块稍微慢一些,但是用的非常多。这些模块需要我…

PHP GD库解析一张简单图片并输出

这里只演示一下2种颜色值的图片&#xff0c;简单描述下概念。 首先要安装下GD库。否则下面的代码运行不了。 $size getimagesize(2.png); // 获取图片大小 $res imagecreatefrompng(2.png); // 获取指定图片的资源对象for ($i 0; $i < $size[1]; $i) {for ($j 0; $j &…

开发Teams的messaging extension

什么是Messaging Extension Messaging Extension是微软Teams的一种十分有用的扩展方式。可以让用户发送adaptive cards。具体的说明不在这里展开了。可以阅读微软官方的详细说明&#xff1a; https://docs.microsoft.com/en-gb/microsoftteams/platform/concepts/messaging-e…

归并排序(转)

转载自&#xff1a;https://www.cnblogs.com/chengxiao/p/6194356.html 归并排序&#xff08;MERGE-SORT&#xff09;是利用归并的思想实现的排序方法&#xff0c;该算法采用经典的分治&#xff08;divide-and-conquer&#xff09;策略&#xff08;分治法将问题分(divide)成一些…

Site24x7 为Teams提供可智能 DevOps

我们生活在一个云的时代, SaaS 应用程序每天都在推动我们的生产力。作为一个消费者, 很难想象如果你最喜欢的应用无法访问&#xff0c;即使只是一秒钟无法访问。作为 SaaS业务, 更难以想象您的服务面临停机, 每一分钟停止服务都会花费大量的资金, 当然还损失客户的信任。Site24…

XUbuntu22.04之跨平台容器格式工具:MKVToolNix(二百零三)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

redis集群搭建踩坑笔记

推荐参考教程&#xff1a;https://blog.csdn.net/pucao_cug/article/details/69250101 错误&#xff1a; from /usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in require from /usr/local/redis-3.0.6/src/redis-trib.rb:25:in <main> 解决&#xff1a; g…

Docker 创建镜像

文章首发自个人网站&#xff1a;https://www.exception.site/docker/docker-create-image 本文中&#xff0c;您将学习 Docker 如何创建镜像&#xff1f;Docker 创建镜像主要有三种&#xff1a; 基于已有的镜像创建&#xff1b;基于 Dockerfile 来创建&#xff1b;基于本地模板…