




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第8章
应用数据库第8章应用数据库讨论软件构造中数据库的使用。介绍关系数据库的相关知识及结构化查询语言SQL,学习如何创建数据库、连接数据库、查询数据库;学习数据库及应用软件的开发,熟练掌握数据库的增、删、改、查等操作方法,以及如何在应用程序中操作数据库。还介绍数据库的深入应用。2016秋数据科学与软件工程学院2第8章应用数据库故事9引入数据库系统管理题目和答案。2016秋数据科学与软件工程学院3第8章应用数据库8.1数据库概述8.2结构化查询语言SQL8.3数据库的开发过程8.4编程操作数据库8.5案例分析与实践8.6讨论与提高8.7思考与练习题2016秋数据科学与软件工程学院48.1数据库概述数据库是长期存储在计算机内、有组织、可共享的大量数据的集合。它的目的是提供一种可以方便、高效地管理数据库信息的途径。DBMS是位于用户(含应用程序)和操作系统之间的一种数据管理软件,负责数据的组织、存储和管理。数据库、DBMS、应用程序及数据库管理员构成的系统称为数据库系统。2016秋数据科学与软件工程学院58.1数据库概述8.1.1关系数据库8.1.2关系数据库的数据模型2016秋数据科学与软件工程学院68.1.1关系数据库数据库领域中最常见的数据模型有:层次模型、网状模型、关系模型、面向对象模型、对象关系模型。其中,关系数据库系统是支持关系模型的数据库系统。按照数据模型的三个要素,关系模型由关系数据结构、关系操作集合和关系完整性约束三部分组成。2016秋数据科学与软件工程学院78.1.1关系数据库1.关系数据结构关系模型中数据的逻辑结构就是一张二维表。关系数据库由表的集合构成,每个表都有唯一的名字。元组(行)、属性(列)、域、码、候选码、主码、主属性、组合码、全码、外码、关系模式……2016秋数据科学与软件工程学院88.1.1关系数据库2016秋数据科学与软件工程学院98.1.1关系数据库2.关系操作集合2016秋数据科学与软件工程学院108.1.1关系数据库3.关系完整性约束关系模型中有三类完整性约束:实体完整性、参照完整性和用户自定义完整性。实体完整性和参照完整性是关系模型必须要满足的完整性约束条件,有DBMS支持,进行自动检查。2016秋数据科学与软件工程学院118.1.1关系数据库实体完整性(EntityIntegrity):若属性(一个或一组属性)A是基本关系R的主属性,则A不能取空值。参照完整性(ReferentialIntegrity):若属性或属性组F是基本关系R的外码,它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为空值或者等于S中某个元组的主码值。2016秋数据科学与软件工程学院128.1.1关系数据库用户自定义完整性(User-definedIntegrity)关系数据库系统应该根据应用环境的不同,满足用户对数据关系之间的特定的约束条件。例如,Question关系中,我们要求计算0~100之间的加减法,就需要引入约束条件check(Factor1>=0ANDFactor1<=100)。如果我们要求只计算加减乘除的四则运算,那就应该引入自定的约束条件check(OperatorIN(‘+’,‘−’,‘*’,‘/’))。2016秋数据科学与软件工程学院138.1.1关系数据库关系数据库由若干基本表组成。基本表由若干元组组成。表是组成这个关系的若干实体。表与表之间同时还存在参照关系,通过外码表达两个关系之间的关系。关系图。每个关系用一个矩形表示,关系的名字显示在矩形的上方,矩形内列出各个属性,主属性用下画线标出。外码之间的关系用从参照关系的外码属性到被参照关系的主属性之间的箭头来表示。2016秋数据科学与软件工程学院148.1.1关系数据库2016秋数据科学与软件工程学院158.1.1关系数据库2016秋数据科学与软件工程学院168.1.2关系数据库的数据模型关系数据库管理系统支持数据库的三级模式结构,如图8.2所示。内模式对应存储文件,模式包含数据库中最重要的基本表,外模式对应于部分基本表和由基本表导出的视图。2016秋数据科学与软件工程学院178.1.2关系数据库的数据模型内模式,也称为存储模式,一个数据库只有一个内模式。它是数据物理结构和存储方式的描述,是数据在数据库内部的表示方式。在关系数据库管理系统中,存储文件的逻辑结构组成了关系数据库的内模式。存储文件的物理结构对用户是透明的,可以由用户来定义。2016秋数据科学与软件工程学院188.1.2关系数据库的数据模型模式,也称为逻辑模式,是数据库中全体数据的逻辑结构和特征的描述。在关系数据库中,模式是所有基本表的集合。每个基本表表达了一个关系。一个或多个基本表存储在一个存储文件中。所有基本表都保存在数据库模式中。2016秋数据科学与软件工程学院198.1.2关系数据库的数据模型外模式也称为用户模式,它是数据库用户能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图。在关系数据库中,外模式包含部分的基本表和由一些基本表导出的视图。需注意,一个数据库中可以同时有多个外模式。同一个外模式可以被用户的多个应用使用,但一个应用只能用一个外模式。外模式是保证数据库安全性的一个重要手段。2016秋数据科学与软件工程学院208.2结构化查询语言SQL8.2.1SQL概述8.2.2创建基本表的CREATE语句8.2.3插入元组的INSERT语句8.2.4删除元组的DELETE语句8.2.5更新元组的UPDATE语句8.2.6选择元组的SELECT语句2016秋数据科学与软件工程学院218.2.1SQL概述SQL(StructuredQueryLanguage,结构化查询语言)分为以下几个部分。数据定义语言(DataDefinitionLanguage):针对数据库和基本表的结构所做的定义。数据操纵语言(DataManipulationLanguage):对已定义的数据增、删、改、查。数据控制语言(DataControlLanguage):完整性约束(Integrity):2016秋数据科学与软件工程学院228.2.1SQL概述SQL主要解决的三个问题就是关系数据模型的三个要素。视图定义:从基本表导出的虚表,DDL提供视图定义的命令语句。事务控制:SQL包括定义事务开始和结束的命令。访问权限:SQLDDL定义了对关系和视图访问权限的命令。2016秋数据科学与软件工程学院238.2.1SQL概述SQL实现了关系模型的一些主要特点。SQL是集数据定义语言DDL、数据操纵语言DML和数据控制语言DCL功能于一体的查询语言。SQL是高度非过程化的查询语言。用户只需指明“怎么做”、“想要什么”,而无须说明查询的步骤。SQL采用的是集合的运算方式。操作对象是元组的集合,插入、删除、修改的对象及查询得到的结果都可以是元组的集合。SQL使用动词来表达功能。核心动词9个。2016秋数据科学与软件工程学院248.2.1SQL概述用SQL语言有两种方式:一种是在终端交互方式下使用,称为交互式SQL;另一种是把SQL嵌入在高级程序设计语言中使用,称为嵌入式SQL。这些高级语言可以是C、Java、C#、Python等,称为宿主语言。2016秋数据科学与软件工程学院258.2.2创建基本表的CREATE语句CREATETABLE语句定义基本表。CREATETABLE<表名>
(<列名><数据类型>[列级完整性约束条件][,<列名><数据类型>[列级完整性约束条件]]…[,<表级完整性约束条件>]);2016秋数据科学与软件工程学院268.2.2创建基本表的CREATE语句2016秋数据科学与软件工程学院278.2.3插入元组的INSERT语句INSERT插入语句的一般格式为:INSERTINTO<表名>[(<属性列1>,<属性列2>,……)]VALUES(<常量1>,<常量2>,……);插入如下题目:编号1001的题目为19+20=39,题目属于基础的四则运算。INSERTINTOQuestionVALUES('1004',20,'-',19,1,1);2016秋数据科学与软件工程学院288.2.4删除元组的DELETE语句DELETE语句的一般形式为:DELETEFROM<表名>
[WHERE<条件>];删除编号为1001的题目:DELETEFROMQuestionWHEREQuestionID=’1001’;删除所有的题目:DELETEFROMQuestion;2016秋数据科学与软件工程学院298.2.5更新元组的UPDATE语句UIPDATE语句的一般形式为:UPDATE<表名>SET<列名>=<表达式>[,<列名>=<表达式>]…[WHERE<条件>];如,修改Question关系中编号1002的题目运算结果为30:UPDATEQuestionSETResult=30WHERQuestionID='1002'2016秋数据科学与软件工程学院308.2.6选择元组的SELECT语句SELECT语句的功能是查询数据库中存储的数据。SQL查询的基本结构由三个子句组成:select、from和where。查询的基本结构为:SELECT[ALL|DISTINCT]
<目标列表达式>[,<目标列表达式>]…FROM<表名或视图名>[,<表名或视图名>]…[WHERE<条件表达式>][ORDERBY<列名>DESC|ASC][GROUPBY<列名>HAVING<条件表达式>];2016秋数据科学与软件工程学院318.3数据库的开发过程数据库系统开发分为6阶段。需求分析阶段;概念结构设计阶段;逻辑结构设计阶段;物理结构设计阶段;数据库实施阶段;数据库运行和维护阶段。2016秋数据科学与软件工程学院328.3数据库的开发过程①需求分析阶段首要任务是通过详尽调查明确用户的组成,包括用户的身份、权限、职责及分配的工作等;其次,详细调查各用户组对数据库的操作,包括各用户组将对数据库输入的信息、如何使用这些信息、输出什么信息及其格式等;将输入的信息分类存储,以便在逻辑分析阶段生成数据库模式,即基本表;最后,需要确定系统的边界。对前面调查的结果进行初步分析,确定哪些功能由计算机完成或将来让计算机完成,哪些活动由人工完成。2016秋数据科学与软件工程学院338.3数据库的开发过程(1)用户的组成2016秋数据科学与软件工程学院348.3数据库的开发过程(2)用户需要的信息学生身份信息:记录学生的编号、姓名等。家长身份信息:记录家长的编号、姓名等,以及家长和学生之间的关系。教师身份信息:记录教师的编号、姓名等,以及教师和学生之间的关系。管理员身份信息:记录管理员的编号、姓名、权限等。算术题目:记录所有题目及其计算结果。学生成绩:记录学生完成某套题目的成绩。2016秋数据科学与软件工程学院358.3数据库的开发过程(3)系统边界系统可以自动生成算术题目并得到运算结果,可以完成答题结果的检查、统计成绩分布;可以根据人工设定的难度级别来生成相应难度的算术题目;无法分析错误题目的出错原因。2016秋数据科学与软件工程学院368.3数据库的开发过程②概念结构设计阶段将需求分析得到的用户需求抽象为信息结构(概念模型)的过程就是概念结构设计,是整个数据库设计的关键。设计的概念结构一定要真实、充分地反映现实世界,包括事物和事物之间的联系,满足用户对数据的需求。2016秋数据科学与软件工程学院378.3数据库的开发过程E-R模型是描述概念模型的有力工具。“E”表示实体型,E-R图中用矩形表示,矩形框内写明实体名;用椭圆表示实体的属性,并用无向边将其与相应的实体连接起来;“R”表示联系,在E-R图中用菱形表示,菱形框内写明联系名,并用无向边分别与有关的实体型连接起来,同时在无向边旁标记联系的类型。2016秋数据科学与软件工程学院388.3数据库的开发过程两个以上的实体型之间联系类型可以分为三种(参考图8.10)。(1)一对一联系(1:1)。(2)一对多联系(1:n)。(3)多对多联系(m:n)。2016秋数据科学与软件工程学院398.3数据库的开发过程2016秋数据科学与软件工程学院408.3数据库的开发过程③逻辑结构设计阶段逻辑结构设计阶段的主要任务是将概念结构设计阶段设计好的基本E-R模型转换为数据库管理系统所支持的数据模型相符合的逻辑结构。2016秋数据科学与软件工程学院418.3数据库的开发过程E-R图转换为关系模型规则(步骤)如下。①一个实体型转换为一个关系。实体名称(属性、主码)即关系名称(属性、主码)。②一个联系转换为一个关系。联系名称(属性)即关系名称(属性),和联系相连的实体主码也是关系的属性。1:1:任取一个实体的主码为关系的主码。1:n:取n对应的实体主码为关系的主码。m:n:两个实体的主码为关系的组合码。③合并相同主码的关系。2016秋数据科学与软件工程学院428.3数据库的开发过程④物理结构设计阶段数据库在物理设备上的存储结构和存取方法称为数据库的物理结构。物理结构设计主要包括确定数据的存放位置;确定关系、索引、聚簇、日志、备份等的存储安排;确定系统配置等。设计存储结构时,一般考虑存取时间、存储空间利用率和维护代价等三方面因素。存取方法一般采用索引存取方法或聚簇存取方法。2016秋数据科学与软件工程学院438.3数据库的开发过程⑤数据库实施阶段数据库实施阶段的主要任务是数据的载入和应用程序的编码与调试。首先要强调基础数据的正确,数据形式、组织方式、数据结构的合理、清晰。为提高数据载入效率和准确度,应尽量采用人工和计算机辅助相结合的方式载入数据。2016秋数据科学与软件工程学院448.3数据库的开发过程载入数据之后,要试运行数据库,对数据库进行测试,主要包括功能测试和性能测试。功能测试需要运行数据库应用程序,执行对数据库的各种操作,测试应用程序的功能是否达到设计要求。性能测试主要检查数据库和应用程序运行中的相关物理参数值,测试其是否达到设计要求。2016秋数据科学与软件工程学院458.3数据库的开发过程⑥数据库运行和维护阶段主要任务是维护数据库的稳定,保证数据库平稳运行;同时,对数据库设计进行评价,听取、总结、分析用户的需求,必要时可以对数据库进行适当的补充和修改。数据库的运行和维护是个长期的工作,在这一阶段应注意如下几个问题。2016秋数据科学与软件工程学院468.3数据库的开发过程首先,管理员应该定期转储和备份数据,保证数据库的恢复机制可以正常运行。其次,应注意保证数据库的安全性和完整性,“数据溢出”、“数据污染”等。最后,管理员应定期对数据库的设计和使用情况做出评价,听取客户意见和建议,适当修改、调整数据库的组织与构造。数据库的重组并不修改原设计的逻辑和物理结构,而数据库的重构就修改了数据库的模式。2016秋数据科学与软件工程学院478.4编程操作数据库JDBC(JavaDataBaseConnectivity,Java数据库连接)是一种用于执行SQL语句的JavaAPI,它由一组用Java语言编写的类和接口组成,可以为多种关系数据库提供统一访问。使用JDBC操作数据库的主要步骤是:与数据库建立连接;向数据库发送SQL语句,需要java.sql包的支持;处理SQL语句返回的结果。2016秋数据科学与软件工程学院488.4编程操作数据库2016秋数据科学与软件工程学院498.4编程操作数据库8.4.1连接数据库8.4.2查询数据库2016秋数据科学与软件工程学院508.4.1连接数据库获取JDBCDriver,并配置ClassPath。2016秋数据科学与软件工程学院518.4.2查询数据库2016秋数据科学与软件工程学院528.4.2查询数据库游标系统为用户开设的一个数据缓冲区,用于存放SQL语句的执行结果。为了得到一个带有游标的结果集,需使用下述方法获得一个Statement对象。Statementstmt=dbConn.createStatement(inttype,intconcurrency);2016秋数据科学与软件工程学院538.4.2查询数据库type的取值决定滚动的方式。ResultSet.TYPE_FORWARD_ONLY:表示结果集的游标只能向下滚动。ResultSet.TYPE_SCROLL_INSENSITIVE:游标可以上下滚动。当数据库变化时,当前结果集不变。ResultSet.TYPE_SCROLL_SENSITIVE:游标可以上下滚动。当数据库变化时,当前结果集同步改变。2016秋数据科学与软件工程学院548.4.2查询数据库Concurrency的取值决定是否用结果集更新数据库。ResultSet.CONCUR_READ_ONLY:不能用结果集更新数据库中的表。ResultSet.CONCUR_UPDATABLE:可以用结果集更新数据库中的表。2016秋数据科学与软件工程学院558.4.2查询数据库2016秋数据科学与软件工程学院568.5案例分析与实践8.5.1分析与设计8.5.2设计数据库8.5.3开发数据库应用程序2016秋数据科学与软件工程学院578.6讨论与提高8.6.1事务与并发8.6.2使用存储过程8.6.3查询优化——消除不必要的循环8.6.4测试数据库2016秋数据科学与软件工程学院588.6.1事务与并发事务是数据库应用程序的基本逻辑单元,它是用户定义的一个数据库的操作序列,这些操作要么全做,要么全不做,是一个不可分割的基本单位。为完成数据库操作,并保证数据一致性,所有针对数据库的读写操作都被添加在各种强度的锁下,如共享锁或排它锁。在共享锁中,用户可以同时读取数据;在排它锁中,用户不能同时读取、更新数据,只能等待其他用户释放对数据的锁。2016秋数据科学与软件工程学院598.6.1事务与并发事务占用的时间越长,用户等待的时间就越长。提高性能的首要任务就是控制事务的运行时间。因为事务具有隔离性,一个事务的执行不能被其他事务干扰,所以在适当的锁的规范下,事务之间可以有序地并发执行。通过并发执行,加快了数据库执行效率。利用事务的并发操作,可以在事务级别提高数据库的性能。2016秋数据科学与软件工程学院608.6.1事务与并发1.在JDBC中批量执行SQLJDBC中的批量更新特征允许多个更新操作被传递到DBMS上来简化过程。被执行在批量模型上的SQL代码,可以用addBatch()方法添加到一个与statement对象有关的列表上,并用clearBatch()对象方法,列表能被清空。当在列表中添加语句后,调用executeBatch()对象方法,并把它们全部传递到数据库上作为一个单元或批量被执行。2016秋数据科学与软件工程学院618.6.1事务与并发2.选择合适的隔离级别隔离是指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能互相干扰。需要注意的是,事务的隔离级别越高,越应该小心避免并发的冲突。隔离级别可以在JDBCAPI级别上进行设置,以便于DBMS决定合适的加锁计划。可以在JDBCConnection接口上指定5种隔离级别,如表8.8所示2016秋数据科学与软件工程学院628.6.1事务与并发2016秋数据科学与软件工程学院638.6.1事务与并发对于一个连接,隔离级别可以通过调用setTransactionIsolation()方法设置隔离级别。应用程序通过如下代码来设置一个事务的隔离级别。注意,在一个数据库应用系统中,重要的事务应该有较高的隔离级别,不重要的事务可以用较低的隔离级别来完成。而且在事务启动之前,隔离级别必须被设置,并且在事务完成之后重新设置。2016秋数据科学与软件工程学院648.6.2使用存储过程一组为完成特定功能的SQL语句集,存储在数据库中,经过第一次编译之后再次调用时不需要再次编译,用户通过指定存储过程的名字并给出参数来执行存储过程。使用存储过程可以在数据层级别提高数据库的性能。使用存储过程可以在数据层提高数据库的性能,是优化数据库的技术手段之一。2016秋数据科学与软件工程学院658.6.2使用存储过程1.创建存储过程CREATEProcedure<过程名>([参数1数据类型1,参数2数据类型2,…])AS<SQL语句集(过程体)>过程名:是数据库识别存储过程的标识。参数列表:存储过程中的形式列表,用名字来标识调用存储过程时需要给出的参数值。必须指定值的数据类型。过程体:是一个SQL语句集。2016秋数据科学与软件工程学院668.6.2使用存储过程例如,在CategoryPlayer表(属性包括CategoryID、PlayerID、Grade)中,修改答题者编号(PlayerID)为@p1的答题者在题目分组(CategoryID)为@c1的分组中的成绩,将成绩改为@g1。2016秋数据科学与软件工程学院678.6.2使用存储过程2.使用JDBC调用存储过程使用JDBC来调用数据库中的存储过程。用JDBC的Statement接口来传递调用命令,调用返回的结果放在JDBCResultSet中保存。JDBC调用存储过程的代码如下:2016秋数据科学与软件工程学院688.6.3查询优化——消除不必要的循环2016秋数据科学与软件工程学院698.6.4测试数据库数据库系统测试的主要任务就是测试数据库及应用软件。对于应用程序,基本的测试技术(黑盒测试、白盒测试)同样适合,也可以采用基本的测试阶段(单元测试、集成测试、系统测试)。应用程序的重心是操作数据,故测试内容主要是:数据的增、删、改、查及其组合的序列操作。可以采用基本的测试技术,如表增加满、表删除空、删除空表中的记录、创建表、增删改查等。2016秋数据科学与软件工程学院708.6.4测试数据库数据的访问和操作通过SQL代码完成的,因而数据库测试另一方面涉及SQL,主要是:(1)SQL编码是否符合规范、标准;(2)使用Select测试数据、使用Insert产生测试数据、使用Update和Delete测试程序准确性、使用Constaints测试数据完整性;(3)用SQL测试连接表、数据库对象、视图、存储过程、触发器、用户自定义函数等;(4)在脚本语言中(本书Java)用SQL代码测试库模式、数据库及其驱动程序、表和列的类、默认值和规则、码和索引等。2016秋数据科学与软件工程学院718.6.4测试数据库对数据库系统而言,测试的种类也包括功能测试、性能测试(如响应时间、吞吐量、并发性)、可靠性测试、可用性测试、兼容性测试、安全测试等。在测试策略方面,对数据库系统的测试同样可以采用静态测试和动态测试、手工测试和自动化测试工具。2016秋数据科学与软件工程学院728.6.4测试数据库测试数据库的难题是如何建立测试环境,特别是数据库本身。数据库会随着测试操作不停地改变,如何恢复数据库或到一个指定的数据库状态,是一项具有挑战性的任务。另外,确定数据库各种事务的状态也是耗时费力。在清理完数据库之后,需要设计新的测试数据,而且需要一个转换SQL语句的生成器,以便把SQL的语义加进数据库测试用例中。另外,在应用程序中,嵌入的SQL语句通常以字符串的形式出现,给测试带来了困难。2016秋数据科学与软件工程学院738.6.4测试数据库有些数据库厂商带有专门的数据库测试方法或工具,如Oracle数据库测试指南、MySQL内置的SQL测试工具、VisualStudio2013内建数据库单元测试工具等。此外,有更加通用的、商业化数据库测试工具和各类数据库测试的开源工具,如性能测试工具Selenium、Jmeter,与Junit同样技术路线的数据库单元测试框架DBunit,以及可以按照数据库的设计随机生成数据库测试数据的DataFactory。2016秋数据科学与软件工程学院74第9章
基于复用的软件构造第9章基于复用的软件构造首先学习软件复用的基本概念、分类及开发方式。然后学习三种复用:程序库、设计模式和框架。通过具体的编程实现学习三种设计模式;通过分析Junit学习框架与应用;通过两个开源软件API、对案例实现基于程序库的复用开发。最后,简介开发案例其他形态软件的相关框架。2016秋数据科学与软件工程学院76第9章基于复用的软件构造故事10(1)把习题转成word格式输出,以便他用;(2)用柱状图、饼图等显示一个人练习多套习题的结果,便于分析;(3)让用户通过浏览器得到习题,在线练习后提交,等待习题返回评分结果;(4)编写可以直接在手机上练习口算的程序。一是在现有程序基础上增添的功能;二需要重新开发软件,更准确地说是更换开发平台、更换软件架构。2016秋数据科学与软件工程学院77第9章基于复用的软件构造9.1软件复用9.2设计模式9.3框架9.4案例分析与实践9.5讨论与提高9.6思考与练习题2016秋数据科学与软件工程学院789.1软件复用软件复用,是指在两次或多次不同的软件开发过程中重复使用相同或相近的软件或软件模块的过程。该软件可以是已经存在的软件,也可以是专门的可复用软件,简称(软)构件。软件复用是在软件开发中避免重复劳动的解决方案,使得应用系统的开发不再采用一切“从零开始”的模式,而是在已有工作基础上,充分利用过去应用系统开发中积累的知识和经验,从而将开发的重点集中于应用的特有构成成分上。2016秋数据科学与软件工程学院799.1软件复用软件复用具有如下优点。(1)提高生产率。(2)减少维护代价。(3)提高互操作性。(4)支持快速原型。2016秋数据科学与软件工程学院809.1软件复用软件复用也面临挑战,主要如下。软构件与应用系统之间的差异。软构件要达到一定的数量,才能支持有效的复用,而建立软构件库要有很高的投入和长期的积累。难以发现合适的软构件。基于复用的软件开发方法和软件过程是一个新的研究实践领域,需要一些新的理论、技术及支持环境,目前这方面的研究成果和实践经验都不够充分。2016秋数据科学与软件工程学院819.1软件复用依据复用的对象,软件复用分为两种。产品复用。指复用已有的软构件,通过构件集成(组装)得到新系统。产品复用是目前复用的主流途径。过程复用。指复用已有的软件开发过程,使用可复用的应用生成器来自动或半自动地生成所需系统。过程复用依赖于软件自动化技术的发展。2016秋数据科学与软件工程学院829.1软件复用9.1.1软件产品复用9.1.2基于复用的软件开发9.1.3程序库2016秋数据科学与软件工程学院839.1.1软件产品复用软件产品的复用包括代码、设计、测试数据和需求规格等。代码复用是最基本、最普通的软件复用形式,包括可执行代码和源代码。可执行代码和源代码称为软构件或构件。人们把一些相关的可复用的程序编译、打包、压缩在一个程序库,方便使用。2016秋数据科学与软件工程学院849.1.1软件产品复用设计文件是设计决策的通用表示,其本质是捕获的设计/解决问题的知识。与代码不同,设计不可执行。与需求规格不同,设计捕获结构信息而非功能信息。设计表示成用不同方式产生具体设计的模式。不像函数或模块,设计不能用其功能特性检索,而是通过设计解决的一组问题的特性来检索。2016秋数据科学与软件工程学院859.1.1软件产品复用设计复用有三种基本途径:第一种途径是从现有系统的设计结果中提取一些可以复用的设计构件,并把它们直接应用到新系统的设计中;第二种途径是把一个现有系统的全部或部分设计结果用新的语言或在新的平台上重新实现;第三种途径是综合现有系统,或者根据需求重新开发一些专门用于复用的设计构件。2016秋数据科学与软件工程学院869.1.1软件产品复用设计构件分为构件级和架构级。软件体系结构定义了作为一组执行数据的构件聚合体的软件系统的结构。构成体系结构的结构元素比程序设计语言的结构元素更加抽象,具有不同的性质。它们规定了信息流、控制流或构件之间的通信协议。体系结构用特殊符号表示,用体系结构特征检索。可复用的软件体系结构通常是显式地复用软件体系结构,并通过集成其他软件体系结构,建立新的更高层次的体系结构。最常用的可复用设计是设计模式和架构模式。2016秋数据科学与软件工程学院879.1.1软件产品复用测试数据和测试代码是典型的可复用件。测试数据的表示直截了当,检索测试数据的方式可以是软件系统输入域的描述,也可以是该系统功能的某个通用特征。测试代码的表示和检索同普通的逻辑代码一样。2016秋数据科学与软件工程学院889.1.1软件产品复用需求规格是提取用户需求、用某种符号记录用户需求的结果。规格书可以用自然语言表示,也可以用形式化符号(一阶逻辑、公理系统、形式化语言)或混合式。规格书可以通过它们俘获的功能特性检索,也可以复用在构建复合规格书。2016秋数据科学与软件工程学院899.1.1软件产品复用可复用件必须组织成复用库,以便方便地使用。要有效地使用复用库,必须清楚地理解库的内容,这样才能决定库能否满足需求。库的内容有不同的组织和定义方式,可以分为三种类型。(1)通用构件。(2)特殊领域构件。(3)特殊应用代码。2016秋数据科学与软件工程学院909.1.2基于复用的软件开发软件复用必须解决三个基本问题:(1)必须有可复用的对象;(2)所复用的对象必须是有用的;(3)复用者要知道如何使用被复用的对象。2016秋数据科学与软件工程学院919.1.2基于复用的软件开发基于复用的软件开发改变了传统的软件开发过程和技术,它包括两个相关的过程:(1)可复用软构件的开发(DevelopmentforReuse)或面向复用的软件开发,是产生软件资产的过程,称为领域工程;(2)基于软构件的应用系统构造(集成和组装)(DevelopmentwithReuse)或基于复用的软件开发,是使用软件资产生产新系统的过程,也称为应用工程。领域工程是应用工程的基础,它的目标是建立可复用的软构件库。2016秋数据科学与软件工程学院929.1.2基于复用的软件开发基于复用的软件开发,首要任务是把用户需求转换成系统规格,特别是要按照可复用构件修改系统规格。系统设计的核心是软件体系结构。设计要依据已有的构件,在系统规格、应用架构和可获得的构件之间做出妥协和平衡。其中关键的一步是根据系统规格、软件架构和系统设计,查找可复用的软构件。最后,把可复用构件及开发的软件部分,按照软件架构组装起来。最常见的方式是使用集成语言(如脚本语言Python、Unixshell、TCL/TK)把构件“粘合”起来或粘合到框架上,最终得到应有软件。2016秋数据科学与软件工程学院939.1.2基于复用的软件开发基于复用的软件开发面临一系列挑战:(1)确认复用任务及其完成这些任务的技术;(2)提供方法学和工具支持完成任务;(3)把复用任务集成到一个软件开发的工作流程。2016秋数据科学与软件工程学院949.1.2基于复用的软件开发复用任务可能是用高级语言(领域语言)说明待开发应用的规格,尽可能地复用已有的构件合成满足一组需求的应用系统。对于目标系统的任何部分,开发者必须:(1)以支持获取可能的、有用的可复用件的方式表达这一部分的需求;(2)理解获取的软构件;(3)如果得到的软构件足够接近需求,并且具有达到足够的质量,就可以采用它。2016秋数据科学与软件工程学院959.1.2基于复用的软件开发在复用过程,理解软构件和程序是一项重要的脑力工作和成本因素。软构件理解意味着三个因素:(1)理解它的功能;(2)理解它的工作方式;(3)理解如何修改它使其以一点不同的方式完成。2016秋数据科学与软件工程学院969.1.3程序库程序库是软件复用最基本、最普通形式。程序库是一些经常使用、经过检验的规范化程序或子程序的集合。程序库中的程序是经常使用的功能。程序库通常是编译后的二进制可执行码或虚拟机可执行码,把它们放到目录中,设置环境变量,在程序中引入后就可以如同普通函数、对象、类等一样编程使用。2016秋数据科学与软件工程学院979.1.3程序库过程式语言(如C)的程序库主要是各种函数。面向对象语言的程序库统称为类库,实质是一个综合性的面向对象的可重用类型集合,包括接口、抽象类和具体类。程序库可以是语言系统内置的,也可以是第三发独立开发的。2016秋数据科学与软件工程学院989.1.3程序库不同语言打包和引用库的形式略有不同。在程序中引用库的关键字有include、using、import、with等。除了可以引用相同语言的库外,现在的编程语言也允许引入其他语言的库,最常见的是C语言的库。使用第三方开发的程序库与使用系统的程序库,本质上没有区别。通常是理解API设计、查阅API使用方式、学习示范代码及不断练习实践。2016秋数据科学与软件工程学院999.1.3程序库程序库不同于软件包。软件包是指具有特定功能,用来完成特定任务的一个或一组程序。软件包由一个基本配置和若干可选部件构成,可以是源代码或目标码形式。软件包本质上就是一个可以运行的软件,可以打包、压缩,便于发布。经过安装、配置,就可以使用软件包提供的功能和服务。一般而言,软件包不作为可复用件而在软件开发中使用、不能集成到开发的软件中。2016秋数据科学与软件工程学院1009.2设计模式9.2.1基本概念9.2.2基本设计模式目录9.2.3设计模式举例2016秋数据科学与软件工程学院1019.2.1基本概念设计模式(DesignPattern)是对给定环境下反复出现问题的一个通用的、可复用的解决方案。它是可以在很多不同场合用以解决问题的一种描述或样板。模式是程序员在设计一个软件或系统时解决共同问题最佳实践的正式描述。面向对象的设计模式表示类或对象之间的关系与交互,没有说明涉及的最终应用软件的类或对象。一个设计模式不是一个可以直接转换成代码的完成的设计。2016秋数据科学与软件工程学院1029.2.1基本概念设计模式涉及的抽象和应用的范围很广。体系结构模式描述了很多可以用结构化方法解决的设计问题。数据模式描述了重现的面向数据的问题及用来解决这些问题的数据建模解决方案。构件模式,即设计模式,涉及与开发子系统和构件相关的问题、它们之间相互通信的方式及它们在一个较大的体系结构中的位置。界面设计模式描述公共用户界面问题及具有影响因素(包括最终用户的具体特征)的解决方案。2016秋数据科学与软件工程学院1039.2.1基本概念设计模式有如下优势:设计模式在软件开发中提供了一种公共的词汇和理解;设计模式是软件设计建立文档的一种手段;设计模式通过支持软件的功能属性和质量属性来构造软件;设计模式有助于建立一个复杂的和异构的软件结构;设计模式有助于管理软件的复杂度。2016秋数据科学与软件工程学院1049.2.2基本设计模式目录基本的设计模式分为创建型模式、结构型模式和行为型模式三种。2016秋数据科学与软件工程学院1059.2.3设计模式举例一个模式描述了一个问题,使用户能够理解问题所处的环境,并列出了影响因素,用来表明在环境中如何解释这个问题,以及如何应用解决方案。描述设计模式的方式不完全一样,基本内容包括模式名称、解决的问题、设计元素及其之间的交互(通常用UML的类图描述类及其关系,用时序图描述交互关系)、应用场景、特点分析、实际例子等。2016秋数据科学与软件工程学院1069.2.3设计模式举例1.工厂方法模式问题描述:在一个图形编辑器中,可以绘制直线line、矩形square、圆circle等各种图形shape。不同的图形的绘制draw是不同的,但是画笔对所有图形都统一使用draw。以后可能会修改某个具体图形的绘制方式(编码实现),也可能还要增添不同的图形。为了便于软件的维护和扩展,如何设计?2016秋数据科学与软件工程学院1079.2.3设计模式举例解决方案:定义一个用于创建对象的接口或抽象类,让子类根据条件或参数决定实例化哪一个类或调用哪一个方法。工厂方法模式使一个类的实例化延迟到其子类。2016秋数据科学与软件工程学院1089.2.3设计模式举例工厂方法模式结构:工厂(Factory)是工厂方法模式的核心,它负责实现创建所有实例的内部逻辑。工厂类的创建产品类的方法可以被外界直接调用,创建所需的产品对象。抽象产品(Product)是所创建的所有对象的父类,它负责描述所有实例共有的公共接口。具体产品(ConcreteProduct)是工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。2016秋数据科学与软件工程学院1099.2.3设计模式举例2016秋数据科学与软件工程学院1109.2.3设计模式举例工厂方法模式的核心思想是:有一个专门的类来负责创建实例的过程。它把产品视为一系列的类的集合,这些类是由某个抽象类或接口派生出来的一个对象树。而工厂类用来产生一个合适的对象来满足客户的要求。如果工厂方法模式所涉及的具体产品之间没有共同的逻辑,就可以使用接口来扮演抽象产品的角色;如果具体产品之间有共同的逻辑,就必须把这些共同的东西提取出来,放在一个抽象类中,然后让具体产品继承抽象类。2016秋数据科学与软件工程学院1119.2.3设计模式举例为实现更好复用的目的,共同的东西总是应该抽象出来的。实现时,工厂方法模式可以参数化;返回对象可以是抽象对象,也可以是具体对象;遵循命名规则有助于开发者识别代码结构。2016秋数据科学与软件工程学院1129.2.3设计模式举例使用工厂方法模式的场合及益处是:平行连接类的层次结构;一个类想让其子类说明对象;一个类不预计子类,但必须创建子类;一簇对象需要用不同的接口分隔开;代码要处理接口而不是实现的类;连接子类的方式比直接创建对象更加灵活;对客户隐藏具体的类。2016秋数据科学与软件工程学院1139.2.3设计模式举例JDBC是工厂方法模式的一个很好的例子。数据库应用程序不需要知道它将使用哪种数据库,所以它也不知道应该使用什么具体的数据库驱动类。相反,它使用工厂方法来获取连接、语句和其他对象,这使得改变后台数据库变得非常灵活,同时并不会改变应用的数据模型。2016秋数据科学与软件工程学院1149.2.3设计模式举例在JDK中使用工厂方法设计模式的例子:valueOf()方法会返回工厂创建的对象,这等同于参数传递的值;getInstance()方法会使用单例模式创建类的实例;java.lang.Class中的方法newInstance()从每次调用工厂方法时创建和返回新实例;java.lang.Object中的方法toString();java.lang.Class中的方法forName()。2016秋数据科学与软件工程学院1159.2.3设计模式举例2.适配器模式问题描述:正在运行的程序使用L型号的打印机print文件,现在又购置了H型号的打印机,但是它提供了不同的打印函数disply()。如果不想改变当前程序的编码,想使用新的类、但又不能改变它,如何设计?这个问题的核心是,如何使用既有类的操作,但是它的接口不符合要求。2016秋数据科学与软件工程学院1169.2.3设计模式举例解决方案:为接口不符合要求的类创建一个适配器类,使其提供的接口满足使用要求,如图9.2所示。2016秋数据科学与软件工程学院1179.2.3设计模式举例适配器模式适用如下场合:想使用一个已经存在的类,而它的接口不符合目前的需求。想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(那些接口可能不一定兼容的类)协同工作。(仅适用于对象Adapter)想使用一些已经存在的子类,但是不可能对每个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口。2016秋数据科学与软件工程学院1189.2.3设计模式举例3.命令模式2016秋数据科学与软件工程学院1199.2.3设计模式举例4.基于模式的设计2016秋数据科学与软件工程学院1209.2.3设计模式举例为了使设计者使用模式来思考,可以考虑下面的方法:(1)保证理解全局——将要建立的软件所处的环境。需求模型表达了这一点。(2)检查全局,提取此抽象层上表示的模式。(3)从“全局”模式开始设计,为将来的设计工作建立环境或架构。(4)在更低抽象层寻找有助设计方案的模式。(5)重复(1)到(4),直到完成完整的设计。(6)通过使每个模式适应将要建立的软件细节对设计进行优化。2016秋数据科学与软件工程学院1219.3框架9.3.1基本概念9.3.2框架和设计模式9.3.3框架开发9.3.4软件测试框架JUnit2016秋数据科学与软件工程学院1229.3.1基本概念框架是整个或部分系统的可复用设计,表现为一组抽象构件及构件实例间交互的方法。框架是可被应用开发者定制的应用骨架。可以说,一个框架是一个可复用的设计构件,它规定了应用的体系结构,阐明了整个设计、协作构件之间的依赖关系、责任分配和控制流程,表现为一组抽象类及其实例之间协作的方法,它为构件复用提供了上下文关系。2016秋数据科学与软件工程学院1239.3.1基本概念框架方法是构件技术、软件体系结构和应用软件开发三者发展结合的产物。框架通常以构件库的形式出现,但构件库只是框架的一个重要部分,构件库的大规模复用需要框架。框架的关键在于框架内对象间的交互模式和控制流模式。在某种程度上,将构件和框架视为两个不同但彼此协作的技术或许更好。框架为构件提供复用的环境,为构件处理错误、交换数据及激活操作提供了标准的方法。2016秋数据科学与软件工程学院1249.3.1基本概念根据软件的层次结构,软件框架分为:基础设施框架。对系统基础功能的接近完整的实现,并留有扩展余地。中间件框架。对一些常用的中间件按需定制或按需扩展而成。例如,可以运行Web程序的Web服务器。应用框架。面向应用领域中应用系统的骨架,但它并不提供完整的应用软件系统的全部。如Web应用框架Struts、Android应用框架。2016秋数据科学与软件工程学院1259.3.1基本概念根据应用范围的不同,软件框架分为:技术框架。致力于解决某一技术领域内的通用技术问题,并提供定制和扩展机制。技术框架又称为水平框架。水平,强调的是通用性、使用范围的广泛性。例如,Hibernate就是解决面向对象与关系数据库映射问题的技术框架;Junit是解决单元测试问题的技术框架。业务框架。在特定业务领域内通用的框架。业务框架又称为垂直框架,垂直,就是强调专门化。例如,一个网络管理软件的垂直框架针对网络管理这个专门领域提供了完善的功能。2016秋数据科学与软件工程学院1269.3.1基本概念框架在软件开发中具有显著的特点:应用领域内的软件结构一致性好,便于建立更加开放的系统;复用代码大大增加,软件生产效率和质量也得到了提高;软件设计人员要专注于对领域的了解,使需求分析更充分;存储了经验,可以让那些经验丰富的人员去设计框架和领域构件,而不必限于低层编程;2016秋数据科学与软件工程学院1279.3.1基本概念框架在软件开发中具有显著的特点:允许采用快速原型技术;有利于在一个项目内多人协同工作;大粒度的复用有助于降低开发和维护费用、加快开发速度、提高软件生产效率、提高产品质量,而参数化框架使得适应性、灵活性增强。2016秋数据科学与软件工程学院1289.3.2框架和设计模式构件通常是代码复用,而设计模式是设计复用,框架则介于两者之间,部分代码复用,部分设计复用,有时分析也可复用。在软件生产中有三种级别的复用:内部复用,即在同一应用中能公共使用的抽象块;代码复用,即将通用模块组合成库或工具集,以便在多个应用和领域都能使用;应用框架的复用,即为专用领域提供通用的或现成的基础结构,以获得最高级别的复用性。2016秋数据科学与软件工程学院1299.3.2框架和设计模式设计模式是对在某种环境中反复出现的问题及解决该问题的方案的描述,它比框架更抽象;框架可以用代码表示,也可以直接执行或复用,而对模式而言,只有实例才能用代码表示;设计模式是比框架更小的元素,一个框架中往往含有一个或多个设计模式,框架总是针对某一特定应用领域,但同一模式却可适用于各种应用。框架是软件,而设计模式是软件的知识。2016秋数据科学与软件工程学院1309.3.3框架开发面向对象系统获得的最大的复用方式就是框架。一个大的应用系统可能由多层互相协作的框架组成。一个基于框架开发的应用系统包含一个或多个框架、与框架相关的构件类,以及与应用系统相关的功能扩展。与应用系统相关的扩展包括与应用系统相关的类和对象。应用系统可能仅仅复用了面向对象框架的一部分,或者,它可能需要对框架进行一些适应性修改,以满足系统需求。2016秋数据科学与软件工程学院1319.3.3框架开发框架的开发从代码、设计和分析三个层面复用了软件。(1)复用代码,因此从一已有构件库中建立应用变得非常容易,因为构件都采用框架统一定义的接口,从而使构件间的通信简单。(2)复用设计。它提供可复用的抽象算法及高层设计,并能将大系统分解成更小的构件,而且能描述构件间的内部接口。(3)复用分析。所有的人员若按照框架的思想来分析事务,那么就能将它划分为同样的构件,采用相似的解决方法,从而使采用同一框架的分析人员之间能进行沟通。2016秋数据科学与软件工程学院1329.3.3框架开发框架的复用周期如下:(1)用能够与得到描述可复用件相匹配的术语说明需求;(2)搜索并获取最相关的复用件;(3)评估它们的复用能力;(4)选择最合适的候选复用件,改编它适合当前的需求;(5)把它集成到当前的应用系统。2016秋数据科学与软件工程学院1339.3.3框架开发复用框架的典型的做法是,根据功能的覆盖度、平台支持、文档质量等评估几个框架。所以,步骤(1)和(2)较为简单,评估每个候选框架(步骤(3))会占用一段时间。评估包括阅读文档、决定框架是否合适,以及实际使用框架开发一个应用原型来检测框架的各种属性。2016秋数据科学与软件工程学院1349.3.3框架开发按照应用开发需要改编最适合的框架(步骤(4))意味着为每个框架的参与者找到实现,在框架提供的工具中选择具体构件、选择并改编应用特殊的类以便它们能适应在框架中的角色。这个步骤通常需要手工编程,也有运用工具产生程序。2016秋数据科学与软件工程学院1359.3.3框架开发最后,在框架环境下集成,实现有效地把应用构件插入框架结构的各种场景。框架随着复用演化。框架的每一次复用实例都会遇到一些识别改进之处的困难,以及能进一步参数化的方面,进一步抽象或分解的参照者等。2016秋数据科学与软件工程学院1369.3.4软件测试框架JUnit2016秋数据科学与软件工程学院1379.4案例分析与实践9.4.1生成Word格式的习题9.4.2口算习题练习得分的可视化展示9.4.3完整案例的软件构造2016秋数据科学与软件工程学院1389.4.1生成Word格式的习题构造任务11:使用FreeMarker生成Word格式的习题。需求:给定50道100以内的加减法口算题,用Word格式输出。分析:文字处理是一项非常复杂的系列操作,包括字体、字形、颜色等的选择,行间距、段落等的设置,还要综合考虑这些因素自动排版。2016秋数据科学与软件工程学院1399.4.1生成Word格式的习题从Office2003开始,可以将Office文档转成XML文件,这样只要将需要填入的内容放上${}占位符,就可以使用像FreeMarker这样的模板引擎将出现占位符的地方替换成真实数据,这种方式较之其他方案要更为简单。2016秋数据科学与软件工程学院1409.4.1生成Word格式的习题1.理解FreeMarkerFreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。设计FreeMarker的主要目的是实际生成HTML的Web页面,特别是为基于servlet的应用按照MVC模式(ModelViewController)生成HTML的Web页面。2016秋数据科学与软件工程学院1419.4.1生成Word格式的习题2016秋数据科学与软件工程学院1429.4.1生成Word格式的习题使用FreeMarker输出Word文件主要包含两部分:制作模板和完成合并(模板+数据)产生实际输出。制作模板的步骤:用MSWord制作要输出的Word样式,存为XML文件,将XML翻译成FreeMarker模板。FreeMarker编程实现输出模板的步骤:创建配置实例,创建数据模型,获取模板,将模板与数据合并。2016秋数据科学与软件工程学院1439.4.1生成Word格式的习题2.制作模板(1)创建Word模板。(2)另存为XML格式、后缀更改为.ftl。(3)用能够高亮显示XML和元素自动配对等功能的工具打开*.ftl文件。2016秋数据科学与软件工程学院1449.4.1生成Word格式的习题模板基础知识简介如下。(1)模板的整体结构。直接输出的文本;由${}或#{}来限定、计算值替换输出;ftl标记:FreeMarker用指令编排模板,类似于HTML标记,要成双成对出现,如列表<#list>…<#/list>。为与HTML标记区分,用#开始(有些以@开始);注释:包含在<#--和-->限定,不产生输出。2016秋数据科学与软件工程学院1459.4.1生成Word格式的习题(2)指令。三种ftl标记指令的格式:开始:<#directivenameparameters>;结束:</#directivename>;空内容指令:<#directivenameparameters/>。指令有系统预定义(#开始)和用户定义(@替换#)两种。FreeMarker忽略ftl标记中的空白字符。但<、</和指令之间不允许有空白字符。2016秋数据科学与软件工程学院1469.4.1生成Word格式的习题(3)取得变量的值。FreeMarker用实际值替换${variable}限定的变量variable。变量名只能是字母、数字、下画线、$、@和#的组合,且不能以数字开头。可以使用
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论