OO第二单元(5-8周)作业总结

前言:

本阶段的三次作业较上阶段的作业难度加大,由对方法的考察转变对类的考察,本阶段作业主要考察对类的继承性,多态性的使用及部分对于正则表达式的用法。博客对本阶段的三次作业情况做以下总结:

一、作业过程总结

1、三次作业间的知识迭代关系

Homework5:主要考察对类继承性的使用并考察正则表达式的应用;

    Homework6:主要考察对类继承性及多态性的使用,部分考察正则表达式应用;

    Homework7:主要考察对类继承性及多态性的使用,并增加了对比较器comparable的应用及List类中方法的应用;

作业6及作业7在作业5的基础上增加了对类多态性的使用以及对接口comparable, list类中方法的考察,三次作业所考察的知识逐渐全面化,对类的三大性质,封装性、继承性、多态性逐步全面,并增加对类接口的使用,以逐层递进的方法完善对类的用法知识的考察。

2、通过作业理解面向对象封装性、继承性、多态性三大技术特征

在Java中访问控制权一共有4种public 、protected 、default、 private,而类的封装性则是通过对private使用而实现的,通过使用private定义类中成员属性,使成员属性仅可在类中被访问,并使用构造方法来接收引用数据类型。在作业中构造不同类时,均将类中的成员属性以private实现封装,并以this实现对成员属性的访问,对类中成员属性的访问可控不易修改。本阶段的作业均涉及对类继承性的使用。如homework5中7-3图形继承以shape为父类,其余类均作为子类。通过class A extends B,可实现A对B的继承。使用类的继承性能够节省对实现同一功能代码的编写子类可继承父类中的成员属性及构造方法,同时也可在子类中扩展不同的成员属性及方法,在子类中可通过super语句及this语句分别调用父类中的构造方法及成员属性及本类中的构造方法及成员属性。在子类中可对父类方法进行重写,使此类功能更加丰富,也更具灵活性。类的多态性则是类的继承性的一个特征,通过子类中对父类方法的重写及扩充便可实现类的多态性。在实例化对象时采用类的多态性可使类中的构造方法使用更为灵活。在保持类之间继承关系的同时,又能实现类之间的不同构造方法,使对不同子类对象的操作实现更为便捷。类多态性的实现,可分为对象向上转型及对象向下转型,作业中主要应用为对象向上转型,即:"父类  父类实例=子类实例"完成转型。

3、作业中遇到的问题及解决办法

问题1:Homework7中对对象成员属性面积进行排序时,无法对对象名称进行排序。

解决办法:以Arraylist定义一个存放对象的数组列表,以整个对象作为列表元素对对象进行排序。

问题2:Homework7中采用comparable中默认排序方法,无法对list中成员进行降序排列。

解决办法:在类中添加自定义比较器,对compareTo方法进行重写,实现对list中元素的自定义排列。

问题3:Homework7中对多个不同成员在list中无法分类排序输出。

解决办法:定义多个数组列表,在列表中分别将元素进行排序输出。

4、每次作业花费的时间及比例

Homework5花费时间1.5天左右;Homework6花费时间2天左右;Homework7花费时间3天左右;

比例:3:4:6

5、对编程过程的严谨性认知

经过新一阶段对面向对象程序设计的学习,令我对编程过程中的严谨认知有了更深入的看法,在编程过程中除了要做到避免最基础的语法错误外,还要注意避免编程过程中的逻辑错误,如出现以0为除数的除法,访问数组下标范围以外的数组元素,访问空对象内的信息等。这些逻辑错误都会导致程序无法正常运行。在遇到逻辑错误时,可通过编辑器自带的异常反馈捕捉异常,进而对代码进行修改或通过设计try-catch-finally语句块对异常进行处理,使程序能够正常运行。

二、oo设计心得

1、对面向对象三大技术特征之间关系的理解

面向对象三大特征:封装、继承、多态。

封装:类中包含了数据及方法,将数据和方法放在一个类中就构成了封装,同时采用private关键词定义类中的成人属性,控制对类中成员属性的访问权限。

继承:不同的类之中存在着单一继承关系。即一个类只能继承另一个类被继承的类为父类继承的类为子类,在继承中使用关键字extends实现类的继承。通过class A extends B,可实现A对B的继承。

子类可直接引用父类中的数据及构造方法,并对构造方法进行重写及扩充以增加类的不同功能

多态:在子类中对父类方法进行重写从而实现同一方法对不同对象可实现不同功能。其核心思想为父类的引用可以指向子类的对象。多态中包括两种类型的强制类型转换,一向上类型转换,二向下类型转换,通过类型转换,便可将子类转化成父类引用,将父类转化为子类引用。

类的良好封装能够使我们便捷修改类的内部实现,也是实现类继承及多态的基础,而多态的实现则是基于类之间的继承关系

