收藏 分享(赏)

软件工程 实践和导论 资料.doc

上传人:dreamzhangning 文档编号:2747332 上传时间:2018-09-26 格式:DOC 页数:28 大小:2.26MB
下载 相关 举报
软件工程 实践和导论 资料.doc_第1页
第1页 / 共28页
软件工程 实践和导论 资料.doc_第2页
第2页 / 共28页
软件工程 实践和导论 资料.doc_第3页
第3页 / 共28页
软件工程 实践和导论 资料.doc_第4页
第4页 / 共28页
软件工程 实践和导论 资料.doc_第5页
第5页 / 共28页
点击查看更多>>
资源描述

1、1第 1 章 UML 建模语言概述UML:Unified Modeling Language;一种可视化的,用于详细描述的建模语言;它能够让系统构造者用标准的、易于理解的方式建立起能够表达他们设计思想的系统蓝图;提供一种机制,以便于不同的人之间有效的共享和交流设计成果。UML 的用处:客户和开发人员之间沟通的桥梁。UML 借助一套图形和符号,可以完成这座桥梁的作用。 UML 不是一门程序设计语言。但可以使用代码生成器工具将 UML 模型转换为多种程序设计语言代码,或使用反向生成器工具将程序源代码转换为 UML。 UML 不是一种可用于定理证明的高度形式化的语言。这样的语言有很多种,但它们通用性

2、较差,不易理解和使用。 UML 是一种通用建模语言。对于一些专门领域,例如用户图形界面(GUI)设计、超大规模集成电路(VLSI)设计、基于规则的人工智能领域,使用专门的语言和工具可能会更适合些。 UML 是一种离散的建模语言。UML 不适合对诸如工程和物理学领域中的连续系统建模。它是一个综合的通用建模语言,适合对诸如由计算机软件、固件或数字逻辑构成的离散系统建模。UML 的目标 利用面向对象概念为系统建模; 建立概念上的与可执行制品的一个显式耦合; 解决复杂系统和关键任务系统中固有的规模问题; 创建一种所有人和所有机器都可使用的建模语言。UML 包括以下几个部分: 视图:它是由许多图组成的一

3、个抽象,用于建模系统的某个方面。视图只是表达系统某一方面特征的 UML 建模组件的子集。在每一类视图中使用一种或两种特定的图来可视化地表示视图中的各种概念。 图:它是描述 UML 视图内容的图形。UML 有 9 种不同的图,通过它们的相互组合提供被建模系统的所有视图。 模型元素:即 UML 图中使用的概念,例如类、对象、消息等。 通用机制:它为模型元素提供额外的注释、信息和语义。UML 包含五类视图: 用例视图:强调从用户角度看到的或需要的系统功能,并指出各功能的操作者。 逻辑视图:逻辑视图从系统的静态结构和动态行为角度显示如何实现系统的功能。 组件视图:显示的是代码组件的组织关系。 并发视图

4、:显示的是系统的并发性,解决在并发系统中存在的通信和同步问题。 部署视图:显示系统的具体部署,即目标计算机的物理组成。图就是用来显示各种模型元素符号的实际图形,这些元素经过特定的排列组合来阐明系统的某个特定部分或方面。UML 中的图包括:用例图 p28、类图、对象图 p45、包图 p47 状态图、顺序(序列,时序)图、协作图、活动图、组件(构件)图和部署(配置)图等用例图 :用例分析的一个好处是它能够展现出系统和外部世界之间的边界。参与者(Actor)是典型的系统外部实体,而用例(Use Case )是典型的属于系统内部。系统的边界(Boundary)用一个矩形来代表,里面写上系统的名字。系统

5、的用例装入矩形之内。类图:属性是类的一个特性,它描叙了类的对象(也就是类的实例)所具有的一系列特性值。操作是类能够做的事情或者你(或者另一个类)能对类做的事情对象图:类的属性在该类的每个对象中都有具体值。对象名首写字母小写,后面根一个冒号,冒号后面是该对象所属的类名,并且整个名字要带下划线。包图:包用附有标签的矩形表示 状态图:状态用具有圆形拐角的矩形表示,状态间带箭头的实线代表状态的迁移,箭头指向目标状态。图中的实心圆代表状态转移的起点,带圆圈的实心圆代表终点。活动图:活动状态表示成带有圆形边线的矩形,它含有活动的描述(普通的状态盒为直边圆角) 。简单的完成转换用箭头表示。和状态图相似,活动

