首页 > 其他分享 >第二次Blog

第二次Blog

时间:2024-06-07 11:43:52浏览次数:15  
标签:迭代 子类 调节器 作业 Blog 设计 第二次 元件

(1)前言:
智能家居是在当下家庭中越来越流行的一种配置方案,它通过物联网技术将家中的各种设备(如音视频设备、照明系统、窗帘控制、空调控制、安防系统、数字影院系统、影音服务器、影柜系统、网络家电等)连接到一起,提供家电控制、照明控制、电话远程控制、室内外遥控、防盗报警、环境监测、暖通控制、红外转发以及可编程定时控制等多种功能和手段。与普通家居相比,智能家居不仅具有传统的居住功能,兼备建筑、网络通信、信息家电、设备自动化,提供全方位的信息交互功能。请根据如下要去设计一个智能家居强电电路模拟系统。第五六次及后续的七八次的大作业就是对智能家居电路的模拟。
前四次大作业模拟的是答卷答题系统,主要考察对于java编程能力,对类设计要求不高,更多注重结构,语法及连贯性,有些情况甚至不用面向对象直接面向过程设计也可轻松实现,但那样不符合java编程原则,而第五第六次大作业则更加注重类的设计及对编程原则的要求规范。
第五次大作业:这次大作业只有一条串联线路,在我看来主要目的是为了让学生属性电路系统的工作方式及输入输出规则,便于后续操作,单看这次作业的要求对类设计要求不是很高,但将所有模拟电路的大作业联系起来,在初步类设计就决定了后续的编程难度。
第六次大作业:这次大作业相比前一次,增添了并联电路的连接,也开始正式对类的设计有了一定的要求,若不先做好类设计,在编程过程中会漏洞百出,最终拆东墙补西墙写的代码“又臭又长”。
(2)设计与分析:
第五次大作业:
此次题目要求简单,只有一条串联电路,类设计较为简单
类设计如下:
输入类(Input);输出类(Output);控制器(Controller)父类,控制器的三个子类开关(Switch),连续调节器(Continuity),分档调节器(Split);电器(Appliance)父类,电器的子类风扇(Fan)子类,风扇的子类吊扇(Ceiling),电器的子类灯具(Lamp),灯具的子类日光灯(Fluorescent),灯具的子类白炽灯(Incandescent)。
本次大作业的题面要求并不复杂,一条简单的串联电路,至多只含一个调节器,输入输出也都较为简单,难点则在于如何将电器运作起来,而在后续迭代中,这也是最大的难点之一。
因此为了实现这项功能,本次作业中,我设计了Line类,用于对整条串联线路的元件进行操作,在输入时将调节器及开关置于一个ArrayList表(con)中,将所有电器也置于ArrayList表(app)中,在此类中我设计了一个work方法,它会默认一个初始输入电压(Input)为 0,输出电压(Output)为220,此方法中,会先执行调节器con表中的调节器的Output方法,对输出电压进行重置,然后将输出电压赋给电器app表中的电器元件,这样便完成了电路的运行。输出时根据电压的不同就可以输出相应的数据。
public void work(){
for(int i=0;i<this.con.size();i++){
this.output=con.get(i).output(output);
}
for(int i=0;i<this.app.size();i++){
app.get(i).setPin2(output);
}
}
此部分源码实现如上。
第六次大作业:
此次作业添加了并联电路的连接,因此不能像前一次的作业中单纯的一条线路中的work行所有操作。此次题面中并联电路由多条串联电路组合而成,而想对串联中的元件执行操作则需将其也作为一个元件,并在并联类中也添加一个work方法执行电压分配功能。
类设计如下:
元件类(Elemen),是电路中所有的元件包括串联线路,并联线路的父类,便于输出和执行分压操作。
输入类(Input);输出类(Output);控制器(Controller)父类,控制器的三个子类开关(Switch),连续调节器(Continuity),分档调节器(Split);电器(Appliance)父类,电器的子类风扇(Fan)子类,风扇的子类吊扇(Ceiling),电器的子类灯具(Lamp),灯具的子类日光灯(Fluorescent),灯具的子类白炽灯(Incandescent);并联线路(Parallel);串联电路(Series)。
在此次作业中对输出类的设计也十分考究,元件的与线路的分配对执行分压操作至关重要,我的获取到一条串联信息就将元件全部设计为该串联线路的属性,并将该线路及所有元件存入总元件表(elements)中,并联线路则是在elements表中遍历寻找出现的串联线路。
此次大作业分压操作的实现依赖于电阻,所以电阻的计算也十分重要,因此在串联和并联类中我都设计了一个count方法,用于计算此线路的电阻。有了电阻之后,实现分压操作就十分简单了,利用公式I=U/R;计算总电流,再用电流乘上每个元件的电阻,即可得到该元件的分压。
并联线路的电阻计算(count)较为麻烦,若有一条串联线路开关断开,需额外设计使其电阻为0且不影响总电阻的计算。该部分源码如下:
public double count(){
double t=0;//a+b
double h=1;//a*b
int n=0;
if(series.size()!=0) {
for (int i = 0; i < series.size(); i++) {
if (series.get(i).count() != 0) {
t = t + series.get(i).count();
h = h * series.get(i).count();
n++;
}
}
}
if(n>1)
return h/t;
else return t;
}

