首页 > 其他分享 >oop 4~6总结

oop 4~6总结

时间:2024-06-09 20:57:15浏览次数:26  
标签:总结 return void 作业 devices oop Device public

oop 4~6总结

前言

  • 知识点

继承:第四次作业中新增的ChoiceQuestionGapFillingQuestion继承Question类;第五次作业中Switch, SteppedSpeedController, ContinuousSpeedController, IncandescentLamp, FluorescentLamp, 和 CeilingFan 都继承Device 类,从而共享其属性和方法。

集合框架:使用List, Map等集合来存储和管理对象。以第五次作业为例,Map: CircuitSimulator 类使用 LinkedHashMap 存储设备信息,它保持插入顺序,并且提供映射功能;Iterator: 在 applyVoltage 方法中,使用迭代器遍历 devices 集合,处理每个设备的电压的输入和输出。

正则表达式:第四次大作业中我按照老师给出的设计建议新写了InputMatching类用来处理输入,在InputMatching.matchInput方法中使用正则表达式来匹配和解析用户输入。

抽象类: 第五次大作业中Device 是一个抽象类,它定义了所有设备共有的属性和方法。updateStategetOutput 是抽象方法,需要在子类中实现。

点击查看代码
abstract class Device {
    protected double inputVoltage; // 输入电位
    protected double outputVoltage; // 输出电位
    protected int number;//编号
    protected int type;//设备类型
    public Device() {
    }
    public Device(int number) {

        this.number = number;
    }

    public void setInputVoltage(double inputVoltage) {
        this.inputVoltage = inputVoltage;
    }

    public double getOutputVoltage() {
        return outputVoltage;
    }

    public void setOutputVoltage(double outputVoltage) {
        this.outputVoltage = outputVoltage;
    }

    public int getType() {
        return type;
    }



    public abstract void updateState(); // 更新设备状态
    public abstract void getOutput(); // 获取设备输出
}

多态: 第五次作业在 CircuitSimulator 类的 applyControlCommand 方法中,根据设备类型调用不同的方法,如 sw.setState(!sw.getState())sc.up()sc.down() 等。

类型转换与类型检查:在 CircuitSimulatorapplyControlCommandMain 类的主循环中,使用了大量的类型转换和类型检查(如 (Switch) devicedevice instanceof Switch)。

  • 题量

    整体的题量不算多,但是很难,每道题目的侧重点都稍有不同。若能认真完成作业上的题目,将每道题都理解透彻,就会对个人能力的提升有特别大的帮助。

  • 难度
    个人认为答题判题程序写到第四题的时候是完全不会写的,特别特别的难。老师们为了学生考虑又将大作业改成了电路题目,比之前的那道简单一点点但我还是觉得很难。这就是自己的问题了,编程能力没有得到提升,今后的学习还需要态度端正认真对待。更改题目是我没有想到的,老师们是最好的老师!

设计与分析

第四次作业 答题判题程序-4

源码分析

img
img

设计思路

这道题目我是在上道题的基础上又结合了老师给出来的设计建议做了修改,新增加了部分的类。

  • Question类中的Judge方法用于判断学生答案的正确性,对于基础题目,它只进行简单的字符串比较。
点击查看代码
public String Judge(String studentAnswer) {
        if (answer.equals(studentAnswer)) {
            return "true";
        } else {
            return "false";
        }
    }
- ChoiceQuestion类继承`Question`类,代表一个选择题,有可能包含多个正确答案。其中的getAnswers方法返回一个正确答案列表,这里用Arrays.asList方法将答案字符串按空格分割,但这样只能处理单个答案的情况,对于多选题可能不合适。怎么处理多选题的答案我没有做出来。Judge方法针对选择题的特点进行了修改,增加了对部分正确的判断。
点击查看代码
    public List<String> getAnswers() {
        return Arrays.asList(this.getAnswer().split(" "));
    }

    public String  Judge(String studentAnswer) {
        if (this.getAnswers().contains(studentAnswer)&& !this.getAnswers().equals(studentAnswer)) {
            return "partially correct";
        }
        else if (this.getAnswers().equals(studentAnswer)) {
            return "true";
        }
        else
            return "false";
    }
  • GapFillingQuestion类继承Question类,代表一个填空题。

  • DataWarehouse类作为数据仓库,用于存储题目、试卷、学生和答卷的信息。它提供了添加和管理这些内容的方法。

