第七-八次作业总结

news/2025/3/10 22:28:55/文章来源:https://www.cnblogs.com/Hwenhuiya/p/18637529

一、前言

该系列题目均为设计与实现一个家居强电电路模拟程序,题目难度复杂度逐步提升,题目数量和输入信息也逐步增加。以下是对这两道题的总结:

1. 知识点

  • 家居强电电路模拟程序-3
    受控窗帘设备的模拟
    多个并联电路串联在一起的情况
    串联电路中包含其他串联电路的情况
  • 家居强电电路模拟程序-4
    引脚电压显示功能
    电流限制检测
    短路检测功能
    并联电路嵌套(并联中包含并联)
    二极管元件及其导通/截止状态模拟

2. 题量

  • 家居强电电路模拟程序-3:题量较多,问题的难度更多在于逻辑的判断和多种输入的处理。
  • 家居强电电路模拟程序-4:题量多,主要是一些基础设备的控制和复杂电路的连接及处理问题。

3. 难度

  • 电路复杂度提升
    从简单串并联到多层嵌套结构
    增加了电路异常情况的处理
  • 计算复杂度提升
    需要计算每个引脚的电压
    需要计算实时电流并与限制值比较
    需要处理二极管的导通/截止判断
  • 输出要求提升
    增加了电压显示
    增加了异常情况的提示

二、设计与分析

第七题

本题核心目标是实现一个电路模拟系统,重点包括以下几点:

  • 电路设备建模:需要分类管理设备,包括控制设备和受控设备,并且支持它们的动态组合(串联、并联电路)。
  • 电路模拟计算:根据串联和并联电路的基本物理规律(如欧姆定律),计算电压、电流等电路参数,模拟设备行为。
  • 状态管理与输出:动态更新设备状态(如开关的状态、灯的亮度、风扇的转速等),并提供输出结果。
  • 扩展性要求:需要支持后续迭代新增设备、电路结构的变化,以及更复杂的输入规则。

1. 类设计

  • 核心类 CircuitElement:作为所有电路设备(开关、灯、风扇等)的基类,包含所有设备的共有属性和行为(如电阻、电压、电流计算等)。子类通过继承扩展不同设备的特性。
  • 控制设备类 ControlDevice:继承自 CircuitElement,用于建模控制设备(开关、调速器等)。提供控制设备的行为接口,如切换状态 toggle 或调整档位。
  • 受控设备类 ControlledDevice:继承自 CircuitElement,用于建模受控设备(灯、风扇、窗帘等)。包括设备特定的行为(如调整灯的亮度或风扇转速)。
  • 电路类 Circuit:负责将多个 CircuitElement 组合起来,构建完整的电路。实现电路计算逻辑(如电压分配、电流计算等)。

2. 主程序逻辑分析

  • 核心类:电路元件
    实现了设备的通用属性和行为,包括电压、电流的计算。

  • 核心代码:

     class CircuitElement:def __init__(self, id, resistance=0):self.id = idself.resistance = resistanceself.voltage = 0self.current = 0def calculate_voltage_drop(self, input_voltage):"""计算设备的电压降"""if self.resistance > 0:self.voltage = input_voltage * self.resistancereturn self.voltagedef get_current(self, input_current):"""计算通过设备的电流"""self.current = input_currentreturn self.current
  • 控制设备类
    扩展自 CircuitElement,根据题目不同类型的控制设备进行建模。

  • 核心代码:

     class Switch(CircuitElement):def __init__(self, id):super().__init__(id)self.state = 0  # 0: off, 1: ondef toggle(self):"""切换开关状态"""self.state = 1 - self.statedef output_voltage(self, input_voltage):return input_voltage if self.state == 1 else 0

3. 设计类图(使用PowerDesigner)

报表

指标
总行数(LOC) 500行
类数量 主类6个
方法数量 19
最大圈复杂度 12
平均每行代码的字母数 41

