BUAA-面向对象设计与构造2024-第一单元总结
前言
此篇只涉及第一单元的第一次作业。
程序架构分析
UML类图

由于时间原因,就没有使用starUML画类图。架构本来自己按照讨论区以及学长的博客进行设计,但最后问题很多,就采用了课程组第二次实验的架构。第二次实验与第一次作业内容相差不大,移除了对表达式的求导部分以及指数函数类,针对形式化描述中整数前可带正负符号进行修改。由于原架构中在Parser读入时就会将乘方展开,为了输出的简化,之后对其进行化简合并等操作。
- Main为程序入口,其中读入字符串输入,参考讨论区,对其进行去空白符并经过simplifySigns()将最多3个的连续正负号进行缩减。之后交由Parser解析预处理表达式,先后调用expand(),merge(),specialMerge()和specialMerge2(),对表达式进行括号的去除,将展开的项进行聚拢合并,对指数以及未知数x前的数字为1或0时,进行特殊处理以尽量缩短输出字符串的长度,对表达式中有多项且存在项为0时(即结果不只是0),将为0的项进行去除,以缩短输出字符串长度。
- 但对于输出仍还有优化的地方,比如有的输入,输出会存在正负号连续出现;还有同一表达式,将正号的项移到第一项等,由于时间原因,就没有实现。
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
//preprocess
String input = scanner.nextLine();
String processedString = input.replaceAll("[\\s\\t]", "");
processedString = simplifySigns(processedString);
//System.out.println(processedString);
Lexer lexer = new Lexer(processedString);
//lexer.getToken();
Parser parser = new Parser(lexer);
Expr expr = parser.parseExpr();
//拆括号
Expr expr1 = (Expr) expr.expand();
//System.out.println(expr.expand());
//合并同类项
Expr expr2 = (Expr) expr1.merge();
//System.out.println(expr2);
//指数和数字为1和0 特殊处理
Expr expr3 = (Expr) expr2.specialMerge();
//System.out.println(expr3);
//有多项时,0项不输出
Expr expr4 = (Expr) expr3.specialMerge2();
System.out.println(expr4);
}
- Lexer类与第二次实验的Lexer类一样,去除了指数函数的token。
- Parser类按照语义递归下降解析Expr、Term、Factor。在第二次实验基础上,在parseFactor中增加了对带符号整数的处理。
- Expr、Term、VariFactor、Number类都实现了Factor接口,并重写了clone()。
复杂度分析
Class Metrics

代码量分析

第一次作业的有效代码行数为570行,应该属于偏多的了。
心得体会
这学期已经是我大学本科最后一个学期,考研、毕设、OO各种任务都堆在了一起,第一次作业发布那周正准备毕设的开题答辩,这也是我第一次作业没来得及完成的原因之一。然后一环套一环,第二次、第三次作业都没能完成,这让我担心自己又重蹈覆辙,但毕竟关系到能否毕业,我终于在这周咬咬牙给第一次作业补交过了,但还是推翻了自己的架构,采用了第二次实验所给的架构并进行改动。这使得我仍然担心之后3个单元的9次作业,之后更是毕设和考研的关键时期,望自己能充分利用好时间,将任务量提前,而不是都堆到最后。
相关推荐
CillianMeng_BUAA-CO-2024_20352_1754321283653.zip
为了满足要求,我们可以假设这是一个以压缩包形式存在的文件集,可能包含了与“CillianMeng BUAA-CO-2024”相关的材料。
buaa os MOS_buaa2024操作系统os实验项目MOS.zip
尤其在“BUAA-OS-MOS-lab6”这样的实验项目中,学生得以将理论知识与实践操作相结合,深入理解操作系统的基本原理和设计方法。
buyicoder_CG2024-BUAA-MeshSimplication_20352_1754321246440.zip
其次,文件名中提及的“buyicoder”可能是指一个用户、团队或者组织的名称,而“CG2024-BUAA”则可能是该项目的名称或者与之相关的课程代码。
北京航空航天大学2024年秋季学期面向对象设计与构造先导课程实践项目_基于Java语言的冒险游戏设计与实现_面向对象编程思想实践与教学演示_包含类设计继承多态接口实现设计模式.zip
该项目的实践项目名称为“buaa-2024-OOpre-main”,它可能是项目的主要代码库或者工作目录。在这里,学生将应用他们所学的知识,将面向对象编程的思想转化为具体的游戏设计和实现代码。
BUAA_2025春季学期面向对象设计与构造课程全周期作业实验源码与心得体会深度归档仓库_包含递归下降表达式求导多线程电梯系统JML规格化设计UML类图辅助正向建模四个单元完整代码.zip
面向对象设计与构造是计算机科学与技术专业中的一门重要课程,它主要教授学生如何运用面向对象的思想和方法来解决实际问题。


