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


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

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

原文地址:https://www.cnblogs.com/leonzheng/p/11610446.html

时间: 2024-11-05 13:44:18

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

《数据结构与面向对象程序设计》第四周学习总结

20182304 2019-2020-1 <数据结构与面向对象程序设计>第四周学习总结 教材学习内容总结 1.本章我们学习了使用并编写我们自己的类:类中有与类同名的构造方法,也可以有set,get,toSring与自己定义的方法.实例化一个对象,可通过该对象使用类里的所有方法.实例数据是每次创造一个实例后自动生成新的内存空间的变量 2.uml类图 :每个类可能包含三部分内容:类名.属性.操作(方法).UML类图有属于自己的语法,变量的类型名在变量名的后面,它们之间用冒号作为分隔符,方法的+和-

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

20182306 2019-2020-1 <数据结构与面向对象程序设计>第五学习总结 教材学习内容总结 尽量简单的总结一下本周学习内容 尽量不要抄书,浪费时间 看懂就过,看不懂,学习有心得的记一下 教材学习中的问题和解决过程 问题1:XXXXXX 问题1解决方案:XXXXXX 问题2:XXXXXX 问题2解决方案:XXXXXX ... 代码调试中的问题和解决过程 问题1:XXXXXX 问题1解决方案:XXXXXX 问题2:XXXXXX 问题2解决方案:XXXXXX ... 代码托管 (stat

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

教材学习内容总结 1.编写类与方法(构造方法的结构和用途) 2.实际参数与形式参数.public与private.return与void的区别与含义. 3.UML类图的含义与形式 4.静态类(Math类)静态变量.静态方法 5.类间关系(依赖关系.聚合关系.继承关系) 6.接口的使用,能够在某个类中实现接口的方法(Comparable.Iterator) 7.软件活动开发.方法设计.方法重载.测试(黑盒测试.白盒测试) 教材学习中的问题和解决过程 问题1:toString与return返回的值的

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

教材学习内容总结 1.继承的基本语法与用法. 2.利用UML类图表示继承关系. 3.在具体编写类的时候,先是数据声明再是方法声明. 4.toString方法用println或print或字符串连接会自动调用. 5.每创建一个对象.都会为类中声明的变量建立新的内存空间. 6.UML图一些基础使用方法. 7.对象应该是自管理的,既对象的实例数据应该仅由该对象来修改,这就构成了封装. 代码调试中的问题和解决过程 问题1:测试代码出现错误 问题1解决方案:junit的方法名必须是textxxx或xxxt

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

20182320 2019-2020-1 <数据结构与面向对象程序设计>第5周学习总结 教材学习内容总结 什么是继承? 继承是从已有类派生一个新类的过程. 继承有什么意义? 复用已有的软件,提高利用率和效率. 形成继承关系后,父类和子类的关系: is-a关系. 继承的代码例子: 父类: public class Book{ xxx; } 继承出来的子类: public class Dictionary extends Book{ xxx; } 继承能继承什么? 方法.变量,构造方法不能继承.

20182311 2019-2020-1 《数据结构与面向对象程序设计》实验五报告

20182311 2019-2020-1 <数据结构与面向对象程序设计>实验五报告 课程:<程序设计与数据结构> 班级: 1823 姓名: 冷冲 学号:20182311 实验教师:王志强 实验日期:2019年10月16日 必修/选修: 必修 1.实验内容 1.Android Stuidio的安装测试: 参考<Java和Android开发学习指南(第二版)(EPUBIT,Java for Android 2nd)>第二十四章: 参考http://www.cnblogs.c

20182327 2019-2020-1 《数据结构与面向对象程序设计》实验二报告

20182327 2019-2020-1 <数据结构与面向对象程序设计>实验二报告 课程:<程序设计与数据结构> 班级: 1823 姓名:赵天昊 学号:20182327 实验教师:王志强 实验日期:2019年9月16日 必修/选修: 必修 1.实验内容 (1) 编写简单的计算器,完成加减乘除模运算. (2) 要求从键盘输入两个数,使用判定语句选择一种操作,计算结果后输出,然后使用判定和循环语句选择继续计算还是退出. (3) 编写测试代码,测试验证. 2. 实验过程及结果 不多说,上

20182319《数据结构与面向对象程序设计》实验二报告

20182319 2019-2020-1 <数据结构与面向对象程序设计>实验二报告 课程:<程序设计与数据结构> 班级: 1823 姓名: 彭淼迪 学号:20182319 实验教师:王志强 实验日期:2019年9月16日 必修/选修: 必修 1.实验内容 (1) 编写简单的计算器,完成加减乘除模运算. (2) 要求从键盘输入两个数,使用判定语句选择一种操作,计算结果后输出,然后使用判定和循环语句选择继续计算还是退出. (3) 编写测试代码,用规定方法测试验证. 2. 实验过程及结果

# 20182331 2019-2020-1 《数据结构与面向对象程序设计》实验二报告

20182331 2019-2020-1 <数据结构与面向对象程序设计>实验二报告 课程:<程序设计与数据结构> 班级: 1823 姓名: 高宽让 学号:20182331 实验教师:王志强 实验日期:2019年9月16日 必修/选修: 必修 1.实验内容 (1) 编写简单的计算器,完成加减乘除模运算. (2) 要求从键盘输入两个数,使用判定语句选择一种操作,计算结果后输出,然后使用判定和循环语句选择继续计算还是退出. (3) 编写测试代码,测试验证.(https://www.cnb