点击查看代码
class DataWarehouse {
    private Map<Integer, Question> questions;
    private Map<Integer, TestPaper> testPapers;
    private Map<String, Student> students;
    private Map<String, AnswerPaper> answerPapers;

    public DataWarehouse() {
        this.questions = new HashMap<>();
        this.testPapers = new HashMap<>();
        this.students = new HashMap<>();
        this.answerPapers = new HashMap<>();
    }

    public Map<Integer, TestPaper> getTestPapers() {
        return testPapers;
    }

    public Map<String, AnswerPaper> getAnswerPapers() {
        return answerPapers;
    }

    // 添加题目
    public void addQuestion(Question question) {
        questions.put(question.getNumber(), question);
    }

    // 添加试卷
    public void addTestPaper(TestPaper testPaper) {
        testPapers.put(testPaper.getNumber(), testPaper);
    }

    // 添加学生
    public void addStudent(Student student) {
        students.put(student.getId(), student);
    }

    // 添加答题卷
    public void addAnswerPaper(AnswerPaper answerPaper) {
        answerPapers.put(answerPaper.getID(), answerPaper);
    }

    // 根据编号获取题目
    public Question getQuestion(int number) {
        return questions.get(number);
    }

    // 根据编号获取试卷
    public TestPaper getTestPaper(int number) {
        return testPapers.get(number);
    }

    // 根据学生编号获取学生
    public Student getStudent(String studentId) {
        return students.get(studentId);
    }
}
- `InputMatching`类负责解析用户输入的指令,并根据指令更新`DataWarehouse`中的数据。这个类使用正则表达式来匹配不同类型的输入,并调用相应的方法进行处理。

心得体会

由于第三次的题目我就写的比较吃力,经过迭代后的第四次更复杂更难了,首先在心理上我就是惧怕的,再加上编程能力不够,因此不足以应对这种环环相扣的比较复杂的题目,最终写出来的仅仅是半成品,只能对多选题进行输入输出,遇到填空题就会报错。

一周的时间按理来讲是足够的,但是我没有合理安排,有效的时间从一周变成了半周,时间变少,思考的时间变少,但是题目难度又没变,因此写的时候思路比较混乱。我应该合理安排时间,不能明知作业难度大还不慌不忙。

改进建议

TestPaperQuestion类在代码中未定义,但在TestPaper类中有引用,需要添加这个类。
GapFillingQuestion类没有写完,需要增加一些方法来实现更加复杂以及合理的逻辑。
ChoiceQuestion的getAnswers方法只支持单个答案,需要调整让他支持多选。
TestPaper的getTotalScore方法依赖TestPaperQuestion的getScore方法,但这个方法没有在代码中定义。
InputMatching类和DataWarehouse类写的太过混乱,每个人的设计想法都是不同的,不能将别人的类设计强加到自己的设计中。

第五次作业 家居强电电路模拟程序-1

源码分析

设计思路

  1. Device类是所有电器设备的父类:

    Device 抽象类定义了设备的基本属性和行为,包括编号、类型、输入电压、输出电压以及更新状态的方法。getOutput方法用于获取设备的输出,但具体实现依赖于子类。updateState 是一个抽象方法,由子类实现,以更新设备的状态(例如输出电压)。

  2. 具体设备类:

    控制设备SwitchSteppedSpeedControllerContinuousSpeedController和受控设备IncandescentLampFluorescentLampCeilingFanDevice 的子类,它们实现了特定设备的行为。每个子类都覆盖了 updateStategetOutput 方法,以反映其特定的行为。设备的行为,例如计算亮度、更新档位等,都是在 updateState 方法中实现的。

  3. 电路模拟器类 (CircuitSimulator):CircuitSimulator 类负责管理设备,包括连接设备、应用控制命令和应用电压。connectDevices方法解析用户输入的连接信息,并创建相应的设备实例。applyControlCommand方法解析用户输入的控制命令,并应用到相应的设备上。applyVoltage 方法模拟电路行为,按顺序设置每个设备的输入电压,并更新它们的输出状态。