6、图也有起点和终点符号,表示法和状态图一样。协作图:协作图除了展示出对象之间的关联还显示出对象之间的消息传递。通常在协作图中省略掉关联的名字。关联线附近的箭头线表示对象之间传递的消息,箭头指向消息接收对象。消息名称和消息序号附在箭头线附近。消息一般含义是触发接收消息的对象执行它的一项操作。在协作图中,在消息名前面加上消息的序号,它代表该消息在消息序列中的顺序。消息名和序号之间用冒号隔开。构件图:构件用一边有两个小矩形的一个长方形表示,它可以用实线与代2表构件接口的圆圈相连 。构件图表示了构件之间的依赖关系。每个构件实现(支持)一些接口,并使用另一些接口。如果构件间的依赖关系与接口有关,那么构件可

7、被具有同样接口的其他构件替代。部署图;节点用带有节点名称的立方体表示,节点间的关联代表通信路径。关联有用来辨别不同路径的构造型。节点也有泛化关系。UML 中的模型元素类、对象、状态、节点、包、组件和各种关系UML 中通用机制:修饰,注释,规格说明扩展 UML:构造型,标记值,约束构造型:基于一个已知的模型元素定义一种新的模型元素,即加入了额外语义的一个已存在元素。第 2 章 软件建模概述建模的定义 建模是捕捉系统本质的过程,是对现实的简化。 把复杂的系统变成小的系统,采用“各个击破” 原则逐一解决。 把问题从问题领域转移到解决领域 。 建模目的:要生产合格的软件就要有一套关于体系结构、过程和工

8、具的规范。建模的好处 使用模型便于从整体上、宏观上把握问题,可更好的解决问题; 建模是使你逐层深入解决问题的办法; 便于确认应用系统的功能需求; 可以加强人员之间的沟通; 可以更早地发现问题或疏漏; 模型为代码生成提供依据。建模的目标 帮助我们按照实际情况或按照我们所需要的样式对系统进行可视化; 允许我们详细说明系统的结构和行为; 给出一个指导我们构造系统的模板; 对我们的决策进行文档化。建模的误区 建模就等于是写文档 从开始阶段你可以考虑到所有的一切 建模是在浪费时间 有的开发人员都知道如何建模 建模十条原则1 仅有数据模型对于现代软件是不够的。 2 接受变化,并且允许你的模型能够随着时间进

9、行改进。 你不能冻结它们,然后就期待着成功。 3 模型并不一定就是文档,文档也不一定就是模型。 4大多数的模型可能也应该被丢弃。 5 只有代码才能与代码保持真正的同步。 6 一些简单的工具,比如白板,就完全足以应付大多数建模工作。 7 思考,然后再编码。 8 你总能从别人身上学到东西。 9 建模可以用一种轻盈的方式。 10 设计直到代码发布后才算完成。怎样成为优秀的软件模型设计者1 人远比技术重要 2 理解你要实现的东西 3 谦虚是必须的品格 4 需求就是需求 5 需求其实很少改变,改变的是你对需求的理解 6经常阅读 7 降低软件模块间的耦合度 8 提高软件的内聚性 9 考虑软件的移植性 10

10、 接受变化 11 不要低估对软件规模的需求 12 性能仅仅是很多设计因素之一13 管理接口 14 走近路需要更长的时间 15 别信赖任何人 16 证明你的设计在实践中可行 17 应用已知的模式 18 研究每个模型的长处和弱点 19 在现有任务中应用多个模型 20 教育你的听众 21 带工具的傻瓜还是傻瓜 22 理解完整的过程 23 常做测试,早做测试24 把你的工作归档 25 技术会变,基本原理不会软件全程建模:在软件工程的全部实施过程中都采用模型的方式而非文字的表达方式来进行描述的实现过程。全程建模的特点:模型相互之间是有关联的,模型成为软件工程过程各阶段展现的主体而不是文字描述作为主体存在