4. 心得总结

  • 类设计的核心原则:
    本次设计中采用了 面向对象 的思想,确保了设备的扩展性。
    基类 CircuitElement 提供了统一接口,不同设备通过继承实现特定逻辑,增强了灵活性。
  • 复杂度的管理:
    随着题目迭代,功能复杂度增加,但代码通过合理的模块化(如独立的 Circuit 和设备类)控制了复杂度。
  • 计算精度与性能:
    考虑到输出的数值截断规则,内部计算采用双精度浮点数 double,仅在输出时截尾处理,保证了精度。

第八题

代码实现的核心目标是模拟多个类型的电气设备(如开关、调速器、灯泡、吊扇等),通过命令对设备进行控制并模拟其响应(电压、电流、亮度、速度等)。

1. 类分析

  • CircuitDevice:所有电路设备的基类,包含标识符、两个引脚和计算输出电压、电流的方法,以及短路检测。
    ControlDevice:控制设备的基类,包含控制电路的方法。
  • ActuatorDevice:受控设备的基类,包含执行动作的方法。
  • Switch:开关类,包含状态和切换状态的方法。
  • MutualExclusiveSwitch:互斥开关类,包含状态和切换状态的方法。
  • SpeedController:调速器类,包含档位和调整档位的方法。
  • ContinuousSpeedController:连续调速器类,包含档位参数和设置档位的方法。
  • Diode:二极管类,包含导通和截止的状态和方法。
  • Light:灯具类,包含亮度和点亮的方法。
  • IncandescentLight:白炽灯类,包含计算亮度的方法。
  • FluorescentLight:日光灯类,包含检查是否点亮的方法。
  • Fan:风扇类,包含速度和旋转的方法。
  • CeilingFan:吊扇类,包含计算速度的方法。
  • FloorFan:落地扇类,包含计算速度的方法。
  • ControlledCurtain:受控窗帘类,包含计算打开百分比的方法。
  • SerialCircuit:串联电路类,包含多个电路设备和计算电压的方法。
  • ParallelCircuit:并联电路类,包含多个串联电路和计算电压的方法。
  • Pin:引脚类,包含电压和连接/断开的方法。
    设计建议:

2. 主程序逻辑分析

  • 控制设备类
    所有控制设备的基类,如开关(Switch)、调速器(SpeedController)和互斥开关(MutualSwitch)可以继承自ControlDevice类,该类包含:
    change_state():改变设备状态。
    calculate_output_voltage():计算输出电压。
    current_limit_check():检查设备是否超载

  • 核心代码:

     class ControlDevice:def __init__(self, identifier, pin1, pin2, max_current):self.identifier = identifierself.pin1 = pin1self.pin2 = pin2self.max_current = max_currentself.state = 0  # 设备的初始状态def change_state(self, state):self.state = statedef calculate_output_voltage(self, input_voltage):# 根据设备类型的不同实现不同的电压计算方式passdef current_limit_check(self, current):if current > self.max_current:raise Exception("exceeding current limit error")

3. 类图设计(使用PowerDesigner)

使用PowerDesigner生成的类图如下:

报表

以下是针对该代码的 SourceMonitor 报表分析:

指标
总行数(LOC) 626 行
方法数量 25
类的数量 17
平均方法复杂度 8
最大方法复杂度 14

顺序图

4. 心得总结

通过设计智能家居强电电路模拟系统,可以加深对电路模拟、对象建模、继承关系和异常检测的理解。系统设计需要考虑多种设备的交互与状态变化,同时确保系统的健壮性,避免电流超限和短路等问题。

在实现过程中,最难的部分是处理复杂的设备连接关系与电流计算,尤其是在并联和串联电路中,如何高效地计算电压、电流,并进行短路检测是关键技术点。

通过这些设计,系统能够模拟家庭电路的工作过程,并对用户输入进行合理响应,确保智能家居系统的稳定运行。

三、采坑心得

第七次作业

  • 遇到的问题:
    电路模型简化:最初简化了电路模型,导致模拟结果与实际电路行为有较大偏差。
    输入验证不足:用户输入错误或不完整时,系统无法给出明确反馈。
    性能问题:随着电路复杂度增加,计算性能成为瓶颈。

  • 解决方案与心得:
    完善电路模型:通过增加电阻、电压源等更多细节,提高模拟的准确性。
    强化输入验证:增加输入验证逻辑,确保所有输入都是合法的,并提供错误提示。
    优化算法:使用更高效的图搜索算法来处理电路分析,减少计算时间。

  • 心得:
    测试是关键:全面的测试用例可以帮助发现设计中的盲点。

