OOP第三次博客作业

news/2024/7/6 6:38:03/文章来源:https://www.cnblogs.com/GUJJ129/p/18275303

目录
  • 前言:
  • 设计与分析:
    • opp-7-家居强电电路模拟程序-2
    • opp-8-家居强电电路模拟程序-2
  • 踩坑心得:
    • opp-5-家居强电电路模拟程序-3踩坑和心得:
    • opp-5-家居强电电路模拟程序-4踩坑和心得:
  • 总结:

前言:

oop-7相比与oop-6仅增加了两个电子元件,一个互斥开关,一个受控窗帘,除了优化了排序类,其他代码基本上没有进行修改,可以说基本上实现了开闭原则。因此本次大作业也未花费多少时间,是八次大作业里花费时间最少的,一个好的设计确实可以大大加快任务的完成速度。
oop-8增加了引脚电压的的输出,作业难度大大增加,复杂电路的电压分配对于我来说有点太过复杂了,还增加了一个二级管,不过这并未给本次作业增加多少难度,难点在解决引脚电压的输出问题上,最后代码的增加量倒是不大,之前的代码也并未做太大的修改,主要问题就是电路的电压问题搞不明白。
难度(1-10):
oop-7:5
oop-8:10
知识点:
(1)类与对象:Java面向对象编程的核心,通过定义类和创建对象,实现大作业中的基本且必要操作。
(2)字符串与数组:处理输入信息的关键,字符数组存储char类型数据,支持信息访问、声明、初始化、对比和转换。
(3)正则表达式:高效处理输入信息,匹配特定字符和截取字符串,结合字符串转换,在大作业中发挥重要作用。
(4)ArrayList应用:数据存储与调用的便捷选择,避免类数组越界问题,提升数据存储安全性与便利性。
(5)抽象与继承:数据类定义时采用继承,优化类整理与操作,统一处理各类电器时仅需调用父类方法。
(6)接口的使用。

设计与分析:

opp-7-家居强电电路模拟程序-2

类图:

  • 之前的类有父类(Electronic),以及它的子类:开关类(Switch)、两种灯类(FluorescentLamp,IncandescentLamp)、两种调速器类(BinningGovernor,ContinuousGovernor)、吊扇类(CeilingFan),还有一个代理类(Agent),该类负责处理输入信息。串联类(Tandem)、并联类(Parallel)、落地扇类(FloorFan),这三都是电子元件类(Electronic)的子类。排序类(SortPrint)。
  • 本次大作业添加类:互斥开关类(MutexSwitch)、受控窗帘类(Curtain).
  • 因为受控窗帘的打开程度受房间亮度的影响,所以本次大作业在两种灯和窗帘中添加了光照属性(brightness),在Agent类中添加了public void setBrightness() 方法给所有窗帘的brightness属性赋值。
  • 对于互斥开关,我的处理方式是一个开关创造了两个对象,二者除了序号(int id),其他全部相同,他们分别连接于不同的电路中,追后输出序号0的信息(它的电阻,开闭情况等属性皆为数组形式,数组大小为二)。最后排序类会删除名字重复的对象,只保留一个并排序。
  • 大体运行思路为(在接收全部输入信息后):计算电路总电阻->用220v电压(如果有调速器按调后电压计算)除总电阻得总电流->电子元件通过传入的总电流计算其所分到的电压->依照该电压输出对应的工作状态。
    代码SourceMontor的生成报表内容:

    代码长度1081,最大深度为5(主要是因为Agent类里处理信息时if和for的嵌套太多),平均深度1.21.

opp-8-家居强电电路模拟程序-2

类图:

  • 相比上次大作业,本次大作业添加二极管类(Diode),继承于Electronic类。
  • 在父类Electronic添加方法public double enterV_outV(double enterV)(部分子类对该方法进行了重写),添加了属性enter_V和out_V用于处理引脚电压的输出问题。
  • 大体运行思路为(在接收全部输入信息后):计算电路总电阻->用220v电压(如果有调速器按调后电压计算)除总电阻得总电流->电子元件通过传入的总电流计算其所分到的电压->用public double enterV_outV(double enterV)方法对1、2引脚的电压进行赋值->依照该电压输出对应的工作状态和引脚电压。
    代码SourceMontor的生成报表内容:

    代码长度1287,其他信息较前一次无太大区别

踩坑心得:

opp-5-家居强电电路模拟程序-3踩坑和心得:

本次大作业写的十分顺畅并未遇到除小细节(电阻敲错了,自动生成return 0没改成return R)之外的问题。

opp-5-家居强电电路模拟程序-4踩坑和心得:

