本科论文常见答辩问题整理

这里写目录标题

答辩过程中,老师问的问题一般都和你的设计有关,下面总结了一下常见的提问的问题给大家:

框架,SSM,SSH这些有什么优势。
前端,前端用了什么;无非就是CSS、HTML这些
MySQL,为什么用MySQL;有几个表;三范式;主键这些基础。数据库链接方式,数据库设计中的ER图、范式等。
前后端交互用什么;ajax等等
测试过吗,怎么测试的。
流程图,讲一下有角色的功能区别。
Java基础,三大特性,有接口吗,类是什么,封装了什么。
一般都是框架和业务各问一个,如果你解释的不清楚,老师可能会追问。

专业性问题

你系统的整体设计是怎么样?用了什么技术?这些技术应用的好处是什么?框架,SSM,SSH这些有什么优势。前端,前端用了什么;

参考下面技术整理

你数据库整体的设计是怎么样的,某个表,某个字段作用是什么?MySQL,为什么用MySQL;有几个表;三范式;主键这些基础。数据库链接方式,数据库设计中的ER图、范式等。

你系统核心功能怎么实现?业务,功能模块,老师对某个模块需要详细了解,问你是怎么做的,其实就是你的代码实现逻辑;功能怎么实现的。流程图,讲一下有角色的功能区别。

(比如说购物系统,核心功能就在于整个购物的流程,这个就是系统的核心,老师也一般会对这些地方进行发问),当然也会随机问你某个模块怎么实现,所以自己必须要对自己的系统业务功能,实现的逻辑,数据库表十分熟悉。

一些软件工程,数据库的基础知识,比如时序图,ER图,范式之类的。

前后端交互用什么;ajax等等

软件测试

Java基础,三大特性,有接口吗,类是什么,封装了什么。

一般性问题:(读懂论文基本可以自己回答)

1、为什么选择这个课题(或题目)?

首先从主观入手,可从当前该课题对应的社会大致情况来简要分析,其次可以结合自己的经历来分析(xxx时对该课题有了更深的社会认识,发现了一些问题等),最后,可以说是与指导老师进行深入沟通交流后选择该课题。

2、研究这个课题的意义和目的是什么?

这一问题一般在开题中就有提及,正文中也有相关小节说明,只需要对其加以总结提炼即可,需要注意的是,一定要逻辑清楚,条理分明,不可想到哪儿说到哪儿,东拼西凑会给考核老师留下不好的印象。

说明这个课题的历史和现状,即前人做过哪些研究,自己有什么新的看法…
对应开题的文献综述部分。
例如:在xx这个问题上前人的经验十分丰富,我的工作是通过收集前人答辩数据,总结规律,对xx进行xx,创新性地实现了xx的丰富性,
从而使得xxx大大提高,对xxxx的提高有着极强的推动作用。

3、全文的基本框架、基本结构是如何安排的?

该问题的回答并非是让您将论文大纲讲述一遍,而是对整个文章的一个综合说明,比如:全文按照“总–分–总”的结构展开论述,开头从总体上论述XXXX的特点等大背景,之后“提出XXXXX问题”,再根据问题提出XXXXX对策,最后是总结陈述,各部分相互间存在逻辑联系,相互配合,成为整体的有机组成部分(该结构是最为常见的结构,您需要依照自身文章实际情况做具体分析)
eg:

本课题对xxx进行了社会、市场背景的了解,通过对前人的文献调查和总结规划了本系统的需求,针对需求进行需求分析设计了UML图、流程图等规划系统模板,根据分析结果进行了系统设计,包括数据库设计、详细功能设计、架构设计等,最后根据设计实现系统并进行了测试。

4、论文和系统有哪些不足之处?

提出一些不足之处,再提出日后完善的展望即可。
第一,XXXXX;第二,XXXXX.(可以说“由于对计算机专业知识学习欠缺,在研究过程中XXX部分还有待进一步深入研究”等)

5、你的工作未来有什么应用前景?

我本次的成果可以在xx领域提高过程的效率,简化操作流程,替代传统方法。尽管目前成本较高,但它在等许多方面已经展现出了巨大的商业化潜力!

后端技术方案

SSH框架

