菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
191
0

面向对象第一单元总结

原创
05/13 14:22
阅读数 76310

第一单元的任务是表达式求导。从基础的幂函数到带括号的三角函数再到嵌套与格式检查,经历了一个迭代开发的过程。在这个过程中,我进一步掌握了正则表达式和JAVA内置数据结构的使用,复习了递归下降算法,初步掌握了面向对象的基本思想。

度量分析

第一次作业

  第一次作业结构较为简单,整体分为两部分,表达式解析与表达式化简求导。代码中建立了四个类:Main,Expr,Term,Factor,与一个接口Deri。

Main:程序入口。主要功能即读取输入、预处理以及程序主要数据流。其中预处理主要包括去除空格与表达式匹配与识别。

Expr:表达式类。对以项为因子进行解析与求导。

Term:项类。解析项的各因子。

Factor:因子类。具体求导与字符串输出。

Deri:求导接口。

  曾考虑编写词法分析器,最终因为时间原因放弃。

  Factor为最低层次,记录有系数与指数;Expression为最高层次,储存表达式所有的项,同时包括合并与化简。

  内聚与耦合都还不够完善,化简与合并的过程使得高层级对象对下层访问过于频繁,内聚降低,耦合增大。

第二次作业

  在第一次作业要求的基础上增加了表达式因子和三角函数因子。

  在第一次作业的代码上增加了三角函数因子类,与此同时出现了括号的嵌套问题,使表达式的解析 的解析难度骤升,所向无敌的正则表达式开始令人头秃。最终面临嵌套问题选择建立树结构图,通过终结点与非终结点的判定来解决问题。这并不能称之为相当好的解决办法,只是无奈之举。

 

 

 

  事实上,代码中使用的并不能称之为 “ 工厂模式 ”,太过于臃肿也太不美观。

 

 

出于某些原因,主动miss了第三次作业。

关于程序bug分析

  事实上程序bug主要出现在表达式解析方面,多为空白字符处理问题。在对读入的表达式进行简化时会对空白字符进行不必要的删除与合并,导致部分invalid格式无法被check。具体的代码当时并未留存,无法复现。

关于HACK

  第一单元并未做出hack行为。

心得体会

  在第一遍编写代码过程中,如果不是预先打好了准备充分的腹稿或者是较为完善的结构,请一定把优化的思路都抛在脑后,最多临时记录,务必以正确性为优先,哪怕使用较为笨拙的方法也可以。优化必然是建立在正确性的基础之上,一边编写初版代码一边想着优化的思路,绝大多数情况下会两边不讨好。

  在这之前只是粗糙地了解过面向对象,编写过一些简单程序,很显然代码阅读量并不能轻易地转化为coding能力,还需多加思考与练习。

发表评论

0/200
191 点赞
0 评论
收藏