11、。基于 UML 的软件建模需求建模:用例图静态结构建模:类图、对象图、包图、部署图动态结构建模: 顺序图、协作图、状态图、活动图软件界面建模 首先确定界面元素,通常一个软件界面的元素包括界面主颜色、字体颜色、字体大小、界面布局、界面交互方式、界面功能分布、界面输入输出模式等等。 对用户工作效率有明显影响的元素包括:输入输出方式、交互方式、功能分布。 界面元素所要达到的设计目的是让最终用户能够获得美感、提高工作效率、易于操作使用系统。 再次要通过对软件的背景,使用的行业特点、用户的使用水平、喜好等方面的了解提出针对用户的一些设计。 最后建立用户界面模型,并且同用户进行交互。这个工作对于界面建模是

12、很重要的,因为用户对于功能的需求相对是比较明确的,对于界面方面的需求却比较模糊,但是当一个系统展现在他们面前的时候,他们却有很多的要求和想法,通过这个工作可以将用户对界面的需求挖掘出来,而且也比较容易暴露设计中的缺陷。(1) 整个类层次结构使用一张表 (2) 每个具体类使用一张表 (3) 每个类使用一张表 (4) 所有类映射到一个通用的表结构以上几类仿照下面的画P129数据库建模之属性拓展模式 书 p1203第 3 章 软件需求建模-用例模型用例模型主要组件 是:用例、参与者和被建模系统。系统边界:由该系统处理的功能定义。系统功能:由用例表示,每个用例指定了一个完整的功能。用例的主要目的: 决

13、定和描述系统的功能需求,促成客户与将负责建立系统的开发人员对此达成一致协议。 对系统应该做什么给出清晰的和一致的描述。 为系统测试的执行提供一个基础。 提供将功能需求追溯到系统中实际的类和操作的能力。用例的定义: 系统执行的一组动作序列,这些动作可以产生一个特定参与者可观察的结果。 这些动作会涉及与多个参与者之间的通信,以及在系统内部执行的计算和任务。用例的特征:1 用例总是由参与者启动2 用例为参与者提供结果 3 用例是完整的用例之间的关系:扩展关系使用关系包含关系分组关系描述用例:使用文本来对用例进行详细描述,应包括:用例的目标用例如何被启动参与者和用例之间的消息流用例的其它流程用例如何结

14、束并向参与者传递结果测试用例:1)验证(verification):完成用例建模之后即可与用户一起进行用例的验证。2)确认(validation):当系统开发出来了以后,即可进行用例的确认。UML 在协作中实现用例的任务 :将用例描述中那些不同步骤和动作转换为各个类、类的操作以及这些类之间的关系。即将用例中的每一步职责分配给参与此协作的所有类。识别系统边界需要注意的问题 界定系统边界就是确定哪些需求是在系统之内,哪些需求是在系统之外,即搞清楚我们需要做什么,不需要做什么。当发现一些系统需求要由某一 Actor 来实现时,可能这个 Actor 实际上是系统的一部分,否则这个需求就不是系统要实现的

15、功能。通过分析需求是否在系统之内来界定系统的边界。第 4 章 深入需求建模Include:若你发现在写用例文档时经常使用拷贝/粘贴操作,则说明用例中包含一些通用的内容可以被重用,这时应该考虑用例之间是否存在包含关系。 Extend: 扩展通常用于在一定条件下扩展现存用例的行为,这是在不改变原始用例的情况下,添加新行为到用例之中的一种有效方法。 通常在现存系统的更新版本中或当一种产品可以被客户定制时使用扩展方法。 使用扩展方法时需要在用例图中加入扩展点(extension points),扩展点标注了用例中的什么地方可以被扩展,扩展可能发生在什么地方。 每个扩展点必须有一个名字及其在用例中的位置

16、的描述。 用例是在一定的条件下被扩展的,当执行用例时,若扩展条件为真,则扩展用例中的操作步骤就被执行。 系统需要提供老主顾价格折扣和季节性商品价格折扣功能。Inheritance 在多个 Actor 和用例之间可能存在继承关系。 Actor 之间存在继承关系意味着一个 Actor 拥有和另一个Actor 相同的角色,这两个 Actor 以同样的方式和某一用例进行交互。 用例间的继承关系意味着一个用例是另一用例的特殊版本。 Inheritance 是一种 a kind of 的关系。Interfaces Actor 和用例都可以定义接口,接口描述了实体能完成的操作。接口不是用例和 Actor 的

