BUAA OO第一单元Overview

杨灿-20373113 2024-03-23 19:55:19

1.前言

由于先修过编译原理课程,对使用到的递归下降方法比较熟悉。但是对面向对象的思想理解不够,这一单元作业完成的过程中遇到了很多的困难,在这里就把顺利完成的前两次作业进行一个总结吧。

2.问题分析

第一次作业需要完成的任务为:读入一个包含加、减、乘、乘方以及括号的单变量表达式,输出恒等变形展开所有括号后的表达式。第二次作业在第一次作业基础上支持嵌套多层括号。新增指数函数因子,指数函数括号内部包含任意因子。新增自定义函数因子,但自定义函数的函数表达式中不会调用其他自定义函数。完成这两次作业,我采取的是递归下降方法解析语法结构。首先建立lexer类,lexer.peek()获得当前Token,lexer.next()获得下一token。

    public void next() {
        if (pos == expr.length()) {
            return;
        }

        char c1 = expr.charAt(pos);
        String str3 = pos + 3 < expr.length() ? expr.substring(pos, pos + 3) : "Error";

        if (Character.isDigit(c1)) {
            now = getNumber();
        } else if (str3.equals("exp")) {
           //
        } else if ("fgh,()+-*ix^".indexOf(c1) != -1) {
           //
        }
    }

    public String peek() {
        return this.now;
    }

在Parser部分,分别为Expr,Term,Factor编写解析方法,递归下降进行解析。

3.整体结构

1.UML类图:

2.代码规模分析:

 代码总体规模并不大,一共在500行左右。Parser和Expr类较复杂,行数较多。

3.Bug分析

第二次作业未进入强测,在处理Exp()括号内为负数时出现问题。比如Exp(-1)。没有很好的考虑第二次作业的“正确性判定”中关于指数函数括号层次的要求。比如EXP(2*x),在输出的时候,2*x作为表达式因子,应该带有括号,输出为exp((2*x))。所以即使第一种数学上是正确的,但是不符合形式化描述,在评测机评测时卡了很久。

4.优化分析


第一次作业只进行了合并同类项的优化。第二次作业引入指数函数后,事情便走向了不可控的境地。由于指数函数的优化处理需要考虑的情况很多,基于我的代码架构,多个指数函数相乘的因子上的优化很难实现。于是放弃了这个方向的优化,只求能先保证正确性。

5.心得体会

虽然说已经接触过递归下降,但是主要还是面向过程的思想()。本单元作业中,通过设计factor接口以及term,number,expr等继承类,使用面向对象的方法完成本单元任务,虽然很艰辛,但是成就感也很足。在不断Debug的过程中,对于面向对象的思想掌握也更多了,相信以后我能够更进一步!

 

 

...全文
110 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
wujizeze 老师 2024-04-21
  • 打赏
  • 举报
回复

uml类图也需要放进来

内容概要:本文围绕面向新能源容量提升的含智能软开关(SOP)的配电网重构问题,提出了一种基于二阶锥规划(SOCP)的双层优化模型。该模型上层以提升新能源消纳能力为目标进行网络重构,下层利用SOP灵活调节功率分布,解决重构过程中可能出现的潮流越限问题。通过将非凸的最优潮流问题转化为二阶锥松弛形式,有效提高了求解效率与计算可行性,并在标准算例系统中验证了该方法在降低网损、均衡负荷分布及提升新能源利用率方面的优越性。研究不仅提供了理论建模思路,还配套实现了Matlab代码,便于算法复现与拓展应用。; 适合人群:电力系统、新能源并网、智能配电网及相关领域的科研人员与工程技术人员,具备一定的优化理论基础与Matlab编程能力者优先。; 使用场景及目标:①应用于高渗透率分布式新能源接入背景下的配电网运行优化;②为智能软开关与网络重构的协同控制提供可复现的数学建模与求解方案;③支撑新型电力系统中提升电网灵活性、可靠性和新能源承载力的关键技术研究。; 阅读建议:建议结合提供的Matlab代码深入理解二阶锥松弛技术在电力系统优化中的具体实现,重点关注模型构建、非线性约束的线性化处理以及双层优化架构的分解求解逻辑,可通过调整参数或测试不同场景进一步验证算法鲁棒性与适应性。

301

社区成员

发帖
与我相关
我的任务
社区描述
2023年北航面向对象设计与构造
学习 高校
社区管理员
  • YannaZhang
  • CajZella
  • C_ecelia
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