首页 > 其他分享 >第二阶段PTA总结

第二阶段PTA总结

时间:2024-06-09 14:33:12浏览次数:20  
标签:总结 容器 迭代 代码 PTA 设计 第二阶段 复杂度

前言

本阶段面向对象程序设计又进行了三次PTA训练,第一次(总第四次)还是接续上轮训练的试卷判分系统的程序设计,后两次都是新的电路设计训练题目。相对来说,第二次电路设计的第一次练习最为简单,第一次和第三次相对复杂。在这个阶段,我已经适应了PTA训练的题量和训练模式,并且设计起来更加得心应手。对于我来说,阶段性的总结确实有助于我在设计和编码能力上的提升。

知识点

  • 类的设计;
  • 数组、链表的使用;
  • 封装、继承、多态面向对象的技术的使用;
  • 抽象类和接口的使用;
  • 正则表达式的使用;

题量

第一次:作为上一个题目的最后一次迭代,代码量最大,但是有之前做的基础,其实要修改的没那么大,最多的就是加一些内容;
第二次:新题,最开始要设计和写的量比较大,但是整体难度不大;
第三次:因为与上一次的输入等多种处理存在较大差异,所以改动比较大,新加了很多,写完达到了1200行代码,但是提交了两次就通过了所有测试点,也算是比较顺利。

难度

整体来说,新题的难度相较于原来的判题系统还是简单了许多。而且,现在更加注重了设计,因此迭代起来更加容易,更加得心应手。

设计与分析(第四次PTA)

类图:

设计:

本次设计17个类:

  • InputMatching:对字符串进行匹配;
  • ParseInput:对输入字符串进行切割和处理;
  • QuestionMessage:题目的抽象类
  • BasicQuestion:基本题类;
  • ChoiceQuestion:选择题类;
  • FillInQuestion:填空题;
  • EmptyQuestion:空题;
  • DeleteNum:删除的题号;
  • WrongFormat:错误信息类;
  • TestPaper:试卷号和判分的组合;
  • Paper:试卷类;
  • StuAnswer:答卷中一道题的答案
  • Student:学生类;
  • AnswerPaper:答卷;
  • LastPaper:试卷、答卷、学生、学生答卷的组合体;
  • DataStore:数据仓库;

分析:

从分析结果来看,存在以下问题:

  • 整体来说,借鉴了老师之前的设计,让自己的设计更加合理了;
  • 主函数中的函数许多可以分解到各个类中,但是堆在主函数之中就会代码的复杂度大幅度的提升,复杂度最高的点应该也存在于此;
  • 在整体设计之中,并没有很好的使用接口和行为类,因此在很多类中的很多方法都显得很累赘;

SourceMonitor模拟:



  • 最大复杂度超出了合理范围,问题主要在于有部分函数的复杂度太高,代码的MVC没有做好;
  • 平局注释字句达到了8.9,大部分来自于自己写代码时的理解和对后期的规划,这是我编码上的进步,也是代码复杂度提升后的必然改变;
  • 存在写了的代码最终没有去调用的僵尸代码,这是后期在规划时候需要对代码合理度进行求证;

较于上一次的进步:

  • 是代码的清晰度,自己有着更加合理的规划了;
  • 在编码的时候,有对自己的代码进一步拓展进行准备和合理设计;

设计与分析(第五次PTA)

类图:

设计:

本次设计类的数量较多:

电器类我用图的形式来展示关系:

  • creator类:讲连接信息转化成一个一个的对象并且连接和存储起来;
  • Adjustor类:遍历所有的调整信息,并且将调整落实到每个对象;

分析:

  • 参考了之前学习的一些设计模式,将建造的过程和调整的过程交给一个单独的类;
  • 将电器和调整信息的分类加以细化,运用多层抽象类,为了满足程序后期的扩展;
  • 但是从后面的迭代来看,其实改动还是挺大;一方面,整体的框架是没有发生改变,这是一个可以庆幸的方面;另一方面,自己在设计的时候图方便并没有去考虑并联出现的问题,所以在后面改动的时候容器有了较大的变化,可能也是最初设计不合理导致的;

