前五周学习内容总结

此次周期为五周的学习,主要对java面向对象程序设计进行了学习,笔者通过五周的学习,初步认识并掌握了一些面向对象程序设计知识,现按照以周为间隔的学习周期,对每一次作业与实验进行总结。

第一周:

  本周初步学习了类与对象的知识,认识了类与对象的关系。笔者首先在慕课平台上进行了相关预习,初步会用类制造对象,老师发布了第一次雨刷作业。

雨刷问题01:

  本次作业要求用Java,C,Python三种语言对雨刷控制器进行编程模拟,通过简单的交互式菜单,实现司机对雨刷系统的控制及测试。

设计思路:在C语言中,我使用函数实现速度调用功能,由于C语言使用cmd窗口,我使用了getchar函数直接获取方向键的键值,对其进行判断,从而达到雨刷加速降速的功能。在Python中,我同样使用函数实现雨刷的加速减速功能,思路同C语言类似。在Java中,我简单使用了对象的创建,来达到题目的要求。

反思总结:本次作业虽然简单使用了对象的创建,但思路认同C语言中函数思想类似,并无面向对象思想包含其中,面向对象设计的原则也未体现。

雨刷问题02:

  本次作业要求使用Java语言,同上次雨刷问题要求不变,采用面向对象技术,合理设计实体类、业务(控制)类、接口类及各个类之间的关系,务必符合SRP(单一职责原则)。

设计思路:本次作业我设计了六个类,其中Control为业务类,Brush、Dial、Lever、Driver为实体类,主类为Main类。由Driver接收输入,内设私有变量hand接受键盘输入。之后在由业务类select函数进行判断输入操作为加速或减速,并Dial以及Lever的私有变量pos进行改变,再调用JudgeSpeed函数,根据Dial及Lever的pos变量对速度进行调整。最后由主类进行输出。

类图如下:

 

 

 反思总结:本次作业初步运用了面向对象设计思想,并且使用了单一职责原则,对各类的功能做了要求,并且规范了Java的类以及变量命名习惯,但是在设计类的时候,还是没有透彻领悟单一职责原则,对于Driver来进行输入以及使用主类来进行输出,并不太符合SRP原则,还需提升。

PTA题目集01:

  两题与日期相关,要求设计DateUtil、Year、Month、Day几个类,程序可以测试求下n天、求前n天、求两个日期相差的天数的功能,且不能使用Java中与日期相关的类与方法。

设计思路:

  我根据题目给出的类图及要求,设计了共五个类和一个主类,并设计了isDayMax函数和isDayMin函数,用于判断相应月份的相应天数是否到达最大值或最小值,返回值为ture时重置日期天数。并设计循环函数调用各类中的Increment和reduction函数,实现日期的增减。

类图如下:

 

 

 

 

反思总结:通过本次题目,我对封装变量的访问以及各类中的方法的调用有了一个更深的认识。本次题目集虽然顺利通过,但是在运行测试的时候出现了运行超时的情况,在修改算法逻辑后顺利通过,但是我认为有更高效的方法还未找到。

雨刷问题03:

  本题要求重构第二次雨刷作业,需求不变,务必符合SRP(Single Responsibility Principe,单一职责原则)以及Demeter法则(Law of Demeter)。

设计思路:本次题目我设计了包括主类在内共八个类,在之前的基础上增加了输入类与输出类,通过Driver类调用,并且主类也只调用Driver类建立对象,使程序更符合面向对象程序设计原则。

类图如下:

 

 反思总结:本次作业我对SRP以及Demeter有了更深理解,但是在测试程序时出现了调用对象为空的情况,在对无参构造函数进行修改后,消除了这个问题,同时也让我明白了构造方法的重要性。

 

 

 

第二周:

  本周继续学习了面向对象程序设计的其他设计原则。

雨刷问题04:

  本次作业要求重构雨刷问题03,题目要求符合SRP以及Demeter的同时增加了符合MVC模式的要求,并且尝试切入单例模式。

设计思路:我在上次程序的基础上,给实体类嵌入了单例模式,并且用二次判断的方法判断单例对象是否存在,同时按MVC模式对程序进行优化。

类图如下:

 

 

反思总结:通过这次题目了解到单例模式的应用。

实验一,Java程序控制:

  本次实验题目要求:某班有30名学生,每个学生有学号、姓名和4门成绩(学生信息随机产生,存入一个对象数组),现新转来一名学生,请输入这位学生的学号、姓名和成绩(四门课的成绩小于100分,从键盘输入,以空格为区分),然后显示这名学生平均分、最高分,全班的最高平均分学生信息、新同学在班级中的成绩水平。