17、一部分,它只是描述了怎样与 Actor 和用例交互。一个 Actor 或者用例可以拥有多个接口。一个接口包括接口的名字和一个操作声明集合。角色接口具有特定接口的 Actor 和用例必须支持接口定义的行为,但是我们并不关心接口的实现。用例接口是为 Actor 的使用而定义的。假设 National Widgets 允许大公司进行批量订货,National Widgets必须提供一个接口,以使得大公司可以调用。第 5 章 软件系统静态结构分析与设计对象就是我们可以谈论和操纵的一个事物,它总是以某种方式与我们对现实世界的理解相关联。类是对象类型的描述,所有对象都是相应类的实例,类描述了一种对象的特征

18、和行为。面向对象分析与设计的基础是类、对象,以及它们之间的关系。类图的一个目的是为其它图定义一个基础,例如在动态图中显示对象的状态以及对象之间的协作。发现类的任务应该由系统问题域专家来完成类的名称应该来自系统的问题域,并且应该尽可能地明确,不会造成歧义。类的名称应该是一个名词。类属性捕获了描述和识别该类的一个特定实例的信息。类只应该包括当前正建模的系统感兴趣的属性。常用的关系:关联(Association)泛化(Generation)依赖(Dependency)精化(Refinement)关联表示两个类的对象之间存在一个链接。受约束的泛化关系重叠 overlapping 互斥 disjoint

19、完全 complete 不完全 incomplete子系统:一个模型元素不能被一个以上的包拥有。模型质量:实用性、易于交流和维护、一致性、完整性、集成性4第 6 章 软件动态行为分析与设计对象通过相互发送消息来进行交互,消息包括以下几种类型:简单消息、同步消息、异步消息用来展示对象之间是如何交互的:一般形态、实例形态活动图目的: 当一个操作正在执行时,捕获其将执行的工作。 捕获一个对象的内部工作。 显示一组相关的动作将如何执行,以及它们将怎样影响周围的对象。 显示用例的实例在动作和对象状态变化方面是如何执行的。 显示业务在工作者、工作流程、组织和对象等方面是如何工作的。第 7 章 RUP 过程

20、瀑布过程的假设: 需求预先可知; 需求很少变化; 客户知道他们的所需,而且不需要对需求进行可视化; 可以用抽象的方法完成设计; 所采用的技术能解决项目中出现的所有问题。结构化分析与设计存在的问题:数据散布在许多不同的函数中,代码重用复杂。经常是通过粘贴/复制方式在多个地方重用代码。 当逻辑改变时: 需要在多个地方修改代码。 改变函数将导致依赖于该函数的其他函数受影响。 经常需要在函数中动态改变数据类型。RUP(Rational Unified Process): 是一种软件工程过程 是一个过程产品 有自己的过程框架 捕获了现代软件开发中的最佳实践RUP 的目标:按照预先制定的时间计划和经费预算

21、,开发出高质量的软件产品以满足最终用户的需求。角色:描述某个人或者一个小组的行为与职责。RUP 预先定义了很多角色。 活动:是一个有明确目的的独立工作单元。 工件:是活动生成、创建或修改的一段信息。RUP 捕获的 6 项最佳商业实践 :被证明是解决软件开发过程中根本问题的方法,是软件开发过程的经验总结。RUP 的三大特点:用例和风险驱动、以架构为中心、迭代和增量开发RUP 的六大经验 :1 迭代式开发。 2 管理需求。3 基于组件的体系结构。 4 可视化建模。 5 验证软件质量。 6 控制软件变更。 1 迭代式开发 在软件开发的早期阶段就想完全、准确的捕获用户的需求几乎是不可能的。 实际上,我