第八次作业

  • 遇到的问题:
    设备状态管理复杂:新增的控制设备和受控设备使得状态管理变得更加复杂。
    电流限制逻辑错误:实现电流限制时,逻辑判断出现错误,导致某些设备状态不正确。
    短路检测不准确:短路检测逻辑在某些特定情况下无法正确触发。
    并联电路包含关系处理:并联电路中包含并联电路的情况处理不当,导致电路连接错误。
  • 解决方案与心得:
    状态机管理设备状态:使用状态机来管理每个设备的状态,确保状态转换的逻辑清晰。
    电流限制逻辑修正:重新审查并修正电流限制的逻辑,确保在超过限制时能正确响应。
    增强短路检测:改进短路检测算法,确保在各种情况下都能准确检测到短路。
    明确电路连接规则:明确并联电路包含关系的处理规则,确保电路连接的正确性。
  • 心得:
    持续学习:随着新功能的添加,需要不断学习新的算法和设计模式。
    代码复用:在可能的情况下,复用已有代码可以减少开发时间和错误。
    模块化设计:模块化设计有助于隔离问题,使得问题定位和修复更加容易。

总结

通过这两次迭代的开发经验,可以看出,每次迭代都需要对前一次的设计进行反思和改进,同时也需要根据新的需求调整设计和实现策略。这些心得可以帮助在未来的开发中避免类似的问题,提高开发效率和产品质量。

四、改进建议

第七次作业

  • 代码结构和模块化:
    建议:将电路模拟的各个部分(如设备控制、电路连接、输入输出处理)分离成独立的模块或类。这样可以提高代码的可读性和可维护性,也便于未来的功能扩展。
    实现:创建抽象的CircuitDevice基类和具体的子类(如Switch、Dimmer等),以及独立的输入输出处理类。
  • 数据驱动:
    建议:将设备的最大电流限制、电阻值等参数存储在配置文件中,而不是硬编码在程序中。这样可以在不修改代码的情况下调整参数。
    实现:使用文件存储设备参数,并在程序启动时加载这些参数。
  • 错误处理和用户反馈:
    建议:增强错误处理机制,对于非法输入提供清晰的错误信息,并指导用户如何纠正。
    实现:定义一个错误处理类,封装错误检测和用户反馈逻辑。
  • 测试和验证:
    建议:编写单元测试和集成测试,确保每个模块的正确性,并验证整个系统的稳定性。
    实现:使用测试框架编写测试用例,覆盖各种电路配置和操作。

第八次作业

  • 设备状态管理:
    建议:使用状态机来管理设备的状态转换,特别是对于复杂的控制设备和受控设备。
    实现:为每种设备定义状态机,明确状态转换的条件和结果。
  • 电流限制和短路检测:
    建议:优化电流限制和短路检测算法,确保在各种电路配置下都能准确执行。
    实现:使用图论中的算法(如深度优先搜索)来检测电路路径,实现精确的短路检测。
  • 并联电路包含关系处理:
    建议:设计清晰的规则来处理并联电路中的包含关系,确保电路连接的正确性。
    实现:创建一个电路解析器,能够递归地解析并联和串联电路的连接关系。
  • 用户界面和体验:
    建议:改进用户界面,提供更直观的电路状态展示和操作反馈。
    实现:开发一个简单的图形界面,使用图形和动画来展示电路状态的变化。
  • 性能优化:
    建议:针对大型电路,优化算法和数据结构,提高程序的计算效率。
    实现:使用更高效的数据结构(如散列表)来存储电路连接信息,减少查找和更新的时间复杂度。
  • 文档和代码注释:
    建议:编写详细的开发文档和代码注释,方便理解和维护代码。
    实现:使用文档生成工具自动生成代码文档,并确保每个类和方法都有清晰的注释。

五、总结