SourceMonitor模拟:

  • 主要在计算电压和调整每个电器的相关参数的本分复杂度较高,这两个部分应该可以进一步职责分解
  • 输出部分,运用了大量的if-else语句,代码的简洁度不够,可以在后期进行改进;
  • 从调用的角度来看,其实代码中还有部分僵尸代码,这是最开始设计的时候存在的弊端,可以删去的部分;
  • 在注释方面,有较大的进步;

设计与分析(第六次PTA)

类图:

设计:

本次电子元件和信息的框架和上次变化不大,最大的变化来自最终容器的变化:

这是一个电路类,设计目的是兼容并联电路:
首先电路是由干路和支路来组成的,我的想法就是将干路和支路都定义成Circuit类它主要有以下几个好处:

  • 干路电路既可以存储干路中的电器元件,又可以存储一组并联支路;
  • 支路相对独立,可以单独计算自己的电阻,可以单独判断自己是不是被断开;
  • 支路的总电阻可以单独计算;
  • 可以兼容后期的多重并联、多次并联,充分考虑可扩展性;

分析:

  • 因为题目输入在上次的基础上改动较大,所以整体的代码变化也较大;
  • 在使用Circuit类的时候,因为这个类包含自身,在存储的时候没有考虑周全,存储的层次存在问题,导致调用的时候语句繁杂,代码有失简洁性;
  • 1200行代码,代码行数与很多人相比肯定是太多了,说明自己的解决思路和语句还是不够精简,还有提升空间;

SourceMonitor模拟:

  • 总体上来看,虽然题目变难了,整体的复杂度还降低了,说明相对于前几次来说MVC做的更好了,整体的设计更加合理了;
  • 可以注意的是,主方法的行数依然很多,自己检查后发现,将计算电压的部分放在主方法中依然是一个相对不太合理的设计,后期应该考虑将计算电阻和电压的部分交给另外一个类;
  • 输出的部分我采用的方法是将所有的电器重新装进一个新的容器再依据类型进行排序和输出,输出的部分我认为是可以进一步简化的;

踩坑心得:

  • 在编写需要迭代的程序的时候不仅需要考虑需要迭代的部分,还应该充分考虑和预测会变化的部分,将会发生的变化映射到代码上的变化降到最低;
  • 容器的设计不仅需要考虑容器自身的性质,还应该考虑容器中东西的如何去储存,不要让容器成了累赘;
  • 结果的输出不要图一时的快,应该更加考虑如何降低复杂度和运行时间

改进建议:

  • 在实体类中有大量方法的时候,多想想是不是可以运用操作类来简化并且让代码更加清晰;
  • 对于我来说,完成三次PTA最大的心得在于一定要做好设计再进行coding
  • 阅读完所有的测定样例后再开始设计;
  • 在设计的时候,尽量将类的用处分的更细,来完成SRP;
  • 运用不同的容器、了解不同容器的性质可以让数据存储更加合理;
  • 尽量让主函数的代码量降低,降低主函数的复杂度可以在迭代的时候改动更小;
  • 减少main函数中的语句,尽量做到MVC,降低类之间的耦合性

总结

知识点:

  • 类的设计;
  • 数组、链表的使用;
  • 封装、继承、多态面向对象的技术的使用;
  • 抽象类和接口的使用;
  • 正则表达式的使用;

建议和意见:

  • 给出一些比较重要的测试点的测试内容,可以很大程度降低同学们修改程序的时间。

标签:总结,容器,迭代,代码,PTA,设计,第二阶段,复杂度
From: https://www.cnblogs.com/33super-Coder/p/18239544