踩坑心得

1.一开始我将题目想的比较复杂,思路不够简化。这次的题目只有电路元件之间的串联,并且不考虑电阻,但是在类设计时我总是想着之后该如何扩展导致写的比较乱。后来在同学的指导下我逐渐理清思路,完成了作业。

2.在题目信息比较多的情况下我喜欢将信息以简图或者文字的形式整理在纸上,这样看着比较清晰,防止信息遗漏。

3.处理输出时,程序没有报错但一直输出不了。经过调试后我发现不能只在子类中的方法重写,我忘记在主类中调用相应的方法了。

4.这次作业的最后一个测试点没有通过,但是没有找到原因。这次是我的大作业完成的分数最高的一次,题目简单占一部分原因,另外还要感谢同学的帮助,耐心为我解答问题。

第六次作业 家居强电电路模拟程序-2

源码分析


设计思路

这次作业增加了一个受控设备落地扇,增加了并联的情况,还要考虑电阻。

首先要新写一个落地扇类继承风扇类。还要将串并联分开,各自写成一个类。SeriesCircuit类表示一个串联电路,包含一个设备列表,通过组合多个Device对象来模拟串联电路的行为。ParallelCircuit类表示一个并联电路,包含一个串联电路列表,通过组合多个SeriesCircuit对象来模拟并联电路的行为。

点击查看代码
class SeriesCircuit extends Device {
    private List<Device> devices = new ArrayList<>();

    public SeriesCircuit(int number) {
        super(number);
        this.type = 8;
    }

    public List<Device> getDevices() {
        return devices;
    }

    public void addDevice(Device device) {
        devices.add(device);
    }

    @Override
    public void updateState() {
        if (devices.isEmpty()) {
            return;
        }

        devices.get(0).setInputVoltage(inputVoltage);
        devices.get(0).updateState();

        for (int i = 1; i < devices.size(); i++) {
            devices.get(i).setInputVoltage(devices.get(i - 1).getOutputVoltage());
            devices.get(i).updateState();

        }

        setOutputVoltage(devices.get(devices.size() - 1).getOutputVoltage());
    }

    @Override
    public void getOutput() {
        for (Device device : devices) {
            device.getOutput();
        }
    }
}

class ParallelCircuit extends Device {
    private List<SeriesCircuit> circuits = new ArrayList<>();

    public ParallelCircuit(int number) {
        super(number);
        this.type = 9;
    }

    public void addCircuit(SeriesCircuit circuit) {
        circuits.add(circuit);
    }

    public List<SeriesCircuit> getCircuits() {
        return circuits;
    }

    @Override
    public void updateState() {
//        if (circuits.isEmpty()) {
//            return;
//        }

        for (SeriesCircuit circuit : circuits) {
            circuit.setInputVoltage(inputVoltage);
            circuit.updateState();
        }

        double totalCurrent = circuits.stream()
                .mapToDouble(c -> c.getOutputVoltage() / c.getType())
                .sum();
        setOutputVoltage(inputVoltage);
    }

    @Override
    public void getOutput() {
        for (SeriesCircuit circuit : circuits) {
            circuit.getOutput();
        }
    }


    }

改进建议

这次的作业又一次没有写完,因为我实在是做不出来。

1.处理输入时,在提取信息的问题上我就遇到了困难,不知道如何将输入的信息提取出有效的部分并存储起来。

2.我不知道怎么将串联电路和并联电路合理地结合起来,这两个类之间一定是有联系的但我不明白该如何实现。

3.我只是在设备的属性中设置了电阻的大小,但是整个电路的电阻我不知道应该以哪种方式储存并计算出来。

4.这些问题都没有得到及时的解决导致这次的作业写起来非常困难。

总结

写大作业的过程对我来说异常的煎熬,不理解,不明白,写不出来的挫败感是无法言说的。但是每有一点思路我都会尽力去写,每处理好一部分问题的喜悦心情也是形容不出来的。我想到初中体育课上的蛙跳,老师说蛙跳就是把肌肉内的组织破坏又重构的过程,只有忍受疼痛不断向前跳才能有最大的收获。

