java第二次实验报告20135231

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

                    20135231 何佳

实验要求:

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

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

3. 初步掌握UML建模

4. 熟悉S.O.L.I.D原则

5. 了解设计模式

实验内容:

(一)单元测试

(二)面向对象三要素

(三)设计模式初步

(四)练习

实验步骤:

(一)单元测试

    (1) 三种代码

编程是智力活动,不是打字,编程前要把干什么、如何干想清楚才能把程序写对、写好。与目前不少同学一说编程就打开编辑器写代码不同,我希望同学们养成一个习惯,当你们想用程序解决问题时,要会写三种码:伪代码、产品代码、测试代码。

伪代码与具体编程语言无关,,伪代码从意图层面来解决问题,最终,伪代码产品代码最自然的、最好的注释。

 代码为:

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

  }

}

public class MyUtilTest

{

  public static void main(String[] args)

  { //测试正常情况

    if(MyUtil.percentage2fivegrade(55) != "不及格")

      System.out.println("test failed!");

    else if(MyUtil.percentage2fivegrade(65) != "及格")

      System.out.println("test failed!");

    else if(MyUtil.percentage2fivegrade(75) != "中等")

      System.out.println("test failed!");

    else if(MyUtil.percentage2fivegrade(85) != "良好")

      System.out.println("test failed!");

    else if(MyUtil.percentage2fivegrade(95) != "优秀")

      System.out.println("test failed!");

    else System.out.println("test passed!");

  }

}

  (2) TDD(Test Driven Devlopment, 测试驱动开发)

定义:先写测试代码,然后再写产品代码的开发方法

TDD一般步骤如下:

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

(二)面向对象三要素

   (1)抽象

抽象一词的本意是指人在认识思维活动中对事物表象因素的舍弃和对本质因素的抽取。抽象是人类认识复杂事物和现象时经常使用的思维工具,抽象思维能力在程序设计中非常重要,"去粗取精、化繁为简、由表及里、异中求同"的抽象能力很大程度上决定了程序员的程序设计能力。抽象就是抽出事物的本质特征而暂时不考虑他们的细节。对于复杂系统问题人们借助分层次抽象的方法进行问题求解;在抽象的最高层,可以使用问题环境的语言,以概括的方式叙述问题的解。在抽象的较低层,则采用过程化的方式进行描述。在描述问题解时,使用面向问题和面向实现的术语。 程序设计中,抽象包括两个方面,一是过程抽象,二是数据抽象。

(2)封装、继承与多态

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

 

(三)设计模式初步

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

面向对象三要素是“封装、继承、多态”,任何面向对象编程语言都会在语法上支持这三要素。如何借助抽象思维用好三要素特别是多态还是非常困难的,S.O.L.I.D类设计原则是一个很好的指导:

  • SRP(Single Responsibility Principle,单一职责原则)
  • OCP(Open-Closed Principle,开放-封闭原则)
  • LSP(Liskov Substitusion Principle,Liskov替换原则)
  • ISP(Interface Segregation Principle,接口分离原则)
  • DIP(Dependency Inversion Principle,依赖倒置原则)

OCP是OOD中最重要的一个原则,OCP的内容是:

  • software entities (class, modules, function, etc.) should open for extension,but closed for modification.
  • 软件实体(类,模块,函数等)应该对扩充开放,对修改封闭。

对扩充开放(Open For Extension )要求软件模块的行为必须是可以扩充的,在应用需求改变或需要满足新的应用需求时,我们要让模块以不同的方式工作; 对修改封闭(Closed for Modification )要求模块的源代码是不可改动的,任何人都不许修改已有模块的源代码。 基于OCP,利用面向对象中的多态性(Polymorphic),更灵活地处理变更拥抱变化,OCP可以用以下手段实现:(1)抽象和继承,(2)面向接口编程。

SRP的内容是:

  • There should never be more than one reason for a class to change
  • 决不要有一个以上的理由修改一个类

对象提供单一职责的高度封装,对象的改变仅仅依赖于单一职责的改变,它基于软件设计中的高内聚性定义。

LSP的内容是:

  • Subtypes must be substitutable for their base types
  • Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it
  • 子类必须可以被其基类所代
  • 使用指向基类的指针或引用的函数,必须能够在不知道具体派生类对象类型的情况下使用它

ISP的内容是:

  • Clients should not be forced to depend upon interfaces that they do not use
  • 客户不应该依赖他们并未使用的接口

