20192312吴欣欣 实验三 《面向对象程序设计》实验报告
20192312 2020-2021-1 《数据结构与面向对象程序设计》实验三报告
课程:《程序设计与数据结构》
班级: 1923
姓名: 吴欣欣
学号:20192312
实验教师:王志强
实验日期:2020年10月13日
必修/选修: 必修
1.实验内容
下载安装并使用IDEA,完成下面实验(https://www.cnblogs.com/rocedu/p/6371315.html)。
-
初步掌握单元测试和TDD
-
理解并掌握面向对象三要素:封装、继承、多态
-
初步掌握UML建模
-
完成蓝墨云上 (1)-(5)实验。
2. 实验过程及结果
1.Myutil及MyutilTest的编写
package chap5;
public class MyUtil {
public static String percentage2fivegrade(int grade) {
if(grade<0)
return "Wrong!";
else if (grade < 60)
return "Fail!";
else if (grade < 70)
return "D";
else if (grade < 80)
return "C";
else if (grade < 90)
return "B";
else if (grade <= 100)
return "A";
else
return "Wrong!";
}
}
测试代码
import chap5.MyUtil;
public class MyUtilTest {
public static void main(String[] args) {
//测试边界情况
if(MyUtil.percentage2fivegrade(0) != "Fail!")
System.out.println("test failed 1!");
else if(MyUtil.percentage2fivegrade(60) != "D")
System.out.println("test failed 2!");
else if(MyUtil.percentage2fivegrade(70) != "C")
System.out.println("test failed 3!");
else if(MyUtil.percentage2fivegrade(80) != "B")
System.out.println("test failed 4!");
else if(MyUtil.percentage2fivegrade(90) != "A")
System.out.println("test failed 5!");
else if(MyUtil.percentage2fivegrade(100) != "A")
System.out.println("test failed 6!");
else
System.out.println("test passed!");
}
}
2.StringBuffer及StringBufferTest的编写
代码
public class MytestStringBuffer {
public static void main(String[] args) {
StringBuffer buffer=new StringBuffer(20);
buffer.append('S');
buffer.append("tringbuffer");
System.out.println(buffer.charAt(1));
System.out.println(buffer.capacity());
System.out.println(buffer.indexOf("tring12345"));
System.out.println("buffer="+buffer.toString());
System.out.println(buffer.length());
}
}
测试代码
import junit.framework.TestCase;
import org.junit.Test;
public class MytestStringBufferTest extends TestCase {
StringBuffer a=new StringBuffer("Stringbuffer");
StringBuffer b=new StringBuffer("StringbufferStringbuffer");
StringBuffer c=new StringBuffer("StringbufferStringbufferStringbuffer");
@Test
public void testcharAt() throws Exception{
assertEquals('S',a.charAt(0));
assertEquals('i',b.charAt(15));
assertEquals('g',c.charAt(29));
}
@Test
public void testcapacity() throws Exception{
assertEquals(28,a.capacity());
assertEquals(40,b.capacity());
assertEquals(52,c.capacity());
}
@Test
public void testindexOf() throws Exception{
assertEquals(0,a.indexOf("S"));
assertEquals(5,b.indexOf("gbu"));
assertEquals(4,c.indexOf("ng"));
}
@Test
public void testtoString() throws Exception{
assertEquals("Stringbuffer",a.toString());
assertEquals("StringbufferStringbuffer",b.toString());
assertEquals("StringbufferStringbufferStringbuffer",c.toString());
}
@Test
public void testlength() throws Exception{
assertEquals(12,a.length());
assertEquals(24,b.length());
assertEquals(36,c.length());
}
}
3.OCP原则和DIP原则的应用
代码
package week5;
abstract class Data {
abstract public void DisplayValue();
}
class Integer extends Data {
int value;
Integer() {
value=12;
}
public void DisplayValue(){
System.out.println (value);
}
}
class Byte extends Data {
byte value;
Byte() {
value=12;
}
public void DisplayValue(){
System.out.println (value);
}
}
class Boolean extends Data {
boolean value;
Boolean() {
value=20192312%6==2;
}
public void DisplayValue(){
System.out.println (value);
}}
// Pattern Classes
abstract class Factory {
abstract public Data CreateDataObject();
}
class IntFactory extends Factory {
public Data CreateDataObject(){
return new Integer();
}
}
class ByteFactory extends Factory {
public Data CreateDataObject(){
return new Byte();
}
}
class BoolenFactory extends Factory {
public Data CreateDataObject(){
return new Boolean();
}
}
//Client classes
class Document {
Data pd;
Document(Factory pf) {
pd = pf.CreateDataObject();
}
public void DisplayData() {
pd.DisplayValue();
}
}
//Test class
public class MyDoc {
static Document d;
public static void main(String[] args) {
d = new Document(new IntFactory());
d.DisplayData();
d = new Document(new ByteFactory());
d.DisplayData();
d = new Document(new BoolenFactory());
d.DisplayData();
}
}
4.以TDD的方式开发一个复数类Complex
package week5;
public class Complex {
private double RealPart;
private double ImagePart;
public Complex(){
RealPart=0;
ImagePart=0;
}
public Complex(double x, double y){
this.RealPart = x;
this.ImagePart = y;
}
public double getRealPart() {
return RealPart;
}
public void setRealPart(double x) {
RealPart = x;
}
public double getImagePart() {
return ImagePart;
}
public void setImagePart(double y) {
ImagePart = y;
}
public boolean equals(Object obj){
if(this == obj) {
return true;
}
if(!(obj instanceof Complex)) {
return false;
}
Complex complex = (Complex) obj;
if(complex.RealPart != ((Complex) obj).RealPart) {
return false;
}
if(complex.ImagePart != ((Complex) obj).ImagePart) {
return false;
}
return true;
}
public String toString() {
String string = "";
if (ImagePart > 0)
string = RealPart + "+" + ImagePart + "i";
if (ImagePart == 0)
string = RealPart + "";
if (ImagePart < 0)
string = RealPart + " " + ImagePart + "i";
return string;
}
Complex Add(Complex a) {
double b,c;
b = RealPart+a.RealPart;
c = ImagePart+a.ImagePart;
return new Complex(b,c);
}
Complex Sub(Complex a) {
double b,c;
b = RealPart-a.RealPart;
c = ImagePart-a.ImagePart;
return new Complex(b,c);
}
Complex Mul(Complex a) {
double b,c;
b = RealPart*a.RealPart-ImagePart*a.ImagePart;
c = RealPart*a.ImagePart+ImagePart*a.RealPart;
return new Complex(b,c);
}
Complex Div(Complex a) {
double d =a.RealPart*a.RealPart+a.ImagePart*a.ImagePart;
double b=0,c=0;
b = (RealPart*a.RealPart+ImagePart*a.ImagePart)/d;
c = (ImagePart*a.RealPart-RealPart*a.ImagePart)/d;
return new Complex(b,c);
}
}
测试代码
package week5;
import junit.framework.TestCase;
import org.junit.Test;
public class ComplexTest extends TestCase {
Complex a=new Complex(5,2);
Complex b=new Complex(1,1);
@Test
public void testAdd() throws Exception{
assertEquals(new Complex(6,3),a.Add(b));
}
@Test
public void testSub()throws Exception{
assertEquals(new Complex(4,1),a.Sub(b));
}
@Test
public void testMul()throws Exception{
assertEquals(new Complex(3,7),a.Mul(b));
}
@Test
public void testDiv()throws Exception{
assertEquals(new Complex(3.5,-1.5),a.Div(b));
}
@Test
public void testtoString()throws Exception{
assertEquals("5.0+2.0i",a.toString());
}
@Test
public void testequals()throws Exception{
assertEquals(true,a.equals(new Complex(5,2)));
}
}
5.UML建模
3. 实验过程中遇到的问题和解决过程
- 问题1:根据教程,没有找到响应的jar包
- 问题1解决方案:找到了junit-4.12.jar,但并不是在IDEA下的文件夹的,但按照教程添加路径后也可以使用。
其他(感悟、思考等)
了解了TDD方式,OCP和DIP原则,通过代码的扩充,更好地学会了编程。
参考资料
-
[《Java程序设计与数据结构教程(第二版)》学习指导](http://www.cnblogs.com/rocedu/p/5182332.html