20145331 《Java程序设计》第2次实验报告
2016-04-17 23:54
393 查看
20145331 《Java程序设计》第2次实验报告
实验二 Java面向对象程序设计
一、实验内容
1.初步掌握单元测试和TDD2.理解并掌握面向对象三要素:封装、继承、多态
3.初步掌握UML建模
4.熟悉S.O.L.I.D原则
5.了解设计模式
二、实验要求
1.没有Linux基础的同学建议先学习《Linux基础入门(新版)》《Vim编辑器》 课程2.完成实验、撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等)、解决办法(空洞的方法如“查网络”、“问同学”、“看书”等一律得0分)以及分析(从中可以得到什么启示,有什么收获,教训等)。报告可以参考范飞龙老师的指导
1.严禁抄袭,有该行为者实验成绩归零,并附加其他惩罚措施。
2.请大家先在实验楼中的~/Code目录中用自己的学号建立一个目录,代码和UML图要放到这个目录中,截图中没有学号的会要求重做,然后跟着下面的步骤练习。
三、实验步骤
(一)单元测试
(1)三种代码:伪代码、产品代码、测试代码。a.伪代码
百分制转五分制:
如果成绩小于60,转成“不及格”
如果成绩在60与70之间,转成“及格”
如果成绩在70与80之间,转成“中等”
如果成绩在80与90之间,转成“良好”
如果成绩在90与100之间,转成“优秀”
其他,转成“错误”
b.产品代码
public class MyUtil{ public static String percentage2fivegrade(int grade){ //如果成绩小于60,转成“不及格” if (grade < 60) return "不及格"; //如果成绩在60与70之间,转成“及格” else if (grade < 70) return "及格"; //如果成绩在70与80之间,转成“中等” else if (grade < 80) return "中等"; //如果成绩在80与90之间,转成“良好” else if (grade < 90) return "良好"; //如果成绩在90与100之间,转成“优秀” else if (grade < 100) return "优秀"; //其他,转成“错误” else return "错误"; } }
c.测试代码 输入是“50”
public class MyUtilTest { public static void main(String[] args) { // 百分制成绩是50时应该返回五级制的“不及格” if(MyUtil.percentage2fivegrade(50) != "不及格") System.out.println("test failed!"); else System.out.println("test passed!"); } }
(2)TDD(Test Driven Devlopment, 测试驱动开发):
•明确当前要完成的功能,记录成一个测试列表
•快速完成编写针对此功能的测试用例
•测试代码编译不通过
•编写产品代码
•测试通过
•对代码进行重构,并保证测试通过
•循环完成所有功能的开发
(二)面向对象三要素
(1)抽象即“求同存异、去粗取精”的过程。将若干事物中相同的部分进行剥离整理,并形成具有某特定功能的产品,这一过程即为抽象。过程抽象的结果是函数,数据抽象的结果是抽象数据类型其显而易见的好处是(在程序设计中)减少了代码大重复性,提高了效率。
(2)封装、继承与多态 面向对象(Object-Oriented)的三要素包括:封装、继承、多态。面向对象的思想涉及到软件开发的各个方面,如面向对象分析(OOA)、面向对象设计(OOD)、面向对象编程实现(OOP)。OOA根据抽象关键的问题域来分解系统,关注是什么(what)。OOD是一种提供符号设计系统的面向对象的实现过程,用非常接近问题域术语的方法把系统构造成“现实世界”的对象,关注怎么做(how),通过模型来实现功能规范。OOP则在设计的基础上用编程语言(如Java)编码。贯穿OOA、OOD和OOP的主线正是抽象。 OOD中建模会用图形化的建模语言UML(Unified Modeling Language),UML是一种通用的建模语言。
•封装:将与某一将数据与相关行为包装在一起以实现信息就隐藏,核心内容是模块化和信息隐藏,与此相伴的是接口的使用。
(三)设计模式初步
•SRP(Single Responsibility Principle,单一职责原则)•OCP(Open-Closed Principle,开放-封闭原则)
•LSP(Liskov Substitusion Principle,Liskov替换原则)
•ISP(Interface Segregation Principle,接口分离原则)
•DIP(Dependency Inversion Principle,依赖倒置原则)
(四)练习
使用TDD的方式设计关实现复数类Complex。伪代码:
1、复数的实部为0,虚部为0
2、复数的实部为0,虚部为对应数
3、复数的实部为对应数,实部为0
4、两参数分别为实部与虚部
5、实现两复数的加法、减法、乘法。
a.伪代码:
两个变量,实部RealPart和虚部ImaginaryPart。sh xu
复数相加=(实部+实部)+(虚部+虚部)i
复数相减=(实部-实部)+(虚部-虚部)i
打印一个复数
b.产品代码:
public class Complex { private int sh,xu; Complex(){ this.sh=0; this.xu=0; } Complex(int sh){ this.sh=sh; this.xu=0; } Complex(int sh,int xu){ this.sh=sh; this.xu=xu; } public void addFu(Complex p1,Complex p2){ System.out.println("这两个复数的和为:"); this.sh=p1.sh+p2.sh; this.xu=p1.xu+p2.xu; print(); } public void minusFu(Complex p1,Complex p2){ System.out.println("这两个复数的差为:"); this.sh=p1.sh-p2.sh; this.xu=p1.xu-p2.xu; print(); } public void outputFu(){ System.out.println("复数的值为:"); print(); } public void print(){ if(this.xu>0){ System.out.println(this.sh+"+"+this.xu+"i"); }else if(this.xu<0){ System.out.println(this.sh+""+this.xu+"i"); }else{ System.out.println(this.sh); } } }
C.测试代码:
package exp1; import java.util.Scanner; public class MyComplex { static int r; static int i; private double m; private double n; public static int getRealPart(int RealPart){ r = RealPart; return r; } public static int getImaginePart(int ImaginePart){ i = ImaginePart; return i; } public MyComplex(double m, double n) { this.m = m; this.n = n; } public MyComplex add(MyComplex c) { return new MyComplex(m + c.m, n + c.n); } public MyComplex minus(MyComplex c) { return new MyComplex(m - c.m, n - c.n); } public MyComplex multiply(MyComplex c) { return new MyComplex(m * c.m - n * c.n, m * c.n + n * c.m); } public String toString() { String rtr_str = ""; if (n > 0) rtr_str = "(" + m + "+" + n + "i" + ")"; if (n == 0) rtr_str = "(" + m + ")"; if (n < 0) rtr_str = "(" + m + n + "i" + ")"; return rtr_str; } }
(五)UML
UML图可以转化成Java代码PSP
步骤 | 耗时 | 百分比 |
---|---|---|
需求分析 | 30min | 16.7% |
设计 | 60min | 33.3% |
代码实现 | 45min | 25% |
测试 | 15min | 8.3% |
分析总结 | 30min | 16.7% |
相关文章推荐
- java第二次试验
- java中各种数据的默认值
- 20145301《Java程序设计》实验二报告:Java面向对象程序设计
- 强迫深究Java中的回调
- java之Socket模拟服务器端与客户端
- JAVA错误:The public type *** must be defined in its own file***
- 《Java程序设计》第6周学习总结
- springmvc对静态资源的访问
- 20145211 《Java程序设计》实验报告二:Java面向对象程序设计
- 20145316《Java程序设计》实验二报告
- 20145316《Java程序设计》第七周学习总结
- 20145303 实验二 Java面向对象程序设计
- Could not find action or result
- 《Java程序设计》第7周学习总结
- java设计模式--原始模型模式
- 20145101 《Java程序设计》第7周学习总结
- Java中创建线程的两种方式
- Java学习笔记一:基本语法:类和对象的介绍、数组、引用类型
- 20144303 《Java程序设计》第二次实验实验报告
- 《Java程序设计》第7周学习总结