1,引脚顺序问题:
在之前的代码中我只考虑了进入电压和输出电压,这在普通用电器上并无问题,但并不能满足二极管和互斥开关(它们能反连),第一个解决方法是在处理信息时识别引脚号,但是工作量大容易出错,最后我采用的第二个解决方法是在二极管和互斥开关中添加方向属性,若为反,则逆序输出enter_V和out_V,该方法只有两种类处理信息时需要识别引脚号。
2,断路的前后电压问题:
例如对于一个断开的开关,它的后电压为零,前电压不为零,未修改前的方法前后电压相等(都为前者电压),后续电子元件的电压也为该电压,原out_V的计算为enter_v-V(该V为电器本身分到的电压,因断路,电流为零,V=I*R=0),最后在开关类重写public double enterV_outV(double enterV)方法解决该问题(添加了开闭判定)。
3,互斥开关俩对象信息不互通问题:
由前面所述,同一开关有两对象他们分别连俩个电路,最后删除一个,但他们的进出电压信息不互通,零2和3引脚有一个未赋值,最后在删除前添加代码互通信息后解决该问题

for(MutexSwitch m:agent.mutexSwitches){if(this.mutexSwitches.size()<1){this.mutexSwitches.add(m);}else{boolean flag=true;for(int i=0;i<this.mutexSwitches.size();i++){if(this.mutexSwitches.get(i).getName().equals(m.getName()))flag=false;}if(flag)this.mutexSwitches.add(m);}}for(MutexSwitch m:this.mutexSwitches){for(MutexSwitch M:agent.mutexSwitches){if((M.getName().equals(m.getName()))&&(M.getId()!=m.getId())){m.t_enterV[M.getId()]=M.t_enterV[M.getId()];m.t_outV[M.getId()]=M.t_outV[M.getId()];}}}

4,还有局部短路引脚电压问题,复杂电路引脚电压问题(未解决)

总结:

本次介绍了两个连续的大作业项目:oop-7和oop-8,它们分别模拟了家居强电电路的不同版本。oop-7在原有基础上增加了互斥开关和受控窗帘两个电子元件,优化了排序类,并遵循了开闭原则,使得代码修改量小且高效。oop-8则进一步增加了引脚电压的输出和二极管类,作业难度显著提升,主要集中在解决引脚电压输出问题上。

  • oop-7特点

增加了互斥开关和受控窗帘两个电子元件。
优化了排序类,遵循开闭原则。
实现了光照属性以影响窗帘的打开程度。
代码修改量小,大作业完成时间较短。

  • oop-8特点

增加了引脚电压的输出和二极管类。
父类Electronic添加方法处理引脚电压。
作业难度大幅提升,主要集中在引脚电压的计算和输出上。
代码长度虽未显著增加,但理解和解决电压问题较为复杂。

  • 通过这两个大作业项目,不仅加深了对Java面向对象编程的理解,还锻炼了解决实际问题的能力,特别是在处理复杂电路模拟方面的能力得到了显著提升。

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

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

相关文章

《DNK210使用指南 -CanMV版 V1.0》第五章 编译CanMV固件

第五章 编译CanMV固件 1)实验平台:正点原子DNK210开发板 2) 章节摘自【正点原子】DNK210使用指南 - CanMV版 V1.0 3)购买链接:https://detail.tmall.com/item.htm?&id=782801398750 4)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/k210/ATK-…

第三次PTA总结

前言 本阶段面向对象程序设计进行了两次PTA训练,两次都是关于电路设计的迭代。迭代次数越多难度越大,后期事情较多,作业和考试任务重、题目的难度也较大,所以没有拿到每次作业的满分,但是都根据题目的变化对自己的设计进行了一定的改变和优化。 知识点类的设计; 数组、链…

防火墙部署案例

通过引流方式实现防火墙旁挂部署并且实现安全防护功能案例 一、项目背景 1、客户有购买了一台某公司由于性能问题和服务器直连核心交换机原因,决定采取旁挂方式部署,但是又希望实现安全防护,因此决定通过引流方式(QOS的流量重定向)把需要防护的流量引到防火墙,防火墙做路…

6月29日

# 模板引用 $template=file_get_contents("1.php");之后可以引用page_title变量来替换html内容

Alertmanager抑制、静默、路由、告警分组

1、抑制机制 Alertmanager的抑制机制可以避免当某种问题告警产生之后用户接收到大量由此问题导致的一系列的其它告警通知。例如当集群不可用时,用户可能只希望接收到一条告警,告诉他这时候集群出现了问题,而不是大量的如集群中的应用异常、中间件服务异常的告警通知。 在Ale…

GBJ406-ASEMI无人机专用整流桥GBJ406

GBJ406-ASEMI无人机专用整流桥GBJ406编辑:ll GBJ406-ASEMI无人机专用整流桥GBJ406 型号:GBJ406 品牌:ASEMI 封装:GBJ-4 最大重复峰值反向电压:600V 最大正向平均整流电流(Vdss):4A 功率(Pd):中小功率 芯片个数:4 引脚数量:4 类型:整流扁桥、整流桥 正向浪涌电流:120…

数据分析 | 整合数据

