20202309葛鹏宇《数据结构与面向对象程序设计》实验三实验报告

# 20202309 2021-2022-1 《数据结构与面向对象程序设计》实验3报告

课程:《程序设计与数据结构》
班级: 2023
姓名: 葛鹏宇
学号:20202309实验教师:王志强 实验日期:2020年10月7日
必修/选修: 必修

## 1.实验内容

(1)初步掌握单元测试和TDD

(2)理解并掌握面向对象三要素:封装、继承、多态
(3)初步掌握UML建模
(4)完成蓝墨云上 (1)-(5)实验。

 

## 2. 实验过程及结果

1)初步掌握单元测试和TDD

单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如Java里单元指一个类。

先写测试代码,然后再写产品代码的开发方法叫“测试驱动开发”(TDD)。TDD的一般步骤如下:明确当前要完成的功能,记录成一个测试列表;快速完成编写针对此功能的测试用例;测试代码编译不通过(没产品代码呢);编写产品代码;测试通过;对代码进行重构,并保证测试通过(重构下次实验练习);循环完成所有功能的开发。基于TDD,我们不会出现过度设计的情况,需求通过测试用例表达出来了,我们的产品代码只要让测试通过就可以了。

 

2)理解并掌握面向对象三要素:封装、继承、多态

封装(Encapsulation)是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。

继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

多态是同一个行为具有多个不同表现形式或形态的能力。多态就是同一个接口,使用不同的实例而执行不同操作。

封装继承:

 

 

 

 

 

 

 

多态:

 

 

 

 

 

 

 

3)初步掌握UML建模

StarUML是一种生成类图和其他类型的统一建模语言(UML)图表的工具。

 

4)完成蓝墨云上 (1)-(5)实验

 

实验一:

任务详情

参考 http://www.cnblogs.com/rocedu/p/6371315.html#SECUNITTEST

参考http://www.cnblogs.com/rocedu/p/6736847.html

提交最后三个测试用例都通过的截图,截图上要有画图加水印,输入自己的学号。

 

 

 

 

 

 

实验二:

任务详情

