zoukankan      html  css  js  c++  java
  • OO第二单元作业总结

    0 前言
    这是Java学习的第二阶段,主要是让我们深入了解面向对象过程以及类的各种类型的使用方法。这个阶段的作业难度相对于第一阶段难度有了较大的提升,每次作业所花的时间也比较多。下面是我对本阶段作业的一些总结
    1 作业过程总结
    (1)知识迭代关系
    三次作业都贯穿了数据校验,要求我们对正则表达式有基本的了解,三次作业分别让我们了解了类的继承,抽象类和接口类,以及类的多态等基础类的使用。其中主要是对类的继承,抽象和多态的了解。
    (2)对面向对象的封装性、继承性与多态性三大技术特性的理解
    其中第四次作业就体现出了继承和封装的重要性,第四次作业的三个题目 图形继承,蒙特卡罗方法求圆周率 ,水文数据校验及处理,都采用了继承与封装的方法。继承就是子类继承父类,使子类可以调用父类的的属性和方法,或子类从父类继承方法,使得子类具有父类相同的行为。继承是通过extends关键字完成,父类一般是相对于子类的一个大的集合,我们可以这样理解,父类是生物,这是一个大的集合,生物有很多自己的方法行为属性,比如雄雌,高矮,行为比如繁衍生殖,吃东西,行动等。子类是父类的一个子集,可以有父类的一部分属性和方法,比如子类可以是人,陆地动物,海洋动物等。第三题充分展现了继承关系如下。
    这里shape是父类 其他具体类型的图形Circle ,Rectangle等是他的子类,子类继承了父类的方法getArea,对该方法进行重写变成子类自身的方法。
    对于类的封装我们相对更容易理解,封装是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。我们不能随意的访问已封装类中的属性和方法。封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。如下采用的封装方法。

    class Circle(){
    private double radius; //这里对Circle的属性radius进行设置,修改为私有属性,只有本类能够访问。
    Circle(){
    }
    Circle(double radius){}
    public void radius(){
    this.radius=radius;}//使用this关键字得到属性值采用 this 关键字是为了解决实例变量(private String name)和局部变量(setName(String name)中的name变量)之间发生的同名的冲突。
    public void setRadius(double radius){ //通过公共方法外部设置属性的值
    radius=radius;}}

    对于多态的理解,更多的是同一个接口实现不同的工作,多态的实现方法有重写和接口,重写大体就是一个方法名不同的实现方法,java中的接口类似于生活中的接口,就是一些方法特征的集合,但没有方法的实现。我们更多的使用的是向上多态,子类的对象调用父类的类型,如 A为父类 B为继承A的子类,我们可以 通过 A a =new B(),使B的对象a可以同时对A,B类的对象进行处理。使得程序具有良好的拓展性。
    (3)作业过程中遇到的问题及解决方法
    作业主要遇到的困难来源于数据校验的处理,我们使用的是正则表达式处理数据校验问题,但是对于初学者而言,流畅的使用正则表达式来对较为复杂的数据进行校验是比较困难的。其次作业中最困难的题目来自对水文数据校验及处理,题目是一个综合题目,要求我们能够很好的使用正则表达式进行数据的分割和校验,并且要求我们对类的多态封装和继承有较为深入的理解,当时写的时候也是举步维艰,花费了大量的时间学习正则表达式以及多态的使用,但是很可惜依然没有得到很好的分数。有了这次经验,后面两次作业的处理相对轻松,但是有些细节依然不可忽视。
    (4)每次作业花费的时间比例
    第四次花费的时间最多,第五次第六次作业相对简单花费的时间相对较少,答题为2:1:1
    (5)对编程过程的严谨性的认识及教训
    对面向对象编程我们不经需要考虑对某个问题的具体求解,而要考虑代码的复用性,使这段代码能够解决这类问题,不能为了针对某个问题简化而牺牲了大类的部分实现。
    其次我们的代码编写要符合实际,前后的衔接应该流畅。类及变量的命名使用英文单词及驼峰命名规则

    2 OO设计心得
    (1)对面向对象三大技术特性之间关系的理解
    三大技术,继承,封装和多态可以分开使用也可以结合使用,封装使得代码可以继承,继承使得类代码可以使用多态,三大技术可以相互叠加拥有更简洁更好的效果。
    (2)面向对象设计的基本原则理解(单一职责原则及“开-闭”原则)
    单一职责相对好理解,一个类具有自己的属性和方法,只管理这类事务的处理,其他类型事务交由其他类去实现,开闭原则则是相对于封装而言的,开既程序可以开放,可以拓展,闭则是程序不能被修改,对于扩展是开放的,对于更改是封闭的。
    (3)OO编程思维的理解
    就一个类而言,无需顾忌其他大体,只要专心思考这个类的功能,作为宏观对象的微观表现。 所设计的类应该是以类复用为思考点,最大程度实现代码的复用,不仅仅是面向过程的一个代码针对一个问题;OO面向对象其实就是把程序看做一个个个体,个体进行分类,分级,整合的思想。具体分为封装,继承,多态,抽象。
    3 测试的理解与实践
    对代码的测试能够发现我们对一些细节问题的处理是否恰当,以及可以知道所写代码的质量,他是否能满足我们的需求。
    如果我测试代码我会从数据型,数据边缘,已经需求方面进行测试,也可以把代码进行拆分,分段进行测试;
    4 课程收获
    这几周的学习我真正进入了面向对象的核心,了解了Java的三大技术并且设计应用了,虽然这其中的过程很辛苦,但是还是值得的。对于我们初次接触Java的学生来说,练习必不可少,对于不同较难理解的知识点还是要善于查找资料。
    5.对课程的建议
    我觉得一周一次的大作业体量为两题较为合适,难度分布一题相对较难,一题较为简单比较合适。课程的讲解速度可以相对快一些。

  • 相关阅读:
    深入探讨多态性及其在Java中的好处
    可扩展的Java线程池执行器
    Java并发:线程限制
    CF集萃3
    CF1151F
    [欧拉路]CF1152E Neko and Flashback
    LOJ#3119 随机立方体
    UOJ#449 喂鸽子
    CF1140F
    洛谷P5071 此时此刻的光辉
  • 原文地址:https://www.cnblogs.com/qiuqian0123/p/12792129.html
Copyright © 2011-2022 走看看