20145225《Java程序设计》

实验二 Java面向对象程序设计

实验报告

实验内容

  1. 初步掌握单元测试和TDD
  2. 理解并掌握面向对象三要素:封装、继承、多态
  3. 初步掌握UML建模
  4. 熟悉S.O.L.I.D原则
  5. 了解设计模式

实验步骤

(一)单元测试

(1) 三种代码

  • 伪代码
  • 产品代码
  • 测试代码

MyUtil.java如下:

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 "错误";
}
}

MyUtilTest.java的测试模块:

 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!");
}
}

更改之后的代码:

public class MyUtil{
public static String percentage2fivegrade(int grade){
//如果成绩小于0,转成“错误”
if ((grade < 0))
return "错误";
//如果成绩小于60,转成“不及格”
else 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 "优秀";
//如果成绩大于100,转成“错误”
else
return "错误";
}
}

(2) tdd(test driven devlopment, 测试驱动开发):

  • 明确当前要完成的功能,记录成一个测试列表
  • 快速完成编写针对此功能的测试用例
  • 测试代码编译不通过(没产品代码呢)
  • 编写产品代码
  • 测试通过
  • 对代码进行重构,并保证测试通过(重构下次实验练习)
  • 循环完成所有功能的开发

测试结果出现了一个绿条(green bar),说明测试通过了。

(二)面向对象三要素

(1)抽象

抽象一词的本意是指人在认识思维活动中对事物表象因素的舍弃和对本质因素的抽取。抽象是人类认识复杂事物和现象时经常使用的思维工具,抽象思维能力在程序设计中非常重要,"去粗取精、化繁为简、由表及里、异中求同"的抽象能力很大程度上决定了程序员的程序设计能力。

抽象就是抽出事物的本质特征而暂时不考虑他们的细节。对于复杂系统问题人们借助分层次抽象的方法进行问题求解;在抽象的最高层,可以使用问题环境的语言,以概括的方式叙述问题的解。在抽象的较低层,则采用过程化的方式进行描述。在描述问题解时,使用面向问题和面向实现的术语。

程序设计中,抽象包括两个方面,一是过程抽象,二是数据抽象。

(2)封装、继承与多态

面向对象(Object-Oriented)的三要素包括:封装、继承、多态。面向对象的思想涉及到软件开发的各个方面,如面向对象分析(OOA)、面向对象设计(OOD)、面向对象编程实现(OOP)。OOA根据抽象关键的问题域来分解系统,关注是什么(what)。OOD是一种提供符号设计系统的面向对象的实现过程,用非常接近问题域术语的方法把系统构造成“现实世界”的对象,关注怎么做(how),通过模型来实现功能规范。OOP则在设计的基础上用编程语言(如Java)编码。

封装:将与某一将数据与相关行为包装在一起以实现信息就隐藏,核心内容是模块化和信息隐藏,与此相伴的是接口的使用。

封装示例:

public class Dog {
private String color;
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public String bark(){
return "汪汪";
}
public String toString(){
return "The Dog's color is " + this.getColor() +", and it shouts "+ this.bark() + "!";
}
}

检测示例:

public class DogTest {
public static void main(String[] args) {
Dog d = new Dog();
d.setColor("Yellow");
getInfo(d);
}
public static void getInfo(Dog d) {
System.out.println(d.toString());
}
}

运行结果如下:

Dog类:

(三)设计模式

(1)S.O.L.I.D原则

SRP(Single Responsibility Principle,单一职责原则)

对象提供单一职责的高度封装,对象的改变仅仅依赖于单一职责的改变

OCP(Open-Closed Principle,开放-封闭原则)

即对扩充开放(功能可增加),对修改封闭(源代码不可改动)

OCP实现手段:(1)抽象和继承,(2)面向接口编程

LSP(Liskov Substitusion Principle,Liskov替换原则)

子类必须可以被其基类所代,父类型对象可以被子类型对象所取代

ISP(Interface Segregation Principle,接口分离原则)

客户不应该依赖他们并未使用的接口

DIP(Dependency Inversion Principle,依赖倒置原则)

(2)模式与设计模式

模式是某外在环境(Context)下﹐对特定问题(Problem)的惯用解决之道。其中最重要的是设计模式。

(3)设计模式实示例

设计模式四个基本元素

Pattern name:描述模式,便于交流,存档

Problem:描述何处应用该模式

Solution:描述一个设计的组成元素,不针对特例

Consequence:应用该模式的结果和权衡

(四)练习

  • 写一个类测试编写的复数类的方法
  • 构造函数,将实部,虚部都置为0
  • 构造函数,创建复数对象的同时完成复数的实部,虚部的初始化
  • 设置实部,设置虚部:复数相加、复数相减、复数相乘

代码如下:

package shiyan2;
public class ComplexNumber
{
double r,i;
public ComplexNumber(){
this.r=0;
this.i=0;
}
public ComplexNumber(double r, double i){
this.r=r;
this.i=i;
}
public double GetRealPart(){
return this.r;
}
public double GetImaginaryPart(){
return this.i;
}
public void SetRealPart(double r){
this.r=r;
}
public void SetImaginaryPart(double i){
this.i=i;
}
public ComplexNumber ComplexAdd(ComplexNumber a,ComplexNumber b)
{
ComplexNumber temp = new ComplexNumber();
temp.r = a.r + b.r;
temp.i = a.i + b.i;
return temp;
}
public ComplexNumber ComplexMinus(ComplexNumber a,ComplexNumber b)
{
ComplexNumber temp =new ComplexNumber();
temp.r=a.r - b.r;
temp.i =a.i - b.i;
return temp;
}
public ComplexNumber ComplexMulti(ComplexNumber a,ComplexNumber b)
{
ComplexNumber temp = new ComplexNumber();
temp.r = a.r*b.r-a.i*b.i;
temp.i = a.r*b.i+a.i*b.r;
return temp;
}
public void ComplexAdd(ComplexNumber c){
this.r=this.r+c.r;
this.i=this.i+c.i;
}
public void ComplexMinus(ComplexNumber c){
this.r=this.r-c.r;
this.i=this.i-c.i;
}
public void ComplexMulti(ComplexNumber c)
{
double temp=this.r;
this.r=this.r*c.r-this.i*c.i;
this.i =temp*c.i+this.i*c.r;
}
public void printComplexNumber(){
System.out.print(""+this.r+"+"+this.i+"i");
}
}

