20202312实验三《数据结构与面向对象程序设计》实验报告
# 20202303 2021-2022-1 《数据结构与面向对象程序设计》实验三报告
课程:《程序设计与数据结构》
班级: 2023
姓名:郭威
学号:20202312
实验教师:王志强
实验日期:2021年10月11日
必修/选修: 必修
## 1.实验内容
1. 初步掌握单元测试和TDD
2. 理解并掌握面向对象三要素:封装、继承、多态
3. 初步掌握UML建模
4. 完成蓝墨云上 (1)-(5)实验。
## 2. 实验过程及结果
1.初步掌握单元测试和TDD
对于在IDEA上进行的单元测试,其实是有点难度的,不过在相关资料面前,按步骤去写完成正常测试,错误测试与边界测试即可,整体还是较为基础的;
在进行TDD测试时,首先我们需要下载插件JUnit,然后先写好测试代码,再完成产品代码,测试用例表达了对产品代码的需求,只要产品代码可以通过测试就可以了
2.理解并掌握面向对象三要素:封装、继承、多态
2.1
封装:封装就是将数据与相关行为包装在一起以实现信息隐藏,既可以隐藏类的实现细节,又可以避免对类中属性的直接操作。封装实际上控制用户对类的修改和访问数据的程度,只能够通过对象提供服务的那些方法与程序其它部分进行交互,接口是封装的准确描述手段。简单直白来说,封装就是打包,将一些相关联的数据(字段),或是一些类似的行为(方法),打包在一起,形成一个对外独立的隐蔽的可复用的Java类。
例子:
public class Husband { /* * 对属性的封装 * 一个人的姓名、性别、年龄、妻子都是这个人的私有属性 */ private String name ; private String sex ; private int age ; private Wife wife; /* * setter()、getter()是该对象对外开发的接口 */ public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public void setWife(Wife wife) { this.wife = wife; } }
封装的主要作用:1.良好的封装能够减少耦合。2、类内部的结构可以自由修改。 3、可以对成员进行更精确的控制。4、隐藏信息,实现细节。
2.2
继承:继承是从已有类派生一个新类的过程,通过对某一个类的继承产生一个新的子类,子类既有从某个类中继承下来的功能,又可以自行定义自己的变量和方法,产生新的功能。继承是实现软件可重用的根基,是提高软件系统的可扩展性与可维护性的主要途径,继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。也就是说,希望可以“复用代码”。
例子:
正如上面所说的例子,无论是丈夫还是妻子,都有共同的特点,我们可以建立人的一类,从人那里继承来的这些属性和行为。
继承的特点:1、子类拥有父类非private的属性和方法。 2、子类可以拥有自己属性和方法,即子类可以对父类进行扩展。3、子类可以用自己的方式实现父类的方法。
2.3
多态:多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。
例子:
public class Wine {
public void fun1(){
System.out.println("Wine 的Fun.....");
fun2();
}
public void fun2(){
System.out.println("Wine 的Fun2...");
}
}
public class JNC extends Wine{
/**
* @desc 子类重载父类方法
* 父类中不存在该方法,向上转型后,父类是不能引用该方法的
* @param a
* @return void
*/
public void fun1(String a){
System.out.println("JNC 的 Fun1...");
fun2();
}
/**
* 子类重写父类方法
* 指向子类的父类引用调用fun2时,必定是调用该方法
*/
public void fun2(){
System.out.println("JNC 的Fun2...");
}
}
public class Test {
public static void main(String[] args) {
Wine a = new JNC();
a.fun1();
}
}
-------------------------------------------------
多态实现条件:继承、重写、向上转型。
3. 初步掌握UML建模
在UML类图中,每个类可能包含三部分内容:类名、属性、操作(方法)。UML类图有属于自己的语法,变量的类型名在变量名的后面,它们之间用冒号作为分隔符,方法的+和-表明可见性。箭头指向,表明一个类知道并以某种方法使用另一个类(调用)。其中对于UML的建模需要自己去思考以及学习。
详见云班课测试(5)
4.完成蓝墨云上 (1)-(5)实验。
测试结果(1)-(4)如下
(1)
(2)
(3)
(4)
(5)
## 3. 实验过程中遇到的问题和解决过程
- 问题1:自己在开始写的时候对创建类及其方法不是很懂,导致写代码时不知道该怎么下手。
- 问题1解决方案:在后面上课时老师讲解了一些类及其相关方法的创建,自己对此有了一定了解。
- 问题2:自己对面对对象三要素继承,封装,多态很不了解,如何使用也不是很了解。
- 问题2解决方案:老师上课讲解了一些三要素基本知识点,自己开始有了一定了解。
## 其他(感悟、思考等)
自己对于Java需要在课后多加练习,增加对其掌握与熟练程度。
## 参考资料
- [《Java程序设计与数据结构教程(第九版)》]
- https://blog.csdn.net/weixin_33074843/article/details/114245707