(3)踩坑心得:
在这两次迭代中,最重要的便是事先做好类设计,它并不同于前几次答卷模拟,哪怕写一步看一步也可以很好的实现,但在这次迭代中,不事先做好类设计,后续操作会相当麻烦,例如分压操作的实现,电阻的计算实现,都会十分困难,同时在输出时也会造成不小的困扰。以我的编码经历举例,在第一次大作业中,因为题面明确表示不会由多余线路且只有开关,一个电器和至多一个调节器,我便直接设计line类将其串接并未将其设计成一个完整的串联线路类且未设计电路元件类,这就导致在第二次迭代中,并联类的设计极为困难,需要改变整体代码的结构,且在输出时因为没有元件类作统筹难以实现输出功能。
本次迭代类间关系多为继承而继承关系在类设计中较为麻烦,耦合度较高难以分割,在对类进行实例化时类的声明定义比较麻烦,且在执行work方法进行分压操作时,难以调用子类的方法极为麻烦,且如果声明及重构未设置好极易出现一个表中该元件输入输出电压改变,而另一个表中该元件的输入输出电压并未变化,此问题极难发现和更改,因为类较多,调试过程较为复杂且表中数据混乱很难实现调试修改,且在创建电器元件对象时,电阻的设定也容易出错。而串联和并联的线路则更为麻烦,因为他们的电阻需要通过count方法进行计算后才可求得,因此不能在构造方法中设置电阻,getter方法获取电阻也需要先执行count方法后再进行获取。
在第二次迭代中,因为并联的接入,输入方法也需要做出许多改变,第一次迭代只需要获取每个元件的信息然后创建相应的类对象,但第二次迭代并联的输入信息是两条线路,不能直接获取元件信息,需要在总表中遍历寻找然后再存入表中实现并联的对象创建,因此对正则表达式的匹配要求很高
(4)改进建议:
这两次迭代中,类设计较为完善,输入输出也归于特定的类中,Main类中主要负责调度输入输出及类对象实例化,但对于调节器类的操作例如开关的开闭,分档调节器的换挡,连续调节器的档位设置,还是置于Main中,占据了大部分行数,可以将其优化,设计一个调节器工作类,再在此类中对调节器进行操作。
本次迭代多用继承,但并未实现抽象和接口的使用,如果实现了接口和抽象类那么对于类对象的创建就较为简单且可大幅缩减代码,增加代码可读性。
(5)总结:
人工智能是当下最火热的话题之一,而智能家居系统也是其中最重要的组成部分之一,本次大作业迭代中模拟的电路系统,结合现实贴近生活,它相比前一次的答卷系统迭代,更加的具有规范性,它能更好的体现,面向对象编程的特点,依照题目要求,提前做好类设计,按照类设计,一步一步实现代码,在课堂上及学堂在线中都提到了java编程的几大原则,而这些原则的设立既对我们的编码做出了规范性要求,同时也是一种指导,通过这些原则我们知道该如何做好类设计,如何精简化我们的代码,“实现了开闭原则就等于编写了好代码”,
开闭原则是最重要的一条原则之一,它使得我们的代码具有更好的可读性和可修改性,实现了这一原则后续迭代便不需要再做出大的删改,单一职责原则则让我们的类设计更加精确,一个类只实现一个功能,既不冗余也不缺失,编码结构更加完善。
这次智能家居电路系统的模拟,在我看来是对未来毕业后工作时的场景模拟,提前做好类设计也就是在工作过程中对工程进行设计的一个模拟,具有不一般的意义。

