资源预览内容
第1页 / 共107页
第2页 / 共107页
第3页 / 共107页
第4页 / 共107页
第5页 / 共107页
第6页 / 共107页
第7页 / 共107页
第8页 / 共107页
第9页 / 共107页
第10页 / 共107页
亲,该文档总共107页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
课 程 名 称: 统一建模语言UML专 业 班 级:软件13081310学 期 安 排:20152016(I)学期授 课 教 师:于 红计算机科学与软件学院09:44OfficeC513计算机系第1章 面向对象技术概述重点: 软件工程相关概念 面向对象相关概念1.1 软件危机与软件工程n软件发展的几个时期1946(第一台计算机)1960 “软件”雏形是简单的程序20世纪60年代末到70年代初 “软件”成为产品至今 软件工程时期n软件危机 软件危机指的是在计算机软件的开发和维护过程中所遇到 的一系列严重问题。 如何开发软件,以满足不断增长的、日趋复杂的要求如何维护规模不断庞大的软件产品n软件工程,由北大西洋公约组织NATO于 1968年提出o软件工程是指导计算机软件开发和维护的一门工程学 科。o采用工程的概念、原理、技术和方法来开发与维护软件 ,把经过时间考验而证明正确的管理技术和当前能够得 到的最好的技术方法结合起来,以经济地开发出高质量 的软件并有效地维护它,这就是软件工程。1.1 软件危机与软件工程n软件开发的现状软件工程学科不断发展软件危机仍然存在中小型软件开发较为成熟,大型软件存在问题n常见软件开发方法瀑布模型增量模型原型模型 螺旋模型 (风险驱动)1.1 软件危机与软件工程1. 瀑布模型(waterfall model)计划阶段问题定义及可行性研究瀑布模型的特点l文档驱动的模型 l阶段间具有顺序性和依赖性l推迟实现的观点l质量保证的观点瀑布模型的问题l实际项目很少按照该模型给出的顺序进行l用户常常一开始难以清楚地给出所有需求l用户必须有耐心等待一个漫长无反馈的交付l开发者常常被不必要地耽搁(1)慎重使用瀑布模型的情况:l不能充分理解客户需求或客户需求有可能迅速发生变化 ;l系统太大太复杂,不能一次做完所有的事;l事先拟采用的技术迅速发生变化;l提供的资源有限;l无法利用各开发阶段的某一中间产品。(2)使用瀑布模型的情况:l系统所有的功能、性能要求客户可以一次性准确交付时 ;l必须是首次开发的新系统并且淘汰全部老系统时。2. 增量/渐增模型(incremental model) 由一组有计划的、循环渐增的、不断改进的 过程版本组成。 各个中间版本可以并行开发。(1)慎重考虑使用渐增模型的情况:l不能充分理解客户需求或客户需求有可能迅速发生 变化;l事先拟采用的技术迅速发生变化;l客户突然提出一些新的功能需求;l长时期内仅有有限的资源保证(开发人员和资金 )。(2) 使用渐增模型的情况:l需要在尽短的时间内得到系统基本功能的演示或使 用;l各版本都有中间阶段产品可提供使用;l系统可以被自然地分割成渐增的模式;l开发人员与资金可以逐步增加。3. 演化模型(evolutionary model)演化模型也称为原型(prototype)法模型。使用演化模型时应注意:l演化模型也是通过系统各个可执行的中间版本 以渐增的形式来开发系统的,但是客户需求可 以分步逐渐了解,不用在初始时就确定。l在模型中,可以预先定义一部分客户需求,然 后在每个后继的中间版本中再逐步增加需求, 一点点完善。l在开发每个中间版本时,开发过程中的活动和 任务可以顺序地或部分重叠平行地被加入到这 些中间版本中。4. 螺旋模型(spiral model)螺旋模型沿着螺线旋转,在四个象限上分别表达四个螺旋模型沿着螺线旋转,在四个象限上分别表达四个 方面的活动,即:方面的活动,即:u制定计划 确定软件目标,选定实施方案,弄清项 目开发的限制条件;u风险分析 分析所选方案,考虑如何识别和消除风 险;u实施工程 实施软件开发u客户评估 评价开发,提出修正建议,建立下一周 期的计划。螺 旋 模 型决定目标、 方案和限制评价方案、 识别风险、 弱化风险开发、验证、 下一级产品计划下一阶段集成 测试螺旋模型螺旋模型l螺旋模型将瀑布模型与快速原形模型结合起来, 并且加入两种模型均忽略了的风险分析。l螺旋模型沿着螺线旋转,自内向外每旋转一圈便 开发出更完善的一个新版本。 l优点l对可选方案和约束条件的强调有利于 已有软件的重用,也有助于把软件质 量作为软件开发的一个重要目标;l维护和开发之间并没有本质区别。l特点l风险驱动的l主要适用于内部开发的大规模软件项目5 . 智能模型(intelligent model)l智能模型,它把瀑布模型和专家系统结合在一 起。该模型在开发的各个阶段上都利用了相应的 专家系统来帮助软件人员完成开发工作需求阶段分析阶段设计阶段编程阶段集成与测试阶段维护与演进阶段要点:开发活动之间的无间隙性和循环迭代性适用于面向对象的开发过程 强调无明显的活动阶段划分 6 喷泉模型l软件开发模型的选择要综合考虑以下几个因素: (1)软件规模(2)软件类型 l系统软件的开发。l实时软件的开发。l商业应用软件的开发。l嵌入式软件的开发。l人工智能软件的开发。(3)软件质量要求 (4)交付工期 (5)客户需求明确度 (6)投资 (7)可复用性 (8)开发者掌握的资源1.2 软件开发的基本认识n大型软件系统的特点开发代价高、时间长,参与人员多,软件生命周期长。n软件系统开发的两个方面软件开发过程(P2)软件开发中资源的协调和管理1.2 软件开发的基本认识n软件是逻辑部件,而不是物理部件,软件 产品与硬件产品的区别表现形式不同 (看不见 ,摸不着,长期运行看效果)生产方式不同 (人与人的沟通,容易有疏忽与失误)产品需求不同 (软件不允许有误差)维护方式不同 (出现bug要调整,进而引发新bug)1.3 软件固有的复杂性n软件开发的复杂性与困难性是由于软件的特 点造成的,软件的复杂性是固有的。n软件复杂性的原因跟计算机体系结构相关(冯.诺依曼 硬件简单/软件复杂)软件开发是智力活动,无法形成统一开发模式软件系统的需求经常改变软件元素之间的关系不确定软件依赖硬件环境1.4 控制软件复杂性的基本方法n分解,“分而治之”或“各个击破”,降低复杂性n抽象,抽取系统本质特征,忽略非基本特征 过程抽象数据抽象n模块化,基本要求是高内聚、低耦合n信息隐藏,也称封装 (电话)n复用 软件自动化 软件构件组装l软件生存周期软件定义 (1)软件系统的可行性研究 1)经济可行性研究。 2)技术可行性研究。 3)法律可行性研究。 4)方案的选择。 (2)需求分析 1)任务。 v软件功能需求: v软件性能需求: v软件系统运行环境: 2)按需求建模。 3)软件需求规格说明(Software Requirements Specification,简称SRS)。软件开发 (1)概要设计 建立系统总体结构和各模块之间的关系; 定义各个功能摸块的接口; 设计全局数据库或数据结构; 规定设计约束; 制定组装测试计划。 (2)详细设计 对概要设计进行细化; 建立文档资料。(3)实现 选择合适的编程语言; 制定测试案例; 保存文档资料。 (4)组装测试 (5)确认测试 3软件使用、维护和更新换代 (1)软件使用 (2)系统维护 (3)系统更新换代n结构化的开发方法SA、SD、SP特点:面向数据流 DFD软件结构图SC优化划分模块内部算法和流程初审领料单已审核领料单 复审发货通知 发货nJackson方法(不常用)面向数据结构 (例如,学生信息管理系统,处理各表的输入输出)n面向对象的开发方法OOA、OOD、OOP1.5 几种基本的软件开发方法n 软件开发方法简介1. 结构化程序设计方法 其控制结构仅由顺序、选择与重复等有限的基 本控制结构表示。 2. 模块化程序设计方法 模块之间的接口应尽可能简明清晰:单独模块的修改不影响其它模块的功能;模块化应具有可修改性、易读性和可验证性。 3. 面向对象程序设计方法结构化开发方法 Structured Developing Methodl是现有的软件开发方法中最成熟,应用最广泛的方法 ,主要特点是快速,自然和方便。l结构化方法总的指导思想自顶向下、逐步求精。它的 基本原则是功能的分解与抽象。l l结构化开发方法的组成结构化开发方法的组成结构化程序设计方法 SP法(Structured Program)结构化设计方法 SD法(Structured Design)结构化分析方法 SA法(Structured Analysis)SA,SD,SP 法相互衔接,形成了一整套开发方法。面向对象方法有几十种,综合起来,其基本观点 如下:l现实客观世界由对象组成。l相同的对象归并为类。l类可以继承。l对象之间通过消息进行联系。面向对象 = 对象 + 类 + 继承 + 通信面向对象软件开发方法p 面向过程还是面向对象?1、面向过程方法 2、面向过程的困难 3、面向对象的方法 4、面向对象的困难09:441、面向过程的方法n面向过程的方法认为我们的世界是由一个个相 互关联的小系统组成的。n分析方法是找到过程的起点,然后顺藤摸瓜, 分析每一个部分,直至达到过程的终点。这个 过程中的每一部分都是过程链上不可分割的一 环。请看传统的商业分析过程,如下图。09:44数据的正确性和完备性对系统成 功与否至关重要!09:442、面向过程的困难n面向过程的方法前提:过程是稳定的,才有 分析的基础;过程中的各个阶段有着严谨的 因果关系。n世界无时无刻都在变化,因果关系很脆弱!nSOA(面向服务架构)nOn-Demand Business(随需应变的商务)09:44随需应变的商务09:443、面向对象方法n将世界看成是一个个相互独立的对象,相互 间无因果关系。n在外力驱动下,对象间才会按规则互相传递 信息。n对象有奇妙的特性封装封装封装封装聚合聚合聚合聚合继承继承 接口接口多态依赖依赖耦合耦合耦合耦合方法方法方法方法09:44面向对象类的作用:1.分类:用于区分不同事物。2.是创建对象的模板:产生对象。怎么得到类和对象?抽象l把事物共同点抽取出来,以统一的方式进行概要描 述的过程;l从许多事物中舍弃个别的、非本质的特征,抽取 共同的、本质性的特征; l过滤掉对象的一部分特征和操作直到只剩下你所 需要的属性和操作。是不是现实世界中类的所有属性 和方法都需要在系统中进行抽象 呢?l当然不是啦!作为一个分析人员,要根据用户实际的业务 情况进行选择。l例如在课堂考勤系统中,教师类只需要有姓名、职 称、性别这些属性,因为这些是用户需要的。l而在教职工人事管理系统中,教师类就需要姓名、出 生年月、入职时间、所属单位、职称、性别、婚姻状况等 属性。1.从许多事物中舍弃个别的、非本质的 特征,抽取共同的、本质性的特征; 2.过滤掉对象的一部分特征和操作直到 只剩下你所需要的属性和操作。让对象细节受到保护封装l引入问题:现在让我们来编写一个java小程序, 实现在命令行模式下输出以下形式的著名诗词 春晓,你会怎么做?* 春晓 * 春眠不觉晓, * 处处闻啼鸟。 * 夜来风雨声, * 花落知多少。3. 信息隐蔽和局部化封装你可能会这么写1.public class ChunXiao12.public static void main(String args)3.System.out.println(“* 春晓“);4.System.out.println(“* 春眠不觉晓,“);5.System.out.println(“* 处处闻啼鸟。“);6.System.out.println(“* 夜来风雨声,“);7.System.out.println(“* 花落知多少。“);8.9.很简单,但是有时候并不是越简单越好! 现在,如果想把*改变为*,该怎么办?改5次吗? 【代码】 Chunxiao1.java你可能还会这么写lpublic class ChunXiao
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号