面向对象第二轮学习总结
面向对象第二轮学习总结
0. 前言
这几周的作业总体来说不是很难,主要目的是让我们学习理解封装,继承和多态的运用。除此之外,还运用到了抽象类,以及调用接口。
1. 作业过程总结
这三次作业主要考察的是对于继承的运用,第一题水文数校验没有运用到继承,但其考察了正则表达式的运用。后面的作业都是层层递进的,每题都需要运用继承,随后引入了抽象类,再往后还调用了接口。
通过作业我所理解的封装便是属性私有,且满足单一职责原则,每个类只有其所抽象事物的功能且不影响其他类。我所理解的继承,也就是把一些具有公共特征的类合为一个模块,抽象出一个公共的父类进行继承,子类可调用父类的所有方法,在测试类中用父类实例化子类并进行运用。怎么能用父类实例化子类呢?这就要涉及到多态,Father son = new Son();(向上转型),其实我一开始还不能理解为什么要有多态这种东西,什么向上转型,向下转型的,父类还不能使用子类中的特有方法。要调用子类的特殊方法还得进行强制转换Son s =(Son)son;那还不如把子类中的方法写到父类中,剔除子类,直接Father father = new Father();岂不是很方便。经过这几次作业我才想通,我之前看到的例子太过简单,如果更为复杂的代码,会造成很多的重复代码和不必要的麻烦。

拿上面的UML类图来说吧,如果没有Shape类,Card类中属性就得改为Circle,Rectangle,Triangle,这明显复杂化了代码,三个还好,如果有100个图形类要加入到Card类中,那是何等麻烦。而多态的意义就在与一个接口(Shape),多种实现。而且还便于拓展,无论我在Shape类中的底层多加几个图形,Card类中只要Shape一个属性就能全部实现,能避免许多冗余。多态是要以继承为基础,继承因有多态而更为灵活多变。总而言之,继承与多态为面向对象编程代码得简化,扩充和维护做出了不可磨灭得贡献。
在做作业的过程中也没有遇到上面太大的问题,唯一的问题就是对正则表达式的运用不熟悉,还有水文数校验一题实在难度太大。问题的解决方法便是与同学讨论,并且上网查阅资料,最终把正则表达式给弄明白了,我还需要做的就是把众多的通配符给背下来,这样才算是完全掌握了。
这几次作业的时间花费比例为5:2:1,第一次作业也就是因为水文数校验难度太大,导致时间花费的比较多。
编程的过程当中,首先要做好的式设计,根据功能,种类,特征设计各个类,类设计的严谨,整个程序的逻辑也就严谨了。恰当的使用继承和多态可以使整个代码看起来更为简洁明了。
2. OO设计心得
面向对象编程的三大特性是相辅相成的,封装是面向对象编程的基石,是面向对象和面向过程的本质区别。继承和多态的关系我上面也提到过,实现多态的根本条件是继承,继承因多态而变得更为灵活。
面向对象的单一职责原则和开闭原则这两大原则我查阅过资料,所谓单一职责原则便是一个类或一个模块应该有且只有一个改变的原因。按我的理解,应该是每个类都只做一件事,这件事就是其所抽象实例能做的事。

还事拿这个UML图来说,Circle类抽象的是圆形,Rctangle类抽象的是矩形,所以Circle类该有的属性是半径,而不是矩形的两个边。再比如,鸡不会游泳,鸭子会游泳,那么在鸡的类中不应该有游泳这个方法。开闭原则的基本概念为“面向修改关闭,面向扩展开放”,意思就是,一个类定好了那就只能因错误修改,能够扩展一个新的类进行功能的修改和功能的增加。比如:
我需要给Lever修改/添加一个功能,不能直接在Lever中修改/添加,需要新定义一个NewLever类对其进行扩展或修改。
面向对象编程和面向过程的区别很大,对于同一个问题,面向对象注重的是对象实例化,把每个对象进行封装,再调用各类实现结果。而面向过程注重的是过程的简化,在于解决问题的过程。也许有时面向对象会显的麻烦和复杂,但其对与一个大的工程意义非凡,它的复用性是面向过程无法比拟的。总之,面向对象的精髓再与复用。
在类的设计方面我倒是没什么心得,因为我都是用老师设计好的类来进行编程。但我觉得很神器,每个问题都可以按照不同方式来设计类,像图形类,都是按照实体(矩形,圆形,三角形等)来设计的,而水文数校验是按照功能(校验,计算,业务处理)来设计类的。我还需要多加学习类的设计,才能设计出逻辑严谨功能完备的类和结构。
3. 测试的理解与实践
测试对于代码的作用是毋庸置疑的,代码合不合格,能不能达到要求都需要有一个测试类进行测试,输出结果看是否与预期一样。以及一些边界值,也是需要通过测试来查验的。
Junit是可以进行程序测试的,首先要构建测试的环境,可以使用Assert进行单个测试,也可以自动化进行批量测试。
4. 课程收获
经过四周的学习,我对oo编程的理解有了更为深刻的理解,我基本掌握了面向对象的三大基本特性:封装,继承,多态,以及基本理解了单一职责原则和开闭原则的原理。想要完全掌握这些知识,了解更多的原则需要继续向下学习。
5. 对课程的建议
这一轮的作业难度不是特别的大,就是水文数校验非常难,其他的都还好,这一轮的作业UML类图都是老师设计的,我希望下面几轮都能由我们自己设计,这样难度也会更大一些,但题量可以少一些且给我们更多的时间。这样我们才能更有时间去精心设计类图,以达到过渡的效果。
我觉得老师可以专门腾出一节课来给我们讲讲类设计的知识和技巧,这样我们也能成为一个不是只会看着别人设计编程的“码农”,而是能够自己分析,思考和设计的程序设计师。

浙公网安备 33010602011771号