22、们经常遇到的问题是需求在整个软件开发工程中经常会改变。 迭代式开发允许在每次迭代过程中需求可能有变化,通过不断细化来加深对问题的理解。 迭代式开发不仅可以降低项目的风险,而且每个迭代过程以可以执行版本结束,可以鼓舞开发人员。2 管理需求 确定系统的需求是一个连续的过程,开发人员在开发系统之前不可能完全详细的说明一个系统的真正需求。 RUP 描述了如何提取、组织系统的功能和约束条件并将其文档化,用例和脚本已被证明是捕获功能性需求的有效方法。3 基于组件的体系结构 组件使重用成为可能,系统可以由组件组成。 基于独立的、可替换的、模块化组件的体系结构有助于管理复杂性,提高重用率。 RUP 描述了如何

23、设计一个有弹性的、能适应变化的、易于理解的、有助于重用的软件体系结构。4 可视化建模 RUP 往往和 UML 联系在一起,可视化模型有助于提高人们管理软件复杂性的能力。 RUP 告诉我们如何可视化地对软件系统进行建模,获取有关体系结构、组件结构及行为的信息。5 验证软件质量在 RUP 中软件质量评估不再是事后进行或单独小组进行的分离活动,而是内建于过程中的所有活动,这样可以及早发现软件中的缺陷。6 控制软件变更迭代式开发中如果没有严格的控制和协调,整个软件开发过程很快就陷入混乱之中,RUP 描述了如何控制、跟踪、监控、修改以确保成功的迭代开发。RUP 通过软件开发过程中的制品,隔离来自其他工作

24、空间的变更,以此为每个开发人员建立安全的工作空间。5RUP 是一种可伸缩的软件开发框架,具有以下特点:迭代开发、需求管理、基于组件的架构可视化、可视化建模、质量管理、变化管理RUP 中有 9 个核心工作流,分为: 6 个核心过程工作流(Core Process Workflows); 3 个核心支持工作流(Core Supporting Workflows)。尽管 6 个核心过程工作流可能使人想起传统瀑布模型中的几个阶段,但应注意迭代过程中的阶段是完全不同的,这些工作流在整个生命周期中一次又一次被访问。9 个核心工作流在项目中轮流被使用,在每一次迭代中以不同的重点和强度重复。1商业建模(Bus

25、iness Modeling) 商业建模工作流描述了如何为新的目标组织开发一个构想,并基于这个构想在商业用例模型和商业对象模型中定义组织的过程、角色和责任。2需求(Requirements)需求工作流目标是描述系统应该做什么,并使开发人员和用户就这一描述达成共识。为了达到该目标,要对需求的功能和约束进行提取、组织、文档化;最重要的是理解系统所解决问题的定义和范围。 3分析和设计(Analysis 细化阶段(Elaboration);构造阶段(Construction);交付阶段(Transition)。 每个阶段结束于一个主要的里程碑(Major Milestones) 每个阶段本质上是两个里

26、程碑之间的时间跨度。 在每个阶段的结尾执行一次评估以确定这个阶段的目标是否已经满足。 如果评估结果令人满意的话,可以允许项目进入下一个阶段。Inception Phase初始需求捕获、成本效益分析、初始风险分析、项目涉及范围分析、定义备选的架构、开发初始的原型、初始的用例模型 (10% - 20% complete)、初步建立问题域模型 本阶段具有非常重要的意义,在这个阶段中所关注的是整个项目进行中的业务和需求方面的主要风险。 初始阶段结束时是第一个重要的里程碑:生命周期目标(Lifecycle Objective)里程碑。生命周期目标里程碑评价项目基本的生存能力。生命期目标里程碑必须满足的条

27、件6Elaboration Phase用例分析: 用例 (80% written and reviewed by end of phase) 用例模型 (80% done) 场景:Sequence and Collaboration DiagramsClass, Activity, Component, State Diagrams需求词汇表 (so users and developers can speak common vocabulary)领域模型:理解系统要解决的问题精华风险评估创建可执行的架构路线为构造阶段创建详细的计划计划资源、时间、设备、人员及成本标价 细化阶段的目标是分析问题

28、领域,建立健全的体系结构基础,编制项目计划,淘汰项目中最高风险的元素。 为了达到该目的,必须在理解整个系统的基础上,对体系结构作出决策,包括其范围、主要功能和诸如性能等非功能需求。同时为项目建立支持环境,包括创建开发案例,创建模板、准则并准备工具。 细化阶段结束时第二个重要的里程碑:生命周期结构(Lifecycle Architecture)里程碑。生命周期结构里程碑为系统的结构建立了管理基准并使项目小组能够在构建阶段中进行衡量。 要检验详细的系统目标和范围、结构的选择以及主要风险的解决方案。Construction PhaseFocus is on implementation of the

29、 design:不断地实现系统的功能可执行的软件系统更加完美可执行的软件系统显示出更好的稳定性实现所有细节,而不仅仅是实现和架构特别有关的部分分析继续进行,但是设计和编码占主体 在构建阶段,所有剩余的构件和应用程序功能被开发并集成为产品,所有的功能被详细测试。从某种意义上说,构建阶段是一个制造过程,其重点放在管理资源及控制运作以优化成本、进度和质量。 构建阶段结束时是第三个重要的里程碑:初始功能(Initial Operational)里程碑。初始功能里程碑决定了产品是否可以在测试环境中进行部署。此刻,要确定软件、环境、用户是否可以开始系统的运作。此时的产品版本也常被称为“beta”版。Tra

30、nsition Phase交付阶段的重点是确保软件对最终用户是可用的。交付阶段可以跨越几次迭代,包括为发布做准备的产品测试,基于用户反馈的少量的调整。在生命周期的这一点上,用户反馈应主要集中在产品调整,设置、安装和可用性问题,所有主要的结构问题应该已经在项目生命周期的早期阶段解决了。在交付阶段的终点是第四个里程碑:产品发布(Product Release)里程碑。此时,要确定目标是否实现,是否应该开始另一个开发周期。在一些情况下这个里程碑可能与下一个周期的初始阶段的结束重合。 角色:描述某个人或者一个小组的行为与职责。RUP 预先定义了很多角色。 活动:是一个有明确目的的独立工作单元。 工件:

31、是活动生成、创建或修改的一段信息。RUP 裁剪:RUP 是一个通用的过程模板,包含了很多开发指南、制品、开发过程所涉及到的角色说明,由于它非常庞大所以对具体的开发机构和项目,用 RUP 时还要做裁剪,也就是要对 RUP进行配置。RUP 就像一个元过程,通过对 RUP 进行裁剪可以得到很多不同的开发过程,这些软件开发过程可以看作 RUP 的具体实例。RUP 裁剪可以分为以下几步:1) 确定本项目需要哪些工作流。RUP 的 9 个核心工作流并不总是需要的,可以取舍。72) 确定每个工作流需要哪些制品。3) 确定 4 个阶段之间如何演进。确定阶段间演进要以风险控制为原则,决定每个阶段要那些工作流,每

