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

java实验二实验报告

实验内容

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

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

3. 初步掌握UML建模

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

5. 了解设计模式

实验要求

1.没有Linux基础的同学建议先学习《Linux基础入门(新版)》《Vim编辑器》 课程

2.完成实验、撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等)、解决办法(空洞的方法如“查网络”、“问同学”、“看书”等一律得0分)以及分析(从中可以得到什么启示,有什么收获,教训等)。报告可以参考范飞龙老师的指导

3. 严禁抄袭,有该行为者实验成绩归零,并附加其他惩罚措施。

4. 请大家先在实验楼中的~/Code目录中用自己的学号建立一个目录,代码和UML图要放到这个目录中,截图中没有学号的会要求重做,然后跟着下面的步骤练习

实验步骤

(一)单元测试

用程序解决问题时,学会写三种码:伪代码、产品代码、测试代码

例:们要在一个MyUtil类中解决一个百分制成绩转成“优、良、中、及格、不及格”五级制成绩的功能

建立一个目录:

(1)伪代码:

百分制转五分制:
   如果成绩小于60,转成“不及格”
   如果成绩在60与70之间,转成“及格”
   如果成绩在70与80之间,转成“中等”
   如果成绩在80与90之间,转成“良好”
   如果成绩在90与100之间,转成“优秀”
   其他,转成“错误” (2)产品代码:


(3)测试代码:

先写测试代码了。这种先写测试代码,然后再写产品代码的开发方法叫“测试驱动开发”(TDD)。TDD的一般步骤如下:

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

基于TDD,我们不会出现过度设计的情况,需求通过测试用例表达出来了,我们的产品代码只要让测试通过就可以了。 Java中有单元测试工具JUnit来辅助进行TDD,我们用TDD的方式把前面百分制转五分制的例子重写一次,

具体操作如下图:

二)面向对象三要素

(1)抽象

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

(2)封装、继承与多态

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

过程抽象的结果是函数,数据抽象的结果是抽象数据类型(Abstract Data Type,ADT),类可以作具有继承和多态机制的ADT。数据抽象才是OOP的核心和起源。

,封装就是将数据与相关行为包装在一起以实现信息就隐藏。Java中用类进行封装,

封装实际上使用方法(method)将类的数据隐藏起来,控制用户对类的修改和访问数据的程度,从而带来模块化(Modularity)信息隐藏(Information hiding)的好处;接口(interface)是封装的准确描述手段。 Dog类通过使用类和访问控制(private,public)隐藏了属性color,开放了接口setColor(),getColor(),bark()toStringDog类是一个模块,我们可以通过下面的代码使用它,测试代码与运行结果如下:

用UML中的类图来描述类

继承是实现软件可重用的根基,是提高软件系统的可扩展性与可维护性的主要途径。 如上面所示,以封装为基础,继承可以实现代码复用,需要注意的是,继承更重要的作用是实现多态。 面向对象中允许不同类的对象对同一消息做出响应,即同一消息可以根据发送对象的不同而采用多种不同的行为方式,我们称此现象为多态性。Java中,多态是指不同的类对象调用同一个签名的成员方法时将执行不同代码的现象。多态是面向对象程序设计的灵活性和可扩展性的基础

(三)设计模式初步

(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,依赖倒置原则)
  • (2)模式与设计模式

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

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

    • attern 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。

      • //伪代码 类有虚部实部 复数的加法运算 复数的减法运算 复数的乘法运算 复数的除法运算

        //产品代码

      • 2.自己的PSP(Personal Software Process)时间

        步骤 耗时百分比
        需求分别析 10%
        设计 5%
        代码实现 50%
        测试 20%
        分析总结 15%

        4.总结单元测试的好处

      • 单元测试可以让我们复习前几周学过的内容,加深印象,知道本章学习内容的使用方法,了解相关知识的应用方面。周而复始的复习前面学过的知识,可以让我们学的更加牢固,学的更加扎实。坚持敲代码,也会使我们的编程思维变得更加严谨,思维更加慎密。

        遇到的问题及解决方法

        1.eclipse敲代码时,总会忘记打分号,或者忘记切换输入法就打分号了。时刻提醒自己,认真编写。

        2.设计复数类Complex伪代码时不知道该如何弄,查阅资料,自己理解后,尝试编写除了代码。

        实验收获

        本次实验让我了解到想用程序解决实际问题时,最好写出三种代码:伪代码、产品代码、测试代码,这样才能快速的写出代码,并且实用性强。

        单元测试让我复习了学过的知识,加深了印象。希望以后能通过实验了解更多运用java解决实际问题的方法,学好Java。

时间: 2024-08-02 02:49:33

Java实验二实验报告:java面向对象程序设计的相关文章

20182332 实验五《数据结构与面向对象程序设计》实验报告