DIP的内容是:

  • High level modules should not depend upon low level modules. Both should depend upon abstractions
  • Abstractions should not depend upon details. Details should depend upon abstractions
  • 高层模块不应该依赖于低层模块。二者都应该依赖于抽象
  • 抽象不应该依赖于细节。细节应该依赖于抽象

  (2)模式与设计模式

模式是某外在环境(Context) 下﹐对特定问题(Problem)的惯用解决之道(Solution)。模式必须使得问题明晰,阐明为什么用它来求解问题,以及在什么情况下有用,什么情况下不能起作用,每个模式因其重复性从而可被复用,本身有自己的名字,有可传授性,能移植到不同情景下。模式可以看作对一个问题可复用的专家级解决方法。 计算机科学中有很多模式:

  • GRASP模式
  • 分析模式
  • 软件体系结构模式
  • 设计模式:创建型,结构型,行为型
  • 管理模式: The Manager Pool 实现模式
  • 界面设计交互模式

这里面最重要的是设计模式,在面向对象中设计模式的地位可以和面向过程编程中的数据结构的地位相当。

   (3)设计模式实示例

设计模式(design pattern)提供一个用于细化软件系统的子系统或组件,或它们之间的关系图,它描述通信组件的公共再现结构,通信组件可以解决特定语境中的一个设计问题。 如图,随着系统中对象的数量增多,对象之间的交互成指数增长,设计模式可以帮我们以最好的方式来设计系统。设计模式背后是抽象和SOLID原则。 设计模式有四个基本要素:

  • Pattern name:描述模式,便于交流,存档
  • Problem:描述何处应用该模式
  • Solution:描述一个设计的组成元素,不针对特例
  • Consequence:应用该模式的结果和权衡(trade-offs)

Java类库中大量使用设计模式:

  • Factory:java.util.Calendar
  • Compsite:java.awt.Container
  • Decorator:java I/0
  • Iterator:java.util.Enumeration
  • Strategy:java.awt.LayoutManager

(四)练习

1.使用TDD的方式设计关实现复数类Complex。

伪代码

  • 无输入 --- 则复数的实部为0,虚部为0
  • 仅输入实部 --- 复数的实部为所输入的实部,虚部为0
  • 仅输入虚部 --- 复数的实部为0,虚部为所输入的虚部
  • 实部虚部都输入 --- 复数的实部与虚部对应相应输入的实部虚部。
  • 加法 --- 复数的实部与实部相加,虚部与虚部相加 ,即输出p1.rePart+p2.rePart,p1.imPart+p2.imPart
  • 减法 --- 复数的实部与实部相减,虚部与虚部相减 , 即输出 p1.rePart-p2.rePart,p1.imPart-p2.imPart

测试代码

public class ComplexTest 

public static void main(String[] args) 

Complex c=new Complex(); 
Complex c1=new Complex(4,8);
Complex c2=new Complex(2,5); 
c1.Print(); 
c2.Print(); 
System.out.println("两复数的和为:"); 
System.out.println((c.Jia(c1, c2).rePart+"+"+c.Jia(c1, c2).imPart+"i").toString()); 
System.out.println("两复数的差为:"); 
System.out.println(c.Jian(c1, c2).rePart+"+"+c.Jian(c1, c2).imPart+"i");

}

 产品代码 

public class ComplexTest 

public static void main(String[] args) 

Complex c=new Complex(); 
Complex c1=new Complex(4,8);
Complex c2=new Complex(2,5); 
c1.Print(); 
c2.Print(); 
System.out.println("两复数的和为:"); 
System.out.println((c.Jia(c1, c2).rePart+"+"+c.Jia(c1, c2).imPart+"i").toString()); 
System.out.println("两复数的差为:"); 
System.out.println(c.Jian(c1, c2).rePart+"+"+c.Jian(c1, c2).imPart+"i");

}

 

2.实验报告中统计自己的PSP(Personal Software Process)时间


步骤


耗时


百分比


需求分析


40min


16%


设计


60min


24%


代码实现


90min


36%


测试


30min


12%


分析总结


30min


12%

总结单元测试的好处:

   先写测试代码,可以引导我去完成一个可以实现这些功能的类,对所编代码有一个整体的把握。并且能让自己负责的模块功能定义尽量明确,模块内部的改变不会影响其他模块,而且模块的质量能得到稳定的、量化的保证。

 