SSH是struts+spring+hibernate的一个集成框架,是一种Web应用程序开源框架。从职责上分为四层:表示层、业务逻辑层、数据持久层和域模块层,可复用性好、维护方便的Web应用程序。其中使用Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,控制业务跳转,利用Hibernate框架对持久层提供支持,Spring来 管理struts和hibernate。

SSM框架

SSM(Spring+SpringMVC+MyBatis)框架集由Spring、MyBatis两个开源框架整合而成(SpringMVC是Spring中的部分内容)。常作为数据源较简单的web项目的框架。

Springboot

Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。用我的话来理解,就是 Spring Boot 其实不是什么新的框架,它默认配置了很多框架的使用方式,就像 Maven 整合了所有的 Jar 包,Spring Boot 整合了所有的框架。

Spring

Spring就像是整个项目中装配bean的大工厂,在配置文件中可以指定使用特定的参数去调用实体类的构造方法来实例化对象。也可以称之为项目中的粘合剂。
Spring的核心思想是IOC(控制反转),即不再需要程序员去显式地new一个对象,而是让Spring框架帮你来完成这一切。

SpringMVC

SpringMVC在项目中拦截用户请求,它的核心Servlet即DispatcherServlet承担中介或是前台这样的职责,将用户请求通过HandlerMapping去匹配Controller,Controller就是具体对应请求所执行的操作。SpringMVC相当于SSH框架中struts。

mybatis

mybatis是对jdbc的封装,它让数据库底层操作变的透明。mybatis的操作都是围绕一个sqlSessionFactory实例展开的。mybatis通过配置文件关联到各实体类的Mapper文件,Mapper文件中配置了每个类对数据库所需进行的sql语句映射。在每次与数据库交互时,通过sqlSessionFactory拿到一个sqlSession,再执行sql命令。
页面发送请求给控制器,控制器调用业务层处理逻辑,逻辑层向持久层发送请求,持久层与数据库交互,后将结果返回给业务层,业务层将处理逻辑发送给控制器,控制器再调用视图展现数据。

JSP

与Java的关系:
1: Java是一种面向对象的编程语言,JSP是-种服务端语言,动态网页技术,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。
2: JSP是Java的服务端页面,可以嵌套Java代码。
3:Java程序和JSP程序都需要先通过编译成.class文件才能被执行
JSP和JavaScript的区别:
jsp和javascript的区别首先是位置上的不同,javascript一般在前台运行,要求浏览器要支持js,而JSP是在后台服务器上的,主要用于控制html。JSP和js相比,一般情况下,js在客户端生成html,但是不太容易和服务器进行交互,更不能提供复杂的服务。还有区别就是jsp是在html中以<%%>的形式出现,而js是在HTML中以来实现。

前端MD5密码加密

在前端页面,我们经常会使用表单来提交我们的数据,而表单的两种提交方式get和post都具有一定的安全隐患。get请求的的参数直接在请求行显示,安全隐患较大;post请求方式虽然相对get来说较为安全,其请求参数在请求体,但也可以轻易的通过抓包来获取我们的参数值,得到用户账号、密码等信息。
操作:在接收到用户输入的密码后,直接对用户的密码使用MD5算法进行加密。
优点:对用户密码进行了加密,使得用户密码不会以明文显示,在后端抓包时直接看不到密码。
缺点:直接改变了用户的输入,使得提交时密码密码长度变化,降低用户体验感;并且在原有密码框上做更改也容易暴露用户密码。
注意:MD5算法使用需要引入MD5工具类

MySQL

一种关系型数据库,MySQL访问速度比较快,开源、成本低。
优点:
1、mysq|性能卓越,服务稳定,很少出现异常宕机。
2、mysq|开放源代码且无版权制约,自主性及使用成本低。
3、mysq|软件体积小,安装使用简单,并且易于维护,安装及维护成本低。
缺点:
1.mysq|不允许调试存储过程。
2.存储过程的构造使得开发具有复杂业务逻辑的存储过程变得更加困难。

Hikari 连接池

springboot常配套使用Hikari连接池

数据库连接池概述:

