20145331 《Java程序设计》第2次实验报告
20145331 《Java程序设计》第2次实验报告
实验二 Java面向对象程序设计
一、实验内容
1.初步掌握单元测试和TDD
2.理解并掌握面向对象三要素:封装、继承、多态
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% | 
20145331 《Java程序设计》第2次实验报告的更多相关文章
- 20145330《Java程序设计》第二次实验报告
		20145330<Java程序设计>第二次实验报告 实验二 Java面向对象程序设计 实验内容 1.初步掌握单元测试和TDD 2.理解并掌握面向对象三要素:封装.继承多态 3.初步掌握UM ... 
- 20145320《Java程序设计》第二次实验报告
		20145320<Java程序设计>第二次实验报告 北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1453 指导教师:娄嘉鹏 实验日期:2016.04.12 15: ... 
- 《Java程序设计》第二次实验报告
		20145220 <Java程序设计>第二次实验报告 课程:Java程序设计 指导教师:娄嘉鹏 实验日期:2016.04.12 实验名称:Java面向对象程序设计 实验内容 初步掌握单元测 ... 
- 20145333 《Java程序设计》第二次实验报告
		2014333 <Java程序设计>第二次实验报告 课程:Java程序设计 指导教师:娄嘉鹏 实验日期:2016.04.12 实验名称:Java面向对象程序设计 实验内容 初步掌握单元测试 ... 
- 20145240 《Java程序设计》第二次实验报告
		20145240 <Java程序设计>第二次实验报告 北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1452 指导教师:娄嘉鹏 实验日期:2016.04.12 实验 ... 
- Java程序设计第四次实验报告
		北京电子科技学院(BESTI) 实 验 报 告 课程:java程序设计 班级:1352 姓名:何伟钦 学号:20135223 成绩: 指导教师:娄嘉鹏 ... 
- 20145216史婧瑶《Java程序设计》第二次实验报告
		实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ... 
- 20145231《Java程序设计》第二次实验报告
		实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD: 理解并掌握面向对象三要素: 初步掌握UML建模: 熟悉S.O.L.I.D原则: 了解设计模式: 实验要求 实现并体会例子中代码的 ... 
- 20145211 《Java程序设计》实验报告五————Java网络编程及安全实验报告
		实验内容 1.掌握Socket程序的编写: 掌握密码技术的使用: 设计安全传输系统. 实验步骤 这一部分是与我的partner合作的,详见他的博客- [20145326 <Java程序设计> ... 
- 20175316 盛茂淞 2018-2019-2 《Java程序设计》实验一 Java开发环境的熟悉 实验报告
		20175316 盛茂淞 2018-2019-2 <Java程序设计>实验一 Java开发环境的熟悉 实验报告 一.实验要求 1.使用JDK编译.运行简单的Java程序: 2.使用IDEA ... 
随机推荐
- 170321、Spring+Quartz实现定时任务的配置方法
			Quartz是Java版开源定时调度器. 核心概念: Job 表示一个工作,要执行的具体内容.此接口中只有一个方法 void execute(JobExecutionContext context): ... 
- Dynamic Programming: Fibonacci
			Recently I watched an interesting video in youtube, the vbloger use calculating Fibonacci number to ... 
- 巨蟒python全栈开发-第11阶段 devops-git&&openpyxl2
			大纲 1.git分支 2.git tag 3.git 忽略文件 4.正则表达式 5.openpyxl写数据 6.openpyxl读数据 1.git分支 2.git tag 3.git 忽略文件 4.正 ... 
- 装饰器模式(Decorator)
			一.装饰模式介绍 装饰模式(decorator):表示动态的给一个对象添加一些新的功能(利用子类继承父类也可以实现),但是比生成子类方式更灵活. 也叫装饰者模式或者装饰器模式 例如:我们每个人身上穿的 ... 
- 2017 Multi-University Training Contest - Team 6—HDU6098&&HDU6106&&HDU6103
			HDU6098 Inversion 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6098 题目意思:题目很短,给出一个数组,下标从1开始,现在输出一个 ... 
- Netty 应用程序的一个一般准则:尽可能的重用 EventLoop,以减少线程创建所带来的开销。
			Netty 系列一(核心组件和实例). - JMCui - 博客园 https://www.cnblogs.com/jmcui/p/9154842.html 阅读目录 一.概念 二.核心组件 三.实例 ... 
- 使用 postMessage + iframe 实现跨域通信
			一.postMessage window.postMessage() 方法可以安全地实现跨源通信.通常,对于两个不同页面的脚本,只有当执行它们的页面位于具有相同的协议(通常为https),端口号(44 ... 
- Zipline Trading Calendars
			Trading Calendars What is a Trading Calendar? 什么是交易日历? A trading calendar represents the timing info ... 
- 剑指Offer——扑克牌顺子
			题目描述: LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他 ... 
- 【opencv安裝】opencv2和opencv3共存——安装opencv2和opencv3到指定目录
			安装 opencv2和opencv3共存会导致运行时问题,须分开 下载源码 cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/hom ... 