时间: 2024-10-12 17:46:24

java第二次实验报告20135231的相关文章

java第二次实验报告

课程:Java实验   班级:201352     姓名:黄坤  学号:2015226 成绩:           指导教师:娄佳鹏     实验日期:15.05.05 实验密级:         预习程度:       实验时间: 仪器组次:         必修/选修:选修    实验序号:2 实验名称:java面向对象程序设计 实验目的与要求: 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5.

20145301《Java程序设计》实验报告一:Java开发环境的熟悉

20145301<Java程序设计>实验报告一:Java开发环境的熟悉 课程:Java程序设计 实验名称:Java开发环境的熟悉 实验目的与要求: 1.没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程: 2.完成实验.撰写实验报告,实验报告模板见QQ群,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等).解决办法(空洞的方法如“查网络”.“问同学”.“看书”等一律得0分)以及分析(从中可以得到什

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

20145326<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验步骤 一.单元测试 1. 三种代码·伪代码·产品代码·测试代码Example:需求:我们要在一个MyUtil类中解决一个百分制成绩转成“优.良.中.及格.不及格”五级制成绩的功能. 伪代码: 百分制转五分制: 如果成绩小于60,转成“不及格” 如果成绩在60与70之间,转成“

《Java 程序设计》实验报告汇总

<Java 程序设计>实验报告汇总 20145207<Java程序设计>实验一 (Java开发环境的熟悉)实验报告 20145207<Java程序设计>实验二 (Java面向对象程序设计)实验报告 20145207<Java程序设计>实验三 (敏捷开发与XP实践)实验报告 20145207<Java程序设计>实验四 ( Android程序设计)实验报告 20145207<Java程序设计>实验五 (Java开发环境的熟悉)实验报告

2019春第二次实验报告

2019春第二次实验报告 一.实验项目名称 空战游戏 二.实验项目功能描述 在第一次实验基础上增加多台敌机,在一定的得分后发散导弹 三.项目模块结构介绍 四.实现界面展示 五.代码托管链接 https://gitee.com/wenyizhang999/ZWY/blob/master/空战游戏.cpp 六.实验总结 问题:创造无限循环模式 解决方法:编代码,未完成 总结:游戏规模越来越大,玩法越来越多,无限的空间待开发,觉得自己能完成一个游戏的开发太不容易,团队很重要. 原文地址:https:/

java程序设计第二次实验报告

北京电子科技学院(BESTI) 实验报告 课程:数据结构    班级:1352    姓名:何伟钦     学号:20135223 成绩:            指导教师:娄嘉鹏      实验日期: 2015.5.6 实验密级:         预习程度:             实验时间:5:30-10:00 仪器组次:23   必修/选修:必修       实验序号:02 实验名称:Java面向对象程序设计 实验目的与要求:1.初步掌握单元测试和TDD 2.理解并掌握面向对象三要素:封装.

20145216史婧瑶《Java程序设计》第二次实验报告

实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计模式 实验步骤 (一)单元测试 (1) 三种代码 伪代码 百分制转五分制: 如果成绩小于60,转成“不及格” 如果成绩在60与70之间,转成“及格” 如果成绩在70与80之间,转成“中等” 如果成绩在80与90之间,转成“良好” 如果成绩在90与100之间,转成“优秀” 其他,转成“错误” 产品代码

java项目——数据结构实验报告

java项目——数据结构总结报告 20135315  宋宸宁 实验要求 1.用java语言实现数据结构中的线性表.哈希表.树.图.队列.堆栈.排序查找算法的类. 2.设计集合框架,使用泛型实现各类. 3.API的编写,并导出. 4.使用TDD模式,对程序进行测试,利用TestSuite将各测试类整合到一起. 5.与小组成员实现代码的整合. 实验设计过程 首先自学集合框架章节的内容,初步设计相关的类. 根据数据结构课本的章节分类,实验各数据结构类. 在类的编写过程中,经过老师的指导,我准备使用泛型

20135239益西拉姆第二次实验报告

实验二   java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计模式 实验步骤 (一)单元测试 (1) 三种代码 编程是智力活动,不是打字,编程前要把干什么.如何干想清楚才能把程序写对.写好.与目前不少同学一说编程就打开编辑器写代码不同,我希望同学们养成一个习惯,当你们想用程序解决问题时,要会写三种码: 伪代码 产品代码 测试代码 我们通过一个例子说明如何写