学号:201621123032 《Java程序设计》第5周学习总结
1:本周学习总结
1.1: 写出你认为本周学习中比较重要的知识点关键词
接口interface,comparator接口和comparable接口.
1.2:尝试使用思维导图将这些关键词组织起来。
2:书面作业
2.1:面向对象设计大作业(团队项目,2-3人)
2.1.1:项目简介表格
合作对象:林俊伟,罗佳。
git地址:
大作业:淘宝
学生 | 负责任务 | 博客地址 |
---|---|---|
罗佳 | 用户类,购物车类 | 博客地址 |
王彩云 | 购物车类,菜单主类 | 博客地址 |
林俊伟 | 总商品信息类,购物车商品信息类 | 博客地址 |
2.1.2:系统常用功能框架图
2.1.3:系统总体类图
2.1.4:购物车、商品、系统关键代码截图(主要截取自己负责的部分)
购物车类:
添加到购物车:
移除购物车:
展示购物车:
菜单主类;
用户登录:
商品展示:
选择功能:
运行结果:
2.1.5:其他:跟上次的系统比较,系统的设计等有何修改。其他感想。
多增加了用户类,用户类创建购物车类的对象和购物车商品信息类的对象,表示一个用户一个购物车。,因为购物车类不能出现商品名字,价格,所以另外定义了一个购物车商品信息类,购物车类对比上次多了移除商品和展示购物车的功能。移除商品就是与购物车商品信息类进行对比,找到移除的数组,进行移除。
2.2: abstract:阅读GuessGame抽象类的设计与使用源代码
2.2.1: Guess改造前代码很简单,而改造后的代码使用了抽象类、抽象方法,看起来更复杂,这样的改造到底有什么好处呢?
改造前的代码:
Scanner scanner = new Scanner(System.in);
int number = (int) (Math.random() * 10);
int guess;
do {
System.out.print("猜数字(0 ~ 9):");
guess = scanner.nextInt();
} while(guess != number);
System.out.println("猜中了...XD");
}
改造后:
public void go() {
int number = (int) (Math.random() * 10);
int guess;
do {
print("输入数字:");
guess = nextInt();
} while(guess != number);
println("猜中了");
}
public abstract void print(String text);
public abstract void println(String text);
public abstract int nextInt();
改造前的代码与控制台绑定在一起,只能通过控制台输入。改造后的代码使用了抽象类、抽象方法,不一定要从控制台输入,也可以根据自己编写的界面进行输入。可以减少代码的冗余,实现代码复用。
2.2.2:GuessGame(改造后).java
中有抽象方法与非抽象方法,你觉得抽象类中什么样的方法应该声明为abstract
,什么方法不需要声明为abstract
直接实现即可。
当一个类或方法没有具体实现要求时,我们把他定为abstract类和方法,到后面在根据具体要求写代码。
1,abstract修饰类,会使这个类成为一个抽象类,这个类将不能生成对象实例,但可以做为对象变量声明的类型,也就是编译时类型,抽象类就像当于一类的半成品,需要子类继承并覆盖其中的抽象方法。
2,abstract修饰方法,会使这个方法变成抽象方法,也就是只有声明(定义)而没有实现,实现部分以";"代替。需要子类继承实现(覆盖)。
注意:有抽象方法的类一定是抽象类。但是抽象类中不一定都是抽象方法,也可以全是具体方法。
2.2.3:在这个例子中,变化的是什么,不变的是什么?尝试结合abstract等概念进行说明。
变化的是数字输入的方式,从只能从控制台输入,到不一定要从控制台输入。
不变的是整体游戏的功能还是猜数字和这个抽象类。
抽象类一般用来被继承,抽象类有抽象方法,但有的方法可以被具体实现,可以重写。方便日后的对代码的重写和维护。
2.3:Comparable与Comparator
2.3.1:结合PTA 7-1中你的代码说明,为什么某个类实现了Comparable接口,就可以直接使用Arrays.sort对该类型的数组进行排序?
public int compareTo(PersonSortable o){
if(name.compareTo(o.name)==0){
if(age==o.age)
return 0;
else return age-o.age;
}
return name.compareTo(o.name);
Comparable接口会强制对接入他的接口的对象强制进行整体的排序,实现此接口的数组可以通过Arrays.sort对其进行自动排序,但要求满足前提:对象所属的类必须实现了Comparable接口
2.3.2:结合PTA 7-2 中你的代码说明,有了Comparable接口为什么还需要Comparator接口呢?
class NameComparator implements Comparator<PersonSortable2>{
@Override
public int compare(PersonSortable2 o1, PersonSortable2 o2) {
return o1.getName().compareTo(o2.getName());
}
};
class AgeComparator implements Comparator<PersonSortable2>{
@Override
public int compare(PersonSortable2 o1, PersonSortable2 o2) {
if (o1.getAge() > o2.getAge()) {
return 1;
} else if (o1.getAge() < o2.getAge()) {
return -1;
} else {
return 0;
}
}
};
编写NameComparator类,实现对name进行升序排序,编写AgeComparator类,对age进行升序排序,有了Comparetor接口可以自己设定排序,可以多次修改,编写自己想要的排序,所以如果要以不同于compareTo()方法中指定的顺序排序我们的类对象,此时就可以用到Comparator接口。
Comparable接口与Comparator接口主要区别:
1、前者(强烈推荐)是强行对是实现它的每个类的对象进行整体排序,此类被称为该类的自然排序,类的compareTo方法被称为它的自然比较方法,实现此接口的对象列表和(数组)可以通过Collections.sort()或者Arrays.sort()进行自动排序。
2、Comparator位于包java.util下,而Comparable位于包java.lang下,Comparable接口将比较代码嵌入自身类中,而后者在一个独立的类中实现比较。 如果类的设计师没有考虑到Compare的问题而没有实现Comparable接口,可以通过 Comparator来实现比较算法进行排序,并且为了使用不同的排序标准做准备,比如:升序、降序。
3、实现方法int compareTo(T o) 比较对象之间的关系,< >=分别返回负数,正数,零。
4、强烈推荐(x.compareTo(y)0)(x.equals(y))这种做法,但不是严格要求这么做。
2.3.3:以前的作业Shape, Rectangle,Cirlce
中,Shape
类中什么方法应声明为abstract
?说出原因
public abstract double getPerimeter();
public abstract double getArea();
设为abstract。因为Shape方法会被, Rectangle类和,Cirlce继承,可以在子类中重写具体的实现方法。
2.3.4:有很多Shape
类型对象如Rectangle、Circle
。希望使用Arrays.sort
对他们进行排序,请写出相应代码。并简述应在哪个类上实现Comparable
接口比较好
public int compareTo(Shape o) {
if(this.getPerimeter()-o.getPerimeter()<0)
return -1;
else if(this.getPerimeter()-o.getPerimeter()>0)
return 1;
else
return 0;
在父类实现Comparable
接口比较好。
2.3.5:以3.4你编写的代码为例,简述面向Comparable接口编程、面向父类编程的好处。(注意:一定要结合自己编写的代码)
在父类实现面向Comparable接口编程,子类在继承父类时也可以继承接口,就不需要每个子类都编写接口,减少代码冗余,也更灵活。
2.4:面向接口案例分析
2.4.1:a.画出类关系图。b.StudentDao
接口有什么用?
a:
b:StudentDao
接口编写了三个抽象方法,writeStudent
,readStudent
, diplayAllStudent
, 分别为写入学生信息,添加学生信息,和展示学生信息。
2.4.2:StudenDaoListImpl
与StudentDaoArrayImpl
有何共同之处?有何区别?
两者都对三个抽象方法进行了重写,具体化实现,功能一样,都是添加学生信息和展示学生信息。
不同的是StudenDaoListImpl采用动态数组ArrayList的方式来实现存储,StudentDaoArrayImpl则是采用数组来实现,学生数量已经固定下来,人数不能超过数组定义的范围。StudenDaoListImpl 和 StudentDaoArrayImpl的属性设置也不同。
2.4.3:结合Test.java中的main函数,简述面向接口编程的好处。
本题体现了面向接口编程的好处,可以实现接口与实现方法分离,大大提高灵活性。以本题为例子,在main函数中可知,我们只要做到面向StudentDao接口,只向用户提供接口,不用管具体类是如何实现的,方便使用,因为这里是面向StudentDao接口,往后台写数据,无需考虑后台是什么。
2.5:什么是面向接口编程?面向接口编程的好处是什么?
2.5.1:结合题目4案例中的Test.java的代码进行分析。不要百度原封不动照搬!
接口是一种公开界面,供人访问,有统一定义的规范。仅向用户暴露出接口功能,而不依赖具体的实现方法。用户只需要知道有排序功能,但不需要知道如何实现,面向接口编程更加灵活,具体实现可以根据要求在进行编写。逻辑会更加清楚。
3:.码云及PTA
3.1:码云代码提交记录
3.1.1:在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图
3.2:截图PTA题集完成情况图
3.2.1: 排名图
3.2.2:PTA提交列表图
3.3:统计本周完成的代码量
周次 | 总代码量 | 新增加代码量 | 总文件夹 | 新增加文件夹 |
---|---|---|---|---|
1 | 114 | 114 | 11 | 11 |
2 | 520 | 406 | 16 | 6 |
3 | 1089 | 569 | 22 | 6 |
5 | 1425 | 336 | 29 | 7 |
6 | 1819 | 394 | 31 | 2 |
学号:201621123032 《Java程序设计》第5周学习总结的更多相关文章
- 学号 20175212 《Java程序设计》第九周学习总结
学号 20175212 <Java程序设计>第九周学习总结 教材学习内容总结 一.MySQL数据库管理系统 1.在官网上下载并安装MySQL 2.在IDEA中输入测试代码Connectio ...
- 学号20145303 《Java程序设计》第一周学习总结
学号20145303 <Java程序设计>第一周学习总结 教材学习内容总结 *dos命令行: dir:列出当前目录下的文件及文件名 md:创建目录 rd:删除目录.为空时文件夹(文件夹为空 ...
- 学号20145322 《Java程序设计》第一周学习总结
学号20145322 <Java程序设计>第一周学习总结 教材学习内容总结 Java诞生于Sun公司,于1998年12月4日发布J2SE,约以两年为一周期推出重大版本更新. 2010年Or ...
- 201521123061 《Java程序设计》第九周学习总结
201521123061 <Java程序设计>第九周学习总结 1. 本周学习总结 2. 书面作业 本次PTA作业题集异常 1.常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1 ...
- 201521123038 《Java程序设计》 第九周学习总结
201521123038 <Java程序设计> 第九周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 本次PTA作业题集异常 ...
- 201521123045 <java程序设计>第11周学习总结
201521123045 <java程序设计>第11周学习总结 1. 本周学习总结 2. 书面作业 2. 书面作业 Q1.1.互斥访问与同步访问完成题集4-4(互斥访问)与4-5(同步访问 ...
- 20175313 张黎仙《Java程序设计》第九周学习总结
目录 学号 20175313 <Java程序设计>第九周学习总结 一.教材学习内容总结 二.教材学习中的问题和解决过程 三.代码托管 四.心得体会 五.学习进度条 六.参考资料 学号 20 ...
- 20175227张雪莹 2018-2019-2 《Java程序设计》第九周学习总结
20175227张雪莹 2018-2019-2 <Java程序设计>第九周学习总结 教材学习内容总结 第十一章 JDBC数据库操作 MySQL数据库管理系统 下载安装MySQL 若下载的是 ...
- 2018-2019-3《Java程序设计》第二周学习总结
学号20175329 2018-2019-3<Java程序设计>第二周学习总结 教材学习内容总结 第二三章与我们所学习的C语言有很多的相似点,在这里我想主要就以我所学习的效果来讨 ...
- # 20175329 2018-2019-2 《Java程序设计》 第二周学习总结
学号 2018-2019-3<Java程序设计>第二周学习总结 教材学习内容总结 第二三章与我们所学习的C语言有很多的相似点,在这里我想主要就以我所学习的效果来讨论一下JAVA与 ...
随机推荐
- winform自动更新程序实现
一.问题背景 本地程序在实际项目使用过程中,因为可以操作电脑本地的一些信息,并且对于串口.OPC.并口等数据可以方便的进行收发,虽然现在软件行业看着动不动都是互联网啊啥的,大有Web服务就是高大上的感 ...
- 一些比较隐秘的OJ的网址
( 1 )COGS:cogs.pro:8080 ( 2 )AGC:agc012.contest.atcoder.jp ( 3 )CS Acaemy:csacademy.com ( 4 )JoyOI:w ...
- .net白盒测试
很久没写博客了,刚好这段时间空闲,做点记录 前提:最近部门需要白盒测试的工具,在网上也搜索了很多资料,国内很少有类似的资料(很少公司.net代码进行白盒测试),最后在国外(FQ)网站查找到了部分资料 ...
- CSS中image和text显示高度不一致的问题
将它们分别添加新的属性: float: left 就可以解决
- 魔改版ss-panel v3前端配置文件
配置文件所在目录:网站根目录/config/.config.php <?php // ss-panel v3 配置 // // !!! 修改此key为随机字符串确保网站安全 !!! $Syste ...
- MyBatis的三层级联和二层缓存
我们这里说的三层级联和二级缓存其实也是MyBatis映射器的知识点,只是因为比较难理解,所以单独拿出来讲解,下面是三层级联的内容: 我们知道,在数据库中包含着一对一,一对多 ...
- 为 Debian 8 或 Debian 9(64 位)安装 .NET Core
在 Debian 8 或 Debian 9(64 位)上安装 .NET Core 的具体步骤: 备注:必须有用户控制目录,才能通过 tar.gz 在 Linux 系统上进行安装. 1.准备一台刚安装的 ...
- 一年java工作经验的面试题总结(持续更新中)
本人是17年6月份毕业的,3月份出来实习,算起来也是工作一年了吧,金三银四,博主也考虑换一份工作,于是最近面试了几家,总结一下面试中的问题,大家一起交流学习. 第一次面试 ①说下java类的加载 ② ...
- 用user-selection实现让页面上的内容不能被选中
最开始发现这个功能是在陌小雨的博客中,然后自己百度发现用的是user-selection功能,之前网上有很多关于禁止右键,禁止复制,禁止粘 贴,禁止剪切等都弱爆了.这个功能正好使用到我的网站上啊,(你 ...
- 如何写对kubernetes的模板文件
kubernetes的模板配置文件随着版本更迭也会有相应的调整,正确配置模板关键字的方式是参考版本发布的doc,如下图 在docs\api-reference下面有不同功能的API目录,如下图 各个A ...