新書推薦:
《
形似神异:什么是中日传统政治文化的结构性差异
》
售價:HK$
55.8
《
养育不好惹的小孩
》
售價:HK$
77.3
《
加加美高浩的手部绘画技法 II
》
售價:HK$
89.4
《
卡特里娜(“同一颗星球”丛书)
》
售價:HK$
87.4
《
伟大民族:从路易十五到拿破仑的法国史(方尖碑)
》
售價:HK$
188.2
《
古今“书画同源”论辨——中国书法与中国绘画的关系问题兼中国画笔墨研究
》
售價:HK$
132.2
《
《日本文学史序说》讲演录
》
售價:HK$
72.8
《
无尽的海洋:美国海事探险与大众文化(1815—1860)
》
售價:HK$
99.7
|
編輯推薦: |
《软件工程系列规划教材:软件设计与体系结构》是软件工程系列规划教材之一,可作为计算机相关专业本科生和研究生的教材,同时也是软件工程领域专业人员的优秀参考读物。
|
內容簡介: |
软件设计与体系结构从CDIO工程理念出发,围绕构思(Conceive)、设计(Design)、实现(Implement)、运作(Operate)四个方面展开阐述,以一种崭新的视角展现软件设计和体系结构的内容,尽可能做到覆盖面广和内容新颖,在保持经典内容的基础上,力求提供来自业界新的内容和进展。构思(C)给出一个软件要做什么的总体思路;设计(D)给出一个软件怎么做的方法和手段;实现(I)给出一个软件实际做出来的实现技术和路线;运作(O)给出一个软件如何成功运作的模式和方法。CDIO各个部分相对独立但又互有联系,能够让读者以全面的、主动的和实用的方式学习和掌握相关内容,并着重强调工程实践训练和综合能力培养。软件设计与体系结构可作为计算机相关专业本科生和研究生的教材,同时也是软件工程领域专业人员的参考读物。
|
目錄:
|
第一篇 构思篇 (Conceive)
第1章 软件环境
1.1 软件与软件分类
1.1.1 软件的特点
1.1.2 软件的分类
1.2 程序设计语言与开发环境
1.2.1 程序设计语言
1.2.2 开发环境
1.3 数据库环境
1.3.1 关系数据库
1.3.2 面向对象数据库
1.3.3 非结构化数据库
1.4 平台环境
1.4.1 集成平台
1.4.2 虚拟化平台
1.4.3 云平台
1.5 软件工程环境
1.5.1 软件过程模型
1.5.2 软件工程经济学
1.5.3 软件过程管理
1.5.4 软件维护及演化
1.6 习题与思考题
第2章 软件需求
2.1 软件需求与需求工程概述
2.1.1 需求的定义
2.1.2 需求工程概述
2.2 需求获取
2.2.1 引言
2.2.2 需求获取的实质
2.2.3 常用方法
2.3 需求建模与分析
2.3.1 面向对象建模
2.3.2 过程建模
2.3.3 数据建模
2.4 需求规约与验证
2.4.1 需求规约
2.4.2 需求验证
2.5 需求管理
2.6 习题与思考题
第3章 软件体系结构
3.1 4 1视图模型
3.1.1 逻辑视图
3.1.2 开发视图
3.1.3 进程视图
3.1.4 物理视图
3.1.5 场景
3.2 软件体系结构的定义
3.3 软件体系结构的核心模型
3.4 软件体系结构描述方法
3.5 软件体系结构描述语言(ADL)
3.6 软件体系结构设计原则
3.7 基于体系结构的软件开发过程
3.8 软件体系结构的风格
3.8.1 管道-过滤器风格
3.8.2 分层风格
3.8.3 客户/服务器风格
3.8.4 浏览器/服务器风格
3.8.5 事件驱动风格
3.9 体系结构模式
3.9.1 从混沌到结构
3.9.2 分布式系统
3.9.3 交互系统
3.9.4 适应性系统
3.10 习题与思考题
第二篇 设计篇 (Design)
第4章 软件设计
4.1 设计目标及要素
4.2 设计原则
4.2.1 抽象化
4.2.2 模块化
4.2.3 信息隐藏
4.2.4 模块的功能独立性
4.2.5 降低模块间耦合度的方法
4.3 设计规约
4.4 设计方法
4.4.1 结构化设计方法
4.4.2 面向对象的设计
4.5 习题与思考题
第5章 统一建模语言UML
5.1 UML核心概念
5.1.1 元素
5.1.2 具名元素
5.1.3 命名空间
5.1.4 可打包元素
5.1.5 可重定义元素
5.1.6 分类器
5.1.7 特性
5.1.8 注解
5.1.9 关系
5.2 UML关键字与版型
5.2.1 关键字
5.2.2 版型
5.3 UML图示
5.3.1 类图
5.3.2 对象图
5.3.3 包图
5.3.4 组件图
5.3.5 合成结构图
5.3.6 部署图
5.3.7 用例图
5.3.8 活动图
5.3.9 状态机图
5.3.10 交互图
5.3.11 顺序图
5.3.12 通信图
5.3.13 计时图
5.4 习题与思考题
第6章 设计模式
6.1 模式思维方法
6.1.1 模式的概念
6.1.2 模式的重要性
6.1.3 软件设计模式的分类
6.1.4 模式描述模板
6.1.5 模式思维的步骤
6.2 设计模式概述
6.2.1 创建型模式
6.2.2 结构型模式
6.2.3 行为型模式
6.3 习题与思考题
第7章 软件复用
7.1 概述
7.1.1 概念
7.1.2 软件复用的发展
7.1.3 可复用的软件制品
7.1.4 软件复用的分类
7.1.5 软件复用的困难与建议
7.1.6 软件复用的宗旨
7.2 分析复用
7.2.1 分析过程复用
7.2.2 分析制品复用
7.3 设计复用
7.3.1 设计过程复用
7.3.2 基于构件的设计复用
7.4 代码复用
7.5 测试复用
7.5.1 面向复用的测试用例设计过程
7.5.2 复用测试用例描述要素
7.6 习题与思考题
第8章 软件界面设计
8.1 软件界面设计概述
8.1.1 软件界面分析
8.1.2 软件界面开发过程
8.1.3 软件界面设计基本原则
8.2 人机界面基础知识
8.2.1 认知心理学
8.2.2 软件人机工程学
8.2.3 艺术设计
8.3 界面的定量分析
8.3.1 GOMS击键层模型
8.3.2 界面效率的测量
8.3.3 Fitts律和Hick律
8.4 人本界面
8.4.1 认知和关注点
8.4.2 界面模式与单调性
8.4.3 统一性和元动作
8.4.4 易用性和帮助机制
8.5 移动设备界面设计
8.6 习题与思考题
第三篇 实现篇 (Implement)
第9章 Web开发技术
9.1 Web开发概述
9.1.1 运作原理及概念
9.1.2 开发语言及技术概述
9.1.3 Web应用的特点
9.2 Web服务器
9.2.1 Microsoft IIS
9.2.2 Apache
9.2.3 Tomcat
9.2.4 J2EE服务器
9.2.5 Nginx
9.3 服务器端开发技术及框架
9.3.1 Java技术
9.3.2 Net技术
9.3.3 PHP技术
9.3.4 Ruby技术
9.3.5 MVC框架
9.3.6 Spring框架
9.4 Web前端开发技术
9.4.1 HTML
9.4.2 CSS层叠样式表
9.4.3 JavaScript技术
9.4.4 AJAX技术
9.4.5 Silverlight技术
9.5 习题与思考题
第10章 数据库开发技术
10.1 SQL语言
10.2 数据库和表
10.2.1 创建及删除数据库
10.2.2 创建表
10.2.3 修改表
10.2.4 删除表
10.3 索引
10.3.1 创建索引
10.3.2 删除索引
10.4 查询
10.4.1 SELECT语句
10.4.2 多表查询
10.4.3 子查询
10.4.4 集合运算
10.4.5 聚集函数
10.5 数据维护
10.5.1 插入
10.5.2 更新
10.5.3 删除
10.6 视图
10.6.1 创建视图
10.6.2 删除视图
10.7 游标
10.7.1 声明游标
10.7.2 打开和关闭游标
10.7.3 删除游标
10.7.4 应用游标
10.8 存储过程
10.8.1 存储过程创建与修改
10.8.2 执行存储过程
10.8.3 删除存储过程
10.9 触发器
10.9.1 创建触发器
10.9.2 删除触发器
10.10 习题与思考题
第11章 软件成本估算技术
11.1 软件成本估算的步骤
11.1.1 建立目标
11.1.2 计划所需的数据与资源
11.1.3 准确说明软件需求
11.1.4 尽可能详细地做出估算
11.1.5 采用多个独立的方法与资源
11.1.6 比较与迭代估算
11.1.7 跟踪与变更
11.2 软件成本估算的方法
11.2.1 算法模型
11.2.2 专家判断
11.2.3 通过推理来进行估算
11.2.4 帕金森估算
11.2.5 价格策略估算
11.2.6 自顶向下估算
11.2.7 自底向上估算
11.2.8 各方法的总结比较
11.3 基本COCOMO模型软件成本估算
11.3.1 模型定义与假设
11.3.2 软件开发模式分类
11.3.3 组织型基本COCOMO模型
11.3.4 其他模式COCOMO模型
11.4 习题与思考题
第12章 软件架构技术
12.1 构件技术
12.1.1 软件构件技术基础
12.1.2 基于构件的软件工程
12.2 软件架构综述
12.2.1 企业架构
12.2.2 业务架构
12.2.3 应用架构
12.2.4 信息架构
12.3 中间件
12.3.1 中间件的目标及地位
12.3.2 中间件的基本类型
12.3.3 常见中间件技术介绍
12.4 习题与思考题
第13章 软件集成技术
13.1 软件合成与软件集成
13.2 软件集成模式
13.2.1 集成适配器模式
13.2.2 集成消息器模式
13.2.3 集成正面模式
13.2.4 集成媒介器模式
13.3 企业应用集成
13.3.1 EAI的产生和意义
13.3.2 企业应用系统的分类
13.3.3 企业应用集成的基本原则
13.4 数据集成
13.4.1 数据集成的基本概念
13.4.2 参考数据模型
13.4.3 数据集成的元数据管理
13.5 基于消息服务的集成框架
13.5.1 消息传输模型
13.5.2 消息代理任务
13.5.3 消息代理拓扑结构
13.5.4 消息代理产品的选择
13.5.5 使用J2EE的企业消息传递
13.6 过程集成
13.6.1 工作流和工作流管理系统
13.6.2 跨组织过程集成
13.7 习题与思考题
第14章 软件测试技术
14.1 软件测试概述
14.1.1 软件测试技术的发展
14.1.2 软件开发与软件测试
14.1.3 软件测试基本原理与原则
14.1.4 软件测试模型
14.1.5 测试心理学
14.1.6 测试覆盖
14.2 软件测试管理
14.2.1 质量改进模型PDCA
14.2.2 测试需求
14.2.3 测试计划
14.2.4 测试设计及测试用例
14.2.5 测试执行
14.2.6 测试记录与跟踪
14.2.7 回归测试
14.2.8 总结与报告
14.3 软件测试技术
14.3.1 黑盒测试与白盒测试
14.3.2 手工测试与自动化测试
14.3.3 单元测试
14.3.4 数据库性能检查
14.3.5 压力测试
14.3.6 安全性测试
14.3.7 安装测试
14.3.8 环境测试
14.4 测试工具
14.5 习题与思考题
第四篇 运作篇 (Operate)
第15章 软件架构师角色与职责
15.1 软件架构师的定义
15.2 软件架构师的工作场景
15.3 软件架构师的角色
15.4 软件架构师与其他角色的关系及区别
15.4.1 软件架构师与产品经理的关系及区别
15.4.2 软件架构师与项目经理的关系及区别
15.4.3 软件架构师与系统分析员的关系及区别
15.5 软件架构师的职责
15.6 软件架构师的所应具备的能力
15.7 软件架构师的工作评价标准
15.8 习题与思考题
第16章 软件运作模式
16.1 软件企业的崛起
16.1.1 大型科研项目的研究是软件业的萌芽
16.1.2 独立软件产品的出现预示软件业入正轨
16.1.3 企业解决方案让软件业开始兴盛
16.1.4 个人电脑及互联网的普及让软件业繁荣
16.2 传统的软件运作模式
16.3 基于Free的运作模式
16.3.1 自由软件
16.3.2 免费软件
16.3.3 共享软件
16.3.4 案例
16.4 基于开源的运作模式
16.4.1 开源软件
16.4.2 开源软件盈利模式
16.4.3 案例
16.5 基于服务的运作模式
16.5.1 软件企业职能转变
16.5.2 基础设施即服务(IaaS)
16.5.3 平台即服务(PaaS)
16.5.4 软件即服务(SaaS)
16.6 习题与思考题
第17章 案例分析
17.1 Google搜索引擎
17.1.1 营销模式
17.1.2 运作分析
17.2 Twitter
17.2.1 营销模式
17.2.2 运作分析
17.3 Facebook
17.3.1 营销模式
17.3.2 运作分析
17.4 淘宝
17.4.1 营销模式
17.4.2 运作分析
17.5 习题与思考题
参考文献
|
內容試閱:
|
序言 第1章 软件环境
1.1 软件与软件分类
软件(Software)是用户与硬件之间的接口界面,用户主要是通过软件与计算机进行交流。软件是计算机系统设计的重要依据。为了方便用户,为了使计算机系统具有较高的总体效用,在设计计算机系统时,必须全局考虑软件与硬件的结合,以及用户的要求和软件的要求。来自众多教材的关于软件的定义一般包含如下三方面内容:
(1)指令的集合(也称为计算机程序),通过执行这些指令可以满足预期的特征、功能和性能需求。
(2)数据结构,它使程序可以充分利用信息。
(3)描述程序功能需求以及程序如何操作和使用的文档。因而可以认为软件=程序 数据 文档。
中华人民共和国国家标准软件工程术语GBT11457―1995对软件的定义是:与计算机系统的操作有关的程序、规程、规则及任何与之有关的文档。对于计算机来说,硬件就如同是一个人的身躯,软件就如同一个人的思想和灵魂。
1.1.1 软件的特点软件作为一个产品或服务,与其他产品相比具有很大的区别,具体表现如下特点:
(1)软件是一种逻辑实体,不是具体的物理实体,它具有抽象性。软件的好坏与否,正确与否,必须通过测试、分析、思考、判断之后才知道。这一特性就给软件的设计、生产和管理带来了很多困难。
(2)软件产品的生产主要是研制,是知识的结晶,不像传统意义上的硬件制造有明显的制造过程,在软件的开发过程中没有明显的制造过程。
(3)软件具有复杂性,其开发和运行常受到计算机系统的限制,对计算机系统有着不同程度的依赖性。为了消除这种依赖性,引入了软件移植,并把可移植性当做衡量软件质量的因素之一。
(4)软件的生产职能由人采用人工方式来生产,还未完全摆脱手工开发方式,成本昂贵。所以为了加快软件技术的发展,就必须提出和采用新的软件开发方法。例如,可以采用软件复用技术或者使用有效的软件开发环境提高软件开发效率。
(5)在软件的运行和使用期间,没有硬件那样的机械磨损和老化问题,但存在退化问题,由于修改及需求的变化导致退化。硬件故障率曲线是一个U形曲线(即为浴盆曲线,在产品整个使用寿命期间,典型的故障率变化曲线,形似浴盆),说明硬件随着使用时间的增加,故障率也急剧上升)。
软件故障率曲线,没有U形曲线的右半部分说明软件不会随着使用时间的增加使得故障率增加,所以软件不存在磨损和老化问题,但是存在退化问题。
1.1.2 软件的分类
不同类型的工程对象,对其进行开发和维护有着不同的要求和处理方法,目前还找不到一个统一的严格分类标准。一般来说,可以将软件分为七大类:
(1)系统软件。系统软件是管理、使用和维护计算机系统资源的软件。它使得用户和其他软件将计算机当做一个整体而不需要顾及底层每个硬件是如何工作的。一般来讲,系统软件包括操作系统和一系列基本的工具(如编译器、数据库管理、存储器格式化、文件系统管理、用户身份验证、驱动管理、网络连接等方面的工具)。
(2)应用软件。应用软件解决属于专用领域的,非计算机本身问题的软件。它是在特定领域内开发,针对用户的某种应用目的所撰写的软件。如Microsoft公司的办公软件MicrosoftOffice,Adobe公司的图像处理软件Photoshop,腾讯公司的通信工具QQ,ACDSystems公司的图像浏览软件ACDSee等。
(3)工程科学软件。工程科学软件的应用范围非常地广泛,涵盖了航空航天学、天文学、地理学、生物学、物理学等。随着科学工程的复杂化,工程科学软件不再仅仅局限于传统的数值计算,目前的工程科学计算软件开始带有实时软件和系统软件的特性。计算机辅助设计软件和系统仿真软件均属于工程科学软件的范畴。
(4)嵌入式软件。嵌入式软件就是嵌入在硬件中的操作系统和开发工具软件,由于存储空间有限,因而要求软件代码紧凑、可靠,大多对实时性有严格要求。嵌入式软件产业发展迅猛,已成为软件体系的重要组成部分。嵌入式软件具有非常广阔的应用前景,应用领域包括:工业控制、交通管理、信息家电、家用电器、医疗设备、电子商务、环境工程与自然、机器人等。
(5)产品线软件。产品线软件面向多个不同的用户提供一系列符合用户实际应用的功能,可以分为面向有限特定市场的产品线软件,如库存控制软件;面向大众消费品的产品线软件,如财务应用软件、多媒体软件、游戏软件等。
(6)Web应用程序。随着B2B应用和电子商务的发展,Web应用不仅仅只是一组超文本链接文件,它正朝着复杂化的趋势发展,它可以为用户提供强大的计算功能甚至于还可以与商务应用程序及企业数据库相连接。随着互联网技术的发展和应用软件的成熟,在21世纪SaaS(Software-as-a-service,软件即服务)作为一种完全创新的软件应用模式逐步兴起。软件的厂商将应用软件统一部署在自己的服务器上,通过Internet向用户提供所需的应用软件服务,客户可以根据自己的实际需求向厂商订购所需的软件服务,类似于用户不再购买软件而是向厂商租用基于Web的软件,并且按照订购服务的数量和事件来向厂商支付费用,节省了购买、构件、维护基础设施和应用程序的成本,它与on-demandsoftware(按需软件),theapplicationserviceprovider(ASP,应用服务提供商),hostedsoftware(托管软件)具有相似的含义。国内著名的SaaS厂商如提供在线会计的金蝶友商网,提供在线CRM(CustomerRelationshipManagement,客户关系管理)的八百客等。
(7)人工智能软件。人工智能是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。人工智能软件能以人类智能相似的思维方式解决计算和分析问题。其开发涉及信息论、控制论、自动化、仿生学、生物学、心理学、数理逻辑、语言学、医学和哲学等多门学科。人工智能领域的应用程序包括机器人、语言识别、图像识别、自然语言处理和专家系统等。
除了上述的七种分类,业内还可以将软件按照授权方式和软件规模进行分类。
(1)按照授权方式的分类。不同的软件一般都有对应的软件授权,软件的用户必须在同意所使用软件的许可证的情况下才能够合法地使用软件,按照软件的授权方式来分类,软件可以分为商业软件、开源软件、共享软件、免费软件、公共软件。
商业软件(commercialsoftware)是不允许用户随意地复制、研究、修改或者散布的软件,一般被作为商品进行交易。违反此类软件授权的行为通常要承担严重的法律责任。传统的商业软件公司多数会采用此类授权。
开源软件(open-sourcesoftware)是源代码可以被公众使用的软件,并且对此软件的使用、修改和分发也不受许可证的限制或仅给予些许其他的限制。著名的开源软件如Linux,MySQL,FireFox,Apache等。
共享软件(shareware)通常可以从各种渠道免费下载并使用其试用版,但是在使用功能或者使用时间上受到限制。小到一款CD到MP3的转换软件,大到Microsoft的Office和Vista操作系统,都可以先下载来试用一番,觉得不错再出钱去购买。
免费软件(freeware)是无需付费就可以取得的软件,而且使用上也不会出现任何日期的限制或者是软件使用上的限制,但是通常会有其他的限制,如使用者不能擅自修改软件的源代码,不得将其用于商业用途等,否则视同侵权。
公共软件(publicdomainsoftware)是原作者已放弃权利或者著作权过期或者作者已经不可考究的软件。软件的使用上无任何限制。
(2)按照软件规模分类(表11)。
表11 软件按规模分类
序号类别名称产品规模(源程序行数)行参加人数人研制周期
1 微型软件05KB 11周~1月
2 小型软件1~2KB 11~6月
3 中型软件5~10KB 2~51~2年
4 较大型软件50~100KB 8~202~3年
5 大型软件1MB 100~1000 4~5年
6 极大型软件1~10MB 1000~5000 6~10年
1.2 程序设计语言与开发环境
1.2.1 程序设计语言程序设计语言(ProgrammingDesignLanguage,PDL),又称编程语言(ProgrammingLan-guage),是一组用来定义计算机程序的语法规则。它是一种被标准化的交流技巧,用来向计算机发出指令。
言程序,因此任何一种语言程序最终都必须翻译成相应的机器语言程序,完成这种翻译工作的程序称为翻译程序或编译程序[2]。
机器语言实际上是一串二进制代码,因此用这种语言去进行程序设计,既烦琐费时又容易出错。因此,后来人们就研究出所谓的汇编语言(也称为符号语言)。汇编语言仍然保持着机器语言的基本特性,只不过把操作码和地址码用符号表示而已。
虽然汇编语言比机器语言更为简单,但用起来还是略显烦琐,此外它没有通用性,因此后来人们又设计出各种高级语言。高级语言不再过度地依赖某种特定的机器或环境,这是因为高级语言在不同的平台上会被编译成不同的机器语言,而不是直接被机器执行。接下来将介绍几种常用的程序设计语言。
(1)BASIC(BeginnersAll-purposeSymbolicInstructionCode,又译培基),意思就是初学者的全方位符号式指令代码,是一种设计给初学者使用的程序设计语言。BASIC是一种直译式的编程语言,在完成编写后不须经由编译及链接等手续即可运行,但如果需要单独运行时仍然需要将其创建成可执行文件。
(2)C语言是一种通用的、过程式的编程语言,广泛用于系统与应用软件的开发。具有高效、灵活、功能丰富、表达力强和较高的移植性等特点,在程序员中备受青睐。
(3)C是一种使用非常广泛的电脑程序设计语言。它是一种静态数据类型检查的,支持多范型的通用程序设计语言。C支持过程化程序设计、数据抽象化、面向对象程序设计、泛型程序设计、基于原则设计等多种程序设计风格。
(4)C#是Microsoft推出的一种基于NET框架的、面向对象的高级编程语言。C#由C语言和C派生而来,继承了其强大的性能,同时又以NET框架类库作为基础,拥有类似VisualBasic的快速开发能力。
(5)Fortran,亦译为福传,是由FormulaTranslation两个字所组合而成,意思是公式翻译。它是世界上第一个被正式采用并流传至今的高级编程语言。
(6)Java是一种面向对象的程序设计语言,拥有跨平台、面向对象、泛型编程的特性。任职于Sun公司的詹姆斯高斯林(JamesGosling)等于20世纪90年代初开发出Java语言的雏形,最初被命名为Oak,目标是设置在家用电器等小型系统的程序语言,应用于电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着90年代互联网的发展,Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。后来公司被甲骨文公司并购,Java也随之成为甲骨文公司的产品。
(7)Pascal是一个有影响的面向对象和面向过程的编程语言,由尼古拉斯沃斯在1968年9月设计,在1970年发行,作为一个小型的和高效的语言,意图鼓励使用结构化编程和数据结构进行良好的编程实践。
(8)Haskell是一种纯函数式编程语言,它的命名源自美国数学家HaskellBrooksCurry,他在数学逻辑方面上的工作使得函数式编程语言有了广泛的基础。Haskell语言是1990年在编程语言Miranda的基础上标准化的,并且以Lambda-Calculi(兰姆达演算)为基础发展而来。这也是为什么Haskell语言以希腊字母Lambda作为自己的标志。Haskell语言的最重要的两个应用是GlasgowHaskellCompiler(GHC)和Hugs(一个Haskell语言的编译器),特色是利用很简单的叙述就可以完成LinkedList、矩阵等数据结构。
1.2.2 开发环境
IntegrationDesignEnvironment、IntegrationDebuggingEnvironment)是一种辅助程序开发人员开发软件的应用软件。
IDE通常包括编程语言编辑器、编译器解释器、自动建立工具、通常还包括调试器。有时还会包含版本控制系统和一些可以设计图形用户界面的工具。许多支持面向对象的现代化IDE还包括了类别浏览器、物件检视器、物件结构图。虽然目前有一些IDE支持多种编程语言(如Eclipse、NetBeans、MicrosoftVisualStudio),但是一般而言,IDE主要还是针对特定的编程语言而量身打造(如VisualBasic)。接下来将介绍几个常用的开发环境。
(1)Delphi,是Windows平台下著名的快速应用程序开发工具(RapidApplicationDevelop-ment,RAD)。Delphi使用的核心是由传统Pascal语言发展而来的ObjectPascal,以图形用户界面(GraphicalUserInterface,GUI)为开发环境,透过IDE、VCL工具与编译器,配合链接数据库的功能,构成一个以面向对象程序设计为中心的应用程序开发工具。Delphi所编译的可运行档,虽然容量较大,但因为产生的是真正的原生机器码,效能上比较快速。除了使用数据库的程序之外,不需安装即可运行,在使用上相当方便。
(2)Eclipse是著名的跨平台自由集成开发环境(IDE)。最初主要用于Java语言开发,目前亦有人通过插件使其作为C、Python、PHP等其他语言的开发工具。Eclipse的本身只是一个框架平台,但是众多插件的支持,使得Eclipse拥有较佳的灵活性。许多软件开发商以Eclipse为框架开发自己的IDE。
(3)MicrosoftVisualStudio(简称VS)是美国Microsoft公司的开发工具包系列产品,可以用来创建Windows平台下的Windows应用程序和网络应用程序,也可以用来创建网络服务、智能设备应用程序和Office插件。VS是一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,如UML工具、代码管控工具、集成开发环境等。所写的目标代码适用于Microsoft支持的所有平台,包括MicrosoftWindows、WindowsMobile、WindowsCE、NETFramework、NETCompactFramework和MicrosoftSilverlight。VisualStudio包含基于组件的开发工具(如VisualC#、VisualJ#、VisualBasic和VisualC),以及许多用于简化基于小组的解决方案的设计、开发和部署的其他技术。
1.3 数据库环境
计算机自诞生以来就被用于进行事务处理,并存储大量的信息。计算机对信息的处理分为以下几个阶段:人工管理、文件管理、数据库管理。数据库的出现为数据处理带来了革命性的变化。数据库是由一些互相关联的文件以及一组使得用户可以访问和修改这些文件的程序构成的集合,其基本目标是提供一个可以方便有效地存储、访问和维护数据信息的环境[3]。相对于文件管理来说,数据库管理具有以下优势:数据库使得分散孤立的数据变得通用,使数据成为具有逻辑关系的数据集合,用户可以通过统一的访问接口和方法对数据进行操作和访问,并且具有高并发性和低冗余性。正因为这些特点,自从数据库出现以来数据库技术获得了长足的进步。数据库系统从20世纪60年代末开始发展至今大致经历了三代:第一代,层次数据库、网状数据库;第二代,关系型数据库;第三代,以面向对象技术为主要特征的面向对象数据库。本节我们将详细介绍关系型数据库、面向对象数据库和非结构化数据库三种类型的数据库。
1.3.1 关系数据库
1层次型数据库
层次性数据库是以层次模型组织的数据库,是最早出现和应用的数据库。1968年,IBM公司推出了信息管理系统IMS。IMS是最早的层次型数据库系统,它采用层次型模型作为组织数据的方式。该系统最初设计的目的是帮助美国航空航天管理局管理宏大的阿波罗计划中的烦琐资料。在阿波罗登月40年之后的今天,IMS系统在全球范围内仍然拥有庞大的用户群,目前IMS系统已经发展到了V11版本。
顾名思义,所谓层次模型就是按照层次结构的形式来组织数据的模型,它把整个数据库的结构表示为一个有序树的集合,而这些有序树的每一个节点是一个由若干数据项组合而成的记录。运用层次模型管理数据的优点是数据具有较好的层次性,然而这种模型会带来某一层次上的数据冗余。因此在层次性数据库的基础上研究人员提出了网状数据库。
2网状数据库
网状数据库是以网状模型为基础的数据库系统,与层次型数据库相比较,其对数据的表示及管理能力要强得多。网状模型是美国数据系统语言协会的数据库任务小组(DBTGCODASYL)在20世纪60年代末正式推出的,网状数据模型最终被标准化为CODASYL模型。与层次模型相比较,网状模型可以有多个父节点,它不仅可以表示系统的层次结构,而且在表示网状结构和多元结构时有先天的优势。然而,网状模型也存在其严重的不足,即数据操纵的复杂性,用户在进行查询时,要按照复杂的导航方式指明路径。
可以说,层次性数据库是数据库的先驱,而网状数据库则是数据库概念、方法和技术的奠基者。层次性数据库和网状性数据库代表了第一代数据库,实现了数据的集中控制和数据的共享,提高了数据的独立性,很大程度上减少了数据的冗余性。然而,不论是层次模型还是网状模型都过多地保护了数据的物理存储细节,因此用户的应用依赖于数据的存储,即数据的独立性较差。
3关系型数据库
1970年,IBM公司的研究员EFCodd发表了一篇在数据库领域中划时代的论文《大型共享数据库数据的关系模型》[4],提出了一种新的模型――关系模型,开创了关系数据库理论和关系数据库的研究,为关系数据库奠定了理论基础,从而建立了数据库系统发展史上的第二个里程碑――关系型数据库。为此,EFCodd获得计算机界的最高荣誉――ACM图灵奖。
关系型数据库是建立在集合论数学基础之上的,是集合论在数据组织领域的应用,它与层次型数据库和网状数据库相比,具有数据模型简单灵活、数据独立性高、有良好的语言接口等优点,目前主流的商业数据库系统如Oracle,DB2,MSSQLServer都是关系性数据库。
概括来讲,关系型模型由三部分构成:①数据结构。数据结构包括域、域上定义的关系等。在关系模型中,实体与实体之间直接的联系通过关系来表示。②关系操作。关系操作可用关系代数中的并、交、差、广义笛卡儿积、选择、投影、链接、除等操作来表示。无论操作的对象和结果均是集合。③数据完整性。数据完整性包括实体完整性、参照完整性及与应用有关的完整性。实体完整性和参照完整性是关系模型必须满足的完整性约束条件,由关系数据库系统自动支持。与应用有关的完整性由用户定义,针对具体的应用,由应用的环境决定。关系模型具有以下特点:①关系模型概念简单,实体与实体之间的联系通过关系表示。②以关系代数为基础,形式化基础好。③数据独立性强,数据的物理存储对用户透明。④数据检索及操作语言简单,方便用户学习。
4实体-关系模型数据库结构的基础是数据模型。数据模型是一个描述数据、数据联系、数据语义及一致性约束的概念工具的集合。在关系型数据库中,通常使用实体关系模型对数据结构进行建模。
|
|