经过这次题目的练习,积累了以下几点学习经验和对未来改进的建议:

收获

  • 电路基础知识:
    理解了智能家居中常见的控制设备和受控设备的工作原理,如开关、调速器、灯具和风扇等。
    学习了电路的基本组成,包括串联和并联电路的特性及其对电流和电压的影响。
  • 软件开发技能:
    提高了面向对象编程的能力,通过设计和实现电路模拟系统,加深了对类和对象的理解。
    掌握了软件设计模式,如状态机在设备状态管理中的应用。
  • 算法和数据结构:
    学习了图论算法在电路分析中的应用,如深度优先搜索(DFS)用于检测电路路径。
    理解了不同数据结构对性能的影响,如使用散列表存储电路连接信息。
  • 测试和验证:
    了解了单元测试和集成测试的重要性,学习了如何为软件编写测试用例。
    认识到了测试在保证软件质量中的作用,特别是在处理复杂的电路逻辑时。

对教师、课程和作业组织的建议

  • 教师建议:题目设计过程循序渐进,对学生理解复杂系统设计和多信息处理有较好帮助,但因复杂度较高,建议在课上增加难点讲解,尤其是信息引用管理和异常处理方面的案例分析。

六、学期总结

本学期的收获

  1. 理论知识的深化
    本学期通过面向对象程序设计课程,我对面向对象的基本概念有了更深入的理解。这包括类与对象的关系、继承、封装和多态等核心概念。学习这些理论让我能够更好地设计出结构清晰、易于维护的代码。

  2. 编程技能的提升
    通过实践项目和课堂练习,我的编程技能得到了显著提升。我学会了如何将理论应用到实际编程中,特别是在设计类结构、编写方法和实现继承接口等方面。

  3. 软件工程实践
    面向对象程序设计不仅仅是一门编程课程,它还教会了我许多软件工程的最佳实践,比如代码重用、模块化设计和单元测试。这些实践对于开发大型软件项目至关重要。

  4. 解决问题的能力
    面向对象的方法鼓励我以更抽象的方式思考问题,这不仅提高了我解决编程问题的能力,也增强了我在其他领域的问题分析和解决能力。

心里想说的话

  1. 对挑战的感激
    这学期的课程对我来说既是挑战也是机遇。我感激每一次挑战,因为它们促使我走出舒适区,学习新知识,提升技能。每次解决一个难题,我都能感受到自己的成长。

  2. 对指导的感谢
    我想对教授和助教表示最深的感谢。你们不仅传授知识,还耐心指导我们解决实际问题。你们的教诲和支持是我学习旅程中不可或缺的一部分。

  3. 对未来的期待
    面向对象程序设计课程为我打开了新世界的大门。我对即将到来的软件开发项目充满期待,希望能将在这里学到的知识运用到实际工作中,创造出有价值的软件产品。

  4. 对同学的赞赏
    我也很赞赏我的同学们。我们一起讨论问题,互相学习,共同进步。这种合作精神和团队氛围让我感到温暖,也让我更加坚信团队合作的力量。

  5. 对自我的反思
    最后,我对自己在这学期的表现进行了反思。我意识到还有许多需要改进的地方,比如代码优化、时间管理等。我将继续努力学习,不断提高自己。

面向对象程序设计课程不仅仅是一门课程,它是我成为一名优秀软件工程师旅程中的重要一步。我将珍惜在这里学到的一切,并将其应用到未来的学习和工作中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/860405.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AD 原理图如何进行DRC检查

如果画到PCB才发现原理图画错了,那么就为时太晚了。 画完或者后期修改PCB应该及时进行原理图的DRC检查。 1. 右下角Panels打开工程: 2. 然后我们选中整个工程的工程处,点击右键: 3. 然后左键点击compile PCB Project......... : 参考资料: https://www.fanyedu.com/content…

Vue3甘特图 - dhtmlx-gantt

Vue3甘特图 <template><div style="height:100%; background-color: white"><div id="gantt_here" style="width:100%; height:100%;"></div></div> </template><script setup> import { onMounted }…

恍恍惚惚,走到了尾声