32、个工作流执行到什么程度,制品有那些,每个制品完成到什么程度。4) 确定每个阶段内的迭代计划。规划 RUP 的 4 个阶段中每次迭代开发的内容。 5) 规划工作流内部结构。工作流涉及角色、活动及制品,他的复杂程度与项目规模即角色多少有关。最后规划工作流的内部结构,通常用活动图的形式给出。黑盒测试也称功能测试或数据驱动测试,它是在已知产品所应具有的功能,通过测试来检测每个功能是否都能正常使用,在测试时,把程序看作一个不能打开的黑盆子,在完全不考虑程序内部结构和内部特性的情况下,测试者在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数锯而产生正确的输

33、出信息,并且保持外部信息(如数据库或文件)的完整性。白盒测试也称结构测试或逻辑驱动测试,它是知道产品内部工作过程,可通过测试来检测产品内部动作是否按照规格说明书的规定正常进行,按照程序内部的结构测试程序,检验程序中的每条通路是否都有能按预定要求正确工作,而不顾它的功能,白盒测试的主要方法有逻辑驱动、基路测试等,主要用于软件验证。 能力成熟度整合模型(CMMI):全称 Capability Maturity Model Integration。能力成熟度模型集成 CMMI 是 CMM 模型的最新版本。随着应用的推广与模型本身的发展,演绎成为一种被广泛应用的综合性模型。CMMI 是全球软件管理的典