参考积极主动敲代码,使用JUnit学习Java(http://www.cnblogs.com/rocedu/p/4837092.html)

参考http://www.cnblogs.com/rocedu/p/6736847.html

以 TDD的方式研究学习StringBuffer,提交你的单元测试用例和测试通过的截图,截图要加上学号水印。

 

 

 

 

 

实验三:

任务详情

实验三 Java面向对象程序设计(http://www.cnblogs.com/rocedu/p/4472842.html)

参考http://www.cnblogs.com/rocedu/p/6736847.html

对设计模式示例进行扩充,体会OCP原则和DIP原则的应用,初步理解设计模式

用自己的学号%6进行取余运算,根据结果进行代码扩充:

0:让系统支持Byte类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印

1:让系统支持Short类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印

2:让系统支持Boolean类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印

3:让系统支持Long类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印

4:让系统支持Float类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印

5:让系统支持Double类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印

 

  1 abstract class Data {
  2 
  3     abstract public void DisplayValue();
  4 
  5 }
  6 
  7 class Byte extends Data {
  8 
  9     byte value;
 10 
 11     Byte() {
 12 
 13         value=20202309%6;
 14 
 15     }
 16 
 17     public void DisplayValue(){
 18 
 19         System.out.println (value);
 20 
 21     }
 22 
 23 }
 24 
 25 class Short extends Data {
 26 
 27     short value;
 28 
 29     Short() {
 30 
 31         value=20202309%6;
 32 
 33     }
 34 
 35     public void DisplayValue(){
 36 
 37         System.out.println (value);
 38 
 39     }
 40 
 41 }
 42 
 43 class Boolean extends Data {
 44 
 45     boolean value;
 46 
 47     Boolean() {
 48 
 49         value=20202309%6==9;
 50 
 51     }
 52 
 53     public void DisplayValue(){
 54 
 55         System.out.println (value);
 56 
 57     }
 58 
 59 }
 60 
 61 class Long extends Data {
 62 
 63     long value;
 64 
 65     Long() {
 66 
 67         value=20202309;
 68 
 69     }
 70 
 71     public void DisplayValue(){
 72 
 73         System.out.println (value);
 74 
 75     }
 76 
 77 }
 78 
 79 class Float extends Data {
 80 
 81     float value;
 82 
 83     Float() {
 84 
 85         value=20202309%6;
 86 
 87     }
 88 
 89     public void DisplayValue(){
 90 
 91         System.out.println (value);
 92 
 93     }
 94 
 95 }
 96 
 97 class Double extends Data {
 98 
 99     double value;
100 
101     Double() {
102 
103         value=20202309%6;
104 
105     }
106 
107     public void DisplayValue(){
108 
109         System.out.println (value);
110 
111     }
112 
113 }
114 
115 // Pattern Classes
116 
117 abstract class Factory {
118 
119     abstract public Data CreateDataObject();
120 
121 }
122 
123  
124 
125 class ByteFactory extends Factory {
126 
127     public Data CreateDataObject(){
128 
129         return new Byte();
130 
131     }
132 
133 }
134 
135 class ShortFactory extends Factory {
136 
137     public Data CreateDataObject(){
138 
139         return new Short();
140 
141     }
142 
143 }
144 
145 class BoolenFactory extends Factory {
146 
147     public Data CreateDataObject(){
148 
149         return new Boolean();
150 
151     }
152 
153 }
154 
155 class LongFactory extends Factory {
156 
157     public Data CreateDataObject(){
158 
159         return new Long();
160 
161     }
162 
163 }
164 
165 class FloatFactory extends Factory {
166 
167     public Data CreateDataObject(){
168 
169         return new Float();
170 
171     }
172 
173 }
174 
175 class DoubletFactory extends Factory {
176 
177     public Data CreateDataObject(){
178 
179         return new Double();
180 
181     }
182 
183 }
184 
185 //Client classes
186 
187 class Document {
188 
189     Data x;
190 
191     Document(Factory q){
192 
193         x = q.CreateDataObject();
194 
195     }
196 
197     public void DisplayData(){
198 
199         x.DisplayValue();
200 
201     }
202 
203 }
204 
205 //Test class
206 
207 public class MyDoc {
208 
209     static Document a,b,c,d,e,f;
210 
211     public static void main(String[] args) {
212 
213         a = new Document(new ByteFactory());
214 
215         a.DisplayData();
216 
217         b = new Document(new ShortFactory());
218 
219         b.DisplayData();
220 
221         c = new Document(new BoolenFactory());
222 
223         c.DisplayData();
224 
225         d = new Document(new LongFactory());
226 
227         d.DisplayData();
228 
229         e = new Document(new FloatFactory());
230 
231         e.DisplayData();
232 
233         f = new Document(new DoubletFactory());
234 
235         f.DisplayData();
236 
237     }
238 
239 }

 

 

实验四:

任务详情

提交:单元测试代码和运行成功截图及码云上代码链接,截图要加上学号水印

参考http://www.cnblogs.com/rocedu/p/6736847.html

任务:以TDD的方式开发一个复数类Complex,要求如下:

// 定义属性并生成getter,setter

double RealPart;

double ImagePart;

 

码云链接:

https://gitee.com/gpy11111/gpy20202309./blob/master/Complex

https://gitee.com/gpy11111/gpy20202309./blob/master/ComplexTest

 

 

 

实验五:

任务详情

使用[WhiteStarUML](http://whitestaruml.sourceforge.net/)对实验二中的代码进行建模,发类图的截图,加上学号水印。

参考http://www.cnblogs.com/rocedu/p/6736847.html

类图中只少两个类。

 

 

 

## 3. 实验过程中遇到的问题和解决过程

- 问题1:云班课实验二中,在按照博客园idea简易教程安装完成junit后,@test语句和后面的方法名红色字体没有变化。

- 问题1解决方案:在建立test文件时没有注意到需要通过make dictionaryasàtest source root,而是直接在src文件夹中建立了test文件,在按照上述方法建立test文件后红色消失,程序可以正常运行。

- 问题2: 使用staruml时箭头方向和箭头种类选用错误。
- 问题2解决方案: 使用staruml建模次数不多,操作不够熟练,通过网上学习不同箭头的含义,以及建立类后不同类间怎么连接箭头,完成了对Data.java文件的建模。

## 其他(感悟、思考等)
单元测试和TDD能很好的检测程序是否运行有不妥之处,我可以将这种方法利用在以后编程的程序中,让自己的程序更加合理。Uml建模能将代码图示化地反映出来,比起埋在一堆文字中去看代码,uml能让人更清晰地读懂代码。这次实验任务多且复杂,很多地方我还不了解一些操作的方法,耗费了许多时间在网上查找资料,但是通过自己动手学习也收获了很多Java编程的基本技巧。


## 参考资料
-  [《Java程序设计与数据结构教程(第四版)》]

 

posted @ 2021-10-12 12:47  20202309葛鹏宇  阅读(42)  评论(0编辑  收藏  举报