OO第一单元作业总结

该文描述了一个逐步发展的编程作业,从处理一层括号的表达式开始,增加了对多层括号、幂函数、三角函数和自定义函数的支持,并最终实现了表达式的求导功能。过程中强调了预处理、词法分析、语法分析的重要性和递归下降算法的作用。在实现过程中遇到了处理冗余符号、边缘数据以及求导法则的挑战,作者反思了学习过程中的困难和收获,强调了良好的架构设计和代码组织对于后续开发的重要性。
摘要由CSDN通过智能技术生成

HW1

题目概述:

本次作业需要读入一个包含至多一层括号的表达式,通过表达式解析,得到展开所有括号的等价表达式。

代码架构:

MainClass:表达式读入,调用Pre进行预处理,调用Lexer, Parser递归下降分析整合

Pre: 预处理空白符以及冗余的符号

Lexer, Parser: 词法、语法分析,并处理嵌套括号和乘方运算

Factor: 接口,其下继承Const, PowF等具体因子以及Expr这一特殊因子

Term: 项的类,有操作符op, 所包含的因子 factors等属性,有添加因子、返回结果和生成字符串等方法

类图

分析:

主类、递归下降算法以及各因子、项之间尽可能实现层次化的架构,但是对于表达式类与因子类向上的从属关系表达得并不明确

圈复杂度

bug分析

第一次作业的bug主要出现在对冗余+-的处理上。首先需要判断哪些是合法输入哪些不是,然后要对符合条件的输入进行归一化处理以得到简化的表达式,最终的处理方式需要涵盖各种边缘数据。

HW2

题目概述:

本次作业增加了对自定义函数以及幂函数、三角函数、自定义函数调用的表达式

在第一次作业基础上,本次迭代作业增加了以下几点:

首先对于多层括号的嵌套,由于hw1使用了递归下降的方法,此次作业不需要增加更多的操作。故此次迭代侧重于对自定义函数和三角函数的处理。

代码架构:

增加Frustrum,Function, TriFunc等类处理新增需求, MainClass中先使用Frustrum相关方法进行函数解析读入表达式,并在Parser,lexer等类中增加对自定义函数、三角函数的处理

类图

圈复杂度

HW3

题目概述:

本次作业新增内容为实现求导,根据实验课题目可知,重点在给每个类中添加derive方法将项代替为求导后的项。

bug分析:

注意求导的乘法法则的实现方式,注意运算时运用深克隆的方法。

反思总结:

本单元作业基于递归下降算法进行文法解析,实现括号处理、表达式化简和表达式求导。接收作业前我以为凭借上学期oopre的知识可以应对第一单元的作业,但事实表明pre课程后我只学到了java的基本语法和面向对象的基本特点,并不能将之很好地运用在基于特定算法的典型题目中。本单元作业由于前期拖欠导致后期持续滞后,作业情况很不理想,但也提醒我学习训练题目、实验代码的重要性以及积极参与研讨、和优秀同学交流架构的重要性,一个好的架构会为后期增发提供很大的便利。第一单元内容告一段落,希望在下周开始我可以以积极的心态面对oo学习,能在老师助教和同学的帮助下收获真知 不虚此行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值