34、范,是全球软件管理经验的总结和提炼。CMMI 的实施包括 7 步:(1)进行基本知识的培训;(2)成立工作小组;(3)建立文档体系;(4)进行内部模拟评审;(5)确定正式评估的工作步骤;(6)正式进行评估;(7)根据评估结果改进软件过程。 ADO.Net 数据库访问技术ADO.NET 也称做 .NET 的 ActiveX 数据对象,负责通过 ODBC 或者其它专业的信道连接到外部数据源。访问数据库中的数据分为 3 层处理模型:建立到数据源的连接。通过连接执行 SQL 命令在数据可用的时候处理 SQL 命令返回的数据。ADO.NET 是.NET 应用程序的数据访问模型。它能用于访问关系型数据库系

35、统 。ADO.NET 提供两个核心的组件:.NET 数据提供程序:负责数据访问DataSet:负责数据的操作。 .NET 数据提供者:用于连接工作方式为.NET 所知的数据源。通过 OLE 和.NET 相互协作,实现对这些数据源的操作。.NET 数据提供者的名字就是所使用的数据库的名字:SQL Server,Oracle,Access 等。连接数据源的步骤:(1) 通过创建一个新文本文件来创建一个空的 Mircosoft Data Link文件,然后把这个文件的扩展名改成 udl。(2) 双击这个新文件,在弹出的对话框中可以创建和编辑数据库的连接信息。(3) 选取数据提供者:如果是 Acces

36、s 数据库,选择 Microsoft Jet5.0 provider。如果是 SQL Sever 或者 MSDE 数据库,选择 Microsoft OLEDB Provider for SQL Server。(5) 设置连接属性。(6) 进行连接测试。(7) 建立一个连接的时候,需要建立一个SystemData.OleDB.OLEDBConnection 实例或者System.Data.SqlClient.SQLConnection 对象。(8) 调用 OLEDBConnection 的 Open 方法建立和数据库的连接。Connection 对象连接数据源具体的方法:连接 OLE DB 数据

37、库(以 Access 数据库为例) String strCon=“Provider=Microsoft.Jet.OLEDB.5.0; Data Source=D: chapter7mytest.mdb“;OleDbConnection con = new OleDbConnection(strCon);连接 SQL Server 数据库 String strCon=“server=localhost;uid=mytest;pwd=123; database=library”;SqlConnection con=new SqlConnection(strCon); Command 对象用来对数据

38、库执行 SQL 语句,包括 OleDbCommand 和SqlCommand 等对象; Command 对象的常用方法 :8DataReader 对象从数据库中读取数据,实现了对数据源的只读访问; DataReader 是一个用来存储表的对象,它允许使用其 Read 方法来顺序读取数据。Read 方法可以使光标视图中的指针向下一行移动,确保行中各列的数据可以被一组 Get 方法获取。包括 OleDbDataReader 对象和 SqlDataReader 对象。采用连接的、只向前的、游标方式的访问;使用 DataReader 检索数据OleDbConnection con = new OleD

39、bConnection();con.ConnectionString= “Provider=Microsoft.Jet.OLEDB.5.0;Data Source=C:UsersShiwlDesktopdb1.mdb“;OleDbCommand cmd=new OleDbCommand();cmd.Connection=con;cmd.CommandText=“select * from 表 1“;try con.Open();OleDbDataReader reader=cmd.ExecuteReader();while( reader.Read() ) object id= reader0

40、 ;object name= reader1 ; catch(System.Exception e1) MessageBox.Show(e1.Message);DataSet 类的层次结构System.ObjectSytem.ComponentModel.MarshalValueComponentSystem.Data.DataSetTables 集合是一个 DataTableCollection 对象,它包含 0 个或多个 DataTable 对象。每个 DataTable 代表了数据源的一个数据表,每个 DataTable由一个 Columns 集合和一个 Rows 集合组成。Relati

41、ons 集合DataSet.Relations 属性是一个 DataSetRelationCollection 对象,它包含 0 个或多个 DataRelation 对象。DataRelation 对象根据外部键值在两个表格间定义父子关系ExtendProperties 集合DataSet.ExtendProperties 属性是一个 PropertyCollection 对象,它包含了 0 个或多个用户定义属性。 ExtendProperties 集合能用来存储与 DataSet 相关的自定义数据。DataTable 由 Columns 集合、Rows 集合、Constraints 集合构成

