第三次博客作业
一.前言
第七次作业
-
- 涉及的知识点:这次的题目集是在上一次题目集的基础上增加了多个并联串联在一起的情况,并且也考虑了一条串联电路中包含其它串联电路的情况,同时在这次题目集中添加了设备:窗帘(它的状态与亮度有关,这就需要我们考虑接入电路中的灯泡状态),互斥开关(包含三个引脚,同时这三个引脚的接入电路的顺序也有多种情况)
-
- 题量:本次作业的题量和上一次相同
-
- 难度:比上一次难一点
第八次作业
-
- 涉及的知识点:这一次的大作业是这个学期的最后一次大作业,这次作业它又是在上一次的基础上增加一些功能和设备,增加的功能:可以是并联里面包含并联,同时这次的作业还需要输入每个设备的两个引脚的电压,增加了设备的额定电流,短路的判断,增加的设备这次又有二极管的增加,它的接入电路中的状态又给电路增加了新的判断情况。
-
- 难度:最复杂的一题,细节多,代码量大,需要考虑的非常全面
二.设计与分析
第七次大作业
下面是几个类
public abstract class CircuitDevice {
protected String id;
protected double voltage;
protected double current;
protected double resistance;
public abstract void updateState();
}
点击查看代码
public abstract class ControlDevice extends CircuitDevice {
protected int state;
public abstract void adjustState(String command);
}
点击查看代码
public abstract class ControlledDevice extends CircuitDevice {
protected double outputValue;
public abstract void calculateOutput();
}
点击查看代码
public class Switch extends ControlDevice {
@Override
public void adjustState(String command) {
// 实现开关状态调整
}
@Override
public void updateState() {
// 更新开关状态
}
}
public class Dimmer extends ControlDevice {
private double level;
@Override
public void adjustState(String command) {
// 实现调光器状态调整
}
@Override
public void updateState() {
// 更新调光器状态
}
}
点击查看代码
public class Light extends ControlledDevice {
private double brightness;
@Override
public void calculateOutput() {
// 计算灯的亮度
}
@Override
public void updateState() {
// 更新灯的状态
}
}
public class Fan extends ControlledDevice {
private double speed;
@Override
public void calculateOutput() {
// 计算风扇的速度
}
@Override
public void updateState() {
// 更新风扇的状态
}
}
点击查看代码
public class SerialCircuit extends CircuitDevice {
private List<CircuitDevice> devices;
public void addDevice(CircuitDevice device) {
devices.add(device);
}
@Override
public void updateState() {
// 更新串联电路的状态
}
}
点击查看代码
public class ParallelCircuit extends CircuitDevice {
private List<CircuitDevice> branches;
public void addBranch(CircuitDevice branch) {
branches.add(branch);
}
@Override
public void updateState() {
// 更新并联电路的状态
}
}
点击查看代码
public class CircuitManager {
private CircuitDevice mainCircuit;
public void processInput(String input) {
// 处理输入命令
}
public void updateCircuit() {
// 更新整个电路的状态
}
public void outputStatus() {
// 输出所有设备的状态
}
}
第八次大作业

三.踩坑心得
- 串联和并联电路的嵌套可能会导致电路结构变得非常复杂,难以正确计算电压和电流,可以使用递归方法处理嵌套的电路结构。将每个串联或并联电路视为一个独立的组件,逐层计算。
2.输入格式复杂,包含多种类型的信息(设备信息、连接信息、控制命令等)
3.设备状态的更新顺序可能影响最终结果,特别是在复杂电路中。
四.改进建议
- 实现一个两阶段更新机制:首先计算所有设备的新状态,然后统一更新。这样可以避免更新顺序对结果的影响。
- 为每种设备类型实现一个专门的格式化方法,确保输出符合要求。使用单元测试验证每种输出格式。
- 设计时考虑单元测试的需求。使用依赖注入等技术使得各个组件可以独立测试。为关键的计算逻辑编写详细的单元测试。
五.总结
通过编写这个家居电路模拟系统,我获得以下宝贵的经验
学会了如何设计一个复杂的、多层次的系统架构。
理解了模块化设计的重要性,以及如何将大问题分解成小问题。
面向对象编程的深入理解:
加深了对继承、多态、封装等面向对象概念的理解。
学会了如何利用抽象类和接口来设计灵活的类层次结构。
理解了设计模式如何提高代码的可扩展性和可维护性。
提高了解决复杂逻辑问题的能力。
掌握了格式化输出的技巧,特别是处理不同类型数据的输出格式。
学会了如何设计健壮的系统,能够优雅地处理各种异常情况。
浙公网安备 33010602011771号