(1)基于度量来分析自己的程序结构

第一次:
Poly:
属性 AL<Term>
方法 check(格式检查) Poly(构造) merge(合并) compute(求导)

Term:
属性 coeff exp
方法 Term(构造) get/set

Poly格式检查,Poly用正则分割出Term,Term解析出coeff和exp。在Poly中根据Term的属性进行合并,并计算,最终在PolyCompute中输出。
1.感觉把输出部分写到Poly的tostring里面更好一些。
2.这次用了一个超大正则一次进行格式判断和解析,不是很好而且有爆栈风险。
3.没有预处理造成后面的解析会复杂一些

第二次:
Poly:
属性 AL<Term>
方法 check Poly merge firstop(符号预处理) derivation

Term:
属性 key(四元组)
方法 replacefirstop(符号预处理) Term derivation print printfactor get/set

Factor:
属性 key
方法 Factor get

Key:
属性 coeff expofx expofcos expofsin
方法 Key(构造) equals_exp mul/add_coeff add_exp derivation

Poly格式检查、预处理(符号变换和添加、空格等),用正则分割为Term,Term用*分割出Factor,Factor解析出四元组Key,Key为一种数据类型(四元组),将factor在Term中合并,在poly中对exp三元组一样的进行合并。
求导时,Poly的AL对每个Term求导,每个Term的求导(运算及返回值皆有Key完成),之后在Poly求和。
create:Poly->Term->Factor
derivate:Poly->Term
print:Poly->Term->Factor

1.Key被我搞成了结合了coeff的四元组使用起来反而不便
2.因为Term最后可以归为一个三元组+coeff,所以我的求导
3.因为print和create还是要下到Factor层面,所以提前把集中Factor的子类创建起来之后继承Factor(或者接口,可以具体情况再分析)更好一些。

第三次:
Poly:
属性 AL<Term>
方法:新增tostring的重写

Term:
属性 AL<Element>自身
方法 新增merge create_element tostring

interface Element:
方法 derivation tostring

interface Triangle:
方法 getExp create_element

其余的大多都是一些数据特征上的问题,就没什么好列举的了

poly用正则分出Term,Term再用正则分出Element,在Term中构造element,其中cos/sin需要保存其exp的基础上对其内部嵌套的!!因子!!再次构造,递归终点为Cons和Xpower。
求导:P对T的导求和,T对E的导进行while运算,E的导在三角函数的情况下为三角的导和嵌套因子的导的乘积,在poly(表达式/表达式因子)的情况下递归,最终得到一个表达式作为表达式因子返回。
输出类似,也是从P到T到E的结构

1.数据结构不太好,构造向下传的时候是P/T/E,求导回传的时候就是AL嵌套AL了。应该构造(简单传值)和parser分开,数据结构就对齐了。我在hw3中用的数据结构效率相当低下。(AL<AL<Ele...>>Term的导数,而不是Poly,对于Ele同理)
2.一开始看错题了以为三角函数里面嵌套的是表达式,但实际上是表达式因子,补救的时候不想大动代码结构,因此在处理create_element的时候出现了相同代码重复出现的情况
3.脑抽没想起来怎么判断运算符是不是分割T/E的,也不想改成嵌套状态机或者状态机配合正则,就写了个超长正则用来处理括号匹配,于是造成了TLE
4.triangle其实不应该是接口,而应该是抽象类,因为还是有很多的共性的东西的,用抽象类更方便。
5.sin/cos的优化忘了搞了,导致嵌套0和表达式因子的时候输出非常糟糕的长

总结:
1.构造应该简化,解析放在parser里
2.不应该用大正则

(2)分析自己程序的bug

第一次:
互测被抓到一个bug:
正则的一个地方少加了一个[ \\t]*

第三次:
强测TLE:
用正则匹配括号造成的

都发生在正则上,第一次没有预处理,预处理之后问题将简化很多就不会出现这个问题。第三次不适合用正则,但我不想改造成的强行用正则而TLE。

(3)发现别人bug
1.构造边界条件,对于潜在bug进行点分类,每类分情况,之后全排列。
2.按照标准随机生成表达式,用大量测试点,覆盖大部分格式。
3.对于表达式基本结构如符号、空格、数字、字母进行随机全排列(不过效率极低)

