您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 面向对象和多线程综合实验指导书-3
《面向对象与多线程综合实验》指导书本课程旨在使学生了解软件开发的一般过程,深入理解面向对象语言的基本概念和基本原理,理解和掌握继承与多态、异常处理、输入输出流、GUI设计、JDBC数据库操作、网络编程、多线程等技术;熟练掌握在Java语言环境下,上述技术的具体实现方法,并深入领会Java程序设计实用开发技术。为达到上述目标,本课程计划让学生以迭代方式逐步编程开发一个小型档案管理系统,实现上述7个部分的训练,从而培养学生分析和解决问题的能力。该小型档案系统要求如下:1.系统基于C/S模式,包括客户端子系统,服务器端子系统2.用户需登录,验证口令通过后才能使用系统。用户分为系统管理人员、档案录入人员,档案浏览人员3.系统中相关用户信息、档案属性存放于关系数据库中,档案本身以文件形式存放于服务器相关目录中4.客户端和服务器端基于Socket实现通信,服务器端需实现多线程功能,可同时处理、响应多个客户端的数据请求5.用户信息管理功能,普通用户登录后可对自己基本信息(姓名、性别、民族、出生日期、职务、密码等信息)的查询、修改。系统管理人员除上述功能外壳增加、删除用户、修改用户的相关属性和权限6.档案数据录入功能,档案录入人员可输入新的档案文件信息,并将档案文件上传至服务器7.档案数据查询功能,普通用户可按条件查询相应的档案文件信息,对相关档案文件可以下载保存1.封装、继承与多态1.1知识要点(1)封装封装(Encapsulation)是类的三大特征之一,即将类的状态信息隐藏在类内部,不允许外部程序直接访问,必须通过该类提供的方法来实现对隐藏信息的操作和访问。简而言之就是隐藏对象的属性和实现细节,仅向外提供访问接口。封装的好处主要有:隐藏类的实现细节;让使用者只能通过程序员规定的方法来访问数据;可以方便的加入存取控制语句,限制不合理操作。封装的具体步骤:修改属性的可见性来限制对属性的访问;为每个属性创建一对赋值(setter)方法和取值(getter)方法,用于对这些属性的存取;在赋值方法中,加入对属性的存取控制、有效性检查等。(2)继承继承(Inheritance)是Java中实现代码重用的重要手段,它是一种软件复用形式。继承是使用已存在的类的定义作为基础建立新类的技术,新类可以吸收现有类的成员,并可以增加新的功能或修改原有的功能。这种技术使得复用以前的代码非常容易,能够大大缩短开发周期,降低开发费用。继承表达的是is-a的关系,或者说是一种特殊和一般的关系。Java中只支持单继承,即每个类只能有一个父类。在Java中所有的类都直接或间接的继承了java.lang.Object类,即Object类是所有java类的祖先。在Java中,子类可以从父类中继承的有:继承public和protected修饰的属性和方法,不管子类和父类是否在同一个包里;继承默认权限修饰符修饰的属性和方法,但子类和父类必须在同一个包里。子类无法继承父类的有:无法继承private修饰的属性和方法;无法继承父类的构造方法。(3)多态多态(Polymorphism)即多种状态,是指计算机程序运行时,系统可依据对象所属类,引发对应类的方法,从而有不同的行为。简单来说,所谓多态意指相同的消息给予不同的对象会引发不同的动作。多态又可分为设计时多态和运行时多态。重载又被称为设计时多态,而对于覆盖或继承的方法,Java运行时系统根据调用该方法的实例的类型来决定选择调用哪个方法则被称为运行时多态。多态的优点可归纳为五个方面:可替换性、可扩充性、接口性、灵活性和简化性。在Java中实现多态的三个条件:继承的存在(继承是多态的基础,没有继承就没有多态);子类重写父类的方法(多态下调用子类重写的方法);父类引用变量指向子类对象(子类到父类的类型转换)。特别注意:子类转换成父类时的规则:将一个父类的引用指向一个子类的对象,称为向上转型,自动进行类型转换。此时通过父类引用调用的方法是子类覆盖或继承父类的方法,不是父类的方法。此时通过父类引用变量无法调用子类特有的方法。如果父类要调用子类的特有方法就得将一个指向子类对象的父类引用赋给一个子类的引用,称为向下转型,此时必须进行强制类型转换。1.2实验目的掌握类的定义、对象的创建、对象的属性的引用和方法的调用;熟悉Java中的继承机制,方法的重载与覆盖;掌握多态、抽象类、接口的使用。1.3实验内容编写一个程序,实现档案管理系统中的用户管理模块。要求模块中实现用户的模拟登录过程。通过用户输入,获取用户名和口令;与事先记录在程序中的用户信息进行对比,通过口令验证后才能使用系统。用户分为系统管理人员、档案录入人员,档案浏览人员三类,相关类图如下所示。+showMenu()+showFileList()+downloadFile()+changeSelfInfo()-name-password-roleUser+changeUserInfo()+delUser()+addUser()+listUser()+showMenu()Administrator+uploadFile()+showMenu()Operator+showMenu()Browser(1)要求在用户类中实现封装,并构造setter、getter方法实现属性的访问。(2)通过继承方式加以实现上述类。(3)通过多态,实现用户菜单项的展示,根据用户角色不同,系统自动调用对应showMenu()方法。(4)在未讲数据库之前,系统中已存在用户的信息放置在Hashtable中。提供DataProcessing类实现数据的查找、插入、更新和删除。(此类可提供给学生直接使用)(5)在未讲I/O之前,系统中的文件操作的方法可虚化,只用打印语句即可。2.异常处理2.1知识要点(1)异常异常指不期而至的各种状况,如:文件找不到、网络连接失败、数据库错误等。异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程。Java通过API中Throwable类的众多子类描述各种不同的异常。因而,Java异常都是对象,是Throwable子类的实例,描述了出现在一段编码中的错误条件。当条件生成时,错误将引发异常。ThrowableErrorExceptionIOExceptionSQLExceptionRuntimeExceptionThrowable:有两个重要的子类:Exception(异常)和Error(错误),二者都是Java异常处理的重要子类,各自都包含大量子类。Error:是程序无法处理的错误,表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时JVM出现的问题。Exception:是程序本身可以处理的异常。异常和错误的区别:异常能被程序本身可以处理,错误是无法处理。通常,Java的异常(包括Exception和Error)分为可查的异常(checkedexceptions)和不可查的异常(uncheckedexceptions)。不可查异常是编译器不要求强制处置的异常:包括运行时异常(RuntimeException与其子类)和错误(Error)。运行时异常是不检查异常,程序中可以选择捕获处理,也可以不处理。除了RuntimeException及其子类以外,其他的Exception类及其子类都属于可查异常。这种异常的特点是Java编译器会检查它,也就是说,当程序中可能出现这类异常,要么用try-catch语句捕获它,要么用throws子句声明抛出它。(2)处理异常机制在Java应用程序中,异常处理机制为:抛出异常,捕捉异常。A.抛出异常当一个方法出现错误引发异常时,方法创建异常对象并交付运行时系统,异常对象中包含了异常类型和异常出现时的程序状态等异常信息。运行时系统负责寻找处置异常的代码并执行。throws抛出异常如果一个方法可能会出现异常,但没有能力处理这种异常,可以在方法声明处用throws子句来声明抛出异常。throws语句的语法格式为:methodnamethrowsException1,Exception2,..,ExceptionN{……}throw抛出异常throw总是出现在方法体中,用来抛出一个Throwable类型的异常。程序会在throw语句后立即终止,它后面的语句执行不到。throw语句的语法格式为:thrownewexceptionname;B.捕获异常在方法抛出异常之后,运行时系统将转为寻找合适的异常处理器(exceptionhandler)。当异常处理器所能处理的异常类型与方法抛出的异常类型相符时,即为合适的异常处理器。运行时系统从发生异常的方法开始,依次回查调用栈中的方法,直至找到含有合适异常处理器的方法并执行。当运行时系统遍历调用栈而未找到合适的异常处理器,则运行时系统终止。同时,意味着Java程序的终止。捕获异常:try、catch和finallytry{//可能会发生异常的程序代码}catch(Type1id1){//捕获并处理try抛出的异常类型Type1}catch(Type2id2){//捕获并处理try抛出的异常类型Type2}finally{//无论是否发生异常,都将执行的语句块}try块:用于捕获异常。其后可接零个或多个catch块,如果没有catch块,则必须跟一个finally块。catch块:用于处理try捕获到的异常。finally块:无论是否捕获或处理异常,finally块里的语句都会被执行。当在try块或catch块中遇到return语句时,finally语句块将在方法返回之前被执行。2.2实验目的理解异常的基本概念;了解Java异常的层次结构;熟悉并掌握Java异常的捕获处理方法。2.3实验内容(1)阅读Java™Platform,StandardEdition8APISpecification文档,了解后续编程中将要处理的IOException及其子类FileNotFoundException、EOFException,SocketException,SQLException以及运行时异常RuntimeException与其子类IllegalStateException。(2)根据新提供的DataProcessing类(因还未讲SQL,此类模拟异常出现情况,以一定概率随机产生异常),在所编写的Administrator、Operator和Browser类,增加异常处理功能。3.输入输出流3.1知识要点(1)流的概念流(Stream)的概念源于UNIX。流的单向的,根据流的方向,流可以分输入流和输出流。可以从输入流中读取信息,但不能写它。相反,只能往输出流写入信息,但不能读它。按流的数据单位不同分为:字节流和字符流。在Java中,字节流读写以字节为单位的流;而字符流用于读写Unicode字符组成的文本流。(2)流的层次结构A.File:用于文件或者目录的描述信息,例如生成新目录,修改文件名,删除文件,判断文件所在路径等。构造函数:File(Stringpath)、File(Stringpath,StringFileName)、File(Filedir,Stringname)。File类提供了一种与机器无关的方式来描述一个文件对象的属性,通过类File所提供的方法,可以得到文件或目录的描述信息,这主要包括名称、所在路经、可读性、可写性、文件的长度等,还可以生成新的目录、改变文件名、删除文件、列出一个目录中所有的文件等。B.InputStream:抽象类,基于字节的输入操作,是所有输入流的父类。定义了所有输入流都具有的共同特征。主要提供文件内容操作的基本功能函数read()、ship()、close()等;一般都是创建出其派生类对象(完成指定的特殊功能)来实现文件读取。文件操作的应注意异常的捕获:由于包java.io中几乎所有的类都声明有I/O异常,因此程序应该对这些异常加以处理。流结束的判断:方法read()的返回值为-1时;readLine()的返回值为null时。C.OutputStr
本文标题:面向对象和多线程综合实验指导书-3
链接地址:https://www.777doc.com/doc-1980774 .html