42、。Columns 和 Rows 定义了 DataSet 的模式。Constraints 定义了表间的约束。定义列 DataColumnDataColumn myColum=new DataColumn(“ID”,Type.GetType(“System.Int32”);productsTable.Columns.Add(“ID”,Type.GetType(“System.Int32”)向 DataTable 中加入一行 DataRowDataRow tempRow;tempRow=productsTable.NewRow();tempRow“ID”=1;tempRow“Name”=“TV Se

43、t”;tempRow“Category”=1;定义主键 Primary keyDataColumn pk=new DataColumn1;pk0=productsTable.Columns“ID”;productsTable.PrimaryKey=pk;动态创建表DataTable ptable=new DataTable(“Products”);ptable.Columns.Add(“ID”,Type.GetType(“System.Int32”);DataColumn pk=new DataColumn1;pk0=ptable.Columns“ID”;ptable.PrimaryKey=p

44、k;ptable.Columns“ID”.AutoIncrement=true;ptable.Columns“ID”.AutoIncrementSeed=1;ptable.Columns“ID”.ReadOnly=true;DataSet 对象可以保存多个数据表,每个 DataSet 对象都由9DataTable 对象集合组成,可以用 DataRelation 对象把他们相互连接起来。 DataAdapter 类是数据适配器的基础类,在数据提供程序中它是数据集和数据库之间的桥梁。 DataAdapter 类的层次结构是:System.ObjectSystem.MarshalByRefObjec

45、tSystem.ComponentModel.ComponentSystem.Data.Common.DataAdapterDataAdapter 是数据存储与数据集之间的桥梁填充 DataSet(1) 构造 DataAdapter(2) 调用 FillString mysql=“select * from customers”;String myConStr=“server=localhost;database=northwind; uid=sa;pwd=;”;SqlDataAdapter da=new SqlDataAdapter();SqlConnection myConn=new Sq

46、lConnection(myConStr);SqlCommand cmd=new SqlCommand(mysql, myConn);da.SelectCommand=cmd;DataSet ds=new DataSet();da.Fill(ds);将多个 DataTable 插入 Tables 集合(1) 使用多个 DataAdapter 填充同一个 DataSet(2) 使用单个 DataAdapter 用不同的 T-SQL 命令填充同一个DataSetRelations 集合DataSet.Relations 属性是 DataRelationsCollection 类的实例。myds.R

47、elations.Add(“CustomersToOrders”,myds.Tables“customers”.Columns“customerID”, myds.Tables“orders”.Columns“customerID”);合并 DataSetDataSet 类提供了一个 Merge 方法,它能把一个 DataSet 合并到另一个中去,将一个 DataTable 合并到 DataSet 中去,或者是把DataRow 数组合并到 DataSet 中。MyDataSet.Merge(myOtherDataSet);DataSet 类提供了一个 Merge 方法,它能把一个 DataSe

48、t 合并到另一个中去,将一个 DataTable 合并到 DataSet 中去,或者是把DataRow 数组合并到 DataSet 中。MyDataSet.Merge(myOtherDataSet);类型化 DataSet 和 DataSet 模式XSD 和 XML Schema DefinitionXSD 是 XML 专门用来描述数据结构的,它允许应用程序在处理数据时读取并使用模式信息。类型化的 DataSet 用 XSD 数据模式产生与一个特定模式配套的DataSet 的子类。myRow=myDataSet.Tables“student”.Rows0;Console.WrtieLine(m

49、yRow“sname”); 回车Console.WriteLine(studentDataSet.student0.sname);使用存储过程的原因:创建一个过程,把它存储在数据库中,因为事先知道有这个过程,所以可以提前编译它,以便在应用程序中使用。 创建存储过程可以使用 Visual Studio.NET 中的工具或 SQLSever 的 Enterprise Manager 中的工具。从技术上看可以使用第三方工具或编程实现。存储过程可以是一个 SQL 语句,也可以是一组复杂的语句。T-SQL 支持分支、循环和其它变量声明,这将有助于编写出某些非常复杂的存储过程代码。调用存储过程创建一个 SqlCommand 对象。设置 CommandType 属性。添加与存储过程本身匹配的参数。创建一个 SqlDataAdapter,填充某种结果对象。cmd.CommandText = “proc_inse

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报