设计思路:本次题目我设计了业务类,输入类,输出类以及Student类和一个主类,业务类调用函数对Student类实体化为一个对象,并随机产生学生数据存入对象中,输入类按题目要求能够输入学生数据,并存入学生对象中。在业务类中设计getAverage函数得到随机产生的学生数据,并且通过比较函数,比较平均分与输入的学生平均分,最后调用输出类。

测试数据如下:

 

测试数据:zhang 132066 77 99 55 66

 

测试结果:

 

 

反思总结:本次实验我按照SRP以及MVC模式编写程序,较为符合面向对象程序设计,同时本次运用了Java中Random类的功能,了解到Java语言的丰富功能。

 

第三周:

本周继续学习了面向对象程序设计的其他原则,开-闭”原则、里氏代换原则、依赖倒转原则以及合成复用原则。

雨刷问题05:

  本次作业要求重构第四次作业雨刷问题,需求变更为该系统可以适用多种雨刷系统,采用面向对象技术,再次合理设计实体类、业务(控制)类、接口类、各个类的抽象父类以及相互的关系,务必符合SRP(Single Responsibility Principe,单一职责原则)、Demeter法则(Law of Demeter)、“开-闭”原则、里氏代换原则、依赖倒转原则以及合成复用原则。

设计思路:我将原本的Brush、Dial、Lever、Driver各实体类抽象为Abstract抽象类,在Dial和Lever的抽象类中建立了私有变量pos,同时设置了私有变量limit,用于限制pos的最大值,通过改变limit的值我们就可以满足题目要求,适用多种雨刷系统,并且可以自由组合间歇档位和速度最大档。后建立子类继承抽象父类。Control类函数与之前要求类似,通过select和JudgeSpeed函数来判断档位并设置雨刷器速度。

类图如下:

 

 

 

 反思总结:通过本次作业,我初步熟悉掌握了抽象类的用法以及类的继承,对对象的使用更进一步,但是本次作业,只有一个Driver类实现了单例模式,其他的还未实现。

第四周:

PTA题目集03-串口字符:

  题目要求:求RS232是串口常用的通信协议,在异步通信模式下,串口可以一次发送5~8位数据,收发双方之间没有数据发送时线路维持高电平,相当于接收方持续收到数据“1”(称为空闲位),发送方有数据发送时,会在有效数据(5~8位,具体位数由通信双方提前设置)前加上1位起始位“0”,在有效数据之后加上1位可选的奇偶校验位和1位结束位“1”。请编写程序,模拟串口接收处理程序,注:假定有效数据是8位,奇偶校验位采用奇校验。

设计思路:灵活运用String类的函数,先用contain函数判断字符串是否全为‘0’同时判断字符串长度是否为11位。再用substring函数截取字符串并判断以及校验。

 

反思总结:熟练掌握了String类的各类函数与功能。

第五周:

实验二:类与对象:

农夫过河问题:一个农夫带着一匹狼、一只羊、一颗白菜要过河,河上只有一条船能够渡河,而且农夫每次最多只能带一个动物或物品过河。当农夫不在的时候狼会吃羊,羊会吃白菜。

请以代码为基础,将程序代码补充完整,实现农夫过河游戏功能:由用户选择角色过河,系统自动判断游戏的胜负:当出现有生物被吃掉的时候,游戏失败,所有角色都到了河的另一边,游戏成功。

设计思路:本次实验,我按题目要求补全了Farmer、Cabbage、Wolf以及Sheep类的私有变量与函数,并将业务类中部分改成static形式。

类图如下:

 

 

农夫过河问题2.0:

设计思路:按题目要求再将变量改为private型,并增添了私有变量name和访问私有变量函数,同时加入业务类的构造对象时加入输入语句,使得能够给name赋值,并修改部分函数使满足题目的要求。

类图如下:

 

 测试数据:

 

 

 

 反思总结:本次实验进一步掌握了构造方法的使用,以及明白了static关键字的用处,可以通过statin关键字修饰变量达到全局变量的效果,static修饰的方法属于类方法,不需要创建对象就可以调用同时还常用于初始化静态变量。

心得体会:

  通过这五周的学习,笔者已经初步熟悉并掌握了面向对象程序设计的原则以及一些实际运用,对于各种库函数的运用也掌握了部分,但是有些部分还是一知半解,如单例模式还是没有充分掌握,希望在以后的学习中能更进一步。

 

posted @ 2022-04-03 23:01  21201618-吕晨哲  阅读(229)  评论(0)    收藏  举报