zoukankan      html  css  js  c++  java
  • 20182320 2019-2020-1 《数据结构与面向对象程序设计》第4周学习总结

    20182320 2019-2020-1 《数据结构与面向对象程序设计》第4周学习总结

    1.教材学习内容总结

    本周学习内容分为以下几个部分:

    • 4.8.1 迭代器和for循环
    • 5.1 再谈类和对象
    • 5.2 类的剖析
    • 5.3 封装
    • 5.4 方法的剖析
    • 5.5 静态类成员
    • 5.6 类关系
    • 5.7 方法设计
    • 5.8 方法重载
    • 5.9 测试
    • 5.10 调试

    4.8.1 迭代器和for循环

    什么是迭代器?

    • 迭代器是一个对象,我们可以使用它的方法来处理某集合中的元素,一次处理一个。
    • 每个迭代器对象都有一个方法hasNext,它返回一个布尔值。值为真的时候说明还有待处理的下一项,为假的时候说明没有。
    • 迭代器还有一个next方法,可以获取集合中的下个数据项。
    • 例子:Scanner类定义的对象就是迭代器。

    迭代器和for循环:

    • 当一个迭代器类的对象实现了Iterable接口,则可以使用变形的for循环处理每一项。
    • 例如下面这个代码:
    for (Book myBook : bookList)
         System.out.println(mybook);
    

    可以更细地拆分为:

    Book myBook;
    while(boookList.hasNext())
    {
        mybook=bookList.next();
        System.out.println(myBook);
    }
    

    详解:bookList是一个Iterable对象,它保存了Book的对象,于是用for循环处理迭代器中的每个Book对象。

    上述这样的循环叫做for-each语句

    • Scanner类也是一个迭代器,但是没有实现Iterable接口,所以它有hasNext和next方法但不能使用上述这样的循环。

    5.1 再谈类和对象

    • 回顾类和对象的关系:

    类是对象的蓝图。

    类表示的是概念,对象是对这个概念的实现。

    • 每个对象都有一个状态(state),它由与对象相关的属性(attribute)来定义,而属性由类中声明的变量来定义
    • 每个对象都有一个行为(behavior),它由与对象相关的操作(operation)来定义,而行为由类中声明的方法来定义
    • 设计程序分为以下两大部分:

    类和对象的确定

    分配职责

    5.2 类的剖析

    • 类可以包含数据声明方法声明两大部分,它们都是类的成员
    • 方法声明中也分为构造方法普通方法。构造方法与类同名,普通方法定义对象提供的服务。
    • 若一个文件中含有多个类,只能由一个类用保留字public声明。
    • 公有类的名字必须与文件名相同。
    • 实例数据指的是在类中声明的变量。它们可以被类中的任意方法引用。

    5.3 封装

    • 封装是对象的一个特性。它的意思是指一个对象的变量由其自身管理,一般不允许其他对象直接访问,只能通过特定的方法进行访问的这种特性。
    • 可见性修饰符一共由三种:public(公有的)、private(私有的)和protected(保护的)

    public修饰的类成员可以在对象外直接引用;private修饰的类成员只能在其所定义的类中使用;protected一般用于包含于继承关系中的类,与其处在同一个包下的类可以直接引用,封装性介于public和private之间。

    • 一个类中提供访问及修改数据值服务是访问方法(accessor method)设值方法(mutator method),通常命名为“get+访问的变量名”及“set+修改的变量名”。

    5.4 方法的剖析

    • 方法的结构,举例:
    public int computeArea(int length,int width)
    {
        int area=length*width;
        return area;
    }
    

    public——修饰符

    int——返回值类型

    computeArea——方法名(标识符)

    int length/int width——参数

    (可选)Throws子句,表示这个方法可能抛出的异常

    {}内的内容——方法体

    • return语句返回头部规定类型的返回值
    • void类型不返回,也不含有return语句或只能含有“return;”语句
    • 构造方法没有返回类型和返回值
    • return语句过后控制立即返回调用的位置,并继续执行
    • 方法声明头部的参数叫形参(formal parameter),调用方法时传给方法的值叫实参(actual parameter)
    • 方法内声明的叫局部数据,只能在方法中使用;在类中声明的叫实例数据,能在类中的任意方法中使用。
    • 构造方法用来初始化每个对象对应的变量名字必须与类名相同

    5.5 静态类成员

    • 静态变量由static修饰符声明,它由类中的所有实例所共享。
    • 局部变量不能是静态的。
    • 静态方法可以直接通过类名调用,不需要实例化对象。

    5.6 类的关系

    • 依赖:一个类使用另一个类
    • 聚合:某个对象由其他对象组成,成为聚合对象,形成has-a关系
    • this引用:指向当前正在运行的对象

    5.8 方法重载

    • 方法重载指的是多个不同方法使用相同的方法名,但是根据它们之间参数个数的不同来区别要调用的是哪个方法。

    5.9 测试

    • 单元测试:为每个模块(方法)创建一个测试用例
    • 测试驱动的开发(TDD测试):

    先编写测试用例

    然后编写能保证测试用例通过的源代码

    教材学习中的问题和解决过程

    • 问题1:为什么常量可以是公有的?
    • 问题1解决方案:通过翻阅书本,得知,因为常量不可以被修改,因此设置为公有的不改变类的封装特性。
    • 问题2:为什么类需要封装?
    • 问题2解决方案:

    通过查阅CSDN与百度知道等各类论坛,总结如下:

    减少代码重写率,提高重复利用率

    减少编译出错率

    方便第三方进行调用

    保证类的安全性

    代码调试中的问题和解决过程

    • 问题1:在编写PP5.3时,创建了枚举类型Side和它的变量side,对其赋值之后并不知道它如何输出

    • 问题1解决方案:直到看到书上程序3.6,大概明白了枚举类型如何输出。

    • 问题2:在编写PP5.3,参考Coin类的时候,不知道下面这个代码是什么意思

    • 问题2解决方案:根据对C语言的浅薄印象和个人理解,我认为意思是:检测括号内两个值是否相等。若相等则返回"Heads";若不相等则返回"Tails"。

    • 问题3:在编写PP5.6中的BoxTest时,单纯地想如下打叉的代码那般改变一下box2对象的填满状态,调成满的,结果发现好像不能这么改……

    • 问题3解决方案:将其替代成打勾的代码,就可以完成这个功能了。

    • 问题4:经历了上面的修改,我在运行程序的时候却发现上面的问题3的解决方法并不能改变full的取值,就算如下修改成主函数也不能实现。

    • 问题4解决方案:可能是因为作用域的原因,我直接在测试方法内进行修改,就能顺利将box2的值修改成功。

    • 问题5:在编写PP5.13的运行程序的时候,发现生成的牌都是同一个花色的。

    • 问题5解决方案:发现我在生成随机数的代码部分使用强制转换的时候,没有把整个给括起来,导致生成的随机数只有一个值,添加括号即可。

    代码托管

    上周考试错题总结

    错题1


    原因: 是制表符, 是换行, 是回车。因此输出是:

    1 big bad wolf  8 the 3 little pigs
    4 dinner2night
    

    错题2


    原因: 保留字是系统中有预定义的特殊字符,println是System.out.object的方法。

    错题3


    原因: 取余运算符%可以用于运算所有类型的字符

    结对及互评

    点评过的同学博客和代码

    • 本周结对学习情况
      • 20182307
      • 结对照片
      • 结对学习内容
        • Java密码学算法
        • 编写类
    • 上周博客互评情况

    其他(感悟、思考等,可选)

    Java的类代码在仔细分析结构后其实很好理解,其提供的接口——程序间的联系途径是个很精妙的设计。

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 10000行 30篇 400小时
    第一周 208/208 2/2 9/9
    第二周 258/466 2/4 15/24
    第三周 693/1159 2/6 22/46
  • 相关阅读:
    php 3des加密解密
    mysql 用命令导入导出
    ubuntu16.04对硬盘进行分区格式化并设置开机自动挂载
    nginx
    iostat (转https://www.cnblogs.com/ftl1012/p/iostat.html)
    zabbix
    zabbix
    mac 录屏
    利用elasticsearch-dump实现es索引数据迁移附脚本
    rdbtool
  • 原文地址:https://www.cnblogs.com/leonzheng/p/11610446.html
Copyright © 2011-2022 走看看