连接池是一种常用的技术,为什么需要连接池呢?
这个需要从TCP说起。假如我们的服务器跟数据库没有部署在同一台机器,那么,服务器每次查询数据库都要先建立连接,一般都是TCP链接,建立连接就需要3次握手了,假设后台服务跟数据库的单程的访问时间需要10ms,那么光是建立连接就花了30ms,并且TCP还有慢启动的机制,实际上一次查询可能还不止1次TCP来回,查询效率就会大大降低。
为了解决上述问题,我们就需要维护一些长链接,这样就不用每次都去建立连接,毕竟建立连接除了占用时间,还需要一些其他的系统资源。另外的好处,连接池让我们更加容易地管理,一方面是可以避免数据库资源都被某几个API占据,另一方面也可以避免资源泄露。

HikariCP概述

HikariCP是开源的一个数据库连接池组件,代码非常轻量,并且速度非常的快。在SpringBoot2.0中,官方也是推荐使用HikariCP

HikariCP特点

字节码精简 ,CPU缓存可以加载更多的程序代码;
优化代理和拦截器:减少代码
自定义数组类型代替ArrayList:提升了性能,省去范围检查的开销。
自定义集合类型:支持快速插入和删除,特别是在同一线程既添加又删除项时,提高并发读写的效率;
针对CPU的时间片算法进行优化:尽可能在一个时间片里面完成各种操作(具体机制比较模糊)。
针对连接中断的情况:比其他CP响应时间上有了极好的优化
关于Connection的操作:另外在Java代码中,很多都是在使用完之后直接关闭连接,以前都是从头到尾遍历,来关闭对应的Connection,而HikariCP则是从尾部对Connection集合进行扫描,整体上来说,从尾部开始的性能更好一些。

Log4J

