OO(面向对象)第一单元总结

周辰昊-22230614 学生 2024-03-30 20:36:18

一.类图

(1)基于度量分析程序结构

img

Complexity metrics
MethodCogCev(G)iv(G)v(G)
Expr.Expr(ArrayList, ArrayList)0111
Expr.toString()1122
Lexer.Lexer(String)169810
Lexer.move()0111
Lexer.notEnd()0111
Lexer.now()0111
Main.main(String[])0111
Num.Num(String)0111
Num.toString()0111
Parser.Parser(Lexer)0111
Parser.parserExpr()3144
Parser.parserFactor()2222
Parser.parserTerm()2133
Term.Term(ArrayList)0111
Term.toString()1122
Token.Token(Type, String)0111
Token.getContent()0111
Token.getType()0111
Token.toString()0111
my.Expression.Expression(String, Node)0111
my.Expression.getExpressionString()0111
my.Expression.getValue()0111
my.ExpressionParser.doParseExpression(String)0111
my.ExpressionParser.eatExpression()0111
my.ExpressionParser.eatPowerExpression()1222
my.ExpressionParser.eatPrimaryExpression()0111
my.ExpressionParser.eatProductExpression()4323
my.ExpressionParser.eatStartNode()3333
my.ExpressionParser.eatSumExpression()4124
my.ExpressionParser.eatToken(TokenKind)1212
my.ExpressionParser.eatUnaryExpression()5323
my.ExpressionParser.maybeEatLiteral()4434
my.ExpressionParser.maybeEatParenExpression()2222
my.ExpressionParser.nextToken()1212
my.ExpressionParser.peekToken()1212
my.ExpressionParser.peekToken(TokenKind)2313
my.ExpressionParser.peekToken(TokenKind, TokenKind)3314
my.ExpressionParser.pop()0111
my.ExpressionParser.push(Node)0111
my.ExpressionParser.takeToken()1212
my.IntLiteral.IntLiteral(String, int, int, int)0111
my.IntLiteral.getLiteralValue()0111
my.Lexer.Lexer(String)0111
my.Lexer.isNum(char)2213
my.Lexer.lexNumericLiteral(boolean)1112
my.Lexer.process()63213
my.Lexer.pushCharToken(TokenKind)0111
my.Lexer.pushIntToken(String, int, int)0111
my.Lexer.pushVarToken(TokenKind)0111
my.Literal.Literal(String, int, int)0111
my.Literal.getOriginalValue()0111
my.Literal.getValueInternal()0111
my.Main.main(String[])0111
my.Node.Node(int, int, Node...)4114
my.Node.getEndPos()0111
my.Node.getStartPos()0111
my.Node.getValue()0111
my.OpMinus.OpMinus(int, int, Node...)0111
my.OpMinus.getValueInternal()3223
my.OpMultiply.OpMultiply(int, int, Node...)0111
my.OpMultiply.getValueInternal()179911
my.OpPlus.OpPlus(int, int, Node...)0111
my.OpPlus.getValueInternal()3223
my.OpPower.OpPower(int, int, Node...)0111
my.OpPower.getValueInternal()3271220
my.Operator.Operator(String, int, int, Node...)0111
my.Operator.getLeftOperand()0111
my.Operator.getOperatorName()0111
my.Operator.getRightOperand()0111
my.StringLiteral.StringLiteral(String, int, int, String)0111
my.StringLiteral.getLiteralValue()0111
my.Token.Token(TokenKind, String, int, int)0111
my.Token.Token(TokenKind, int, int)0111
my.Token.getKind()0111
my.Token.stringValue()1112
my.TokenKind.TokenKind()0111
my.TokenKind.TokenKind(String)0111
my.TokenKind.isData()0111
ClassOCavgOCmaxWMC
Expr1.5023
Lexer3.00912
Main1.0011
Num1.0012
Parser1.7527
Term1.5023
Token1.0014
Token.Typen/an/a0
my.Expression1.0013
my.ExpressionParser2.22440
my.IntLiteral1.0012
my.Lexer3.141422
my.Literal1.0013
my.Main1.0011
my.Node1.5036
my.OpMinus1.5023
my.OpMultiply5.00910
my.OpPlus1.5023
my.OpPower9.001718
my.Operator1.0014
my.StringLiteral1.0012
my.Token1.2525
my.TokenKind1.0013
Packagev(G)avgv(G)tot
1.8936
my2.27134
Modulev(G)avgv(G)tot
oohomework_2024_22230614_hw_32.18170
Projectv(G)avgv(G)tot
project2.18170

由于我没有最后也没有成功通过第三次作业的中测,UML类图中有一些意义不大的东西。

lexer类处理输入表达式的词法,parser类则进行语法分析,其余几个类按照递归下降的原则处理输入的表达式。

因为完成的太糟糕了所以中间的需求也不好形成文字,放到心得体会里一起表述一下。

二.心得体会
因为编程基础太差,即使在理解了递归下降的数学原理之后仍然不能写出能够正确运行的代码。因此在参考了课程组给出的递归下降参考代码后我试图在其基础上进行修改。虽然没能通过中测,但是也感觉大概搞明白了java编程的原理和精神。希望能够继续努力、独立完成第二单元作业。

...全文
82 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

301

社区成员

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

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