前言
这段时间,我们学习了接口、泛型、Builder、Bridge Patte、软件测试技术、Set、Map、链表、Lambda、Stream、JavaFX等内容。
接口: 接口是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。
接口不能用于实例化对象。
接口没有构造方法。
接口中所有的方法必须是抽象方法。
接口不能包含成员变量,除了 static 和 final 变量。
接口不是被类继承了,而是要被类实现。
接口支持多继承。
泛型:泛型有三种使用方式,分别为:泛型类、泛型接口、泛型方法。
泛型类型用于类的定义中,被称为泛型类。通过泛型可以完成对一组类的操作对外开放相同的接口。
泛型类,是在实例化类的时候指明泛型的具体类型;泛型方法,是在调用方法的时候指明泛型的具体类型。
建造者(Builder)模式:使用场景:多个部件或者零件,都可以装配到一个对象中,但是产生的运行结果又相同。产品类非常复杂,或者产品类中调用顺序不同产生了不同的作用。初始化一个对象特别复杂,如使用多个构造方法,或者说有很多参数,并且都有默认值时。
Bridge Pattern(桥接模式):将抽象部分与它的实现部分分离,使它们都可以独立地变化。
软件测试技术:
黑盒测试BlackBox Testing
Input-> Process-> Output (proccess看不见)
测试用例 TestCase
(1) 输入数据
(2) 预期输出结果
代码开发之后进行测试用例设计,进行测试:UDD UseCase
先设计测试用例,开发程序,然后测试:TDD
Set:Set是一种叫做集合的数据结构
集合是由一组无序且唯一的项组成的
Set,类似于数组,但是成员的值都是唯一的,没有重复的值
Set本身是一个构造函数,用来生成Set数据结构的
Map:Map是一种叫做字典的数据结构
集合和字典的区别:
共同点:集合,字典可以存储不重复的值
不同点:集合是以[值,值]的形式存储元素,字典是以[键,值]的形式存储
Lambda表达式:
可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定表达式返回了一个数值。
Stream :是处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。
直接阅读代码的字面意思即可完美展示无关逻辑方式的语义
Stream流把真正的函数式编程风格引入到Java中
惰性求值,流在中间处理过程中,只是对操作进行了记录,并不会立即执行,需要等到执行终止操作的时候才会进行实际的计算。
不会修改原来的数据源,它会将操作后的数据保存到另外一个对象中。
设计与分析
在该题目中,需要学会运用抽象类、继承与多态、接口。
其中Circle类、Rectangle类、Trapezoid类、Triangle类继承于Shape类。子类需要继承抽象类中的抽象方法,每个子类的实现方法不同,体现了多态的意义。例如:
Comparable 接口的应用:
需要实现 Comparable 接口中的 CompareTo()方法
to string方法:
ArrayList的应用:
ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。ArrayList 继承了 AbstractList ,并实现了 List 接口。
在图形类的改进题中,需要多定义几个ArrayList对象。
链表:
链表是一个线性结构,但是存储的数据可以是非线性的。链表由一个个子节点构成,每个节点有两个部分:数据域和指针域,数据域就是实际存储数据的,指针域可以有一个和两个,单链表就是单个指针域指向后一个节点,双链表就是节点有两个指针域,分别指向前一个和后一个节点。
list方法 遍历思想:从最小不间断的考虑到最大--->链表为0,1,2,3...n个节点分别要做什么
点与线(类设计):
在该题目中,需要设计Point类与Line类,体现了JAVA设计原则中的单一职责原则。
其中,输出格式保留两位小数可以用String类中的方法。
点线面问题重构(继承与多态):
在该题中,需要对上一题中的类设计进行改进,添加抽象类Element,并定义一个Element类的引用,分别使用该引用调用以上四个对象的display()方法,从而实现多态特性。
点线面问题再重构(容器类)
在点线面问题重构(继承与多态)的基础上,本题添加了容器概念ArrayList的应用,添加了GeometryObject类。
采坑心得
在这些程序设计题目中,曾遇到了许多困难,例如在图形类设计中,我开始时并未注意to string方法,导致输出结果乱码,后面再对to string方法进行补充,问题才得以解决。
还有Comparable 接口中的 CompareTo()方法,一开始并不清楚Compare To方法的使用,后面查询资料后得以了解。