第一次总结
前三次作业总结
一、前言
经过三次的作业,也算是正式踏入面向对象的世界了,刚开始学的时候,“类”、“对象”、“消息”等等让我如临大敌,早知道java是日后学习的基础,所以更加害怕不能学好。
回顾这三次作业,结果不甚如意,几乎每次都会有“这啥东西啊,怎么看都看不懂”的想法,但经过反复琢磨,才能领悟题目的真谛。
三次作业题目量不同,题目难度也不同,每次的难度都会增长一点,但题目会不定量,题目不在于多,在于经典!
前俩次作业几乎没有看见面向对象的影子,几乎都是硬敲代码,每次与格式错误缠斗,绞尽脑汁去完成测试点,第三次作业出现“聚合”,才算真正踏入了面向对象的世界了。
下面对三次作业做简要分析。
二、简要分析
第二次作业7-1
RS232是串口常用的通信协议,在异步通信模式下,串口可以一次发送5~8位数据,收发双方之间没有数据发送时线路维持高电平,相当于接收方持续收到数据“1”(称为空闲位),发送方有数据发送时,会在有效数据(5~8位,具体位数由通信双方提前设置)前加上1位起始位“0”,在有效数据之后加上1位可选的奇偶校验位和1位结束位“1”。请编写程序,模拟串口接收处理程序,注:假定有效数据是8位,奇偶校验位采用奇校验。
输入格式:
由0、1组成的二进制数据流。例如:11110111010111111001001101111111011111111101111
输出格式:
过滤掉空闲、起始、结束以及奇偶校验位之后的数据,数据之前加上序号和英文冒号。
如有多个数据,每个数据单独一行显示。
若数据不足11位或者输入数据全1没有起始位,则输出"null data",
若某个数据的结束符不为1,则输出“validate error”。
若某个数据奇偶校验错误,则输出“parity check error”。
若数据结束符和奇偶校验均不合格,输出“validate error”。
如:11011或11111111111111111。
例如:
1:11101011
2:01001101
3:validate error
本题需要将截止从第一次到"0"之后的字符串,charAt()函数就可以很好的解决这个问题,在遇到与字符串有关的问题,charAt()函数往往会有奇效。
至于具体的步骤,无非是if-else的连续罢了,一个个应付测试点,写完一个凑一个,先写出“null date”的测试代码,然后按照同样方法操作即可。
这次得出了一个经验————一定不要觉得读题是浪费时间。只有好好的了解了题目要求,才能更好地做题。面向对象的世界了往往都要看清用户的要求。
SourceMonitor:
第三次作业7-1
定义一个代表一元二次方程ax2+bx+c=0的类QuadraticEquation,其属性为三个系数a、b、c(均为私有属性)
输入格式:
在一行中输入a、b、c的值,可以用一个或多个空格或回车符分开。
输出格式:
- 当输入非法时,输出“Wrong Format”
- 当有一个实根时,输出(2行):
- a=值,b=值,c=值:
- The root is 值(保留两位小数)
- 当有两个实根时,输出(2行):
- a=值,b=值,c=值:
- The roots are 值1 and 值2(均保留两位小数)
用类解一元二次方程组
该题体现了“类”这个工具的强大,将各种不同用途的方法存到不同的类中,实现单一职责,这是面向对象中非常重要的一点。
这道题作为基础,需要使用构造方法,getter,setter,其余的部分都是属于一元二次函数的构建,在上学期就已经学习过了。
本题最主要的目的还是为了能够让我们能更好的去理解单一职责对面向对象的重要性,只有做好低耦合,才能让程序有可扩展性,能够做到程序的复用。
SourceMonitor:
7-2
参考题目集二中和日期相关的程序,设计一个类DateUtil,该类有三个私有属性year、month、day(均为整型数)
应用程序共测试三个功能:
- 求下n天
- 求前n天
- 求两个日期相差的天数
-
输入格式:
有三种输入方式(以输入的第一个数字划分[1,3]):
- 1 year month day n //测试输入日期的下n天
- 2 year month day n //测试输入日期的前n天
- 3 year1 month1 day1 year2 month2 day2 //测试两个日期之间相差的天数
输出格式:
- 当输入有误时,输出格式如下:
Wrong Format
- 当第一个数字为1且输入均有效,输出格式如下:
year1-month1-day1 next n days is:year2-month2-day2
- 当第一个数字为2且输入均有效,输出格式如下:
year1-month1-day1 previous n days is:year2-month2-day2
- 当第一个数字为3且输入均有效,输出格式如下:
The days between year1-month1-day1 and year2-month2-day2 are:值
本题需要设计一个中介类DateUtil来联系不同的三个类year,month,day。对于本题的设计,在DateUtil类中使用其他类的方法。
设计:,本题加了一个getDaysofDates()方法来帮助求前n天与后n天,通过分别找到年月日的方法掳快速找出前n天与后n天。
踩坑:在做本题时会出现大量使用其他类的方法,因为一个方法没有声明,导致重看了五遍,这惨痛的代价,下次写代码时一定要注意!
SourceMonitor:
7-3
本题时第一次遇到“聚合”的题目,聚合是一种特殊的关联形式。它是两个类之间的关系,如关联,但它是一个方向关联,这意味着它严格地是单向关联。
它代表了一种HAS-A关系。可以维护代码的可重用性,算是真正踏入面向对象的世界了,在写的途中一定要好好看懂图,认真了解用户的需求,本题加了一个getDaysofDates()方法来帮助求前n天与后n天,通过分别找到年月日的方法掳快速找出前n天与后n天。
SourceMonitor:
三、总结
第一个阶段的学习已经过去了,三次作业也都写完了,回顾这三次作业,都是打基础的过程,我深刻体会到了单一职责的重要性,单一职责原则是实现高内聚、低耦合的指导方针,在很多代码重构手法中都能找到它的存在,它是最简单但又最难运用的原则,需要设计人员发现类的不同职责并将其分离,而发现类的多重职责需要设计人员具有较强的分析设计能力和相关重构经验。这种模式在之后的学习中都要牢记,这是一个代码是否能够有很好的可扩展性和复用性的标准,最难的应该是各种字符串的处理,需要了解和学习更多关于字符串的操作与应用。在接下来的学习中,要加倍努力了,一定要跟上大家的脚步啊,掉队就gameover咯!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~