OO第一次blog的更多相关文章

  1. OO第一次作业总结

    OO第一次学习总结 1.第一次作业:多项式加法 从未接触过java的我,在从输入输出开始学了几天后,按照C语言的思路,写出了一个与面向过程极其接近的程序. 在这个程序中,存在两个类:一个是Comput ...

  2. OO第一次博客作业

    OO第一次博客作业 一.三次作业的bug反省 1.自己发现别人的问题 (1)输入处理的问题,比如第一次作业,主要就是处理输入的字符串,然后有同学的正则表达式有问题,则对于一些错误输入就不能正确判断. ...

  3. oo 第一次博客作业

    oo 第一次博客作业 早在大一就听说了oo的各种传奇故事,大二下学期终于也开始了我的oo之旅. 基于度量来分析自己的程序结构 第一次作业 类图分析 耦合度分析 可以看出在第一次作业中,我的耦合度非常高 ...

  4. JAVA第一次blog总结

    JAVA第一次blog总结 0.前言 大一下学期我们开展了OPP这门课程,这也是我们第一次接触到JAVA.与上学期我们在学校里学C语言不同的是,这学期由于疫情原因我们是以网课的方式在学习.在学习中我发 ...

  5. OO第一次阶段性总结

    经过三次作业的历练之后终于来到了写博客这一周.回顾开学来的这一个月,令我印象最深刻也是最累的一门课就是OO了.虽然上学期学过一部分Java,但这学期开学就来的OO作业还是让我在第二周就开始熬夜了.不过 ...

  6. OO第一次单元总结

    第一次总结性博客 16071070 陈泽寅 2019.3.23 一.第一单元所学总结 首先先来总结一下第一单元我所学到的知识以及所感所悟.第一个单元,是我第一次接触JAVA语言,并且再使用了几次之后, ...

  7. OO第一次博客作业--第一单元总结

    OO第一单元总结 面向对象设计与构造的第一单元,对“面向对象”的概念还根本不理解不熟悉,只觉得需要“分模块”,但不知道怎么分,分多少模块,怎么根据需要的模块的功能建立类.学习的进度又太慢,根本跟不上出 ...

  8. OO第一次博客

    过去的三周里我们完成了表达式求导的程序设计与构造.表达式求导程序,大致思路是实现一个表达式类,支持表达式的输入.求导运算和输出功能.可能的话,还可以增加表达式的化简方法,从而得到更高质量的输出结果.总 ...

  9. oo第一次作业

    前言: 这是一篇面向对象作业总结,作业内容是对多项式进行求导,一共有三个阶段,具体要求不详述,第一阶段只要求’+’连接coeff*x^pow的形式,第二次支持*连接的幂函数及三角函数,第三次则需要支持 ...

随机推荐

  1. Pyrit help

    Pyrit 0.5.1 (C) 2008-2011 Lukas Lueg - 2015 John Morahttps://github.com/JPaulMora/PyritThis code is ...

  2. 无法启动此程序,因为计算机中丢失VCRUNTIME140.dll 尝试重新安装此程序以解决此问题

    最近在阿里云上租了个服务器,想借此发布一些自己制作的网页.于是就打算安装一下环境,考虑到搭建动态网站所要安装的环境比较多,于是就选择了wampserver这样一个集成环境的安装. 由于我的服务器很新( ...

  3. Postman runner参数化

    按照下面图片的顺序操作吧~ lets go 1.把要做参数化的字段的value用花括号标识起来,如:{{phone}} 2.准备一个csv的文件,把每次请求接口的参数按下图填写好,第一行写字段名称(p ...

  4. Access Token 与 Refresh Token【转载哒科普啊】

    Access Token 与 Refresh Token   access token 是客户端访问资源服务器的令牌.拥有这个令牌代表着得到用户的授权.然而,这个授权应该是临时的,有一定有效期.这是因 ...

  5. yidun验证码

    from PIL import Imagefrom selenium import webdriverfrom selenium.webdriver import ActionChainsfrom s ...

  6. SpringCloud系列八:Zuul 路由访问(Zuul 的基本使用、Zuul 路由功能、zuul 过滤访问、Zuul 服务降级)

    1.概念:Zuul 路由访问 2.具体内容 在现在为止所有的微服务都是通过 Eureka 找到的,但是在很多的开发之中为了规范微服务的使用,提供有一个路由的处理控制组件:Zuul,也就是说 Zuul ...

  7. java Thread 类的源码阅读(oracle jdk1.8)

    java线程类的源码分析阅读技巧: 首先阅读thread类重点关注一下几个问题: 1.start() ,启动一个线程是如何实现的? 2.java线程状态机的变化过程以及如何实现的? 3. 1.star ...

  8. spring配置文件注入到静态变量

    spring配置注入到静态文件代码如下: package com.test.oss; import org.springframework.beans.factory.annotation.Value ...

  9. 第五篇、Python之迭代器与生成器

    1.迭代和递归等概念 循环(loop):指的是在满足条件的情况下,重复执行同一段代码.比如,while语句,for循环. 迭代(iterate):指的是按照某种顺序逐个访问列表中的每一项.比如,for ...

  10. Django03-视图系统views

    一.编写视图 一个视图函数,是一个简单的Python函数,它接受web请求,并且返回web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. . . 是 ...