2、对面向对象设计基本原则(单一职责原则及开闭原则)的理解

单一职责原则:一个对象应该只包含单一的职责,并且该职责被完整的封装在一个类中。

单一职责原则是最简单的面向对象程序设计原则用于控制类的粒度大小一个类承担的职责越多,他被雇佣的可能性就越小。当一个职责变化时,可能会影响其他职责的运作。将这些职责进行分离,将不同的职责封装在不同的类中,将不同的变化原因封装在不同的类中。单一职责原则是实现高内聚低耦合的指导方针。

开闭原则:软件实体应该对扩展开放,对修改关闭。

开闭原则是面向对象的可复用设计的基石。是最重要的面向对象设计原则。抽象化是开辟原则的关键。相对稳定的抽象层外加灵活的具体层。对可变性封装原则找到系统的可变因素,并将其封装起来。

3、oo编程思维的理解

面向对象程序设计是从对象出发,以对象为主体,针对对象的各种属性即可实现功能去设计程序,将设计和现实世界一致化,尽量使程序设计的思路符合现实世界的规律。类和对象是面向对象程序设计的两个最基本元素,每个类都有着各自的成员属性及方法,可表现对象所具有的各种属性及实现的功能。就好比一个苹果。它的颜色、大小及它可以吃也可以售卖等。那么在设计对应的类似类中的方法及成人属性,便要对对象的属性即可实现的功能一一对应,并将其都封装于一个类中体现封装性。当然除了对类的单独设计外,还要考虑各类之间的关系,包括采用继承关系或聚合关系等。把要解决问题中所涉及的问题一个个分析清楚,找出彼此的差异和共同点,相互之间的联系,对于共性则定义为父类,使用继承和接口,并将父类尽量抽象化。同时还应遵循面向对象程序设计的六大原则。使所设计的程序代码可复用性高,便于扩充其他功能提高系统的可维护性。

4、类设计心得

经过本阶段的学习,对于类的设计也有了一些了解。首先是对于单独一个类的设计,在单独设计一个类时,应遵循单一职责原则,将一个对象的属性及其单一的职责完整的封装于一个类中,提高类的可复用性。而面对多个类区设计各类之间的关系时,目前使用的关系主要为两种:继承关系和聚合关系。在使用类的继承时,因为子类能够继承父类中的成员属性及构造方法,因此在编写程序时能够复用附类中的代码,使代码编写更为简洁。同时子类能够继承父类的接口,重写父类的方法,这使得对子类对象的操作能够更加便捷。而聚合关系则是在类中定义一个其他类的对象,通过对象便可访问其他类中的成员属性,并调用其他类的方法。使用聚合关系时,各个类都相互独立,类之间的耦合性低,可复用性高,便于修改。而在过多使用继承时,会使各类间的耦合度提高,不利于系统的修改,类的可复用性也减少。因此应具体问题具体分析,当对象的职责基本不做,修改时可采用继承以简化缩写代码,当对象职责会出现改动时,应多考虑采用聚合,以提高类的复用性,便于修改或增加系统的功能。

三、测试的理解与实践

1、测试对编码质量的重要性

测试对于程序设计来说是十分必要的。程序在最初编写完成时会存在部分问题,通过测试便能将程序所出现的问题反馈出来,通过测试的反馈对程序的代码进行修改,便可提高代码的质量,减少程序在运行时可能出现了错误,提高程序的运行效率。

2、使用Junit进行程序的测试

Junit为单元测试框架,单元测试是针对最小的功能单元编写测试代码。Java程序中最小的功能单元是方法单元测试就是针对单个Java方法的测试。

单元测试的优点: 1、确保单个方法运行正常;  

                           2、如果修改了方法代码,只需确保其对应的单元测试通过;          

                           3、测试代码本身就可以作为示例代码;   

                           4、可以自动化运行所有测试并获得报告;

使用Junit对程序的测试

 

 

 

 使用Junit测试可行,但若使用Junit测试代码,代码逻辑需要十分简单,并且测试方法必须完全独立。

四、课程收获

通过新阶段的学习,我对类的继承多态有了更进一步的了解,对其使用也更为熟练。其次通过作业我学会了对Arraylist的用法,以及对Arraylist中的元素进行排序,通过sort方法默认排序及comparable接口自定义比较等

对compareTo方法重写

 

ArrayList部分用法:

 

 

 运行结果:

 

 

五、对课程的建议

1、第3阶段作业在难度加大的同时可稍减少题量,后逐渐增大难度及提量,以便更好的消化知识及巩固。

2、课程内容在讲解知识点时速度过快,可稍微将讲课速度放缓,将内容讲解的更加详细。

posted @ 2020-05-01 17:25  kaka6  阅读(111)  评论(0)    收藏  举报