OO第二阶段作业总结
0.前言
本次博客主要针对PTA上Homework5、Homework6、Homework7,这三次作业对我来说难度较大,分数得的都不是很高。
1.作业过程总结
①总结三次作业之间的知识迭代关系
Homework5中的三道题难度是递减的,第三题图形继承的主要知识在于继承,需要学习继承的相关知识并融入之前所学的java知识。第二题蒙特卡罗方法求圆周率主要需要理解题意,弄清楚设计每个类及每个方法的目的是什么,再来进行程序的编写。第一题水文数据校验需要掌握的主要知识是正则表达式;Homework6的第一题图形继承与多态,相较于Homework5的第三题,知识加深了,除了要灵活运用继承,还要考虑多态。第二题一元多项式求导的知识又是与Homework5第一题相关的,涉及到正则表达式的运用;Homework7的两道题都是继承与多态的运用。
②如何通过作业逐步理解面向对象的封装性、继承性与多态性三大技术特性
通过作业能够知道封装性是将对象的属性和行为封装起来,而将对象的属性和行为封装起来的载体是类,类通常对用户隐藏其实现的细节,这就是封装的思想,在Java中通常通过建立一个实体类,用来封装对象的属性和行为,通过setXxx()和getXxx()方法封装起来。因此封装性就是利用抽象数据类型将数据和基于数据的操作封装在一起,保护数据并隐蔽具体的细节,只保留有限的接口与外界联系;通过写图形继承等题目我认为继承性简单来说就是使子类的对象拥有父类的全部属性和行为,同时可以增添自己的所特有的属性和行为。这样可以节省写共同具有的属性和方法代码的时间,有利于代码的复用。Homework6和Homework7都运用到了多态性,多态性简单来说就是一个程序中同名的多个不同方法共存的情况,通常使用方法的重载和重写(也叫覆盖)来实现类的多态性,多态性允许以统一的风格编写程序,以处理种类繁多的已存在的类以及相关类,多态的实现并不依赖具体类,而是依赖抽象类和接口,在多态的机制中,父类通常会被定义为抽象类,在抽象类中给出一个方法的标准,而不给出实现的具体过程,通过继承父类来实现,而比抽象类更方便的是将抽象类定义为接口。
③作业过程中遇到的问题及解决方法
(1)Homework5第一题对我来说难度很大,正则表达式不是很会,在自学并结合网上的知识试着写了以后,也没有通过测试点,难度太大就放弃了。
(2)Homework5第二题求圆周率,不知道随机数怎样产生,上网查了很多资料,最后写出来了。
(3)Homework6第一题在对对象进行排序时有不知道该怎么写,学习了ArrayList相关的很多知识才得以解决。
(4)Homework6第二题多项式求导对于具有多个项的式子求导不知道该怎样编写,最后也有几个测试点过不了;
(5)Homework7第二题写了多个ArrayList,但出现了超出范围错误,最后发现list.add直接存入,就不会错了。

④每次作业花费的时间比例
Homework5:Homework6:Homework7=6:4:3
⑤对编程过程的逻辑严谨性的认识及教训
编程时逻辑严谨性是十分重要的,在做一道题之前,首先应该仔细阅读题干和要求,在心里大致想好应该按照什么顺序逻辑来写,或者先在草稿纸上把思路画出来。如果编程时逻辑不严谨,会造成很多错误,也会使编程更加复杂,加重自己的作业量。
2.OO设计心得
①对面向对象三大技术特性之间关系的理解
封装是把客观事物的特性写在一个类里,用一种抽象的方式表示一个客观的事物。并且类只让可信的类和对象操作自己的数据和方法,对不可信的进行信息隐藏。一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体。在一个对象内部,某些代码或某些数据可以是私有的,不能被外界访问。通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对象的私有部分。
继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。 通过继承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”、“父类”或“超类”。
多态机制使具有不同内部结构的对象可以共享相同的外部接口。这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,那些操作可以通过相同的方式予以调用。
②面对对象设计的基本原则理解(单一职责原则及“开-闭”原则)
1.单一职责原则:就一个类而言,应该仅有一个引起它变化的原因。
(1)产生原因:如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的 设计,当变化发生时,设计会遭受到意想不到的破坏。
(2)判断方法:如果你能想到多于一个的动机去改变一个类,那么这个类就具有多于一个的职责。
2.开放-封闭原则:是说软件实体(类,模块,函数等等)应该可以扩展,但是不可修改。
(1)特征:1.对于扩展是开放的。2.对于更改是封闭的。
(2)优点:面对需求的改变可以保持相对稳定,使系统可以不断更新。
(3)方法:构造抽象隔离变化。面对需求,对程序的改动是通过增加新代码进行的,而不是更改现有的代码。
(4)遵循这个原则可以带来面向对象技术所声称的巨大好处,也就是可维护,可扩展,可复用,灵活性好。开放人员应该仅对程序中呈现出频繁变化的那些部分做出抽象,对于应用程序中的每个部分都可以地进行抽象同样不是一个好主意。拒绝不成熟的抽象和抽象本身一样重要。我们可以构造抽象运算类来隔离变化,让运算类封闭,禁止更改。下面的加减乘除类开放,可以扩展,添加新的功能。例如添加开平方根这个类,只需要把开平方根写成子类,继承运算类即可,从而保持稳定。
③OO编程思维的理解
封装是优点,继承是基础,重载是特点,多态是特征。如何架构好一个程序做到高内聚,低耦合永远是软件设计的最高追求。
④类设计心得
先根据题意,通过画类图对类进行设计,先理清楚各个小问题之间的关系,再设计的类与类之间的关系,是依赖、继承、实现、关联、聚合还是组合。
3.测试的理解与实践
①测试对于编码质量的重要性
测试可以检验所写代码的准确性,通过多个测试点的检验可以准确找出错误,以便修改。
②查阅资料,假设使用Junit进行程序的测试是否可行
最好用Junit进行单元测试
4.课程收获
(1)教训:面对对象要多思考,模块化处理问题,不要习惯用面向过程去思考,要多运用OO的特性进行思考。
(2)收获:简单了解了面向对象的封装性、继承性与多态性,体会到了用面向对象思维解决问题的好处。
5.对课程的建议
①第三阶段作业难度、题量的建议
希望题目基础一点,不要太复杂,题量不要太大,不然感觉自己跟不上节奏,完成不了任务。
②课程内容讲解方面的建议
希望老师可以讲一下作业,上课多举一些实例代码进行讲解。
浙公网安备 33010602011771号