课程链接 https://edu.cnblogs.com/campus/fzu/SE2024/作业链接 https://edu.cnblogs.com/campus/fzu/SE2024/homework/13315作业目标 回顾自己的软工实践课程学号 102202157一、学期回顾 1.1 回顾你对于软件工程课程的想象在课程开始前,我一直以为软件工程课程会聚焦于各种编…

转正了!!!!!!!!

近期&感受、问题: 1.版本优化描述:秘境排行榜;一键探险功能的顺序;背包随机类宝箱一键开启;美食家一键合成闪光美食;电玩活动跳过动画功能;许愿池自动投币;结晶一键熔炼 感受/反思:感觉自己菜菜的QAQ,各种版本的本地数据处理错误(删早了删晚了/先notify后notify…

Navicat密码导出解密导入到DataGrip中

使用Navicat导出密码:目前使用Navicat17亲测有效使用php解密代码 <?php class NavicatPassword {protected $version = 0;protected $aesKey = libcckeylibcckey;protected $aesIv = libcciv libcciv ;protected $blowString = 3DC5CA39;protected $blowKey = null;protec…

鸿蒙原生页面高性能解决方案上线OpenHarmony社区 助力打造高性能原生应用

随着HarmonyOS NEXT的正式推出,鸿蒙原生应用开发热度高涨,数量激增。但在三方应用鸿蒙化进程中,性能问题频出。为此,HarmonyOS NEXT推出了一整套原生页面高性能解决方案,包括Nodepool、HMrouter和DataCache 三大解决方案,并上架OpenHarmony开源社区,分别针对应用页面滑动…

数值计算方法(2) 数值积分方法

+++ date = 2024-12-21T13:49:00+08:00 draft = true title = 数值计算方法(2) 数值积分方法 +++ 初次发布于我的个人文档 上一期讲了插值方法,这一次自然是要运用一下插值方法了。所以这一期的主题是用插值方法计算定积分。 机械求积方法 下面我们来介绍一下怎么用插值法来得…

AI烟雾监测识别摄像机

AI烟雾监测识别摄像机的应用范围广泛,不仅可以安装在家庭、商业建筑、工厂等场所,还可以应用于地铁、火车站等公共场所,为人们的生命财产安全提供全方位的保障。总的来说,AI烟雾监测识别摄像机作为智能化安全防范的重要工具,具有广阔的应用前景和社会意义。通过提高火灾预…

Omnissa Horizon Clients 2412 发布 - 虚拟桌面基础架构 (VDI) 和应用软件

Omnissa Horizon Clients 2412 发布 - 虚拟桌面基础架构 (VDI) 和应用软件Omnissa Horizon Clients 2412 发布 - 虚拟桌面基础架构 (VDI) 和应用软件 Omnissa Horizon,之前称为 VMware Horizon, 通过高效、安全的虚拟桌面交付增强您的工作空间 请访问原文链接:https://sysin.…

题目集7-8总结:智能家居强电电路模拟系统

一、前言 1.1 题目背景 题目集7和8以智能家居为主题,通过强电电路的模拟设计,引导我们从基本开关电路到多功能调速器和受控设备模拟的深入探索,体现了物联网技术在智能家居中的实际应用。 1.2 题目特点 知识点:涵盖开关逻辑、电路模拟、受控设备特性、并联与串联电路等核…

业务凭证与总账凭证有何异同

在企业财务管理中,"业务凭证"和"总账凭证"是两个核心概念,它们在会计核算和ERP系统中扮演着至关重要的角色。本文将深入探讨这两个概念的异同点,帮助读者更好地理解它们在记录企业经济活动、会计分录以及财务报表编制中的作用和区别。在ERP财务系统里,…

Qt - 实现HTTP服务器和HTTP客户端

1. WebSocket服务器和HTTP服务器的区别 WebSocket服务器和HTTP服务器是两种不同的服务器类型,它们在协议、连接方式和通信模式等方面有所区别。协议:HTTP服务器使用HTTP协议进行通信,而WebSocket服务器使用WebSocket协议。HTTP协议是无状态的,客户端发起请求,服务器响应请…