Log4J 是 Apache 的一个开源项目(官网 http://jakarta.apache.org/log4j),通过在项目中使用 Log4J,我们可以控制日志信息输出到控制台、文件、GUI 组件、甚至是数据库中。我们可以控制每一条日志的输出格式,通过定义日志的输出级别,可以更灵活的控制日志的输出过程。方便项目的调试。

MVC设计模式

MVC设计模式是一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。
模型(Model) :程序员编写程序应有的功能( 实现算法等等)、数据库专家进行数据管理和数据库设计(可以实现具体的功能);
控制器( Controller) :负责转发请求,对请求进行处理;
视图(View) :界面设计人员进行图形界面设计。

MVC如何在你的程序中运用实现

在jsp页面编写内容,然后提交给servlet处理,再调用模型层中业务逻辑类的几个方法与数据库进行数据传输。

MVC优缺点:

优点
1:耦合性低
视图层和业务层分离,这样就允许更改视图层代码而不用重新编译模型和控制器代码
2:重用性高
随着技术的不断进步,需要用越来越多的方式来访问应用程序。MVC模式允许使用各种不同样式的视图来访问同一个服务器端的代码,
3:可维护性高
分离视图层和业务逻辑层也使得WEB应用更易于维护和修改
缺点:
1:没有明确的定义,并且由于模型和视图要严格的分离,这样也给调试应用程序带来了一定的困难;
2:增加系统结构和实现的复杂性
对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率;
3.视图对模型数据的低效率访问
依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。

B/S架构

B/S架构的全称为Browser/Server,即浏览器/服务器结构。Browser指的是Web浏览器,极少数事务逻辑在前端实现,但主要事务逻辑在服务器端实现。B/S架构的系统无须特别安装,只有Web浏览器即可。其实就是我们前端现在做的一些事情,大部分的逻辑交给后台来实现,我们前端大部分是做一些数据渲染,请求等比较少的逻辑
B/S优点:维护简单方便,只需要改变网面,即可实现用户同步更新;共享性强
B/S模式的缺点: 响应速度不及C/S
对比C/S优势:C/S对服务端、客户端都安全都要考虑。B/S因没有客户端,所以只注重服务端安全即可

前端技术方案

除基础的css、html等。

CSS

CSS是一种用来表现HTML (标准通用标记语言的一个应用)或XML (标准通用标记语言的一个子集)等文件样式的计算机语言。CSS不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。

JavaScript

JavaScript是一种脚本,我们经常在htmI中看到javascript,javascript可以用来给htmI增加动态效果。

Jquery

jquery是一个优秀的javascript的轻量级框架,兼容css3和各大浏览器,提供了dom、events、animate、ajax等简易的操作。并且 jquery的插件非常丰富,大多数功能都有相应的插件解决方案。
Jquery就是1个js文件,只不过它对JS进行了简化。

VUE

Vue是一套用于构建用户界面的渐进式JavaScript框架
与传统JS和JQuery框架不同,Vue的渐进式框架表示开发者可以由简单组件写起,渐渐搭建出一个复杂的前端平台。
形成Vue渐进式框架的核心概念为:组件化,MVVM,响应式,和生命周期。

BootStrap

概念:一个前端开发的框架,Bootstrap是基于html、css、Javascript的。
框架:框架是一个半成品软件,开发人员可以在框架基础上进行开发,简化编码。
好处:
① 定义了许多CSS样式和js插件。开发者可以直接引用这些样式和插件。
② 响应式布局:同一套页面可以兼容不同分辨率的设备。

前后端交互

ajax

AJAX全称为Asynchronous JavaScript And XML,就是异步的JS和XML。特点是可以在浏览器中向服务器发送异步请求,最大的优势就是无刷新获取数据。
jQuery中的Ajax:
在jQuery中,

.

a

j

a

x

(

)

2

l

o

a

d

(

)

.ajax()方法属于最底层的方法,第2层是load(),

.ajax()2load().get(),和

.

p

o

s

t

(

)

3

.post(),第3层是

.post()3.getScript()和$.getJSON()方法。
ajax的核心步骤:
1.创建XMLHttpRequest对象
关于XHR:
可以异步和同步发送和接受数据,可以在请求中添加头部信息,并读取响应报文所有头信息,以及响应文本
2.可以监听readyState,确定响应信息正在传输中
不能从外域请求数据
经GET请求的数据会被缓存起来(需要服务段添加expires头部信息)
GET请求参数长度接近和超过2048个字符,才使用POST请求
3.发送(异步)请求
4.接收相应请求,并且执行回调,响应数据

需求分析问题

需求分析的主要内容

需求分析:开发人员准确地理解用户的要求,将用户非形式的需求陈述转化为需求规格说明的过程。
基本任务:
(1)需求识别:这些需求包括功能需求,性能需求,环境需求,用户界面需求。
(2)分析与综合设计:画出流程图、UML图等
(3编写文档:编写论文中需求分析

流程图

描述进行某一项活动所遵循顺序的一 种图示方法,可以直观地描述整个活动中所有过程的物流、信息流,让人很容易知悉整个过程。
1、圆角矩形表示: “开始"与"结束”;
2、矩形表示:表示执行或处理某些工作,行动方案、普通工作环节用;
3、菱形表示:问题判断或判定(审核1审批/评审)环节;
4、用平行四边形表示:输入输出;
5、箭头代表:工作流方向。

用例图

是由软件需求分析到最终实现的第一步, 它描述人们如何使用一个系统。用例视图显示谁是相关的用户、用户希望系统提供什么样的服务,以及用户需要为系统提供的服务,以便使系统的用户更容易理解这些元素的用途,也便于软件开发人员最终实现这些元素。.
用例图包含六个元素,分别是:参与者、用例、关联关系、包含关系、扩展关系以及泛化关系。
作用:
(1) 获取需求;(2)指导测试; (3)还可在整个过程中的其它工作流起到指导作用。

活动图

活动图是uml的动态模型的一种图形。准确的活动图定义:活动图描述满足用例要求所要进行的活动以及活动间的约束关系,有利于识别并行活动。
活动图是一种特殊的状态图,它对于系统的功能建模特别重要,强调对象间的控制流程。
活动图则强调的是从活动到活动的控制流,它可以用来对业务过程、工作流建模,也可以对用例实现甚至是程序实现来建模。
活动图能够表示并发活动的情形,而流程图不能。
活动图是面向对象的,而流程图是面向过程的。

mysql数据库问题

E-R图的目的和作用

E-R图为实体-联系图,提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型。
矩形框:表示实体,在框中记入实体名。
菱形框:表示联系,在框中记入联系名。
椭圆形框;表示实体或联系的属性,将属性名记入框中。
连线:实体与属性之间;实体与联系之间;联系与属性之间用直线相连,并在直线.上标注联系的类型。(对于一对一联系,要在两个实体连线方向各写1;对于一对多联系,要在一的一方写1,多的一方写N;对于多对多关系,则要在两个实体连线方向各写N,M。)

主键与外键

1:关系型数据库中的一条记录中有若干个属性,若其中一个属性组能够唯一的标识一条记录,那么该属性组就可以成为一个主键。
2:外键不是自己这个表的主键,是另外一个表的主键,用于与另一张表的关联。是能够确定另一张表记录的字段,用于保持数据的一致性。比如: A表中的一个字段,是B表的主键,那它就可以是A表的外键

数据库事务

关系性数据库需要遵循ACID规则,具体内容如下:
原子性: 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;
一致性: 执行事务前后,数据保持一致;
隔离性: 并发访问数据库时,一个用户的事物不被其他事物所干扰,各并发事务之间数据库是独立的;
持久性: 一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库 发生故障也不应该对其有任何影响。
为了达到上述事务特性,数据库定义了几种不同的事务隔离级别:
READ_UNCOMMITTED(未授权读取): 最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读
READ_COMMITTED(授权读取): 允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生
REPEATABLE_READ(可重复读): 对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生。
SERIALIZABLE(串行): 最高的隔离级别,完全服从ACID的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。但是这将严重影响程序的性能。通常情况下也不会用到该级别。
这里需要注意的是:Mysql 默认采用的 REPEATABLE_READ隔离级别 ,Oracle 默认采用的 READ_COMMITTED隔离级别.
事务隔离机制的实现基于锁机制和并发调度。其中并发调度使用的是MVVC(多版本并发控制),通过保存修改的旧版本信息来支持并发一致性读和回滚等特性。

数据库三范式

数据库不仅仅只有三范式(1NF/2NF/3NF),还有BCNF、4NF、5NF…,不过在实际的数据库设计时,遵守前三个范式就足够了。再向下就会造成设计的数据库产生过多不必要的约束。
(一般只会问问概念,不会问太深)

第一范式

定义:如果关系模式R的每个关系r的属性都是不可分的数据项,那么就称R是第一范式的模式。
数据库表中的每一列都不可再分,也就是原子性
像下面的表格就能分割,所以它连第一范式都算不上
分割前:
在这里插入图片描述

在这里插入图片描述
分割后:
分割后的就属于第一范式了
在这里插入图片描述

第二范式

在满足第一范式基础上要求每个字段都和主键完整相关,而不是仅和主键部分相关(主要针对联合主键而言)
简单的说,第二范式要满足以下的条件:首先要满足第一范式,其次每个非主属性要完全函数依赖与候选键,或者是主键。也就是说,每个非主属性是由整个主键函数决定的,而不能由主键的一部分来决定。
(该例子引用于(3条消息) 三范式(详解+例子)_SUN_sun_i的博客-CSDN博客_三范式 )
第一张表码为(学号、课程名称),第二张表为(学号),它们都是完全依赖的,因此符合第二范式。
在这里插入图片描述

第三范式(3NF)

在2NF的基础上,任何的非主属性不依赖于其他非主属性 (在第二范式基础上消除传递依赖)
如果关系模式R是2NF,且关系模式R(U,F)中的所有非主属性对任何候选关键字都不存在传递依赖,则称关系R是属于第三范式。
,第三范式要满足以下的条件:首先要满足第二范式,其次非主属性之间不存在函数依赖。由于满足了第二范式,表示每个非主属性都函数依赖于主键。如果非主属性之间存在了函数依赖,就会存在传递依赖,这样就不满足第三范式。

总结

第一范式就是原子性,字段不可再分割; 第二范式就是完全依赖,没有部分依赖; 第三范式就是没有传递依赖。

几个重要的概念:

1.函数依赖:A–>B,如果通过A属性(属性组)的值,可以确定唯一的B属性的值,则称B依赖于A

例如:学号---->姓名 (学号、课程名称 的属性组)–> 分数

2.完全函数依赖:A–>B 如果A是一个属性组,则B属性值的确定需要依赖A属性组的中所有的属性值

例如:(学号、课程名称)–> 分数

3、 部分函数依赖: A–>B 如果A是一个属性组,则B属性值的确定只需要依赖A属性组的中某一些的属性值(第二范式就是消除这个)

例如:(学号 、课程名称)–> 姓名

4.传递函数依赖:A – >B , B – >C 如果通过A属性(属性组)的值,可以确定唯一的B属性的值,再通过B属性(属性组)的值,可以唯一确定C属性的值,那么称C传递依赖于A

例如: 学号 --> 系名 ,系名 --> 系主任

5.码 :如果在一张表中,一个属性或属性组,被其他所有的属性(非主属性)所完全函数依赖,则称这个属性(属性组)为该表的码。(上面的表,学号和课程名称所构成的属性组就是码)

例如: 该表中码为 (学号、课程名称)

主属性: 码中所有属性

非主属性: 除码之外的所有属性

功能性问题

分页功能如何实现

首先创建一个分页类,分页炎包括当前页号属性、每页记录数属性、总记录数属性和xx如商品集合属性,前台把当前页号传到后台sq|语句作为limit关键字的两个条件进行查询,最后把查询的总数和封装在集合容器中的查询结果返回给前台显示出来。

页面传值的方法

1.使用URL地址栏进行传值; .
2.使用Form表单进行传值;
3.设置Cookie;
4.设置Session。

Session是什么

session就是一个会话,相当于一个临时的容器,用来存放临时的东西,在浏览器不关闭的前提下,可以保存用户的信息,比如登录的保存用户信息从一个网页跳转到另一个网页,你的用户信息就可以用session保存。Session亦称为“会话”,指得是用户在浏览某个网站时,从进入网站到关闭网站所经过的这段时间。一般默认设置都是30分钟。

定向与转发

1.请求转发(forward):

当客户端(浏览器)向远程服务器发送一个URL(http://www.cnblogs.com/zivxiaowei/)GET请求后,服务器接收到请求后,会在服务器内部直接通过另外的一个URL获取资源,并将此资源再响应给浏览器,也就是说请求转发整个过程是一次性的。
列如:在浏览器中看到这URL,通过页面上的点击操作后,服务器响应了其他页面内容到浏览器,但是浏览器的URL地址仍然是原来的URL.

2.重定向(Redirect):

当客户端(浏览器)向服务器发送一个URL请求后,但是资源并不在当前请求的服务器上,此时服务器会告诉浏览器,资源在另外一个URL地址上,此时浏览器会重新发送请求到新的资源地址。例如:
->在浏览器中看到这URL,->服务器A响应浏览器重定向->浏览器重新定位新的URL地址到服务器B->服务器B响应内容到浏览器,此时浏览器上面的URL已经换位了新的资源请求地址

Java的三大特性:封装、继承、多态

Java基础,三大特性,有接口吗,类是什么,封装了什么。

封装

含义:封装就是把同一类事物的共性(包括属性和方法)归到同一类中,方便使用。
封装和继承几乎都是为多态而准备的。
封装也称信息隐藏,是指利用抽象数据类型把数据和基于数据的操作封装起来,使其成为一个不可分割的整体,数据隐藏在抽象数据内部,尽可能的隐藏数据细节,只保留一些接口使其与外界发生联系。也就是说用户无需知道内部的数据和方法的具体实现细节,只需根据留在外部的接口进行操作就行。

封装的实现
修改属性的访问控制符(修改为private); 创建getter/setter方法(用于属性的读写);在getter/setter方法中加入属性控制语句(用于判断属性值的合法性);
可以通过定义public方法来对这个变量来访问。对一个变量的操作,一般有读取和赋值2个操作,我们分别定义2个方法来实现这2个操作,一个是getXX(XX表示要访问的成员变量的名字)用来读取这个成员变量,另一个是setXX()用来对这个变量赋值

封装的优点:
将变化隔离、 便于使用、提高重用性、提高安全性
封装的缺点:
将变量等使用private修饰,或者封装进方法内,使其不能直接被访问,增加了访问步骤与难度

继承

继承关键字:extends
含义
多个类具有共同的属性(成员变量)与行为(成员方法)的时候,将这些共同的部分抽取出来定义到一个公共的类中,其他及各类可以与这个公共的类形成继承关系,从而在多个类中不需要重复定义公共部分!这个公共的类就是父类,也称为超类或者基类,其他的类就是子类。子类可以直接访问父类的非私有化成员变量,访问父类的私有化成员变量可以使用super.get()方法。

简单的说:继承是类与类的一种关系,比较像集合中的从属于关系。比如说,狗属于动物。就可以看成狗类继承了动物类,那么狗类就是动物类的子类(派生类),动物类就是狗类的父类(基类)。在Java中是单继承的,也就是说一个子类只有一个父类。

继承的特点:
子类比父类强大
java是单继承,不能进行多继承。但是可以继承多层子类
子类继承父类,但是对父类的成员变量是无法直接操作,只能通过父类继承过来的setter和getter方法.
继承的优点:
(1)减少代码量,能很好的提高复用率。
(2)使类与类之间存在继承关系,是实现多态操作的前提。

继承的缺点
继承使得多个类之间具有了子父类关系,当一个类存在多个子类的时候,如果父类发生变化,那么这些子类会跟着一同变化,造成类与类之间的“强耦合”关系!

多态

含义:多态指的是对象的多种形态。

java程序中定义的引用变量所指向的具体类型和通过该引用类型发出的方法在调用时不确定,该引用变量发出的方法到底调用哪个类的实现的方法,必须在程序运行期间才能决定,这就是多态。

像我们上面提到的继承就是属于多态的一种
还有一种就是接口(interface)
接口类一种是比抽象类更加抽象的类
接口支持多实现(即一个类可以同时实现多个类,但是一个类同时只能继承一个类)这样一来,Java相当于间接地实现了多继承

继承和实现的区别:单继承,多实现
在这里插入图片描述

接口

接口可以理解为一种特殊的类,里面全部是由全局常量和公共的抽象方法所组成。
一个接口也能够拥有方法和属性,但是在接口中声明的方法默认是抽象的。(即只有方法标识符,而没有方法体)。
一个接口就是描述一种能力,比如“运动员”也可以作为一个接口,并且任何实现“运动员”接口的类都必须有能力实现奔跑这个动作(或者implement move()方法),所以接口的作用就是告诉类,你要实现我这种接口代表的功能,你就必须实现某些方法,我才能承认你确实拥有该接口代表的某种能力。

为了声明一个接口,我们使用interface这个关键字,在接口中的所有方法都必须只声明方法标识,而不要去声明具体的方法体,因为具体的方法体的实现是由继承该接口的类来去实现的,因此,接口并不用管具体的实现。接口中的属性默认为Public Static Final.一个类实现这个接口必须实现这个接口中定义的所有的抽象方法。

类的定义
类是将同类对象的共同属性和行为抽象出来形成的一个相对复杂的数据类型, 这与结构体一样,都是为了描述一个相对复杂的对象。

测试

测试什么?

1.首先观察页面初始化数据是否加载正确

步骤:
1.先确定页面内容
2.再确定内容所对应的数据库表
3.编写测试用例,并执行(是否与页面加载数据一致)

2.功能点考虑:

输入:可见输入和不可见输入
处理: 正常+异常处理
输出:可见输出—>前台后台 不可见输出—>数据库
功能测试:
初始化数据考虑
输入数据考虑(可见输入、不可见输入)
处理操作(正常处理、异常处理)
输出(前台、后台、数据库)

白盒测试和黑盒测试

白盒测试,就是一种透明的测试,即全面了解程序内部逻辑结构、对所有逻辑路径进行测试。
黑盒测试,就是把整个程序当作黑盒,我们在看不见这个程序的情况下进行测试,我们是站在用户的角度,去测试这个软件的运行过程,去对比软件的功能与需求说明书所写的内容
黑盒测试的优缺点:
优点:
1.测试人员不需要了解细节,包括特定的编程语言。
2.从用户的角度测试,很容易被理解和接受。
3.有助于暴露与任务规格不一致或者有歧 义的地方。
缺点:
1.测试的只有一小部分, 不可能测试全部输入。
2.很多测试路径没有测试到。
3.不能直接对特定程序段进行测试,改程序段可能隐藏更多错误。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>