标签:迭代,子类,调节器,作业,Blog,设计,第二次,元件
From: https://www.cnblogs.com/3138994035jwl/p/18236958

相关文章

  • 第二次Bolg
    (1)前言:这几次的大作业的包含了String类的使用和各种String的处理方法,包括字符串按照正则表达式查找和切割。以及很多新知识点,包括类的封装,继承和多态,其中继承可以说是贯穿整个程序,继承可以让程序简单易读,好修改,而这个还要求进行一个复杂性很高的排序,所以还用到了TreeMap集合进......
  • 题目集4~6的总结性Blog
    目录一、前言:总结三次题目集的知识点、题量、难度等情况知识点题目及题量、难度nchu-software-oop-2024-上-4:nchu-software-oop-2024-上-5:nchu-software-oop-2024-上-6:二、第四次的答题判题程序分析设计与分析第四次的答题判题程序类图以及SourceMontor的生成报表内容:踩坑心得......
  • 第二次blog
    一.前言1.题目集4~6的知识点:(1)这几个题目都使用了面向对象编程原理,根据题目给出的信息和题目的复杂程度,建立了对应的类,并在类中添加了方法。通过使用Java自带的类库,如Scanner类中的方法用于接收用户输入,regex.Matcher类中的方法用于正则表达式匹配,regex.Pattern类中的方法用于编......
  • 第二次blog总结
    一、前言:第四次pta作业:1.知识点:考察类的继承,抽象类的使用。2.题量:3道简单题,1道迭代难题。3.难度:这次最后一道题在上次的基础上添加了题目的种类(eg:选择题、填空题)等,难度增加的还行,不算太难也不算太容易。第五次pta作业:1.知识点:考察类实现Comparable接口,重写compareTo......
  • 题目集4~6的总结性Blog
    4~6次大作业总结前言在题目的开始设计好类和结构真的很重要,之前一直上来就开始写,后来就变得吃力,这样不能很好的一次性完成代码,发现应该先设计,在着手编写代码之前,可以先绘制类图,明确每个类的属性和方法,以及它们之间的关系。这有助于构建清晰的代码结构和逻辑,避免在编码过程中陷入......
  • 第二次博客总结
    《第二次博客》一.答题判题程序-4前言:1>.代码主要功能:主函数的输入部分:解析输入:使用Scanner对象从控制台读取输入,并解析以特定格式开头的文本行。创建题目:解析题目相关信息(题号、内容、答案),并将其存储在Question对象中,然后添加到题目列表中。创建试卷:解析试卷相关......
  • Centos7下安装weblogic
    一、Weblogic安装包下载Weblogic下载地址:https://www.oracle.com/cn/middleware/technologies/fusionmiddleware-downloads.html 二、安装JDKWeblogic需要依赖于JDK#解压jdk压缩包,将文件夹重命名为jdk1.8tarzxfjdk-8-linux-x64.tar.gz-C/opt/cd/optmvjdk1.8......
  • weblogic使用过程中的部分报错与解决方案
     引用:https://www.cnblogs.com/jeff-z-blog/p/9534591.html报错一:vim中E212:无法打开并写入文件编写配置文件时,常常忘记切换到root用户,导致文件编辑完毕,敲入:wq退出保存时,出现E212:无法打开并写入文件的错误提示。这是由于在该目录下当前用户没有写权限导致,修改该文件的权限即......
  • blog2 4--6周PTA训练总结
    一.前言经过了第二轮4-6周的面向对象程序设计的学习,我对于这门课程的理解又更进一步。如同老师所说的,这门课程学下来,你会发现真正困难的从来不是敲代码的部分,而应当时设计的部分。在看到一道题之后第一时间想到不再是直接写代码,而是认真的反复查阅,构思一幅逻辑完整且正确的类图,它......
  • 题目集4-6的总结性Blog
    一.前言:在这几周,我们又进行了3次pta的题目训练。首先是答题程序的最后一次迭代,答题程序-4,接着就是新的迭代,家居电路模拟程序。经过一段时间的学习,我对面向对象设计的理解进一步加深,这三次题集写起来也没有之前那么困难了,虽然还有不足,我仍在一次次答题中学到了很多。以下是我的初......