相关文章

  • Java重要知识总结(一)
    Java语言的特点简单易学;面向对象(封装,继承,多态);平台无关性;支持多线程;可靠性;安全性;高效性编译与解释并存JVM-JDK-JRE区别JVM(JavaVirtualMachine),Java虚拟机是运行Java字节码的虚拟机。JDK(JavaDevelopmentKit),它是功能齐全的JavaSDK,是提供给开发者使用,能够创建和编译Jav......
  • PTA题目集4~6的总结
    前言[1]知识点:本次PTA主要是新增的知识点是类的继承和多态,第4次题目集是针对类的继承,第5,6次题目集是针对类的多态。[2]题量:第4次和第5次题目集都是三题,第6次题目集是一题,题量不是很大[3]难度:第4次题目集还是答题判题程序,难度还行,就是增加了选择题和填空题,我感觉难......
  • PTA训练集阶段总结blog
    目录PTA训练集总结blog1.前言2.设计与分析题目集一7.4答题判题程序四关于设计要求:UML类图及设计分析:部分源码:复杂度分析:题目集五7.1家具强电电路模拟系统—1关于设计要求:UML类图及设计分析:部分源码:复杂度分析:题目集六家居强电电路模拟程序-2关于设计要求:UML类图及设计分析:部......
  • 两次pta题目总结
    两次pta题目总结写在前面这两次pta是新题目,上次那个答题判题的没有继续迭代了,根据这两次题目我也学到了一些东西,主要是面向对象设计模式的运用,接口的使用,以及递归算法的使用等等第一题题目内容:智能家居是在当下家庭中越来越流行的一种配置方案,它通过物联网技术将家中的各种设......
  • 南昌航空大学pta总结
    前言背景介绍:继上次PTA题目讲解完,本次博客会进行对后几次题目集的讲解说明和题后总结目的和目标:及时反馈学习成果,达到学由所会,及时吸收和深入学习的目的学习收益:通过后面几次的题目学习,使得我对java的语法代码以及运用熟练度有了极大的进步,同时也对学习代码语言有了一个更......
  • abc--cf训练日常总结
    ABC最近遇到好多思维和位运算的题目不会做,特地过来总结一些小小的知识点。思维题目https://atcoder.jp/contests/abc353/tasks/abc353_c这道题目要求我们计算连续的两个相邻的数组元素之和。我一开始用暴力,后面换了种错误的思路就wa了。其实这道题目是求和,然后找到和大于1e8......
  • 题目集4-6的总结性Blog
    一,前言一-1.第四次题集是接着前面的第三次题集的迭代,知识点主要是继承的运用,正则表达式的运用同样少不了,相对于前面一次添加了对选题以及填空题,难度也相对于前一次加大。一-2.第五次题集是新的题集迭代是有关电路的,知识点有抽象类,抽象方法的使用以及继承的使用,同样正则表达式;由......
  • 【机器学习基础】Python编程07:五个实用练习题的解析与总结
    Python是一种广泛使用的高级编程语言,它在机器学习领域中的重要性主要体现在以下几个方面:简洁易学:Python语法简洁清晰,易于学习,使得初学者能够快速上手机器学习项目。丰富的库支持:Python拥有大量的机器学习库,如scikit-learn、TensorFlow、Keras和PyTorch等,这些库提供了......
  • 【机器学习基础】Python编程08:五个实用练习题的解析与总结
    Python是一种广泛使用的高级编程语言,它在机器学习领域中的重要性主要体现在以下几个方面:简洁易学:Python语法简洁清晰,易于学习,使得初学者能够快速上手机器学习项目。丰富的库支持:Python拥有大量的机器学习库,如scikit-learn、TensorFlow、Keras和PyTorch等,这些库提供了......
  • Activity活动详简总结
    简介        活动(Activity是一种可以包含用户界面的组件主要用于和用户进行交互。一、创建项目NewProject    选择NoActivity,创建一个空活动:     语言选择Java,点击Finish,等待工程加载二、MainActivity活动类   找到如下图路径: ......