测试代码如下:

package shiyan2;
public class txet extends ComplexNumber{
public static void main(String[] args) /
{
ComplexNumber cc=new ComplexNumber(4,5);
cc.printComplexNumber();
System.out.println();
ComplexNumber dd=new ComplexNumber(2,4);
dd.printComplexNumber();
System.out.println();
System.out.println("-----------------");
System.out.println();
ComplexNumber ff=new ComplexNumber(); ff=ff.ComplexAdd(cc,dd);
ff.printComplexNumber();
System.out.println();
ff=ff.ComplexMinus(cc,dd);
ff.printComplexNumber();
System.out.println();
ff=ff.ComplexMulti(cc,dd);
ff.printComplexNumber();
System.out.println(); System.out.println("-----------------"); }
}

运行结果:

本次实验的 PSP(Personal Software Process) 时间:

步骤 耗时 百分比
需求分析 30min 15/15
设 计 40min 17.1%
代码实现 55min 22.9%
测 试 20min 11.4%
分析总结 30min 17.1%

参考资料

20145225唐振远 实验二 "Java面向对象程序设计"的更多相关文章

  1. 20145214实验二 Java面向对象程序设计

    20145214实验二 Java面向对象程序设计 初步掌握单元测试和TDD 三种代码 伪代码 `百分制转五分制:` `如果成绩小于60,转成"不及格"` `如果成绩在60与70之间 ...

  2. 实验二 Java面向对象程序设计

    实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...

  3. 20145213《Java程序设计》实验二Java面向对象程序设计实验报告

    20145213<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装,继承,多态 初步掌握UML建模 熟悉S.O. ...

  4. 20145206《Java程序设计》实验二Java面向对象程序设计实验报告

    20145206<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O. ...

  5. 20145308刘昊阳 《Java程序设计》实验二 Java面向对象程序设计 实验报告

    20145308刘昊阳 <Java程序设计>实验二 Java面向对象程序设计 实验报告 实验名称 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面相对象三要素:封 ...

  6. 20145113 实验二 Java面向对象程序设计

    20145113 实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 1.初 ...

  7. JAVA课程实验报告 实验二 Java面向对象程序设计

    北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序设计  班级:1353  姓名:韩玉琪  学号:20135317 成绩:             指导教师:娄嘉 ...

  8. 20145208 实验二 Java面向对象程序设计

    20145208 实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验步 ...

  9. 20162311 实验二 Java面向对象程序设计 实验报告

    实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...

随机推荐

  1. Android学习笔记(六)

    活动的生命周期 Android中的活动是可以重叠的,每启动一个新的活动,就会覆盖在原活动之上,然后点击Back键就会销毁最上面的活动. Android是使用任务(Task)来管理活动的,一个任务就是一 ...

  2. spring java 获取webapp下文件路径

    spring java 获取webapp下文件路径 @RequestMapping("/act/worldcup_schedule_time/imgdownload") @Resp ...

  3. mac与php环境

    一.目录 apache目录:/etc/apache2/ mysql目录:/usr/local/mysql/ 站点目录:/Library/WebServer/Documents/ 二.mac系统给文件夹 ...

  4. 用于所有Windows驱动程序开发者的概念

    用户模式和内核模式 虚拟地址空间 设备节点和设备堆栈 I/O 请求数据包 驱动程序堆栈 微型驱动程序和驱动程序对 Windows 驱动程序工具包中的头文件 为不同版本的 Windows 编写驱动程序

  5. 如何用pdb进行python调试

    本文章讲述了如何用pdb进行python调试讲解. 当手边 没有IDE,面对着python调试犯愁时,你就可以参考下本文;(pdb 命令调试) 参 考:http://docs.python.org/l ...

  6. 二模01day1解题报告

    T1.音量调节(changingsounds) 有n个物品的背包(有点不一样,每个物品必须取),给出初始价值,物品价值可正可负(就是两种选择嘛),求可能的最大价值,不可能(<0或>maxs ...

  7. java 的SYSTEM类【转】

    java 的SYSTEM类[转] Posted on 2009-12-03 16:46 火之光 阅读(728) 评论(0) 编辑 收藏 System类代表系统,系统级的很多属性和控制方法都放置在该类的 ...

  8. ssh IP打通,hadoop启动失败

    ssh ip 无密码打通,hadoop启动失败 报错为:host'主机名' can't be established. 纠结了接近一个多小时 之后必须ssh 主机名 , yes一下,发现hadoop能 ...

  9. 错误:Unsupported major.minor version 51.0(jdk版本错误)的解决方法

    错误:Unsupported major.minor version 51.0(jdk版本错误)的解决方法 java.lang.UnsupportedClassVersionError: org/ap ...

  10. svn 命令行创建和删除 分支和tags

    创建分支 svn cp -m "create branch" http://svn_server/xxx_repository/trunk http://svn_server/xx ...