目录
- 学号 2019-2020-1 《数据结构与面向对象程序设计》第四周学习总结
- 教材学习内容总结
- 代码调试中的问题和解决过程
- 代码托管
- 上周考试错题总结
- 其他(感悟、思考等,可选)
- 参考资料
学号 2019-2020-1 《数据结构与面向对象程序设计》第四周学习总结
教材学习内容总结
- 学习4.8节迭代器与for的利用,正确理解迭代器的作用,并编写代码。
- 正确理解类和对象,并尝试编写简单的类和对象,编写主程序,并运行。
- 学习类的封装和刨析,学习静态类和public类等,明白类之间的关系、方法设计、方法重载。
练习测试,学会是会用TDD,善于利用idea来打代码。
教材学习中的问题和解决过程
- 问题1:构造方法应该如何理解?
问题1解决方法:根据代码实践和对教材的解析,我们了解到一个类里都需要一个构造方法,构造方法的意义相当于是创作这一个类的意思
如上图的cat类,假设我们是上帝的话,那么我们创造一个叫做猫的类,在类里有各种各样颜色的猫,那么在编写每种颜色的猫的时候,我们就必须要先“创造猫这么一个类”,这样才能编写类的内容。
- 问题2:对象与类有什么不同?
- 问题2解决方法:根据书上所说,将类比喻成一张房屋的设计图纸,而对象是每张图纸制作之后的一栋房子,对象具有类的特征和方法。本人理解认为,类更像是一个工具箱的说明书,里面有许多的工具方法可以给我们使用,而创建一个对象,即是创作一个工具箱,然后我们利用这个工具里的方法工具去解决问题,这就是我认为的类与对象的问题。
- 问题3:什么是接口?
- 问题3解决方法:
我认为,接口更像是许多个类都共用它的几个方法,从而有利于分清类与类之间的关系,下面我们举出几个代码的例子来说明
package com.company;
public interface people {
public void hair ();
public void laungrage();
public void eyes();
}
这是我们打的people类,里面的方法描述了人的几个特性,头发颜色、说的语言、还有眼睛的颜色,它就是一个借口,接着我们打两个类,一个china,一个European
import com.company.people;
public class European implements people
{
@Override
public void hair() {
System.out.println("欧美人的头发是金色的");
}
@Override
public void laungrage() {
System.out.println("欧美人的语言是英语");
}
@Override
public void eyes() {
System.out.println("欧美人的眼睛是蓝色的");
}
}
package com.company;
public class china implements people{
@Override
public void hair() {
System.out.println("中国人的头发是黑色的");
}
@Override
public void laungrage() {
System.out.println("中国人的语言是中文");
}
@Override
public void eyes() {
System.out.println("中国人的眼睛是黑色的");
}
}
接着,我们在编写主函数
package com.company;
public class Main {
public static void main(String[] args) {
// write your code here
china yang = new china();
yang.eyes();
System.out.println(yang);
yang.hair();
System.out.println(yang);
yang.laungrage();
}
}
运行结果如下显示
"D:\idea\IntelliJ IDEA Community Edition 2019.2.2\jbr\bin\java.exe" "-javaagent:D:\idea\IntelliJ IDEA Community Edition 2019.2.2\lib\idea_rt.jar=63386:D:\idea\IntelliJ IDEA Community Edition 2019.2.2\bin" -Dfile.encoding=UTF-8 -classpath D:\idea\IdeaProjects\untitled5\out\production\untitled5 com.company.Main
中国人的眼睛是黑色的
com.company.china@7ef20235
中国人的头发是黑色的
com.company.china@7ef20235
中国人的语言是中文
Process finished with exit code 0
在这里,我们可以看到,china和European两个类的借口都是people,而我们想要调出他们两个的数据的话,直接找people就好了,他们都共用people里的方法,至少我是这么理解的,这样有助于我们对类进行分类,不会因为过多的类而被搞晕。
代码调试中的问题和解决过程
当我们的运行出现错误的时候,idea都会给出相应的提示,我们应该善于利用idea这一特性。通过检查,发现diea里说的是“Error:(10, 18) java: flip() 在 com.company.coin 中是 private 访问控制”,即在coin文件第10行,18个中出现了问题,我们打开文件发现,主要原因是flip代码打成了private型的函数,这就让flip函数变成了一个private的私有方法,我们无法在主函数进行访问,所以将其开成public就好
借此顺便学习一遍类中的私有和公有的问题,public开头所定义的方法和变量都属于公有变量,这代表是外面的程序是可以直接访问的
package com.company;
public class coin {
enum face {tails , heads}
face time;
private int h;
public int a;
private String Heads = "heads";
public coin() {
flip ();
}
public void flip() {
h = (int) (Math.random()*2);
if (h == 1)
{
time = face.tails;
}
else
{
time = face.heads;
}
}
public boolean isHeads ()
{
return ( time.name()== Heads);
}
@Override
public String toString() {
return (time.name() == Heads) ? "Heads" : "Tails";
}
}
在这个coin类中,public所代表的方法是可以直接使用的,使用的方法是创造一个对象,并用“.”号来调取方法来使用,包括前面的int a也是可以直接调用的,而private定义的变量则不可以,他们只能通过public类来间接的接受我们程序的修改和访问。
- 问题 2:错误代码如下
- 问题2解决方法:这是一个对方法运用不够成熟所犯下的错误,在调用方法的时候,我错把a1.setx当成了一个变量,使得运行出现了错误,正确的方式应该是在括号内输入我们要输入进方法里的值,()才是方法的的入口。
- 问题3:错误代码如下
- 问题3解决方法:当我运行代码的时候,我发现底下结果都是一排的黑桃,我便知道这段代码肯定出现了问题,对比前面打的coin的类,我发现我与那段代码的区别是在于math.random这里少了一个括号,使得我的代码出现了运行错误。
这就是我不小心忘记了在java里同样有运算优先级的问题
只需要在Math这里加入()就可以解决问题了,如
问题4:通过pp5.3探讨枚举类型的用法(因对枚举类型的不熟悉,开始时不懂如何编写这道题)
问题4解决方法:
按照书上的解释,我们编写了这样的代码
package com.company;
public class coin {
enum face {tails , heads}
face time;
private int h;
private String Heads = "heads";
public coin() {
flip ();
}
public void flip() {
h = (int) (Math.random()*2);
if (h == 1)
{
time = face.tails;
}
else
{
time = face.heads;
}
}
public boolean isHeads ()
{
return ( time.name()== Heads);
}
@Override
public String toString() {
return (time.name() == Heads) ? "Heads" : "Tails";
}
}
{}里的tails和heads是枚举类型的两个值,使用这两个值的时候,只需要定义一个face型的变量time,然后用“.”号对其进行调用就好,枚举类型里的每一个值,是一个特殊的“值”,或者更像是一个类,因为这些值里都有自己的方法,如time.name返回的是time这个值的字符串名称。
(上图说明season.hellp不是一个字符串类型的数据)
正确理解枚举类型里面值的含义,有利于我们将来对枚举类型的使用。
代码托管
(statistics.sh脚本的运行结果截图)
此图是在windows上的git软件上所运行的脚本截图
上周考试错题总结
错题1:Which of the following is an example of multiple inheritance?
A.A computer can be a mainframe or a PC
B.A PC can be a desktop or a laptop
C.A laptop is both a PC and a portable device
D.A portable device is a lightweight device
E.Macintosh and IBM PC are both types of PCs
错题1解析:多重继承意味着给定的类继承自多个父类。在上面列出的那些便携式计算机中,便携式计算机从PC和便携式设备继承属性。A,B和E中的答案都是单继承的示例,D表示类的属性。
错题2:Which of the following is not a method of the Object class?
A.clone
B.compareTo
C.equals
D.toString
E.all of the above are methods of the Object class
错题2解答:Object类定义clone来创建任何对象的副本,等于确定两个对象是否是同一对象,以及toString来将Object转换为String。但是,compareTo不是由Object实现的,必须在要实现Comparable接口的任何类中显式实现。
错题3:Two children of the same parent class are known as
A.aliases
B.relatives
C.clones
D.brothers
E.siblings
错题3解答:这题选e,选错的主要原因是没有好好看书,搞清概念。
错题4:The relationship between a parent class and a child class is referred to as a(n) ________ relationship.
A.has-a
B.is-a
C.was-a
D.instance-of
E.alias
错题4解决方法:has-a关系是指类的属性或元素(例如,学生拥有GPA),instance-of是指类与该类的实例化对象之间的关系,而was-a关系根本不存在,所以我们选b。
- 上周博客互评情况
- 20182334
其他(感悟、思考等,可选)
- 对于新的概念,必须要全面了解(如枚举),必须要深入大致了解,否则不宜与对于java编程的学习。
- 正确使用tdd来测试研究程序相当的重要
学会使用idea来解决许多编写java时出现的小问题,粗心的问题,来提高自己的编码效率
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 2/2 | 20/20 | |
第二周 | 300/500 | 2/4 | 18/38 | |
第三周 | 623/1000 | 3/7 | 22/60 | |
第四周 | 600/1600 | 2/9 | 30/90 |
参考:软件工程软件的估计为什么这么难,软件工程 估计方法
计划学习时间:8小时
实际学习时间:8小时
改进情况:
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)