我知道我的编程能力有限,在这方面的脑子不够灵光,但是只要坚持学习,每天有一点的进步也是好的。这门课程也快要结束了,希望我可以继续坚持,提高效率,每周将实验尽快完成就能留出更多的时间写大作业。

标签:总结,return,void,作业,devices,oop,Device,public
From: https://www.cnblogs.com/oopLearning/p/18239980

相关文章

  • 6.7总结
    第三版,差不多是最后一个版本了<!DOCTYPEhtml><htmllang="zh-CN"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge,chrome=1"><metaname="render......
  • JS(JavaScript)学习总结
    概念:JavaScript(简称“JS”)是一种具有函数优先的轻量级,解释型或即时编译型的编程语   言。虽然它是作为开发Web页面的脚本语言而出名,但是它也被用到了很多非浏览器环境中,JavaScript基于原型编程、多范式的动态脚本语言,并且支持面向对象、命令式、声明式、函数式编程范......
  • 题目集4-6的总结性blog
    前言:在这三周java的练习中,又运用了很多知识点,正则表达式,类与对象之间的关系,类与类之间的关系,继承,多态等等,巩固了上次学习的知识并掌握了新的技巧,这轮学习让我意识到,java题目需要先构思再实践,很多复杂的类之间联系,不构思好就去写代码,就会浪费很多时间。第四次大作业:这个题目是对......
  • PTA题目集4~6的总结
    PTA题目集4~6的总结一、前言第四次题目集为答题判题程序4,输入信息有题目信息、试卷信息、答题信息、学生信息、删除题目信息等。本次作业新增内容有选择题题目信息,填空题题目信息、输出顺序的变化:只要是正确格式的信息,可以以任意的先后顺序输入各类不同的信息,比如试卷可以出现......
  • OOP第二阶段题集总结
    一.前言知识点:考察继承和多态为多,其中还涉及迭代器的使用,在每个题集中都有一个综合性题目设计多方面知识点考试,有List类和HashMap的使用以及正则表达式的运用,并且注重考查设计,理解类与类之间的关系进行合理设计,其中也要遵循我们所学的单一职责,开闭原则,迪米特法则等。题量:第四次......
  • 【三级指针、二级指针、一级指针、指针值】原理+超直白说明/总结(当然,还是会有点涩~)
    看不懂的原理及区别在计算机编程中,指针是一个变量,其值为另一个变量的地址。指针的级别是根据它们所指向的对象类型来定义的。当我们谈论“一级指针”、“二级指针”和“三级指针”时,我们实际上是在讨论指针所指向的对象的类型。1.一级指针一级指针(或称为普通指针)是最常......
  • 第二次opp的总结和分析
    23201927-杨民星第二次blog1.前言:  继上次第一次blog之后,又开展了3次的Java的opp的训练集。在这三次的opp的题目中,第一次是对于之前三次题目的最后一次的迭代(上次3个题集的blog23201927-杨民星-第一次博客)这个题目也是答题系统的最后一个题目;而对于后面两个题目,就是基于电路......
  • 题目集4~6的总结性Blog
    第二次Blog是对第二类大作业的总结前言:前三次题目集的题量不会很大,提出的引脚我是第一次正式这种问题,有点陌生。难度偏小,虽然我没有拿满,老师还把后面的迭代方向告诉了我们,也更方便我们的设计,这一次对我来说应该是一次突破,因为我从未有一次如此清楚我代码的结构和问题,但我也有一......
  • OO题目集4~6总结
    OO题目集4~6总结​在之后的几次题目集的7-1题目中,难度渐渐高了起来,第四次题目集主要是在第三次题目集的基础上添加了一些功能,而之后的两次则是设计一个新的程序,是关于电路设备及电路的,与之前的答题程序不同,新的题目对于创新和思考能力以及思维逻辑能力要求更高,而接下来我将......
  • 第二次Blog总结
    一、前言经过题目集4至题目集6的学习与实践,我深刻体会到了面向对象编程(OOP)的魅力与挑战。本次总结将重点围绕三次题目集中的7-1题目,从知识点、题量、难度等方面进行分析与总结。知识点题目集4至6中的7-1题目,无一不紧扣面向对象编程(OOP)的核心概念。这些题目不仅深入探索了类的继......