软件工程与项目案例教程.ppt
主讲:邱焕耀,软件工程与项目案例教程,2,经历,华南理工大学,博士,计算机控制曾任职以下公司:中国民航信息广州公司(香港上市)技术总监广州金鹏集团(电子百强)项目总监广东金宇恒(佛山最大软企)技术总监曾获国家创新基金、广州科学技术奖中联通炫铃广东/湖南/广西项目负责人(用户800万)长期移动、民航、政府、互联网行业软件研发,项目一 软件工程概述,任务1 软件工程任务2 软件生命周期与软件开发模型任务3 建模工具,4,最富哲理的软件工程,5,UML是“三人帮”“捣”出来的,6,迭代开发过程这样流转,7,软件工程水平是这样提高的,8,敏捷开发过程Scrum,9,任务1 软件工程,软件的定义及其特点 软件危机 软件工程概念,10,软件的定义及其特点,软件的定义软件是计算机系统中与硬件相互依存的部分,它是包括程序、数据及相关文档的完整集合。,软件的定义及其特点,软件=程序+数据+文档,程序:按事先设计的功能和性能需求执行的指令序列数据:是程序能正常操纵信息的数据结构文档:与程序开发、维护和使用有关的图文材料,11,软件的定义及其特点,软件的定义及其特点,软件的特点(1)抽象性;(2)无明显的制造过程;(3)无磨损、老化的问题(4)对硬件系统的依懒性;(5)复杂性;(6)成本昂贵;(7)社会性;,12,软件危机,Tacoma Narrows大桥的崩溃,13,软件危机,软件危机 在软件开发和维护过程中所遇到的一系列严重问题 软件危机的表现对软件开发成本和进度的估算很不准确用户很不满意质量很不可靠没有适当的文档软件成本比重上升供不应求:软件开发生产率跟不上计算机应用迅速深入的趋势,软件危机,14,软件危机,软件危机,原因客观:软件本身特点逻辑部件规模庞大主观:不正确的开发方法忽视需求分析错误认为:软件开发=程序编写轻视软件维护,15,软件危机,软件危机,产生的原因(软件开发人员的错误观点):“有一个对目标的概括描述就足以着手编写程序了,许多细节可以在以后再补充”“所谓软件开发就是编写程序并设法使它运行”“用户对软件的要求不断变化,然而软件是柔软而灵活的,可以轻易地改动”“软件投入生产性运行以后需要的维护工作并不多,而且维护是一件很容易做的简单工作”,16,软件危机的解决,软件危机,解决途径组织管理工程项目管理方法技术措施软件开发技术与方法软件工具,软件工程管理软件管理学软件经济学软件度量学软件工程学指导计算机软件开发和维护的工程学科 工程管理+开发技术软件开发技术软件开发方法学软件工具软件工程环境,17,软件工程概念,软件工程的概念 应用计算机科学、数学及管理科学等原理,以工程化的原则和方法来解决软件问题,指导计算机软件开发和维护的一门工程学科。软件工程的原则,软件工程概念,18,任务2 软件生命周期与软件开发模型,软件生命周期 软件开发模型,19,软件生命周期,软件定义 阶段软件开发阶段软件的使用和维护阶段 退役,Page 19,软件生命周期,20,瀑布模型,软件开发模型,软件开发模型,强调阶段的划分及其顺序性、各阶段工作及其文档的完备性,是一种严格线性的、按阶段顺序的、逐步细化的开发模式。,21,软件开发模型,演化模型 螺旋模型 喷泉模型,22,两种典型的建模工具:1IBM Rational Rose 2Microsoft Office Visio,任务3 建模工具,23,IBM Rational Rose,Page 23,IBM Rational Rose,24,Visio是一个图表绘制程序,可以帮助用户描述复杂设想以及系统的业务和技术图表。使用Visio创建图表可以使信息形象化,能够以更为直观有效的方式进行信息交流,这是单纯的文字和数字无法比拟的。,Page 24,Microsoft Office Visio,Microsoft Office Visio,25,软件工程课程设计,考核方式:课程设计(附设计说明文档,正文字数不少于1000字)(60%)+平时作业及实验(30%)+平时表现(10%),按优秀、良好、中、及格、不及格五级评定成绩通过演示及讲述,讲解课程设计的整体情况,针对其设计提出一些技术及细节问题确认是否真正理解课程设计中的要点、是否掌握了进行系统设计的知识和能力、是否本人完成。如通发现没有真正设计或者不清楚技术细节,则课程设计不及格。答辩部分:40分(没有课程设计说明文档不予参加答辩)设计部分:60分选题:创新性,实用性,界面美观友好(15分)难度:设计包含的难度(15分)设计的完整性(30分),26,迭代和增量开发方式,27,迭代过程的优势,复杂系统分解多个简单系统提高软件项目可控性降低软件开发风险有效地应对需求变更,在迭代过程中,功能的不确定性逐渐减小,我们对功能的描述越来越明确。,28,何时使用迭代开发?,只对希望成功的项目使用,2004年2月4日,马克扎克伯格在大学的宿舍里鼓捣了一个约会网站,项目二 统一建模语言UML,30,任务1 UML概述,UML的概念UML的发展UML的主要内容,31,UML与OO(面向对象),32,UML的概念,UML的概念UML Unified Modeling Language 统一建模语言统一建模语言是一种通用的可视化建模语言,用于对软件系统的制品进行规范化、可视化处理,然后构造它们并建立它们的文档。,UML的概念,33,UML的发展过程,Grady Booch,James Rumbaugh和Ivar Jacobson,34,图 与 语言 谁一级棒?,这把刀,也不知道有多长、多宽、多重、由什么材质铸成,由谁铸造?很普通,很平常,也许在我们手中!但,只要是他拿着,握着,这把刀就有了生命,有了气息,追魂的刀,亦是救命的刀,就看他是如何赋予它使命的!,该用图用图 该代码用代码,35,UML的优势,过去数十种面向对象的建模语言各自为战,而UML可以消除一些潜在差异,一统江湖通过统一语义和符号表示,提高面向对象技术使项目建立在一个成熟的标准建模语言基础之上便于沟通和交流,统一的理解,36,UML主要内容,精确的元模型定义 UML表示法 UML表示符 UML可视化的图形建模语言UML提供了五类图形,UML的主要内容,37,任务2 UML的概念模型,UML Structure,构造块building blocks,公共机制common mechanisms,构架architecture,基本UML建模元素、关系和图,达到特定目标的公共UML方法,系统架构的UML视图,38,UML基本的构造块,Page 38,构造块building blocks,事物things,关系relationships,图diagrams,建模元素本身,把事物联系在一起,关系说明两个或多个事物时如何语义相关的,UML模型的视图,它们展现事物的集合,“讲述关于软件系统的故事”,是我们可视化系统将做什么(分析级图)或者系统如何做(设计级图)的方法,39,事物,事物things,结构物件,行为物件,分组物件,注解物件,UML模型中的名词,如类、接口、协作、用例、活动类、组件、节点,UML模型的动词,如交互、状态机,包,它用于把语义上相关的建模元素分组为内聚的单元,注解,它附加到模型以捕获特殊信息,同黄色便笺很相像,40,关系,关系relationships,关联association,依赖dependency,泛化generalization,实现realization,描述对象之间的一组链接,事物的改变引起依赖物件的语义改变,一个元素是另一个元素的特化,而且它可以取代更一般的元素,类元之间的关系,一个类元说明一份契约,另一个类元保证实现该契约,41,图,图diagrams,类图class diagrams,对象图object diagrams,构件图component diagrams,部署图deployment diagrams,用例图use case diagrams,顺序图sequence diagrams,协作图collaboration diagrams,状态图statechart diagrams,活动图activity diagrams,静态模型(系统结构),动态模型(系统行为),42,UML 公共机制,公共机制common mechanisms,规格说明specifications,修饰adornments,公共分类common divisions,扩展机制extensibility mechanisms,43,规格说明,UML模型:使用图和图标可视化模型各种建模元素的规格说明所组成规格说明模型元素的特征和语义的文本描述模型的“肉”形成了承载模型的语义背板,赋予模型意义,各种图仅仅是该背板的视图或者可视化投影,44,修饰,修饰:图中建模元素上暴露的信息项任何UML图仅是模型的视图,只有在修饰增强了图的整体清晰性和可读性或者突出模型的某些重要特征时,才应该表示那些修饰,Window,45,公共分类,描述认识世界的特殊方法类和实例类元:一类事物的抽象概念;如“银行帐户”实例:一类事物的特定实例;如“张三丰帐户”接口和实现接口:说明事物行为的契约(做什么)实现:事物是如何工作的特殊细节(如何做),46,扩展机制,约 束:允许对模型元素添加新的规则构造型:基于已有的建模元素引入新的建模元素标记值:允许为模型元素添加新的特性,是带有相关值得关键字,47,JAVA开发平台体系结构,构架是一个系统的组织结构包括:1.系统分解成的各个部分 2.它们的连接性 3.交互机制 4.通知系统设计的向导规则,48,JAVA开发平台架构,构架是一个系统的组织结构包括:1.系统分解成的各个部分 2.它们的连接性 3.交互机制 4.通知系统设计的向导规则,49,架构,构架是一个系统的组织结构包括:1.系统分解成的各个部分 2.它们的连接性 3.交互机制 4.通知系统设计的向导规则,50,4+1视图,51,UML小结,52,用例图 类图 对象图 包 使用类图的建议,任务3 UML静态建模机制,53,用例图,Page 53,用例图,参与者,参与者1,参与者2,用例1,用例2,54,用例“捕获需求”,用例图从系统外部、从用户角度出发描述系统的功能集用例图所描述的系统功能依靠外部用户或另一个系统激活,为用户或另一个系统提供服务,55,用例表达“做什么”,用例图中可以包含若干个用例,用例表达了系统的功能用例只描述参与者和系统在交互过程中做些什么,并不描述怎么做。,56,用例图,Page 56,保险销售用例,57,用例图,Page 57,商品订单用例,58,用例图,Page 58,教学管理用例,59,用例用于什么情况?,不知道什么情况不用用例如果没有用到用例,闭门反省,60,实例:监听器用例,61,实例:监听器用例,功能需求 监听删除操作,保证数据的安全。场景 监听删除操作 删除操作一旦执行,立即被监听器捕获到,进而在执行 删除操作前执行自定义的函数体,即判断实体有无undeletable标签,有则中断删除操作,无则正常删除。,62,关系 关联关系;依赖关系;泛化关系;关系的扩展,用例图,Page 62,63,类图,类 名称;属性;操作关联关系泛化 依赖关系 约束,类图,64,类图,类图,泛化,关联,65,何时用 类图?,类图是面向对象方法的支柱如果没用到类图?找电杆撞下,看是否用面向对象方法,66,用 类图 的危险!,类图用滥了,建狗屋画了10页类图类图没分清粗细层次:概念类图规约类图实现类图,67,鸟类图,68,鸟类图,69,鸟类图,70,鸟类图,71,实例:监听器类图,72,使用类图的建议,不要试图使用所有的符号 根据项目开发的不同阶段,用正确的观点来画类图 不要为每个事物都画一个模型,应该把精力放在关键的领域,使用类图的建议,73,对象图,对象图 表示在某一时刻类的具体实例和这些实例之间的具体连接关系,对象图,丁一家里的PC:计算机名称:DELL446内存:128,丁一:作家姓名:丁一年龄:30,74,类 与 对象 关系,75,类 与 对象 关系,对象图使用的是与类图相同的符号和关系,76,类图和对象图的区别,77,包,包 一种分组机制,把各种各样的模型元素通过内在的语义连在一起成为一个整体就叫做包,包,BC,A,A,78,包的关系,引用,使用,79,包软件比赛作品,80,架构图包图的变形,81,任务4 UML动态建模机制,对象之间的交互 状态图 交互图 活动图 四种图的运用,82,对象之间的交互,简单消息 同步消息 异步消息 同步且立即返回消息,对象之间的交互,83,什么是状态图?,状态图 用来建模对象是如何改变其状态以响应事件,展示对象从创建到删除的生命周期,状态图,发票状态图,84,状态图,状态标记符,85,状态图,状态和转移 事件,状态图,86,状态图,子状态,状态图,87,航班状态,88,交互图,顺序图,交互图,89,实例:监听器交互图,90,交互图,协作图 链接;消息流;对象生命周期,交互图,91,活动图,活动和转移 泳道 对象 信号,活动图,92,活动图,活动和转移 泳道 对象 信号,活动图,93,四种图的运用,正确画图的做法是:为帮助理解类而画它的状态图。状态图描述跨越多个用例的单个对象的行为,而不适合描述多个对象间的行为合作,四种图的运用,项目三项目市场调研,95,项目三主要任务,1.系统的研发背景图书馆系统的提出国内外研发现状建立系统需求原型 2.软件开发计划 问题定义可行性分析可行性分析报告系统的开发计划,96,系统的研发背景,1.图书馆系统的提出 传统的手工方式对图书信息的管理已越来越不能适应社会发展的需要,尤其是随着计算机网络和Internet的普及,运用先进的信息管理系统对信息进行科学化和网络化管理,已成为图书信息管理系统发展的趋势。,97,系统的研发背景,2.国内外研发现状国内外应用的图书管理系统的划分:(1)开发方式(2)开发方法(3)结构形式(4)开发平台(5)系统使用的范围(6)按照系统开发主体面向的对象,98,软件开发计划,1.问题定义(1)问题定义的任务(2)问题定义的内容,99,软件开发计划,1.问题定义(1)问题定义的任务(2)问题定义的内容,100,软件开发计划,2.可行性分析(1)可行性分析的主要内容 可行性分析的内容可概括为:环境、技术和经济3个方面(2)可行性分析的主要步骤确定目标进行系统调查 列出可能的技术方案 技术先进性分析 经济效益分析综合评价 优选可取方案并写出可行性分析报告,101,软件开发计划,(3)可行性分析的评价原则 效益性原则 经济性原则 可靠性原则 可比性原则,102,软件开发计划,3.可行性分析报告可行性分析报告的一般格式 可行性分析报告通常包括封面和内容两个部分可行性分析报告案例 4.系统的开发计划 开发计划主要任务 项目开发计划编写提示,103,小结,项目3从图书馆管理系统研发的背景出发,介绍了软件开发的计划及软件开发的可行性分析。接着针对图书馆管理系统的开发提出了可行性分析内容,包括可行性分析的主要任务、基本的步骤,以及如何编写可行性分析报告。最后介绍了开发计划的主要任务和计划的制订。,项目四 软件项目需求分析,105,项目四主要任务,1.调查系统的需求 功能需求和技术需求系统相关者建立系统需求原型 2.模型 模型的作用及类型 逻辑模型和物理模型3.事件 事件的概念和类型 事件定义 图书馆管理系统中的事件,106,项目四主要任务,4.事物 事物的概念和类型 事物间的关系 事物的属性 数据实体和对象5.实体联系图6.类图用面向对象的方法分析事物类图的符号 建模的目标 需求分析规格说明书编写提纲,107,调查系统的需求,1.功能需求和技术需求(1)系统需求通常可以分为两类:功能需求和技术需求。功能需求是系统必须完成的活动,也就是系统将要投入的业务应用。功能需求直接来自系统规划阶段确定的系统功能。(2)技术需求是指和企业的环境、硬件和软件有关的所有可操作目标。,108,调查系统的需求,2.系统相关者(1)用户:那些实际使用系统处理日常事务的人。(2)客户:那些购买和拥有系统的人。(3)技术人员:确保系统运行在公司的计算机环境下的人。(4)外部实体:例如公司的顾客。,109,调查系统的需求,3.建立系统需求原型 传统的系统需求开发过程可分为以下4个步骤:(1)确定现有系统的物理过程和活动。(2)从现有物理过程中提取出业务逻辑功能。(3)为将在新系统中使用的方法开发出业务逻辑功能。(4)定义新系统的物理处理需求。,110,模型,1.模型的作用及类型(1)模型的作用有助于提取系统需求信息 有助于系统分析员整理思路 有助于系统的分析和集成 有助于记忆和把握相关细节 有助于系统开发小组以及小组成员之间进行交流 为未来的维护和升级提供文档参考(2)模型的类型 数学模型 描述模型 图形模型,111,模型,2.逻辑模型和物理模型(1)逻辑模型 在系统分析阶段所建立的模型详细定义了系统需求但并没有局限于某一具体技术,因此这些模型通常被称为“逻辑模型”。(2)物理模型 在系统设计阶段也会建立许多模型。这些模型显示了如何使用具体技术来实现系统的某些方面,因此它们被称为“物理模型”。,112,事件,1.事件的概念和类型(1)外部事件(2)临时事件(3)状态事件 2.事件定义(1)区分事件和触发事件的条件以及系统响应(2)跟踪事务处理的生命周期(3)暂不考虑技术依赖事件和系统控制 3.图书馆管理系统中的事件,113,事物,1.事物的概念和类型 2.事物间的关系3.事物的属性4.数据实体和对象,114,实体联系图,结构化分析方法把重点集中在系统的数据存储需求上。数据存储需求包括数据实体、数据实体的属性以及它们之间的关系。用来定义数据存储需求的模型被称为实体联系图(Entity-Relation Diagram,ERD)。,115,类图,1.用面向对象的方法分析事物(1)对事物进行概括具体的层次分析可以使用概括具体层次图来描述,它把事物按照从最概括到最具体的顺序进行排列。(2)分类就是定义事物的类。在层次图的每个类的上面也许有更一般的类,这个类称为父类。同时,每个类的下面也许有更具体的类,这个类称为子类。(3)整体局部层次图有两种类型:聚合以及合成。术语聚合用于描述一种关联形式,这种关联详细说明了集合,即整体及其组件,即局部之间的整体局部关系,这里的各个部分都可以独立存在。,116,类图,2.类图的符号 类图采用的符号基于统一建模语言(UML),这种语言已成为面向对象系统开发中建立模型的实际标准 类符号用一个矩形表示,包含3个部分。矩形顶端是类名,中间部分列出了类的属性,下部列出了类的重要方法。如果方法是标准的,那么它们通常就不显示在类符号中。,117,类图,3.建模的目标 结构化方法是首先获得事件表,然后根据表中的信息生成一组数据流程图(Data Flow Diagram,DFD),这些图包括关联图、DFD片段和详细DFD。ERD定义了包括在DFD中的数据存储需求。需求的其他信息包括数据流定义和过程描述等。面向对象方法首先获得事件表,然后生成一组用例图和应用实例图。应用实例和类图用于生成对象行为的其他模型,包括顺序图、状态图和其他模型。我们将在后面的项目中介绍这些模型。,118,需求分析规格说明书编写提纲,需求分析是系统建设的初始阶段,系统需求建模使得系统的基本功能以模型的形式更加清晰有序地显现出来,然而,仅仅建模还是不够的,需求分析阶段的成果将以需求分析说明书这样的文档来体现。需求分析规格说明书提纲分以下几个部分:1引言 2任务概述 3需求规定 4运行环境设定 5缩写词表 6参考文献,119,小结,项目4介绍了建模的两种基本分析方法结构化分析方法和面向对象分析方法以及他们用来描述系统需求的模型工具。建设管理信息系统初期需要明确系统需求,使用模型清晰完整地描述需求是有效手段,这个过程称为建模。,项目五软件项目总体设计,121,项目五主要任务,1.总体设计基本内容 2.结构化软件设计3.面向对象软件设计,122,项目五主要任务,1.总体设计的基本内容 软件设计定义总体设计的目标与步骤总体设计的基本任务总体设计的准则2.结构化的软件设计结构化设计的基本概念结构化的设计方法 运行环境设计,123,项目五主要任务,3.面向对象的软件设计 面向对象的的设计方法系统行为图书管理系统的用例图对象交互图书管理系统的交互图 对象行为图书管理系统的状态图,124,总体设计的基本内容,1.软件设计 软件设计分为:概要设计(或者总体设计);和详细设计。概要设计是从需求出发,描绘了总体上系统架构应该包含的组成要素。尽可能模块化,描绘了各个模块之间的关联。详细设计是描述实现各个模块的算法和数据结构以及用特定计算机语言实现的初步描述,例如变量、指针、进程、操作符号以及一些实现机制。,125,总体设计的基本内容,1.总体设计的目标 2.总体设计的步骤:(1)根据用户需要,确定要做哪些工作,形成系统的逻辑模型。(2)将系统分解成一组模块,各个模块分别满足所提出的要求。(3)将分解出来的模块,按照是否能满足正确的需求进行分类,对不能满足正常需求的模块要进一步调查研究,以确定是否能进行有效地开发。(4)制定工作计划,开发有关的模块,并对各模块进行一致行动测试以及系统的最后运行。,126,总体设计的基本内容,1.设计软件结构 为了实现目标系统,最终必须设计出组成这个系统的所有程序结构和数据库文件。对于程序则首先进行结构设计:(1)采用某种设计方法,将复杂的系统按功能分成模块。(2)确定每个模块的功能。(3)确定模块之间的调用功能。(4)确定模块之间的接口,即模块之间传递的消息。(5)评价模块结构的质量。,127,总体设计的基本内容,1.设计软件结构 软件结构的设计是以模块为基础的。在需求分析阶段,通过某种分析方法把系统分解成层次结构,在设计阶段,以需求分析的结果为依据,从实现的角度划分模块,并组成模块的层次结构。软件结构的设计是总体设计的关键一步,直接影响到详细设计与编程工作,软件系统的质量及一些整体特性都在软件结构的设计中决定。,128,总体设计的基本内容,2.数据结构及数据库设计3.编写总体设计文档(1)总体设计的说明书。引言:编写的目的、背景、定义、参考资料。总体设计:需求规定、运行环境、基本设计概念和处理流程、软件结构。接口设计:用户接口、外部接口、内部接口。运行设计:运行模块组合、运行控制、运行时间。系统数据结构设计:逻辑结构设计、物理结构设计。数据结构和程序的关系。系统出错处理设计:出错信息、补救措施、系统恢复设计。,129,总体设计的基本内容,(2)数据库设计说明书。只要给出所使用的数据库管理系统(DBMS)简介,数据库概念模型、逻辑设计和结果。(3)用户手册。对需求分析阶段的用户手册进行补充和修改。(4)修订测试计划。对测试策略、方法和步骤提出明确要求。4.评审,130,总体设计的基本内容,1.Davis的设计准则(1)设计过程应该考虑各种可选方案,根据需求,资源情况,设计概念来决定设计方案。(2)设计应该可以跟踪需求分析模型。(3)设计资源都是有限的。(4)设计应该体现统一的风格。(5)设计的结构应该尽可能满足变更的要求,(6)设计的结构应该能很友好地处理异常情况。(7)设计不是编码,编码也不是设计。(8)设计的质量评估应该是在设计的过程中进行,而不是事后进行的。(9)设计评审的时候,应该关注一些概念性的错误,而不是更多的关注细节问题。,131,总体设计的基本内容,2.命名规则(Naming Rule)(1)变量名只能由大小写英文字母、下划线“以及阿拉伯数字组成。而且第一个字母必须是大小写英文字母或者下划线,不能是数字。(2)全局变量、局部变量的命名必须用英文字母简写来命名。(3)数据库表名、字段名必须用英文来命名,命名应尽量体现数据库、字段的功能。3.术语定义 4.参考资料5.相关文档,132,结构化的软件设计,1.结构化设计的基本概念(1)模块(2)模块的独立性(3)抽象(4)信息隐蔽 2.结构化的设计方法(1)功能模块划分设计(2)面向数据流设计(3)输入输出设计 3.运行环境设计,133,面向对象的软件设计,134,面向对象开发方法的开发过程,面向对象分析,面向对象设计,面向对象编程,135,面向对象的软件设计,1.面向对象的的设计方法 面向对象设计方法主要有4个特点:抽象性、信息隐藏性、功能独立性和模块化。(1)识别对象(2)确定属性(3)定义操作(4)确定对象之间的通信(5)完成对象定义2.系统行为图书管理系统的用例图(1)用例、参与者以及场景(2)用例和参与者关系以及用例之间的关系(3)图书管理系统的用例图,136,面向对象的软件设计,137,面向对象的软件设计,3.对象交互图书管理系统的交互图(1)顺序图的基本构成(2)如何开发顺序图(3)图书馆管理系统中的顺序图(4)图书馆管理系统中的协作图4.对象行为图书管理系统的状态图(1)对象状态和状态转换(2)如何开发状态图(3)图书馆管理系统的状态图,138,小结,项目5分别介绍了面向结构化设计方法及面向对象设计方法,以图书馆管理系统为案例,以面向对象设计方法为重点,运用UML建模语言,详细描述了对系统行为、对象交互和对象行为几个方面进行建模的过程。,项目六软件项目详细设计,140,项目六主要任务,1.系统详细设计的基本内容 2.图书管理系统的详细设计,141,系统详细设计,1.系统详细设计的基本内容 详细设计概述 详细设计的基本任务详细设计方法 2.图书管理系统的详细设计系统包图 类的类型以及类之间的关系图书馆管理系统的类图 设计类图的开发,142,项目六主要任务,3.用户界面设计用户界面设计应具有的特点 用户界面设计的基本类型和基本原则图书馆管理系统的界面设计,143,系统详细设计的基本内容,1.详细设计概述 表达过程规格说明的工具叫做详细设计工具,它可以分为如下三类。(1)图形工具 把过程的细节用图形方式描述出来。(2)表格工具 用一张表来表达过程细节,这张表列出了各种可能的操作及其相应条件,也就是描述了输入、处理和输出信息。(3)语言工具 用某种高级语言(伪码)来描述过程细节。,144,系统详细设计的基本内容,2.详细设计的基本任务 详细设计过程中需要完成的工作主要是确定软件各个组成部分的算法以及各部分的内部数据结构和确定各个组成部分的逻辑过程,此外,还要做以下工作。(1)处理方式的设计(2)物理设计(3)可靠性设计(4)其他设计(5)编写详细设计说明书(6)详细设计的评审,145,系统详细设计的基本内容,3.详细设计方法(1)传统的详细设计方法 图形符号的设计方式 流程图(Flowchart)是用图形化的方式,表示程序中一系列的操作以及执行的顺序。表格的设计方式 在很多的软件应用中,一个模块需要对一些条件和基于这些条件下的任务进行一个复杂的组合。而决策表(Decision Table)提供了将条件以及其相关的任务组合为表格的一种表达方式。程序设计语言 程序设计语言(Program Design Language)也称为伪代码,它使用结构化编程语言的风格描述程序算法,但不遵循特定编程语言的语法,程序设计语言允许用户在此代码更高的层次上进行设计,通常省略与算法无关的细节。,146,系统详细设计的基本内容,(2)面向对象的详细设计算法和数据结构的设计 算法是设计对象中每个方法的实现规格,当方法(操作)比较复杂的时候,算法实现可能需要模块化。数据结构的设计与算法是同时进行的,因为这个方法(操作)要对类的属性进行处理。方法(操作)对数据进行的处理有很多类,主要包括三类:对数据的维护操作(如增、删、改等);对数据进行计算;监控对象事件。模块和接口 决定软件设计质量非常重要的一个方面是模块,所有模块最后组成了一个完整的程序。其中复杂的部分也可以进行再模块化,同时我们还要定义对象之间的接口和对象的总结构。模块和接口设计应当用类似编程语言的方式表达出来。,147,图书管理系统的详细设计,1.系统包图 包图是一个高层图在概念上它与结构化方法的系统流程图很相似。包图的目标是标识一个完整系统的主要部分。在一个大的系统中,通常要把许多系统分成很多子系统,每个子系统的功能相互之间都是独立的。2.类的类型以及类之间的关系(1)类的类型 在面向对象的系统中,对象分为三类:实体类、边界类和控制类。通过这些对象的合作来实现用例。(2)类之间的关系,148,图书管理系统的详细设计,3.图书馆管理系统的类图4.设计类图的开发(1)决定需要设计的类(2)找到属于这个类的所有方法(3)详细描述带有逻辑的方法,149,用户界面设计,1.用户界面设计应具有的特点(1)可使用性 使用的简单性 用户界面中的术语标准化和一致性 拥有HTML帮助功能速的系统响应和低的系统成本用户界面应具有容错能力、错误诊断功能(2)灵活性 算法的可隐可显性用户可以根据需要制定和修改界面形式 系统能够按照用户的希望和需求,提供不同详细程度的系统响应信息 与其他软件系统一样应有标准的界面,150,用户界面设计,(3)复杂性与可靠性用户界面的规模和组织的复杂程度就是界面的复杂性 用户界面的可靠性是指无故障使用的间隔时间2.用户界面设计的基本类型和基本原则(1)用户界面设计的基本类型(2)用户界面设计的基本原则(3)用户界面设计的基本方法(4)继续做原型(5)设计用户界面类(6)依据现有图形用户界面进行设计,151,用户界面设计,3.图书馆管理系统的界面设计(1)用户登录界面设计(2)图书馆管理系统主界面设计(3)修改图书记录界面设计(4)修改学生记录界面设计(5)生成预约图书报表界面设计(6)生成催还图书报表界面设计(7)修改密码设置界面设计(8)图书服务系统主界面设计(9)查询/借阅/预约图书界面设计(10)查询个人借阅信息和归还已借阅图书界面设计,152,小结,项目6讲述了详细设计的基本任务及详细设计的结构化方法及面向对象方法,根据面向对方法给出了图书馆管理系统的类的设计、图书馆管理系统的界面设计等。完成图书馆管理系统详细的整个过程。,项目七软件项目实现,154,项目七 主要任务,面向对象程序语言的概念和特点 程序语言的分类 程序复杂度算法,155,结构化程序设计,结构化程序设计的原则 1自顶向下2逐步求精3模块化4限制使用goto语句,结构化程序设计的原则,156,结构化程序设计,结构化程序的基本结构与特点顺序结构是一种简单的程序设计,它是最基本、最常用的结构。顺序结构就是按照程序语句行的自然顺序,一条语句一条语句地执行程序。选择结构又称为分支结构,它包括简单分支结构和多分支结构,这种结构可以根据设定的条件,判断应该选择执行哪一条分支的语句序列。循环结构。它根据给定的条件,判断是否需要重复执行同一相同的程序段,利用循环结构可以简化大量的程序行。在程序设计语言中,循环结构对应两类循环语句,对先判断后执行循环体的称为“当”型循环结构;对先执行循环体后判断的称为“直到”型循环结构。,结构化程序的基本结构与特点,157,结构化程序设计,在结构化程序设计的具体实施中,要注意把握以下原则和方法 1使用程序设计语言中的顺序、选择、循环等有限的控制结构表示程序的控制逻辑。2选用的控制结构只允许有一个入口和一个出口。3程序语句组成容易识别的语句序列块,每块只允许有一个入口和一个出口。4复杂结构的程序设计时,仅用嵌套的基本控制结构进行组合嵌套来实现。5严格控制GOTO语句的使用。,结构化程序设计原则和方法,158,面向对象程序设计,159,面向对象程序设计,1抽象 即去掉与主题无关的次要部分,而仅仅抽象取出与工作有关的实质的内容加以研究。计算机技术常用的抽象分为过程抽象与数据抽象。(1)过程抽象。将整个系统的功能划分成为若干部分,强调功能完成的过程和步骤。面向过程的程序设计就采用这种方法。(2)数据抽象。与过程抽象不同的抽象方法,它把系统中需要处理的数据和这些数据的的操作结合在一起,根据功能、性质、作用等因素抽象成不同的抽象数据类型,每个数据类型即包括了数据,又包括了针对这些数据的操作。,数据抽象和封装,160,面向对象程序设计,2封装 就是利用抽象数据类型将数据和基于数据的操作封装在一起,数据被保护在抽象数据类型的内部,系统的其它部分只有通过封装在数据外部的被授权的操作,才能够与这个抽象数据类型进行交流。在面向对象编程(OOP)中,抽象数据类型是利用类这种结构来实现的,每个类里面封装了相关的数据和操作。在实际的开发过程中,类用来构建系统内部的模块,由于封装性把类内的数据保护得很好,模块与模块间仅仅通过严格控制的界面进行交互,使它们之间的耦合和交叉大大减少,从而降低了开发过程的复杂性,提高效率和质量,减少了可能的错误,同时也保证了程序中数据的完整性和安全性。,数据抽象和封装,161,面向对象程序设计,继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。通过继承创建的新类称为”子类”或”派生类”。被继承的类称为“基类”、“父类”或”超类”。继承的过程,就是从一般到特殊的过程。继承概念的实现方式有三类:实现继承、接口继承和可视继承。实现继承是指使用基类的属性和方法而无需额外编码的能力;接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力;可视继承是指子窗体(类)使用基窗体(类)的外观和实现代码的能力。,继承,162,代码这样来产生,多态,163,面向对象程序设计,多态性(Polymorphisn)是允许你将父对象设置成为一个或更多的他的子对象的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。实现多态,有二种方式,覆盖,重载。1覆盖覆盖是指子类重新定义父类的函数的做法。2重载重载是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。,多态,164,程序设计语言,程序设计语言通常简称为编程语言,是一组用来定义计算机程序的语法规则。一种计算机语言让程序员能够准确地定义计算机所需要使用的数据,并精确地定义在不同情况下所应当采取的行动。程序设计语言原本是被设计成专门使用在计算机上的,但它们也可以用来定义算法或者数据结构。正是因为如此,程序员才试图使程序代码更容易阅读。,程序设计语言,165,程序设计语言,从发展历程来看,程序设计语言可以分为 4 代。1第一代语言(机器语言)2第二代语言(汇编语言)3第三代语言(高级语言)高级语言是面向用户的、基本上独立于计算机种类和结构的语言。4第四代语言(简称 4GL)4GL是非过程化语言,编码时只需说明“做什么”,不需描述算法细节。数据库查询和应用程序生成器是4GL的两个典型应用。,程序设计语言分类,166,程序复杂度,一般情况下,算法的基本操作重复执行的次数是模块n的某一个函数f(n),因此,算法的时间复杂度记做:T(n)=O(f(n)随着模块n的增大,算法执行的时间的增长率和f(n)的增长率成正比,所以f(n)越小,算法的时间复杂度越低,算法的效率越高。在计算时间复杂度的时候,先找出算法的基本操作,然后根据相应的各语句确定它的执行次数,再找出T(n)的同数量级(它的同数量级有以下:1,Log2n,n,nLog2n,n的平方,n的三次方,2的n次方,n!),找出后,f(n)=该数量级,若T(n)/f(n)求极限可得到一常数c,则时间复杂度T(n)=O(f(n),时间复杂度,167,程序复杂度,空间复杂度是程序运行所以需要的额外消耗存储空间,也用()来表示。算法中基本操作的执行次数一般是与问题规模有关的。对于结点个数为n的数据处理问题,用T(n)表示算法中基本操作的执行次数。在评价算法的时间复杂性时,不考虑两算法执行次数之间的细小区别,而只关心算法的本质差别。为此,引入一个所谓的O()号,则T1(n)=2n=O(n),T2(n)=n+1=O(n)。一个函数f(n)是O(g(n)的,则一定存在正常数c和m,使