拼接与合并 1. 纵向或横向拼接:pd.concat()# 纵向拼接,在函数中放入列表,里面是想拼接的两个df # 如果列名一致,直接对齐;如果列名不一致,则各列都会保留,空值为NaN pd.concat([df1, df2], ignore_index = True) # >>> 此时索引是各自保留的,所以要忽略索引…

DCT-Net - 一键图片、视频转卡通动漫风格工具,本地一键整合包下载

只需要输入一张人物图像或者一段视频,就可以实现端到端全图卡、视频通化转换,生成二次元虚拟形象,返回卡通化后的结果图像或视频。 开发者叫menyi Fang,来自阿里巴巴通义实验室的的技术女大佬,国内大佬集成到webui,支持CPU和GPU,CPU处理速度也很快,需要的可以自行下载测…

ProPainter – AI视频去水印工具,可以去除视频中的静态水印、动态物体/人物等 本地一键整合包下载

ProPainter是一个基于E2FGVI实现的AI视频编辑工具,它可以一键移除视频内的移动物体和水印。这个开源项目提供了一个简单而强大的解决方案,帮助用户轻松编辑和改善视频内容。项目地址:https://github.com/sczhou/ProPainter 一键整合包下载:https://deepface.cc/thread-254-…

Rocky Linux捣鼓记录(六):JDK安装、配置环境变量

一、下载 A方法:我们可以直接去oracle官网下载jdk17安装包,直接安装,安装完会生成JDK主目录在/usr/lib/jvm/jdk-17-oracle-x64 B方法:su使用root用户操作,创建并进入一个便于管理JDK文件的目录 mkdir /usr/lib/jvm cd /usr/lib/jvm #下载jdk wget https://download.oracle…

川普真会说中文?连嘴型都同步,VideoReTalking AI数字人下载介绍

你能想到这种画面吗?霉霉在节目中用普通话接受采访,特朗普在老家用中文脱口秀,蔡明老师操着一口流利的英文调侃潘长江老师.. 这听起来似乎很魔幻,可如今全部由VideoReTalking实现了 你只需要传入一个视频文件和音频文件,它会生成一个新的视频,在这个视频里,不仅人物的嘴…

QR与DM码的识别

1.QR码与DM码QR码(Quick Response Code)是一种矩阵条码,能够快速被扫描设备识别。它是由日本Denso Wave公司在1994年发明的,用于追踪汽车零件。QR码可以存储更多的数据,并且可以包含文本、URL、图片等信息。QR码的特点是快速识别,因此得名。它们广泛应用于广告、产品追踪…

FFmpeg开发笔记(三十三)分析ZLMediaKit对H.264流的插帧操作

​《FFmpeg开发实战:从零基础到短视频上线》一书的“3.4.3 把原始的H264文件封装为MP4格式”介绍了如何把H.264裸流封装为MP4文件。那么在网络上传输的H.264裸流是怎样被接收端获取视频格式的呢?前文指出H.264流必定以“SPS帧→PPS帧→IDR帧”开头,接下来就来验证是否确实如…

= ERROR [sshd internal] load metadata for docker.io/vulhub/openssh:7.7 问题解决,亲测有效!

出现 ERROR [sshd internal] load metadata for docker.io/vulhub/openssh:7.7 这样的错误通常表示 Docker 客户端在尝试从 Docker Hub(docker.io)上拉取 vulhub/openssh:7.7 这个镜像时,遇到了问题而无法加载该镜像的元数据(metadata)。 我在网上查了原因,大概有一下几个…

第三次博客总结

《第三次博客》 一.家居强电电路模拟程序-3前言: 1>.代码主要功能:本次迭代的代码功能其实设备之间的连接并没有太多的变化,本次迭代的内容主要是并联和并联串 联的处理,这个功能好实现,因为设计好了串联类和并联类,只要设计好存储并联的集合,做好电 压之间赋值关系即…

2024志愿填报

推荐度由上往下,学校课程只教一小部分,就业需根据自己的方向往深处学。 一.河南工程 1.软件工程(智慧电网):属于电气信息工程学院。(可从事软件开发,物联网工程师等岗位) 课程:以课程内容来看比较全面,主要方向是软件及通信。涵盖了从设备-网络-软件-数据,其中MATLA…

大型语言模型如何工作?

引言 本文旨在以浅显易懂的方式,向读者阐释大型语言模型(LLM)的工作原理。 我们首先看一下文档补全引言 本文旨在以浅显易懂的方式,向读者阐释大型语言模型(LLM)的工作原理。 我们首先看一下文档补全器模型的工作原理:user prompt: A banana ismodel response: an elong…

idea配置sftp连接服务器

一、配置本机密钥,用于连接服务器使用 ssh-keygen命令,一路回车,生成公钥ssh-keygen -t rsa 公钥内容保存在:/Users/yf/.ssh/id_rsa下,并且将生成的文件内容复制到服务器的 ~/.ssh/authorized_keys 文件中,然后就可以在本机使用 ssh root@ip 进行连接服务器了二、配置id…