题目集7~8的总结
一、前言
1.这已然是我第三次踏入博客创作的旅程啦,而在这个学期里,它也将成为我最后一次撰写博客的契机呢。回顾这几次的博客写作经历,不可否认的是,它确实对我自身的学习产生了一定程度的提升作用。要知道,在撰写博客的过程中,不仅仅是单纯地将作业内容书写出来,更重要的是能够从中提炼出精华,进行总结归纳。这种总结的能力,就如同一位默默耕耘的园丁,精心地将知识的种子挑选、整理,让它们在我的脑海中生根发芽。在今后的学习进程中,我将始终秉持着这样的思想,以一种严谨而细致的态度去总结自己所学的知识。无论是面对晦涩难懂的理论知识,还是纷繁复杂的实践技能,我都将以博客写作时的那份专注和耐心,去深入挖掘其中的精髓,将它们梳理成条理清晰的知识体系。通过这样的方式,我相信自己能够获得更多的收获,收获知识的硕果,收获学习的快乐,让学习的旅程变得更加丰富多彩,充满无尽的惊喜与感动。
2.题目集可谓是内容丰富多样,其中涵盖了极为广泛的多个知识点。具体而言,它深入地涉及到了物联网技术在家居设备连接方面的实际应用情况,让学习者能够清晰地了解到如何将各种家居设备通过物联网技术实现高效连接。同时,对于控制设备的模拟也有着细致的讲解,像开关这类常见的控制设备,以及分档调速器、连续调速器和互斥开关等较为复杂的控制装置,都进行了模拟和分析。在受控设备方面,更是涵盖了白炽灯、日光灯、吊扇、落地扇以及窗帘等不同类型的设备,使学习者能够全面地掌握对各种受控设备的模拟和控制方法。不仅如此,题目集还着重于对电路连接的理解,无论是串联电路还是并联电路,都进行了详细的剖析和讲解,让学习者能够准确地理解电路连接的原理和特点。对于电压和电流分布的计算,也给出了具体的方法和示例,帮助学习者能够熟练地进行相关计算。同时,对于设备的电阻和功率的计算,也进行了系统的阐述,让学习者能够根据已知条件准确地计算出设备的电阻和功率。在输入信号的处理方面,题目集要求学习者能够解析和处理各种用户输入,包括设备信息、连接信息和控制命令等。这不仅需要学习者具备扎实的编程基础,还需要对电路知识有深入的理解,能够将两者有机地结合起来。整体来看,此题目集的难度较高,它更适合那些具备一定编程基础和电路知识的学生或专业人士。其挑战性在于,不仅仅要实现基本的功能,还需要充分考虑各种异常情况和用户输入的处理,这就要求学习者具备较强的逻辑思维能力和问题解决能力。只有通过不断地思考和实践,才能够真正掌握这些知识点,提高自己的编程和电路知识水平。
二、设计与分析
第七次作业
类图:
部分代码:
class MutualExclusiveSwitch extends Controlsetout {
private boolean isConnectedToPin2 = true;
public MutualExclusiveSwitch(String id) {super("H", id);}
public void toggleConnection() {isConnectedToPin2 =!isConnectedToPin2;}
public int getConnectedPin() {return isConnectedToPin2? 2 : 3;}
public double getResistance() {return isConnectedToPin2? 5 : 10;}
}
顺序图:
第七次作业之中新增添了两个设备,其中一个是互斥开关,另一个则是受控窗帘。互斥开关主要用于显示 1、2 引脚的接通状态,而受控窗帘则用于展示窗帘打开的百分比。此次的难度已然不再仅仅是简单地加入两个设备这般浅显,原因在于之前正确的部分尚未完全得以实现,所以在加入这两个设备之后,整个作业的难度陡然提升。
对于受控窗帘而言,其电路符号为 S,其最低工作电压为 50V,当电压达到或超过 50V 时,窗帘便可正常工作。在此过程中,我们不考虑室外光照强度以及室内空间大小等其他因素,仅关注窗帘受室内灯光光照强度的控制情况。这里的受控窗帘着实带来了诸多麻烦,因为它涉及到了对正确灯光的妥善处理,所以在需求层面上,首先必须要确保前面关于灯光值的处理是正确无误的。
总的来看,由于之前的部分尚未实现,这就意味着后续的工作可能需要进行重新设计。需要全面审视之前的设计,找出其中存在的问题和不足之处,然后结合新增添的互斥开关和受控窗帘这两个设备,对整个作业进行重新规划和调整。只有这样,才能够确保整个作业的正确性和稳定性,实现各个设备之间的协同工作,以及满足各项功能的要求。在这个过程中,需要不断地进行测试和验证,以确保每一个环节都能够正常运行,从而最终完成第七次作业的任务。
第八次作业
类图
顺序图:
此次的作业乃是在上次以及前面几次作业的基础上进行的推进。然而,在这个推进的过程中,我不慎遗漏了一些关键环节,致使未能持续推进至当前的状态。在此处,新增了一个二极管,大家都清楚二极管具有正向导通、反向截止的特性。所以,需要精心设计代码,使其能够满足这一要求。具体而言,需要设计出两边的电压差,当然,这个电压差是有正负之分的,并且要根据二极管与电压差的方向是否一致来进行判断。
与此同时,还需要妥善处理短路的情况。对于这种情况的处理方式是,如果检测到电流接近无穷大,那么就可以判定为发生了短路现象。在实际的设计过程中,要充分考虑到各种可能出现的情况,不仅仅是二极管的特性和电压差的计算,还要对短路这一可能导致严重后果的情况进行严密的监测和处理。通过这样全面而细致的设计,能够确保整个电路系统的稳定运行,避免因一些小的疏忽而导致整个系统出现故障或安全问题。只有在各个环节都做到严谨细致,才能够真正实现作业的推进和电路系统的优化。
三、踩坑心得
第七次作业
1.尽管无需考虑外界的各种光照情况,诸如白天光照值、晚上光照值、下雨光照值以及下雪光照值等都无需纳入考量范围。然而,却必须要对作业内部所有灯的光照值予以充分关注和重视。这一点至关重要,切不可掉以轻心,需将其作为一个关键要点牢记在心。
2.必须要对精度问题给予高度重视。精度方面的误差可能会对整个作业的结果产生重大影响。对于所有有可能出现小数的数值,应一律采用double 类型进行保存和计算,绝对不能进行下转型的数据类型转换。例如电压、转速、亮度等这些数值,都应遵循这一原则。只有在最后输出结果时,才按照截尾规则,舍弃尾数,保留整数进行输出。乍一看,这似乎是一个非常细微且看似没有太大问题的要求,但实际上,如果不严格遵守这一规则,就极有可能导致差之毫厘、谬以千里的严重后果。在实际操作过程中,要时刻保持警惕,对每一个涉及到小数计算的环节都要严谨对待,确保精度的准确性,以避免因微小的误差而引发整个作业结果的偏差。只有这样,才能保证作业的质量和准确性,避免因精度问题而给后续的工作带来不必要的麻烦和损失。
第八次作业
1.实际上仍存在着较多的潜在风险和难题。例如,在此基础上还增加了一个情况,即过大的电流会引发电器过热现象,进而有可能烧坏电路。要知道,每一个元器件都有其自身的最大电流设置,而这一限制在之前的设计中是未曾考虑到的,需要我们自行添加和考量。从这一点就能看出,之前的设计存在一定的不完善之处,那么需要修改的地方也就会相对较多。
2.并且,由于在输出每个电器的状态信息之后,还需要依次输出该电器每个管脚的电压。这一要求无疑会使整个设计工作面临巨大的挑战,甚至可能需要进行全面的重新设计,就如同要重新撰写整个题目一般。因为原本的设计就已经存在问题,现在再来进行修改,其工作量之大是可想而知的,几乎相当于要重新开始整个题目的设计过程。所以,总体来看,面临的问题确实是比较多且较为复杂的,需要我投入更多的时间和精力去逐一解决和完善。与其说是坑,不如是之前没有考虑到的地方,也是自己考虑不全面的结果。
四、改进建议
第七次作业
在 processSeriesCircuits 方法与 processParallelCircuits 方法里,务必避免在循环过程中创建新的对象,因为这极有可能对程序的性能产生负面影响。我们应当选用合适的数据结构来存储电路设备以及连接信息,比如运用 Map 来存储设备的状态,这样就能实现快速的访问和更新操作。
在对输入进行解析以及执行电路操作的过程中,要添加异常处理和错误检查机制,以此来提升程序的健壮性。目前 calculateLightBrightnessSum 方法中的代码存在不完整的情况,要么完成这个方法的编写,使其能够完整地实现相应功能,要么就将其移除,避免给程序带来潜在的问题。
在 Dealwithfed 类中,readInput 方法可以进行拆分,将其拆分成多个更小的方法,每个方法专门负责处理一种类型的输入,这样可以使代码结构更加清晰,便于维护和扩展。
同时,考虑引入一个统一的状态管理器来对电路设备的状态进行管理,而不是在每个设备类中单独进行管理,这样能够提高代码的一致性和可维护性。
在 Dealwithexporting 类的 processCommands 方法中,其中的循环部分可以进行优化,避免进行不必要的重复计算,从而提高程序的执行效率。
在 showoneselfResults 方法中,对于组件列表的排序操作可以进行优化,使其在电路结构发生变化时只进行一次,而不是每次显示结果时都进行排序,这样可以减少不必要的计算开销,提高程序的性能。通过对这些方面的优化和拓展,能够使整个电路相关的程序更加高效、稳定和易于维护。
第八次作业
代码中有许多硬编码的值(如电阻值、电流限制等),这些可以被替换为常量或配置参数,以提高代码的可配置性和可维护性。静态变量isShortCircuited用于标记是否发生短路。考虑将其替换为实例变量,因为短路状态可能因电路而异。Onoff 类中的 showoneself 方法中的 callCount 变量可能会导致问题,因为它在静态方法中被使用,可能会导致非预期的行为。考虑将其改为实例变量MutualExclusiveSwitch 类中的 getConnectedPin 方法可以根据 isConnectedToPin2 的值直接返回,无需三元运算符。
优化电路计算:在 Series 和 Parallel 类中,计算总电阻和更新电压的方法可以进一步优化,以减少重复代码。calculateTotalResistance 方法可以在电路结构变化时只计算一次,而不是每次更新电压时都计算。将相关的类和方法组织在合适的包(package)中,以提高代码的结构清晰度。在 Dealwithexporting 类中,processCommands 方法中的循环可以优化,避免不必要的重复计算。在 showoneselfResults 方法中,对组件列表的排序可以在电路结构变化时只进行一次,而不是每次显示结果时都排序。将输入处理、电路计算和输出处理分离到不同的类中,以提高代码的模块化。考虑使用设计模式,如工厂模式来创建电路设备实例,策略模式来处理不同类型的电路计算。在 processSeriesCircuits 和 processParallelCircuits 方法中,避免在循环中创建新的对象,这可能会影响性能。
五、总结
1.学习到了Java编程基础。通过编写和分析电路模拟程序,加深了对Java语言的理解,包括类、对象、继承、多态等面向对象编程的概念。电路基础知识。学习了电路中的基本概念,如电压、电流、电阻和功率,以及它们之间的关系。代码组织与架构。通过代码实践,了解了如何组织代码结构,使其更加模块化和易于维护。问题解决能力。在解决编程问题的过程中,提高了分析问题和解决问题的能力。
2.需要进一步学习及研究的地方。设计模式。深入学习常用的设计模式,以便在复杂的项目中更好地应用它们。算法和数据结构。加强对算法和数据结构的理解,提高代码的效率和性能。软件工程实践。学习更多的软件工程实践,如代码审查、版本控制、单元测试等。学习Java的并发编程知识,了解如何在多线程环境中管理共享资源。
3.性能优化技巧。深入研究各种性能优化技巧,例如缓存机制、懒加载、对象池等,以提升程序在运行时的性能表现。异常处理机制。进一步强化对异常处理机制的掌握,能够更准确地捕获和处理各种异常情况,保证程序的稳定性和可靠性。框架与库的应用。学习和探索常用的 Java 框架与库,如 Spring、MyBatis 等,了解它们的工作原理和优势,以便在合适的场景中进行应用,提高开发效率。
六、学期总结
1.在这个学期的学习过程中,着实收获颇丰。首先具备了一定的编程基础,随后深入学习了 Java 编程,并且清晰地认识到了它与其他编程方式的区别。深入了解了面向对象的编程语言的特点,例如封装,通过将数据和操作封装在类中,实现了数据的隐藏和保护,提高了代码的安全性和可维护性;继承,子类可以继承父类的属性和方法,实现了代码的复用和扩展,提高了开发效率;多态,同一操作作用于不同的对象可以有不同的表现形式,增加了程序的灵活性和可扩展性。
2.对于面向对象的语言,主要存在以下几类关系:关联关系,体现了两个或多个对象之间的静态联系,如一个类的对象包含另一个类的对象;聚合关系,是一种特殊的关联关系,整体和部分的关系,部分可以脱离整体而存在;组合关系,是更强的聚合关系,整体和部分的生命周期紧密相关,部分不能脱离整体而存在。
在面向对象的编程中,还有一些重要的原则,如单一职责原则,一个类应该只负责一项职责,提高代码的内聚性;开闭原则,软件实体应该对扩展开放,对修改关闭,以提高代码的可维护性和可扩展性;依赖倒置原则,高层模块不应该依赖底层模块,两者都应该依赖于抽象,抽象不应该依赖于具体,具体应该依赖于抽象,降低了模块之间的耦合度;接口隔离原则,客户端不应该依赖它不需要的接口,提高了代码的内聚性和可维护性。
3.设计模式的使用更是为面向对象编程提供了强大的工具和方法。例如单例模式,确保一个类只有一个实例,并提供一个全局访问点;工厂模式,用于创建对象,将对象的创建和使用分离,提高了代码的灵活性和可维护性;装饰器模式,动态地给一个对象添加额外的职责,通过组合而非继承的方式来扩展功能;代理模式,为其他对象提供一种代理以控制对这个对象的访问,在某些情况下可以提高系统的性能和安全性等。通过对这些概念的学习和应用,能够更好地进行面向对象的编程开发,提高代码的质量和可维护性。