20182332 实验五<数据结构与面向对象程序设计>实验报告 课程:<程序设计与数据结构> 班级: 1823 姓名: 盛国榕 学号:20182332 实验教师:王志强 实验日期:2019年10月11日 必修/选修: 必修 1.实验内容&过程&结果 任务一: 完成Hello World, 要求修改res目录中的内容,Hello World后要显示自己的学号 将 android:text="Hello World!" 改为 android:text

20135333苏正生实验二实验报告

实验报告 课程: Java程序设计 班级: 1353 姓名: 苏正生 学号: 2015333 成绩: 指导教师: 娄家鹏 实验日期: 2015.5.6 实验密级: 预习程度: 实验时间: 3:20~5:00 仪器组次: 必修/选修: 必修 实验序号: 实验二 实验名称: Java面向对象程序设计 实验目的: 1.掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计模式   实验仪器:   名称 型号 数

20145321 实验二实验报告

20145321 实验二实验报告 实验内容 1.初步掌握单元测试和TDD 2.理解并掌握面向对象三要素:封装.继承.多态 3.初步掌握UML建模 4.熟悉S.O.L.I.D原则 5.了解设计模式 PSP统计 步骤 耗时 百分比 需求分析 30min 15% 设计 60min 30% 代码实现 60min 30% 测试 30min 15% 分析总结 20min 10% 实验步骤 1.使用TDD的方式设计关实现复数类Complex (1)伪代码: 复数类Complex 复数=实部+虚部i 复数相加=

Java进阶(二十五)Java连接mysql数据库(底层实现)

Java进阶(二十五)Java连接mysql数据库(底层实现) 前言 很长时间没有系统的使用java做项目了.现在需要使用java完成一个实验,其中涉及到java连接数据库.让自己来写,记忆中已无从搜索.特将之前使用的方法做一简单的总结.也能够在底层理解一下连接数据库的具体步骤. 实现 首先需要导入相关的jar包,我使用的为:mysql-connector-java-5.1.7-bin.jar. 下面来看一下我所使用的数据库连接方法类: MysqlUtil.java package cn.edu

java实验二实验报告

一.实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计模式 二.实验过程(本次试验都是在自己电脑上完成,没有使用实验楼) (一)单元测试 用程序解决问题时,要会写三种码:伪代码.产品代码.测试代码 这种先写测试代码,然后再写产品代码的开发方法叫“测试驱动开发”(TDD) TDD的一般步骤如下: 明确当前要完成的功能,记录成一个测试列表 快速完成编写针对此功能的测试用例 测试代码编译

Java实验二实验报告 20135108 李泽源

北京电子科技学院(BESTI) 实     验    报     告 课程:Java 班级: 1351    姓名:李泽源   学号:20135108 成绩:              指导教师:娄嘉鹏   实验日期:2015.5.8 实验密级:          预习程度:          实验时间:15:30~18:00 仪器组次:27         必修/选修:选修     实验序号:02 实验名称: Java面向对象程序设计 实验目的与要求:    1. 初步掌握单元测试和TDD 2

实验二实验报告

20182305 2019-2020-1 <数据结构与面向对象程序设计>实验二报告 课程:<程序设计与数据结构> 班级: 1823 姓名: 孙铭泽 学号:20182305 实验教师:王志强 实验日期:2019年9月16日 必修/选修: 必修 1.实验内容 编写简单的计算器,完成加减乘除模运算.从键盘输入两个数,使用判定语句选择一种操作,然后使用判定和循环语句选择继续计算还是退出.计算结果后输出.编写测试代码,测试验证. 2. 实验过程及结果 先编写计算器代码,编译运行无误后,开使编

实验二 实验报告

实验二 作业调度模拟程序 13物联网  陈梓帆  201306104108 一.目的和要求 1. 实验目的 (1)加深对作业调度算法的理解: (2)进行程序设计的训练. 2.实验要求 用高级语言编写一个或多个作业调度的模拟程序. 单道批处理系统的作业调度程序.作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所运行的时间等因素. 作业调度算法: 1) 采用先来先服务(FCFS)调度算法,即按作业到达的先后次序进行调度.总是首先调度在系统

信息安全系统设计基础实验二实验报告(小组)

小组成员:20135310陈巧然 20135305姚歌 一.实验目的 掌握程序的烧写方法 实现密码学中常见算法的固化 二.实验内容 选择常见的分组算法或非对称算法实现,并在ARM开发环境中调试,烧写: 读懂本实验程序源代码(pthread.c),学习终端I/O 函数的使用方法,学习将多线程编程应用到串口的接收和发送程序设计中 进入/arm2410cl/exp/basic/02_pthread 目录,运行make 产生pthread 程序,使用NFS方式连接开发主机进行运行实验 三.阅读代码及编译